54 lines
2.3 KiB
Lua
54 lines
2.3 KiB
Lua
|
|
local lang = jarvis.context.language
|
|||
|
|
local cmd_id = jarvis.context.command_id
|
|||
|
|
|
|||
|
|
local function speak(text)
|
|||
|
|
local sapi = text:gsub("'", "''"):gsub("\r?\n", " ")
|
|||
|
|
local ps = string.format(
|
|||
|
|
[[Add-Type -AssemblyName System.Speech; $s = New-Object System.Speech.Synthesis.SpeechSynthesizer; foreach ($v in $s.GetInstalledVoices()) { if ($v.VoiceInfo.Culture.TwoLetterISOLanguageName -eq 'ru') { try { $s.SelectVoice($v.VoiceInfo.Name); break } catch {} } } $s.Speak('%s')]],
|
|||
|
|
sapi
|
|||
|
|
)
|
|||
|
|
jarvis.system.exec(string.format('powershell -NoProfile -Command "%s"', ps:gsub('"', '\\"')))
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
local function format_elapsed(sec)
|
|||
|
|
sec = math.floor(sec)
|
|||
|
|
if sec < 60 then return sec .. (lang == "ru" and " секунд" or " seconds") end
|
|||
|
|
if sec < 3600 then
|
|||
|
|
local m = math.floor(sec / 60); local s = sec % 60
|
|||
|
|
return string.format(lang == "ru" and "%d мин %d сек" or "%d min %d sec", m, s)
|
|||
|
|
end
|
|||
|
|
local h = math.floor(sec / 3600); local m = math.floor((sec % 3600) / 60); local s = sec % 60
|
|||
|
|
return string.format(lang == "ru" and "%d ч %d мин %d сек" or "%d h %d m %d s", h, m, s)
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
if cmd_id == "stopwatch_start" then
|
|||
|
|
jarvis.state.set("stopwatch_start_ts", jarvis.context.time.timestamp)
|
|||
|
|
jarvis.system.notify("Stopwatch", lang == "ru" and "Старт" or "Started")
|
|||
|
|
speak(lang == "ru" and "Секундомер запущен" or "Stopwatch started")
|
|||
|
|
jarvis.audio.play_ok()
|
|||
|
|
return { chain = false }
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
local started = jarvis.state.get("stopwatch_start_ts")
|
|||
|
|
if not started then
|
|||
|
|
jarvis.system.notify("Stopwatch", lang == "ru" and "Не запущен" or "Not running")
|
|||
|
|
speak(lang == "ru" and "Секундомер не запущен" or "Stopwatch is not running")
|
|||
|
|
jarvis.audio.play_not_found()
|
|||
|
|
return { chain = false }
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
local elapsed = jarvis.context.time.timestamp - started
|
|||
|
|
local human = format_elapsed(elapsed)
|
|||
|
|
|
|||
|
|
if cmd_id == "stopwatch_stop" then
|
|||
|
|
jarvis.state.set("stopwatch_start_ts", nil)
|
|||
|
|
jarvis.system.notify("Stopwatch", (lang == "ru" and "Прошло: " or "Elapsed: ") .. human)
|
|||
|
|
speak((lang == "ru" and "Прошло " or "Elapsed ") .. human)
|
|||
|
|
else
|
|||
|
|
jarvis.system.notify("Stopwatch", (lang == "ru" and "Прошло: " or "Elapsed: ") .. human)
|
|||
|
|
speak((lang == "ru" and "Прошло " or "Elapsed ") .. human)
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
jarvis.audio.play_ok()
|
|||
|
|
return { chain = false }
|