LINUX.ORG.RU

История изменений

Исправление LINUX-ORG-RU, (текущая версия) :

Как то так, джолжно работать, повторный запуск, грохает предыдущий, новый запуск начинает всё сначала.

#! /bin/env lua

local signal_file_name = '.coffee'
local signal_file = os.getenv('HOME')..'/'..signal_file_name;
local file = io.open(signal_file);

if(file) then
    local stat = file:read('*all');
    file:close();
    if stat == 'working' then
       file = io.open(signal_file,'w');
       file:write('stop');
       return 0;
    else
       file = io.open(signal_file,'w');
       file:write('working');
       file:close();
       stat="working";
    end
    local timer = 360;
    -- получаум ID прогессбара
    local qpopen = io.popen('kdialog --progressbar "Кофе" '..timer..' ',"r");
    local qprogress_id    = qpopen:read("*l");
    local play_sound = true;
    -- теперь мы крутим цикл не вечно, но оставляем его
    while(stat=="working") do
            -- заводим цикл отправки сообщений прогрессбару
            for coffee=1, timer ,1 do
                -- теперь проверяем стастус в цикле 
                -- отправки счётчика прогрессбару
                -- а не выше как раньше, логика иная
                file = io.open(signal_file,'r');
                stat = file:read('*all');
                file:close();
                -- если повторно нажать хоткей
                -- значением поменяется на стоп
                -- выходим из цикла прогрессбара
                -- и задаём оснанов для основного цикла
                if stat == "stop" then 
                    play_sound=false; 
                    stat="stop"
                    break; 
                end
                --шлём счётчик прогрессбару
                local qdbus = 'qdbus '..qprogress_id..' Set "" value '..tostring(coffee)..' >/dev/null';
                os.execute(qdbus);
                os.execute("sleep 1")
            end
            -- проигрываем музыку тогда и только тогда когда завешилось естественно
            -- если прервали играть не надо ибо зачем, а главное ****я
            if play_sound == true then 
               -- если музыка не просто тилинь тилинь короткая, а целая песня 
               -- то будет играть до победного и только тогда всё завершится корректно
               -- если у тебя тут музыка длинная то надо делать детекст нажатия в окне
               -- прогресс бара кнопочки "закрыть" и в фоне грохать музыку
               -- для этого уже надо завести отдельный поток который будет это делать
               -- я не очень уверен надо ли оно тебе именно так, подразумеваю что у тебя
               -- музыка просто тилинь-тилинь недолгая
               os.execute("mpv --force-window=no /home/diver/Загрузки/Музыка/12/coffee.mp3");
            end
            -- всегда грохаем прогресс бар после достижения таймером финала
            -- опять же я не знаю по окончанию таймера оно должно висеть или нет
            -- закомментируй если надо что-бы перед глазами маячило
            os.execute("qdbus "..qprogress_id.." org.kde.kdialog.ProgressDialog.close");
            -- после того как в любом случае завершился прогресс бар 
            -- посылаем сигнал сами себе что мы всё. 
            file = io.open(signal_file,'w');
            file:write('stop');
        end
    end

Если тебе принципиально надо запускать свои внешние скрипты, а не как тут, перепишу может быть. Но уже завтра. Но суть в том что тогда твой внешний скрипт тоже должен уметь сам завершаться, тоже читая «stop» реагируя на него или типа того.

Предыдущий скрипт не предполагал что запускаемая программа сама в себе будет иметь цикл, а если он есть во вне да ещё сам запускает другие программы то просто грохнуть всё не получится нужны пиды (как ты делал) и вот всё это, имхо пердолинг, но дело хозяйское конечно.

Исправление LINUX-ORG-RU, :

Как то так, джолжно работать, повторный запуск, грохает предыдущий, новый запуск начинает всё сначала.

#! /bin/env lua

local signal_file_name = '.coffee'
local signal_file = os.getenv('HOME')..'/'..signal_file_name;
local file = io.open(signal_file);

