From 21274f5e92969ac91e3ae1c8a8eff5f610b96c93 Mon Sep 17 00:00:00 2001 From: Frans de Jonge Date: Wed, 17 Jan 2018 15:32:54 +0100 Subject: [PATCH] [feat] Add NetworkManager:isConnected() (#3593) This enables connecting to calibre and FTP without Internet connectivity. --- frontend/apps/cloudstorage/cloudstorage.lua | 12 ++++++++---- frontend/ui/network/manager.lua | 9 +++++++++ plugins/calibrecompanion.koplugin/main.lua | 2 +- 3 files changed, 18 insertions(+), 5 deletions(-) diff --git a/frontend/apps/cloudstorage/cloudstorage.lua b/frontend/apps/cloudstorage/cloudstorage.lua index 8d744ea55..a696dff27 100644 --- a/frontend/apps/cloudstorage/cloudstorage.lua +++ b/frontend/apps/cloudstorage/cloudstorage.lua @@ -102,13 +102,17 @@ end function CloudStorage:openCloudServer(url) local tbl local NetworkMgr = require("ui/network/manager") - if not NetworkMgr:isOnline() then - NetworkMgr:promptWifiOn() - return - end if self.type == "dropbox" then + if not NetworkMgr:isOnline() then + NetworkMgr:promptWifiOn() + return + end tbl = DropBox:run(url, self.password) elseif self.type == "ftp" then + if not NetworkMgr:isConnected() then + NetworkMgr:promptWifiOn() + return + end tbl = Ftp:run(self.address, self.username, self.password, url) end if tbl and #tbl > 0 then diff --git a/frontend/ui/network/manager.lua b/frontend/ui/network/manager.lua index b0430720b..3bd8d48fc 100644 --- a/frontend/ui/network/manager.lua +++ b/frontend/ui/network/manager.lua @@ -60,6 +60,15 @@ function NetworkMgr:promptWifiOff(complete_callback) }) end +function NetworkMgr:isConnected() + if Device:isAndroid() then + return self:isWifiOn() + else + -- `-c1` try only once; `-w2` wait 2 seconds + return os.execute([[ping -c1 -w2 $(/sbin/route -n | awk '$4 == "UG" {print $2}')]]) + end +end + function NetworkMgr:isOnline() local socket = require("socket") -- Microsoft uses `dns.msftncsi.com` for Windows, see diff --git a/plugins/calibrecompanion.koplugin/main.lua b/plugins/calibrecompanion.koplugin/main.lua index 4598b0828..fc065c3ee 100644 --- a/plugins/calibrecompanion.koplugin/main.lua +++ b/plugins/calibrecompanion.koplugin/main.lua @@ -144,7 +144,7 @@ function CalibreCompanion:connect() else self:setInboxDir(host, port) end - elseif not NetworkMgr:isOnline() then + elseif not NetworkMgr:isConnected() then NetworkMgr:promptWifiOn() else DEBUG("cannot connect to calibre server")