diff options
Diffstat (limited to 'lua/sleep.lua')
-rw-r--r-- | lua/sleep.lua | 158 |
1 files changed, 24 insertions, 134 deletions
diff --git a/lua/sleep.lua b/lua/sleep.lua index 81af3ae..ae80d18 100644 --- a/lua/sleep.lua +++ b/lua/sleep.lua @@ -1,9 +1,5 @@ --- TODO: - -- refactor: remove redundant file i/o - local mp = require 'mp' - -local config_file = "/storage/emulated/0/Android/media/is.xyz.mpv/scripts/sleep.json" +--local utils = require 'mp.utils' local config = { file = "/storage/emulated/0/Android/media/is.xyz.mpv/scripts/sleep.json", @@ -12,18 +8,9 @@ local config = { local time = { minutes = 0, - active = false, - format = "%02d:%02d:%02d", -- (HH:MM:SS) - remaining = nil, + format = "%02d:%02d:%02d", + remaining = 0, display_time = true, - - prev_state = { - timestamp = "", - remaining = nil, - was_active = false, - last_update = "", -- ISO 8601 - file_name = nil, - }, } local gesture_state = { @@ -34,7 +21,7 @@ local gesture_state = { actions = { pending = false, - confirm_timeout = 1, -- seconds + confirm_timeout = 5, -- seconds timer = nil, callback = nil, } @@ -63,7 +50,7 @@ local function read_jsonkey_value(file_str, json_obj, obj_key) local e_obj = string.find(file_str, "}", b_obj) if not (b_obj and e_obj) then - log(json_obj .. "does not exist or " .. config_file "is formatted incorrectly") + log(json_obj .. "does not exist or " .. config.file "is formatted incorrectly") return nil end @@ -71,7 +58,7 @@ local function read_jsonkey_value(file_str, json_obj, obj_key) local key_val = string.match(substr, obj_key) if not key_val then - log("could not extract \"" .. string.match(obj_key, "\"([^\"]+)\"") .. "\"" .. " from " .. config_file) + log("could not extract \"" .. string.match(obj_key, "\"([^\"]+)\"") .. "\"" .. " from " .. config.file) return nil end @@ -79,120 +66,39 @@ local function read_jsonkey_value(file_str, json_obj, obj_key) end local function read_config() - log("opening" .. config_file .. "...") + log("opening" .. config.file .. "...") - local openf, err = io.open(config_file, "r") + local openf, err = io.open(config.file, "r") if openf == nil then - log("failed to open" .. config_file .. "! " .. err) + log("failed to open" .. config.file .. "! " .. err) return end local file_str = openf:read("*all") if file_str == nil or file_str == "" then - log("Failed to read config_file into string or config_file is empty" .. config_file .. "!") + log("Failed to read config.file into string or config.file is empty" .. config.file .. "!") openf:close() return end log("config:\n" .. file_str) - log("closing" .. config_file .. ".") + log("closing" .. config.file .. ".") io.close(openf) local default_time = read_jsonkey_value(file_str, "\"config\"", "\"default_time\"%s*:%s*([%d%.]+)") local display_time = read_jsonkey_value(file_str, "\"config\"", "\"display_time\"%s*:%s*(%a+)") - local prevstate_tstamp = read_jsonkey_value(file_str, "\"previous_state\"", "\"time_stamp\"%s*:%s*\"(.-)\"") - local prevstate_lastup = read_jsonkey_value(file_str, "\"previous_state\"", "\"last_updated\"%s*:%s*\"(.-)\"") - local prevstate_active = read_jsonkey_value(file_str, "\"previous_state\"", "\"was_active\"%s*:%s*(%a+)") log("default_time " .. default_time) time.minutes = default_time time.display_time = display_time - time.prev_state.timestamp = prevstate_tstamp - time.prev_state.last_update = prevstate_lastup - time.prev_state.was_active = prevstate_active - log("time.minutes " .. time.minutes) log("time.display_time " .. (time.display_time or "nil")) - log("time.prev_state.timestamp " .. (time.prev_state.timestamp or "nil")) - log("time.prev_state.last_update " .. (time.prev_state.last_update or "nil")) - log("time.prev_state.was_active " .. (time.prev_state.was_active or "nil")) end --------------------------- -- Sleep / Timer -- --------------------------- - --- TODO: -local function reinstate_tstamp(t) - -- according to a gesture, this should be called, and seek to @param in file - -- we also need to verify that we're in the correct file. -end - -local function export_time() - log("exporting date and timestamp") - log("opening " .. config_file .. "...") - - local openf, err = io.open(config_file, "r") - if openf == nil then - log("failed to open " .. config_file .. "!" .. err) - return - end - - local fstr = {} - for line in openf:lines() do - table.insert(fstr, line) - end - log("closing " .. config_file .. "...") - io.close(openf) - - local in_prevblock = false - for i, line in ipairs(fstr) do - if line:find('"previous_state"') then - log("in previous_state block") - log("" .. tostring(line)) - in_prevblock = true - - elseif in_prevblock then - if line:find('"time_stamp"') then - log("found time_stamp:") - log(tostring(line)) - fstr[i] = ' "time_stamp": ' .. tostring(mp.get_property_number("time-pos")) .. '",' - elseif line:find('"last_updated"') then - log("found last_updated:") - log(tostring(line)) - fstr[i] = ' "last_updated": ' .. os.date("!%Y-%m-%dT%H:%M:%SZ") .. '",' - elseif line:find('"was_active"') then - log("found was_active:") - log(tostring(line)) - fstr[i] = ' "was_active": ' .. tostring(time.prev_state.was_active) - end - - elseif line:find('}') then - in_prevblock = false - log("left previous_state block:") - end - end - - log("updated config file string:\n") - for i, line in ipairs(fstr) do - log("line " .. i .. ": " .. tostring(line)) - end - - openf, err = io.open(config_file, "w") - if openf == nil then - log("failed to open" .. config_file .. "!" .. err) - return - end - - log("writing to file") - for _, line in ipairs(fstr) do - openf:write(line .. "\n") - end - log("closing" .. config_file .. "...") - io.close(openf) -end - local function set_timer() time.active = true time.remaining = time.minutes * 60 @@ -203,7 +109,10 @@ local function set_timer() update_timer:kill() return end - time.remaining = time.remaining - 1 + + if mp.get_property("pause") == "no" then + time.remaining = time.remaining - 1 + end if time.display_time then local hrs = math.floor(time.remaining / 3600) @@ -211,8 +120,10 @@ local function set_timer() local sec = time.remaining % 60 local rem = string.format(time.format, hrs, min, sec) - mp.osd_message("Sleep Timer: " .. rem, 3) log("time remaining: " .. rem) + if not gesture_state.actions.pending then + mp.osd_message("Sleep Timer: " .. rem, 3) + end end if time.remaining <= 0 then @@ -221,7 +132,6 @@ local function set_timer() time.active = false time.remaining = nil - export_time() mp.osd_message("Sleep timer expired - pausing playback", 3) log("pausing playback.") mp.set_property("pause", "yes") @@ -244,7 +154,7 @@ local function cancel_pending_action() gesture_state.actions.timer = nil gesture_state.actions.callback = nil gesture_state.actions.pending = false - mp.osd_message("Action cancelled") + mp.osd_message("Action cancelled", 3) end end @@ -261,18 +171,9 @@ local function confirm_action(action_t) [ActionType.REMOVE_TIMER] = "Timer will be removed in " .. gesture_state.actions.confirm_timeout .. " seconds.\nGesture again to cancel", - - [ActionType.REINSTATE] = "Timer will be reinstated in " .. - gesture_state.actions.confirm_timeout .. - " seconds.\nGesture again to cancel", - - [ActionType.RESET] = "Timer will be reset in " .. - gesture_state.actions.confirm_timeout .. - " seconds.\nGesture again to cancel" } mp.osd_message(messages[action_t], gesture_state.actions.confirm_timeout) - gesture_state.actions.timer = mp.add_timeout(gesture_state.actions.confirm_timeout, function() if gesture_state.actions.callback then @@ -289,11 +190,9 @@ end -- user calls this local function handle_gesture() - mp.osd_message("Gesture Received. (" .. gesture_state.triggers.count .. ")", 3) - gesture_state.triggers.count = gesture_state.triggers.count + 1 - local current_time = mp.get_time() gesture_state.triggers.last_action_time = current_time + gesture_state.triggers.count = gesture_state.triggers.count + 1 if gesture_state.actions.pending then cancel_pending_action() @@ -309,9 +208,9 @@ local function handle_gesture() mp.osd_message("Timer has been set!") end else - -- TODO: - mp.osd_message("Timer already exists. [duration remaining]\nGesture again to reset the timer") + mp.osd_message("Timer already exists", 4) log("timer already exists.") + gesture_state.actions.pending = false end elseif gesture_state.triggers.count == ActionType.REMOVE_TIMER then local confirmed = confirm_action(ActionType.REMOVE_TIMER) @@ -321,21 +220,12 @@ local function handle_gesture() mp.osd_message("Timer has been removed.") end end - elseif gesture_state.triggers.count == ActionType.REINSTATE then - local confirmed = confirm_action(ActionType.REINSTATE) - if confirmed then - gesture_state.actions.callback = function() - -- TODO: - -- reinstate_timer(t) - mp.osd_message("Reinstating [time stamp] from [FILE].") - end - end else gesture_state.triggers.count = 0 end end --- called immediately upon opening a media config_file +-- called immediately upon opening a media config.file local function main() log("script has been loaded") read_config() @@ -343,4 +233,4 @@ local function main() end mp.add_key_binding(nil, "sleep", handle_gesture) -- the user invokes this by gesturing (user-set in input.conf) -main() -- this is run upon opening a media config_file +main() -- this is run upon opening a media file |