From f99f18ee13dbd926c00b726218efa3df2e6e1161 Mon Sep 17 00:00:00 2001 From: WS64 Date: Wed, 20 Aug 2014 08:51:07 +0200 Subject: [PATCH] Just save settings that really were changed And not also settings that are different from the ones loaded. This prevents Koreader from overwriting your complete persistent.defaults.settings when you started Koreader with a malformated persistent.defaults.settings file and choose "save settings". In such a malformated case you just can edit the damaged setting and save it back (although you can't see which one is damaged since the defaults settings are taken) --- .../filemanager/filemanagersetdefaults.lua | 31 ++++++++++--------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/frontend/apps/filemanager/filemanagersetdefaults.lua b/frontend/apps/filemanager/filemanagersetdefaults.lua index 531092cf3..cfdc12d76 100644 --- a/frontend/apps/filemanager/filemanagersetdefaults.lua +++ b/frontend/apps/filemanager/filemanagersetdefaults.lua @@ -14,7 +14,8 @@ local SetDefaults = InputContainer:new{ defaults_value = {}, results = {}, defaults_menu = {}, - already_read = false + already_read = false, + changed = {} } local function settype(b,t) @@ -111,6 +112,7 @@ function SetDefaults:init() end for i=1,#self.defaults_name do + self.changed[i] = false local settings_type = type(_G[self.defaults_name[i]]) if settings_type == "boolean" then table.insert(self.results, { @@ -134,10 +136,9 @@ function SetDefaults:init() enabled = true, callback = function() self.defaults_value[i] = true - if not _G[self.defaults_name[i]] then - _G[self.defaults_name[i]] = true - settings_changed = true - end + _G[self.defaults_name[i]] = true + settings_changed = true + self.changed[i] = true self.results[i].text = self:build_setting(i) self:close() self.defaults_menu:swithItemTable("Defaults", self.results, i) @@ -149,10 +150,9 @@ function SetDefaults:init() enabled = true, callback = function() self.defaults_value[i] = false - if _G[self.defaults_name[i]] then - _G[self.defaults_name[i]] = false - settings_changed = true - end + _G[self.defaults_name[i]] = false + settings_changed = true + self.changed[i] = true self.results[i].text = self:build_setting(i) self.defaults_menu:swithItemTable("Defaults", self.results, i) self:close() @@ -192,14 +192,13 @@ function SetDefaults:init() enabled = true, callback = function() if type(_G[self.defaults_name[i]]) == "table" then - settings_changed = true self.defaults_value[i] = self.set_dialog:getInputText() elseif _G[self.defaults_name[i]] ~= settype(self.set_dialog:getInputText(),settings_type) then _G[self.defaults_name[i]] = settype(self.set_dialog:getInputText(),settings_type) - settings_changed = true self.defaults_value[i] = _G[self.defaults_name[i]] end - + settings_changed = true + self.changed[i] = true self.results[i].text = self:build_setting(i) self:close() self.defaults_menu:swithItemTable("Defaults", self.results, i) @@ -315,10 +314,14 @@ function SetDefaults:SaveSettings() self.filldefaults() local done = {} + for j=1,#SetDefaults.defaults_name do + if not self.changed[j] then done[j] = true end + end + -- handle case "found in persistent", replace it for i = 1,#dpl do for j=1,#SetDefaults.defaults_name do - if string.find(dpl[i],SetDefaults.defaults_name[j] .. " ") == 1 then + if not done[j] and string.find(dpl[i],SetDefaults.defaults_name[j] .. " ") == 1 then dpl[i] = self:build_setting(j) done[j] = true end @@ -328,7 +331,7 @@ function SetDefaults:SaveSettings() -- handle case "exists identical in non-persistent", ignore it for i = 1,#dl do for j=1,#SetDefaults.defaults_name do - if dl[i]:gsub("1/4","0.25"):gsub("2/4","0.5"):gsub("3/4","0.75"):gsub("4/4","1"):gsub("1/8","0.125"):gsub("2/8","0.25"):gsub("3/8","0.375"):gsub("4/8","0.5"):gsub("5/8","0.625"):gsub("6/8","0.75"):gsub("7/8","0.875"):gsub("8/8","1"):gsub("1/16","0.0625"):gsub("15/16","0.9375"):gsub("1024[*]1024[*]10","10485760"):gsub("1024[*]1024[*]30","31457280"):gsub("[.]0$",""):gsub("([.][0-9]+)0","%1") == self:build_setting(j) then + if not done[j] and dl[i]:gsub("1/4","0.25"):gsub("2/4","0.5"):gsub("3/4","0.75"):gsub("4/4","1"):gsub("1/8","0.125"):gsub("2/8","0.25"):gsub("3/8","0.375"):gsub("4/8","0.5"):gsub("5/8","0.625"):gsub("6/8","0.75"):gsub("7/8","0.875"):gsub("8/8","1"):gsub("1/16","0.0625"):gsub("15/16","0.9375"):gsub("1024[*]1024[*]10","10485760"):gsub("1024[*]1024[*]30","31457280"):gsub("[.]0$",""):gsub("([.][0-9]+)0","%1") == self:build_setting(j) then done[j] = true end end