#! /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 = 420; -- получаум 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=0, 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"); os.execute("killall kdialog_progress_helper"); file = io.open(signal_file,'w'); file:write('stop'); file:close(); break; end -- всегда грохаем прогресс бар после достижения таймером финала os.execute("qdbus "..qprogress_id.." org.kde.kdialog.ProgressDialog.close"); -- после того как в любом случае завершился прогресс бар -- посылаем сигнал сами себе что мы всё. file = io.open(signal_file,'w'); file:write('stop'); end end