diff --git a/frontend/apps/filemanager/filemanagermenu.lua b/frontend/apps/filemanager/filemanagermenu.lua index 430b87d9d..59ec2fe5a 100644 --- a/frontend/apps/filemanager/filemanagermenu.lua +++ b/frontend/apps/filemanager/filemanagermenu.lua @@ -1,18 +1,18 @@ local CenterContainer = require("ui/widget/container/centercontainer") -local InputContainer = require("ui/widget/container/inputcontainer") +local CloudStorage = require("apps/cloudstorage/cloudstorage") local ConfirmBox = require("ui/widget/confirmbox") -local UIManager = require("ui/uimanager") +local Device = require("device") +local FileSearcher = require("apps/filemanager/filemanagerfilesearcher") +local Geom = require("ui/geometry") local GestureRange = require("ui/gesturerange") +local InputContainer = require("ui/widget/container/inputcontainer") local InputDialog = require("ui/widget/inputdialog") -local Geom = require("ui/geometry") -local Device = require("device") local Screensaver = require("ui/screensaver") -local Screen = Device.screen -local _ = require("gettext") -local FileSearcher = require("apps/filemanager/filemanagerfilesearcher") local Search = require("apps/filemanager/filemanagersearch") local SetDefaults = require("apps/filemanager/filemanagersetdefaults") -local CloudStorage = require("apps/cloudstorage/cloudstorage") +local UIManager = require("ui/uimanager") +local _ = require("gettext") +local Screen = Device.screen local FileManagerMenu = InputContainer:extend{ tab_item_table = nil, diff --git a/frontend/apps/reader/modules/readermenu.lua b/frontend/apps/reader/modules/readermenu.lua index 5d53e38ca..5f88e10ae 100644 --- a/frontend/apps/reader/modules/readermenu.lua +++ b/frontend/apps/reader/modules/readermenu.lua @@ -1,11 +1,11 @@ -local InputContainer = require("ui/widget/container/inputcontainer") local CenterContainer = require("ui/widget/container/centercontainer") -local UIManager = require("ui/uimanager") local Device = require("device") -local Screensaver = require("ui/screensaver") local Event = require("ui/event") -local Screen = require("device").screen +local InputContainer = require("ui/widget/container/inputcontainer") +local Screensaver = require("ui/screensaver") +local UIManager = require("ui/uimanager") local _ = require("gettext") +local Screen = require("device").screen local ReaderMenu = InputContainer:new{ tab_item_table = nil, diff --git a/frontend/luasettings.lua b/frontend/luasettings.lua index a08707329..4747ad22e 100644 --- a/frontend/luasettings.lua +++ b/frontend/luasettings.lua @@ -16,6 +16,16 @@ function LuaSettings:open(file_path) return setmetatable(new, {__index = LuaSettings}) end +-- TODO: DocSettings can return a LuaSettings to use following awesome features. +function LuaSettings:wrap(data) + local new = {data = type(data) == "table" and data or {}} + return setmetatable(new, {__index = LuaSettings}) +end + +function LuaSettings:child(key) + return LuaSettings:wrap(self:readSetting(key)) +end + function LuaSettings:readSetting(key) return self.data[key] end @@ -40,10 +50,18 @@ function LuaSettings:isTrue(key) return string.lower(tostring(self:readSetting(key))) == "true" end +function LuaSettings:isFalse(key) + return string.lower(tostring(self:readSetting(key))) == "false" +end + function LuaSettings:nilOrTrue(key) return self:hasNot(key) or self:isTrue(key) end +function LuaSettings:nilOrFalse(key) + return self:hasNot(key) or self:isFalse(key) +end + function LuaSettings:flipNilOrTrue(key) if self:nilOrTrue(key) then self:saveSetting(key, false) @@ -52,6 +70,14 @@ function LuaSettings:flipNilOrTrue(key) end end +function LuaSettings:flipNilOrFalse(key) + if self:nilOrFalse(key) then + self:saveSetting(key, true) + else + self:delSetting(key) + end +end + function LuaSettings:flipTrue(key) if self:isTrue(key) then self:delSetting(key) @@ -60,11 +86,20 @@ function LuaSettings:flipTrue(key) end end +function LuaSettings:flipFalse(key) + if self:isFalse(key) then + self:delSetting(key) + else + self:saveSetting(key, true) + end +end + function LuaSettings:reset(table) self.data = table end function LuaSettings:flush() + if not self.file then return end local f_out = io.open(self.file, "w") if f_out ~= nil then os.setlocale('C', 'numeric') diff --git a/spec/unit/luasettings_spec.lua b/spec/unit/luasettings_spec.lua index b020dcb40..9f4069c5e 100644 --- a/spec/unit/luasettings_spec.lua +++ b/spec/unit/luasettings_spec.lua @@ -39,4 +39,28 @@ describe("luasettings module", function() assert.False(Settings:isTrue("abc")) assert.True(Settings:nilOrTrue("abc")) end) + + it("should create child settings", function() + Settings:saveSetting("key", { + a = "b", + c = "true", + d = false, + }) + + local child = Settings:child("key") + + assert.is_not_nil(child) + assert.True(child:has("a")) + assert.are.equal(child:readSetting("a"), "b") + assert.True(child:has("c")) + assert.True(child:isTrue("c")) + assert.True(child:has("d")) + assert.True(child:isFalse("d")) + assert.False(child:isTrue("e")) + child:flipTrue("e") + child:close() + + child = Settings:child("key") + assert.True(child:isTrue("e")) + end) end)