if(file) then
    local stat = file:read('*all');
    file:close();
    if stat == 'working' then
       file = io.open(signal_file,'w');
       file:write('stop');
       return 0;
    else
       file = io.open(signal_file,'w');
       file:write('working');
       file:close();
       stat="working";
    end
    local timer = 360;
    -- получаум ID прогессбара
    local qpopen = io.popen('kdialog --progressbar "Кофе" '..timer..' ',"r");
    local qprogress_id    = qpopen:read("*l");
    local play_sound = true;
    -- теперь мы крутим цикл не вечно, но оставляем его
    while(stat=="working") do
            -- заводим цикл отправки сообщений прогрессбару
            for coffee=1, timer ,1 do
                -- теперь проверяем стастус в цикле 
                -- отправки счётчика прогрессбару
                -- а не выше как раньше, логика иная
                file = io.open(signal_file,'r');
                stat = file:read('*all');
                file:close();
                -- если повторно нажать хоткей
                -- значением поменяется на стоп
                -- выходим из цикла прогрессбара
                -- и задаём оснанов для основного цикла
                if stat == "stop" then 
                    play_sound=false; 
                    stat="stop"
                    break; 
                end
                --шлём счётчик прогрессбару
                local qdbus = 'qdbus '..qprogress_id..' Set "" value '..tostring(coffee)..' >/dev/null';
                os.execute(qdbus);
                os.execute("sleep 1")
            end
            -- проигрываем музыку тогда и только тогда когда завешилось естественно
            -- если прервали играть не надо ибо зачем, а главное ****я
            if play_sound == true then 
               -- если музыка не просто тилинь тилинь короткая, а целая песня 
               -- то будет играть до победного и только тогда всё завершится корректно
               -- если у тебя тут музыка длинная то надо делать детекст нажатия в окне
               -- прогресс бара кнопочки "закрыть" и в фоне грохать музыку
               -- для этого уже надо завести отдельный поток который будет это делать
               -- я не очень уверен надо ли оно тебе именно так, подразумеваю что у тебя
               -- музыка просто тилинь-тилинь недолгая
               os.execute("mpv --force-window=no /home/diver/Загрузки/Музыка/12/coffee.mp3");
            end
            -- всегда грохаем прогресс бар после достижения таймером финала
            -- опять же я не знаю по окончанию таймера оно должно висеть или нет
            -- закомментируй если надо что-бы перед глазами маячило
            os.execute("qdbus "..qprogress_id.." org.kde.kdialog.ProgressDialog.close");
            -- после того как в любом случае завершился прогресс бар 
            -- посылаем сигнал сами себе что мы всё. 
            file = io.open(signal_file,'w');
            file:write('stop');
        end
    end

Если тебе принципиально надо запускать свои внешние скрипты, а не как тут, перепишу может быть. Но уже завтра

Исправление LINUX-ORG-RU, :

Как то так, джолжно работать, повторный запуск, грохает предыдущий, новый запуск начинает всё сначала.

#! /bin/env lua

local signal_file_name = '.coffee'
local signal_file = os.getenv('HOME')..'/'..signal_file_name;
local file = io.open(signal_file);

if(file) then
    local stat = file:read('*all');
    file:close();
    if stat == 'working' then
       file = io.open(signal_file,'w');
       file:write('stop');
       return 0;
    else
       file = io.open(signal_file,'w');
       file:write('working');
       file:close();
       stat="working";
    end
    local timer = 360;
    -- получаум ID прогессбара
    local qpopen = io.popen('kdialog --progressbar "Кофе" '..timer..' ',"r");
    local qprogress_id    = qpopen:read("*l");
    local play_sound = true;
    -- теперь мы крутим цикл не вечно, но оставляем его
    while(stat=="working") do
            -- заводим цикл отправки сообщений прогрессбару
            for coffee=1, timer ,1 do
                -- теперь проверяем стастус в цикле 
                -- отправки счётчика прогрессбару
                -- а не выше как раньше, логика иная
                file = io.open(signal_file,'r');
                stat = file:read('*all');
                file:close();
                -- если повторно нажать хоткей
                -- значением поменяется на стоп
                -- выходим из цикла прогрессбара
                -- и задаём оснанов для основного цикла
                if stat == "stop" then 
                    play_sound=false; 
                    stat="stop"
                    break; 
                end
                --шлём счётчик прогрессбару
                local qdbus = 'qdbus '..qprogress_id..' Set "" value '..tostring(coffee)..' >/dev/null';
                os.execute(qdbus);
                os.execute("sleep 1")
            end
            -- проигрываем музыку тогда и только тогда когда завешилось естественно
            -- если прервали играть не надо ибо зачем, а главное ****я
            if play_sound == true then 
               -- если музыка не просто тилинь тилинь короткая, а целая песня 
               -- то будет играть до победного и только тогда всё завершится корректно
               -- если у тебя тут музыка длинная то надо делать детекст нажатия в окне
               -- прогресс бара кнопочки "закрыть" и в фоне грохать музыку
               -- для этого уже надо завести отдельный поток который будет это делать
               -- я не очень уверен надо ли оно тебе именно так, подразумеваю что у тебя
               -- музыка просто тилинь-тилинь недолгая
               os.execute("mpv --force-window=no /home/diver/Загрузки/Музыка/12/coffee.mp3");
            end
            -- всегда грохаем прогресс бар после достижения таймером финала
            -- опять же я не знаю по окончанию таймера оно должно висеть или нет
            -- закомментируй если надо что-бы перед глазами маячило
            os.execute("qdbus "..qprogress_id.." org.kde.kdialog.ProgressDialog.close");
            -- после того как в любом случае завершился прогресс бар 
            -- посылаем сигнал сами себе что мы всё. 
            file = io.open(signal_file,'w');
            file:write('stop');
        end
    end

