52 lines
2.7 KiB
Lua
52 lines
2.7 KiB
Lua
local _ = require("gettext")
|
|
local DataStorage = require("datastorage")
|
|
local LuaSettings = require("luasettings")
|
|
local MultiInputDialog = require("ui/widget/multiinputdialog")
|
|
local InfoMessage = require("ui/widget/infomessage")
|
|
local UIManager = require("ui/uimanager")
|
|
|
|
local Settings = {}; Settings.__index = Settings
|
|
local KEY = "kovi"
|
|
|
|
local function local_only_url(url)
|
|
local lower = url:lower()
|
|
return lower:match("^https?://localhost[:/]")
|
|
or lower:match("^https?://127%.")
|
|
or lower:match("^https?://0%.0%.0%.0[:/]")
|
|
or lower:match("^https?://%[::1%][:/]")
|
|
end
|
|
|
|
function Settings:new()
|
|
local o=setmetatable({},self); o.handle=LuaSettings:open(DataStorage:getSettingsDir().."/kovi.lua"); o.data=o.handle:readSetting(KEY,{}) or {}; return o
|
|
end
|
|
function Settings:save() self.handle:saveSetting(KEY,self.data); self.handle:flush() end
|
|
function Settings:getServerURL() return (self.data.server_url or ""):gsub("/*$","") end
|
|
function Settings:getToken() return self.data.device_token end
|
|
function Settings:isPaired() return self:getToken() ~= nil and self:getToken() ~= "" end
|
|
function Settings:setToken(v) self.data.device_token=v; self:save() end
|
|
function Settings:getSyncOnSuspend() return self.data.sync_on_suspend == true end
|
|
function Settings:toggleSyncOnSuspend() self.data.sync_on_suspend=not self:getSyncOnSuspend(); self:save() end
|
|
|
|
function Settings:showSetup(on_pair)
|
|
local dialog
|
|
dialog = MultiInputDialog:new({
|
|
title = _("kovi setup"),
|
|
fields = {
|
|
{ text=self:getServerURL(), description=_("Server URL:"), hint=_("http://192.168.1.10:3000") },
|
|
{ text="", description=_("Pairing code:"), hint=_("8-character code") },
|
|
},
|
|
buttons = {{
|
|
{ text=_("Cancel"), id="close", callback=function() UIManager:close(dialog) end },
|
|
{ text=_("Pair"), callback=function()
|
|
local f=dialog:getFields(); local url=tostring(f[1] or ""):gsub("%s+",""):gsub("/*$",""); local code=tostring(f[2] or ""):upper():gsub("[^A-Z0-9]","")
|
|
if not url:match("^https?://") then UIManager:show(InfoMessage:new({text=_("Server URL must start with http:// or https://")})); return end
|
|
if local_only_url(url) then UIManager:show(InfoMessage:new({text=_("Use the kovi computer's LAN IP, not localhost/127.0.0.1/0.0.0.0. Example: http://192.168.1.23:3000")})); return end
|
|
if #code < 6 then UIManager:show(InfoMessage:new({text=_("Enter the pairing code shown in kovi.")})); return end
|
|
self.data.server_url=url; self:save(); UIManager:close(dialog); on_pair(url,code)
|
|
end },
|
|
}},
|
|
})
|
|
UIManager:show(dialog); dialog:onShowKeyboard()
|
|
end
|
|
return Settings
|