mirror of
https://github.com/koreader/koreader.git
synced 2025-08-10 00:52:38 +00:00
Add option to change checksum method in KOSync to be Binary or Filename based (#7840)
closes #7836
This commit is contained in:
@@ -12,6 +12,7 @@ local Screen = Device.screen
|
||||
local logger = require("logger")
|
||||
local md5 = require("ffi/sha2").md5
|
||||
local random = require("random")
|
||||
local util = require("util")
|
||||
local T = require("ffi/util").template
|
||||
local _ = require("gettext")
|
||||
|
||||
@@ -40,6 +41,11 @@ local SYNC_STRATEGY = {
|
||||
DEFAULT_BACKWARD = 3,
|
||||
}
|
||||
|
||||
local CHECKSUM_METHOD = {
|
||||
BINARY = 0,
|
||||
FILENAME = 1
|
||||
}
|
||||
|
||||
local function getNameStrategy(type)
|
||||
if type == 1 then
|
||||
return _("Prompt")
|
||||
@@ -113,6 +119,7 @@ function KOSync:onReaderReady()
|
||||
self.kosync_pages_before_update = settings.pages_before_update
|
||||
self.kosync_whisper_forward = settings.whisper_forward or SYNC_STRATEGY.DEFAULT_FORWARD
|
||||
self.kosync_whisper_backward = settings.whisper_backward or SYNC_STRATEGY.DEFAULT_BACKWARD
|
||||
self.kosync_checksum_method = settings.checksum_method or CHECKSUM_METHOD.BINARY
|
||||
self.kosync_device_id = G_reader_settings:readSetting("device_id")
|
||||
--assert(self.kosync_device_id)
|
||||
if self.kosync_auto_sync then
|
||||
@@ -300,6 +307,29 @@ If set to 0, updating progress based on page turns will be disabled.]]),
|
||||
UIManager:show(items)
|
||||
end,
|
||||
},
|
||||
{
|
||||
text = _("Document matching method"),
|
||||
sub_item_table = {
|
||||
{
|
||||
text = _("Binary. Only identical files will sync progress."),
|
||||
checked_func = function()
|
||||
return self.kosync_checksum_method == CHECKSUM_METHOD.BINARY
|
||||
end,
|
||||
callback = function()
|
||||
self:setChecksumMethod(CHECKSUM_METHOD.BINARY)
|
||||
end,
|
||||
},
|
||||
{
|
||||
text = _("Filename. Files with the same name will sync progress."),
|
||||
checked_func = function()
|
||||
return self.kosync_checksum_method == CHECKSUM_METHOD.FILENAME
|
||||
end,
|
||||
callback = function()
|
||||
self:setChecksumMethod(CHECKSUM_METHOD.FILENAME)
|
||||
end,
|
||||
},
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
end
|
||||
@@ -325,6 +355,11 @@ function KOSync:setWhisperBackward(strategy)
|
||||
self:saveSettings()
|
||||
end
|
||||
|
||||
function KOSync:setChecksumMethod(method)
|
||||
self.kosync_checksum_method = method
|
||||
self:saveSettings()
|
||||
end
|
||||
|
||||
function KOSync:login()
|
||||
if NetworkMgr:willRerunWhenOnline(function() self:login() end) then
|
||||
return
|
||||
@@ -507,6 +542,28 @@ function KOSync:getLastProgress()
|
||||
end
|
||||
end
|
||||
|
||||
function KOSync:getDocumentDigest()
|
||||
if self.kosync_checksum_method == CHECKSUM_METHOD.FILENAME then
|
||||
return self:getFileNameDigest()
|
||||
else
|
||||
return self:getFileDigest()
|
||||
end
|
||||
end
|
||||
|
||||
function KOSync:getFileDigest()
|
||||
return self.view.document:fastDigest()
|
||||
end
|
||||
|
||||
function KOSync:getFileNameDigest()
|
||||
local file = self.ui.document.file
|
||||
if not file then return end
|
||||
|
||||
local file_path, file_name = util.splitFilePathName(file) -- luacheck: no unused
|
||||
if not file_name then return end
|
||||
|
||||
return md5(file_name)
|
||||
end
|
||||
|
||||
function KOSync:syncToProgress(progress)
|
||||
logger.dbg("sync to", progress)
|
||||
if self.ui.document.info.has_pages then
|
||||
@@ -533,7 +590,7 @@ function KOSync:updateProgress(manual)
|
||||
custom_url = self.kosync_custom_server,
|
||||
service_spec = self.path .. "/api.json"
|
||||
}
|
||||
local doc_digest = self.view.document:fastDigest()
|
||||
local doc_digest = self:getDocumentDigest()
|
||||
local progress = self:getLastProgress()
|
||||
local percentage = self:getLastPercent()
|
||||
local ok, err = pcall(client.update_progress,
|
||||
@@ -581,7 +638,7 @@ function KOSync:getProgress(manual)
|
||||
custom_url = self.kosync_custom_server,
|
||||
service_spec = self.path .. "/api.json"
|
||||
}
|
||||
local doc_digest = self.view.document:fastDigest()
|
||||
local doc_digest = self:getDocumentDigest()
|
||||
local ok, err = pcall(client.get_progress,
|
||||
client,
|
||||
self.kosync_username,
|
||||
@@ -701,6 +758,7 @@ function KOSync:saveSettings()
|
||||
(self.kosync_whisper_backward ~= SYNC_STRATEGY.DEFAULT_BACKWARD
|
||||
and self.kosync_whisper_backward
|
||||
or nil),
|
||||
checksum_method = self.kosync_checksum_method,
|
||||
}
|
||||
G_reader_settings:saveSetting("kosync", settings)
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user