Исходная версия LINUX-ORG-RU, :

Как то так, джолжно работать

#! /bin/env lua

local signal_file_name = '.coffee'
local signal_file = os.getenv('HOME')..'/'..signal_file_name;
local file = io.open(signal_file);

if(file) then
    local stat = file:read('*all');
    file:close();
    if stat == 'working' then
       file = io.open(signal_file,'w');
       file:write('stop');
       return 0;
    else
       file = io.open(signal_file,'w');
       file:write('working');
       file:close();
       stat="working";
    end
    local timer = 360;
    -- получаум ID прогессбара
    local qpopen = io.popen('kdialog --progressbar "Кофе" '..timer..' ',"r");
    local qprogress_id    = qpopen:read("*l");
    local play_sound = true;
    -- теперь мы крутим цикл не вечно, но оставляем его
    while(stat=="working") do
            -- заводим цикл отправки сообщений прогрессбару
            for coffee=1, timer ,1 do
                -- теперь проверяем стастус в цикле 
                -- отправки счётчика прогрессбару
                -- а не выше как раньше, логика иная
                file = io.open(signal_file,'r');
                stat = file:read('*all');
                file:close();
                -- если повторно нажать хоткей
                -- значением поменяется на стоп
                -- выходим из цикла прогрессбара
                -- и задаём оснанов для основного цикла
                if stat == "stop" then 
                    play_sound=false; 
                    stat="stop"
                    break; 
                end
                --шлём счётчик прогрессбару
                local qdbus = 'qdbus '..qprogress_id..' Set "" value '..tostring(coffee)..' >/dev/null';
                os.execute(qdbus);
                os.execute("sleep 1")
            end
            -- проигрываем музыку тогда и только тогда когда завешилось естественно
            -- если прервали играть не надо ибо зачем, а главное ****я
            if play_sound == true then 
               -- если музыка не просто тилинь тилинь короткая, а целая песня 
               -- то будет играть до победного и только тогда всё завершится корректно
               -- если у тебя тут музыка длинная то надо делать детекст нажатия в окне
               -- прогресс бара кнопочки "закрыть" и в фоне грохать музыку
               -- для этого уже надо завести отдельный поток который будет это делать
               -- я не очень уверен надо ли оно тебе именно так, подразумеваю что у тебя
               -- музыка просто тилинь-тилинь недолгая
               os.execute("mpv --force-window=no /home/diver/Загрузки/Музыка/12/coffee.mp3");
            end
            -- всегда грохаем прогресс бар после достижения таймером финала
            -- опять же я не знаю по окончанию таймера оно должно висеть или нет
            -- закомментируй если надо что-бы перед глазами маячило
            os.execute("qdbus "..qprogress_id.." org.kde.kdialog.ProgressDialog.close");
            -- после того как в любом случае завершился прогресс бар 
            -- посылаем сигнал сами себе что мы всё. 
            file = io.open(signal_file,'w');
            file:write('stop');
        end
    end