From e7fa044807c8856c83ce820f20e6dd84ec91442f Mon Sep 17 00:00:00 2001 From: Galunid Date: Thu, 22 Jul 2021 09:01:57 +0200 Subject: [PATCH] Remove zsync plugin (#7957) --- frontend/pluginloader.lua | 1 + frontend/ui/elements/reader_menu_order.lua | 1 - frontend/ui/message/zyremessagequeue.lua | 45 --- plugins/zsync.koplugin/_meta.lua | 7 - plugins/zsync.koplugin/client.cfg | 6 - plugins/zsync.koplugin/main.lua | 310 --------------------- plugins/zsync.koplugin/server.cfg | 9 - 7 files changed, 1 insertion(+), 378 deletions(-) delete mode 100644 frontend/ui/message/zyremessagequeue.lua delete mode 100644 plugins/zsync.koplugin/_meta.lua delete mode 100644 plugins/zsync.koplugin/client.cfg delete mode 100644 plugins/zsync.koplugin/main.lua delete mode 100644 plugins/zsync.koplugin/server.cfg diff --git a/frontend/pluginloader.lua b/frontend/pluginloader.lua index 1d29d9834..1a02c9f02 100644 --- a/frontend/pluginloader.lua +++ b/frontend/pluginloader.lua @@ -9,6 +9,7 @@ local OBSOLETE_PLUGINS = { calibrecompanion = true, storagestat = true, kobolight = true, + zsync = true, } -- Deprecated plugins are still available, but show a hint about deprecation. local function getMenuTable(plugin) diff --git a/frontend/ui/elements/reader_menu_order.lua b/frontend/ui/elements/reader_menu_order.lua index 65bfd3e3b..9150cf928 100644 --- a/frontend/ui/elements/reader_menu_order.lua +++ b/frontend/ui/elements/reader_menu_order.lua @@ -149,7 +149,6 @@ local order = { "progress_sync", "move_to_archive", "wallabag", - "zsync", "news_downloader", "send2ebook", "text_editor", diff --git a/frontend/ui/message/zyremessagequeue.lua b/frontend/ui/message/zyremessagequeue.lua deleted file mode 100644 index cd103f3c3..000000000 --- a/frontend/ui/message/zyremessagequeue.lua +++ /dev/null @@ -1,45 +0,0 @@ -local ffi = require("ffi") -local MessageQueue = require("ui/message/messagequeue") - -local _ = require("ffi/zeromq_h") -local czmq = ffi.load("libs/libczmq.so.1") -local zyre = ffi.load("libs/libzyre.so.1") - -local ZyreMessageQueue = MessageQueue:new{ - header = {}, -} - -function ZyreMessageQueue:start() - self.node = zyre.zyre_new() - self.poller = czmq.zpoller_new(zyre.zyre_socket(self.node), nil) - for key, value in pairs(self.header) do - zyre.zyre_set_header(self.node, key, value) - end - --zyre.zyre_set_verbose(self.node) - zyre.zyre_set_interface(self.node, "wlan0") - zyre.zyre_start(self.node) - zyre.zyre_join(self.node, "GLOBAL") - --zyre.zyre_dump(self.node) -end - -function ZyreMessageQueue:stop() - if self.node ~= nil then - zyre.zyre_stop(self.node) - zyre.zyre_destroy(ffi.new('zyre_t *[1]', self.node)) - end - if self.poller ~= nil then - czmq.zpoller_destroy(ffi.new('zpoller_t *[1]', self.poller)) - end -end - -function ZyreMessageQueue:waitEvent() - if czmq.zpoller_wait(self.poller, 0) ~= nil then - local msg = zyre.zyre_recv(self.node) - if msg ~= nil then - table.insert(self.messages, msg) - end - end - return self:handleZMsgs(self.messages) -end - -return ZyreMessageQueue diff --git a/plugins/zsync.koplugin/_meta.lua b/plugins/zsync.koplugin/_meta.lua deleted file mode 100644 index 2dcd4a838..000000000 --- a/plugins/zsync.koplugin/_meta.lua +++ /dev/null @@ -1,7 +0,0 @@ -local _ = require("gettext") -return { - name = "zsync", - fullname = _("Zsync"), - description = _([[Devices in the same Wi-Fi network can transfer documents between each other directly.]]), - deprecated = _("This plugin has been unmaintained for years. It might work for you, or it might not."), -} diff --git a/plugins/zsync.koplugin/client.cfg b/plugins/zsync.koplugin/client.cfg deleted file mode 100644 index 84e83b4c8..000000000 --- a/plugins/zsync.koplugin/client.cfg +++ /dev/null @@ -1,6 +0,0 @@ -# Configure server for plain access -# -client - heartbeat = 1 # Interval in seconds - resync = 1 - diff --git a/plugins/zsync.koplugin/main.lua b/plugins/zsync.koplugin/main.lua deleted file mode 100644 index d35a465e2..000000000 --- a/plugins/zsync.koplugin/main.lua +++ /dev/null @@ -1,310 +0,0 @@ -local DataStorage = require("datastorage") -local InputContainer = require("ui/widget/container/inputcontainer") -local InfoMessage = require("ui/widget/infomessage") -local UIManager = require("ui/uimanager") -local ltn12 = require("ltn12") -local DEBUG = require("dbg") -local _ = require("gettext") - -local ffi = require("ffi") -local C = ffi.C -ffi.cdef[[ -int remove(const char *); -int rmdir(const char *); -]] - -require("ffi/zeromq_h") -local ZSync = InputContainer:new{ - name = "zsync", - is_doc_only = true, -} - -function ZSync:init() - self.ui.menu:registerToMainMenu(self) - self.outbox = DataStorage:getFullDataDir().."/zsync-outbox" - self.server_config = self.path.."/server.cfg" - self.client_config = self.path.."/client.cfg" -end - -function ZSync:addToMainMenu(menu_items) - menu_items.zsync = { - text = _("ZSync"), - sub_item_table = { - { - text_func = function() - return not self.filemq_server - and _("Share this document") - or _("Stop sharing books") - end, - enabled_func = function() - return self.filemq_client == nil - end, - callback = function() - local NetworkMgr = require("ui/network/manager") - local connect_callback = function() - if not self.filemq_server then - self:publish() - else - self:unpublish() - end - end - NetworkMgr:runWhenOnline(connect_callback) - end - }, - { - text_func = function() - return not self.filemq_client - and _("Subscribe to book share") - or _("Unsubscribe from book share") - end, - enabled_func = function() - return self.filemq_server == nil - end, - callback = function() - local NetworkMgr = require("ui/network/manager") - local connect_callback = function() - if not self.filemq_client then - self:subscribe() - else - self:unsubscribe() - end - end - NetworkMgr:runWhenOnline(connect_callback) - end - } - } - } -end - -function ZSync:initServerZyreMQ() - local ZyreMessageQueue = require("ui/message/zyremessagequeue") - if self.zyre_messagequeue == nil then - self.server_zyre = ZyreMessageQueue:new{ - header = {["FILEMQ-SERVER"] = tostring(self.fmq_port)}, - } - self.server_zyre:start() - self.zyre_messagequeue = UIManager:insertZMQ(self.server_zyre) - end -end - -function ZSync:initClientZyreMQ() - local ZyreMessageQueue = require("ui/message/zyremessagequeue") - if self.zyre_messagequeue == nil then - self.client_zyre = ZyreMessageQueue:new{} - self.client_zyre:start() - self.zyre_messagequeue = UIManager:insertZMQ(self.client_zyre) - end -end - -function ZSync:initServerFileMQ(outboxes) - local FileMessageQueue = require("ui/message/filemessagequeue") - local filemq = ffi.load("libs/libfmq.so.1") - if self.file_messagequeue == nil then - self.filemq_server = filemq.fmq_server_new() - self.file_messagequeue = UIManager:insertZMQ(FileMessageQueue:new{ - server = self.filemq_server - }) - self.fmq_port = filemq.fmq_server_bind(self.filemq_server, "tcp://*:*") - filemq.fmq_server_configure(self.filemq_server, self.server_config) - filemq.fmq_server_set_anonymous(self.filemq_server, true) - end - UIManager:scheduleIn(1, function() - for _, outbox in ipairs(outboxes) do - DEBUG("publish", outbox.path, outbox.alias) - filemq.fmq_server_publish(self.filemq_server, outbox.path, outbox.alias) - end - end) -end - -function ZSync:initClientFileMQ(inbox) - local FileMessageQueue = require("ui/message/filemessagequeue") - local filemq = ffi.load("libs/libfmq.so.1") - if self.file_messagequeue == nil then - self.filemq_client = filemq.fmq_client_new() - self.file_messagequeue = UIManager:insertZMQ(FileMessageQueue:new{ - client = self.filemq_client - }) - filemq.fmq_client_configure(self.filemq_client, self.client_config) - end - UIManager:scheduleIn(1, function() - filemq.fmq_client_set_inbox(self.filemq_client, inbox) - end) -end - -local function clearDirectory(dir, rmdir) - for f in lfs.dir(dir) do - local path = dir.."/"..f - local mode = lfs.attributes(path, "mode") - if mode == "file" then - C.remove(path) - elseif mode == "directory" and f ~= "." and f ~= ".." then - clearDirectory(path, true) - end - end - if rmdir then - C.rmdir(dir) - end -end - -local function mklink(path, filename) - local basename = filename:match(".*/(.*)") or filename - local linkname = path .. "/" .. basename .. ".ln" - local linkfile = io.open(linkname, "w") - if linkfile then - linkfile:write(filename .. "\n") - linkfile:close() - end -end - --- add directory directly into outboxes -function ZSync:outboxesAddDirectory(outboxes, dir) - if lfs.attributes(dir, "mode") == "directory" then - local basename = dir:match(".*/(.*)") or dir - table.insert(outboxes, { - path = dir, - alias = "/"..basename, - }) - end -end - --- link file in root outbox -function ZSync:outboxAddFileLink(filename) - local mode = lfs.attributes(filename, "mode") - if mode == "file" then - mklink(self.outbox, filename) - end -end - --- copy directory content into root outbox(no recursively) -function ZSync:outboxCopyDirectory(dir) - local basename = dir:match(".*/(.*)") or dir - local newdir = self.outbox.."/"..basename - lfs.mkdir(newdir) - if pcall(lfs.dir, dir) then - for f in lfs.dir(dir) do - local filename = dir.."/"..f - if lfs.attributes(filename, "mode") == "file" then - local newfile = newdir.."/"..f - ltn12.pump.all( - ltn12.source.file(assert(io.open(filename, "rb"))), - ltn12.sink.file(assert(io.open(newfile, "wb"))) - ) - end - end - end -end - -function ZSync:publish() - DEBUG("publish document", self.view.document.file) - lfs.mkdir(self.outbox) - clearDirectory(self.outbox) - local file = self.view.document.file - local sidecar = file:match("(.*)%.")..".sdr" - self:outboxAddFileLink(file) - self:outboxCopyDirectory(sidecar) - local outboxes = {} - table.insert(outboxes, { - path = self.outbox, - alias = "/", - }) - -- init filemq first to get filemq port - self:initServerFileMQ(outboxes) - self:initServerZyreMQ() -end - -function ZSync:unpublish() - DEBUG("ZSync unpublish") - clearDirectory(self.outbox) - self:stopZyreMQ() - self:stopFileMQ() -end - -function ZSync:onChooseInbox(inbox) - DEBUG("choose inbox", inbox) - self.inbox = inbox - -- init zyre first for filemq endpoint - self:initClientZyreMQ() - self:initClientFileMQ(inbox) - return true -end - -function ZSync:subscribe() - DEBUG("subscribe documents") - self.received = {} - local zsync = self - require("ui/downloadmgr"):new{ - show_hidden = G_reader_settings:isTrue("show_hidden"), - onConfirm = function(inbox) - G_reader_settings:saveSetting("inbox_dir", inbox) - zsync:onChooseInbox(inbox) - end, - }:chooseDir() -end - -function ZSync:unsubscribe() - DEBUG("ZSync unsubscribe") - self.received = {} - self:stopFileMQ() - self:stopZyreMQ() -end - -function ZSync:onZyreEnter(id, name, header, endpoint) - local filemq = ffi.load("libs/libfmq.so.1") - if header and endpoint and header["FILEMQ-SERVER"] then - self.server_zyre_endpoint = endpoint - local port = header["FILEMQ-SERVER"] - local host = endpoint:match("(.*:)") or "*:" - local fmq_server_endpoint = host..port - DEBUG("connect filemq server at", fmq_server_endpoint) - -- wait for filemq server setup befor connecting - UIManager:scheduleIn(2, function() - filemq.fmq_client_set_resync(self.filemq_client, true) - filemq.fmq_client_subscribe(self.filemq_client, "/") - filemq.fmq_client_connect(self.filemq_client, fmq_server_endpoint) - end) - end - return true -end - -function ZSync:onFileDeliver(filename, fullname) - -- sometimes several FileDelever msgs are sent from filemq - if self.received[filename] then return end - UIManager:show(InfoMessage:new{ - text = _("Received file:") .. "\n" .. filename, - timeout = 1, - }) - self.received[filename] = true -end - ---[[ --- We assume that ZSync is running in either server mode or client mode --- but never both. The zyre_messagequeue may be a server_zyre or client_zyre. --- And the file_messagequeue may be a filemq_server or filemq_client. ---]] -function ZSync:stopZyreMQ() - if self.zyre_messagequeue then - self.zyre_messagequeue:stop() - UIManager:removeZMQ(self.zyre_messagequeue) - self.zyre_messagequeue = nil - self.server_zyre = nil - self.client_zyre = nil - end -end - -function ZSync:stopFileMQ() - if self.file_messagequeue then - self.file_messagequeue:stop() - UIManager:removeZMQ(self.file_messagequeue) - self.file_messagequeue = nil - self.filemq_server = nil - self.filemq_client = nil - end -end - -function ZSync:onCloseReader() - self:stopZyreMQ() - self:stopFileMQ() -end - -return ZSync - diff --git a/plugins/zsync.koplugin/server.cfg b/plugins/zsync.koplugin/server.cfg deleted file mode 100644 index 767f1ef7e..000000000 --- a/plugins/zsync.koplugin/server.cfg +++ /dev/null @@ -1,9 +0,0 @@ -# Configure server to allow anonymous access -# -server - monitor = 1 # Check mount points - heartbeat = 1 # Heartbeat to clients - -security - echo = I: server accepts anonymous access - anonymous = 1