История изменений
Исправление 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