From 4857e97e306a881f42c1ec6f8a89df4620ab1fe6 Mon Sep 17 00:00:00 2001 From: ezdiy Date: Tue, 1 Sep 2020 21:43:21 +0200 Subject: [PATCH] Pocketbook: Launcher OS integration (#6620) * Bring in restart koreader & shutdown device exit options * Existing instance reused for opens via native book explorer --- frontend/device/pocketbook/device.lua | 22 ++++++++++++++++++++-- platform/pocketbook/koreader.app | 25 +++++++++++++++++++++---- reader.lua | 8 ++++++++ 3 files changed, 49 insertions(+), 6 deletions(-) diff --git a/frontend/device/pocketbook/device.lua b/frontend/device/pocketbook/device.lua index 5176788b6..5185b8993 100644 --- a/frontend/device/pocketbook/device.lua +++ b/frontend/device/pocketbook/device.lua @@ -29,8 +29,7 @@ local PocketBook = Generic:new{ hasKeys = yes, hasFrontlight = yes, canSuspend = no, - hasExitOptions = no, - canRestart = no, + canPowerOff = yes, needsScreenRefreshAfterResume = no, home_dir = "/mnt/ext1", @@ -55,6 +54,20 @@ function PocketBook:blacklistCBB() end end +-- Helper to try load externally signalled book whenever we're brought to foreground +local function tryOpenBook() + local path = os.getenv("KO_PATH_OPEN_BOOK") + if not path then return end + local fi = io.open(path, "r") + if not fi then return end + local fn = fi:read("*line") + fi:close() + os.remove(path) + if fn and util.pathExists(fn) then + require("apps/reader/readerui"):showReader(fn) + end +end + function PocketBook:init() -- Blacklist the C BB before the first BB require... self:blacklistCBB() @@ -89,6 +102,7 @@ function PocketBook:init() return "Suspend" end elseif ev.code == C.EVT_FOREGROUND or ev.code == C.EVT_SHOW then + tryOpenBook() ui:setDirty('all', 'partial') if quasiSuspended then quasiSuspended = false @@ -210,6 +224,10 @@ function PocketBook:setAutoStandby(isAllowed) inkview.iv_sleepmode(isAllowed and 1 or 0) end +function PocketBook:powerOff() + inkview.PowerOff() +end + function PocketBook:initNetworkManager(NetworkMgr) function NetworkMgr:turnOnWifi(complete_callback) if inkview.NetConnect(nil) ~= C.NET_OK then diff --git a/platform/pocketbook/koreader.app b/platform/pocketbook/koreader.app index 85faff8be..8d6c1ea24 100755 --- a/platform/pocketbook/koreader.app +++ b/platform/pocketbook/koreader.app @@ -4,6 +4,19 @@ export LC_ALL="en_US.UTF-8" # working directory of koreader KOREADER_DIR=/mnt/ext1/applications/koreader +# file through which we communicate instanced opens +export KO_PATH_OPEN_BOOK=/tmp/.koreader.open + +# check for and notify a running instance +INSTANCE_PID=$(cat /tmp/koreader.pid 2> /dev/null) +if [ "${INSTANCE_PID}" != "" ] && [ -e "/proc/${INSTANCE_PID}" ]; then + echo "$@" > "${KO_PATH_OPEN_BOOK}" + exec /usr/bin/iv2sh SetActiveTask "${INSTANCE_PID}" 0 +fi + +# we're first, so publish our instance +echo $$ > /tmp/koreader.pid + # update to new version from OTA directory NEWUPDATE="${KOREADER_DIR}/ota/koreader.updated.tar" INSTALLED="${KOREADER_DIR}/ota/koreader.installed.tar" @@ -39,14 +52,18 @@ if [ -e crash.log ]; then mv -f crash.log.new crash.log fi -RETURN_VALUE=85 -while [ ${RETURN_VALUE} -eq 85 ]; do +export KO_EXIT_CODE="/tmp/.koreader.exit" +RETURN_VALUE="85" +while [ "${RETURN_VALUE}" = "85" ]; do + rm -f "${KO_EXIT_CODE}" ./reader.lua "${args}" >>crash.log 2>&1 - RETURN_VALUE=$? + RETURN_VALUE=$(cat ${KO_EXIT_CODE}) done +rm -f /tmp/koreader.pid + if pidof reader.lua >/dev/null 2>&1; then killall -TERM reader.lua fi -exit ${RETURN_VALUE} +exit "${RETURN_VALUE}" diff --git a/reader.lua b/reader.lua index c9ea466cd..d89790a9f 100755 --- a/reader.lua +++ b/reader.lua @@ -321,6 +321,14 @@ end -- Exit local function exitReader() + -- Exit code can be shoddy on some platforms due to broken library dtors calling _exit(0) from os.exit(N) + local ko_exit = os.getenv("KO_EXIT_CODE") + if ko_exit then + local fo = io.open(ko_exit, "w+") + fo:write(tostring(exit_code)) + fo:close() + end + local ReaderActivityIndicator = require("apps/reader/modules/readeractivityindicator")