add 'Check update' menu and OTA update functionality

pull/751/head
chrox 10 years ago
parent 27da93ad76
commit d9f5edf54a

@ -59,6 +59,7 @@ endif
mkdir -p $(INSTALL_DIR)/koreader/data/dict
mkdir -p $(INSTALL_DIR)/koreader/data/tessdata
mkdir -p $(INSTALL_DIR)/koreader/fonts/host
mkdir -p $(INSTALL_DIR)/koreader/ota
ifndef EMULATE_READER
# clean up, remove unused files for releases
rm -rf $(INSTALL_DIR)/koreader/data/{cr3.ini,cr3skin-format.txt,desktop,devices,manual}
@ -109,8 +110,19 @@ endif
zip -9 -r \
../koreader-kindle-$(MACHINE)-$(VERSION).zip \
extensions koreader $(KINDLE_LEGACY_LAUNCHER) \
-x "koreader/resources/fonts/*" \
-x "koreader/resources/fonts/*" "koreader/ota/*" \
"koreader/resources/icons/src/*" "koreader/spec/*"
# generate kindleupdate package index file
zipinfo -1 koreader-kindle-$(MACHINE)-$(VERSION).zip > \
$(INSTALL_DIR)/koreader/ota/package.index
echo "koreader/ota/package.index" >> $(INSTALL_DIR)/koreader/ota/package.index
# update index file in zip package
cd $(INSTALL_DIR) && zip -u ../koreader-kindle-$(MACHINE)-$(VERSION).zip \
koreader/ota/package.index
# make gzip kindleupdate for zsync OTA update
cd $(INSTALL_DIR) && \
tar czafh ../koreader-kindle-$(MACHINE)-$(VERSION).tar.gz \
-T koreader/ota/package.index --no-recursion
koboupdate: all
# ensure that the binaries were built for ARM
@ -134,6 +146,17 @@ koboupdate: all
KoboRoot.tgz koreader koreader.png README_kobo.txt \
-x "koreader/resources/fonts/*" \
"koreader/resources/icons/src/*" "koreader/spec/*"
# generate koboupdate package index file
zipinfo -1 koreader-kobo-$(MACHINE)-$(VERSION).zip > \
$(INSTALL_DIR)/koreader/ota/package.index
echo "koreader/ota/package.index" >> $(INSTALL_DIR)/koreader/ota/package.index
# update index file in zip package
cd $(INSTALL_DIR) && zip -u ../koreader-kobo-$(MACHINE)-$(VERSION).zip \
koreader/ota/package.index
# make gzip koboupdate for zsync OTA update
cd $(INSTALL_DIR) && \
tar czafh ../koreader-kobo-$(MACHINE)-$(VERSION).tar.gz \
-T koreader/ota/package.index --no-recursion
androidupdate: all
mkdir -p $(ANDROID_LAUNCHER_DIR)/assets/module

@ -1,7 +1,9 @@
local CenterContainer = require("ui/widget/container/centercontainer")
local TouchMenu = require("ui/widget/touchmenu")
local InputContainer = require("ui/widget/container/inputcontainer")
local ConfirmBox = require("ui/widget/confirmbox")
local TouchMenu = require("ui/widget/touchmenu")
local InfoMessage = require("ui/widget/infomessage")
local OTAManager = require("ui/otamanager")
local UIManager = require("ui/uimanager")
local Device = require("ui/device")
local GestureRange = require("ui/gesturerange")
@ -136,6 +138,26 @@ function FileManagerMenu:setUpdateItemTable()
table.insert(self.tab_item_table.setting, Language:getLangMenuTable())
-- info tab
table.insert(self.tab_item_table.info, {
text = _("Check update"),
callback = function()
local ota_version = OTAManager:checkUpdate()
if ota_version == 0 then
UIManager:show(InfoMessage:new{
text = _("Your koreader is updated."),
})
elseif ota_version == nil then
UIManager:show(InfoMessage:new{
text = _("OTA server is not available."),
})
elseif ota_version then
UIManager:show(ConfirmBox:new{
text = _("Do you want to update to version ")..ota_version.."?",
ok_callback = function() OTAManager:zsync() end
})
end
end
})
table.insert(self.tab_item_table.info, {
text = _("Version"),
callback = function()

@ -2,8 +2,10 @@ local InputContainer = require("ui/widget/container/inputcontainer")
local CenterContainer = require("ui/widget/container/centercontainer")
local InfoMessage = require("ui/widget/infomessage")
local InputDialog = require("ui/widget/inputdialog")
local ConfirmBox = require("ui/widget/confirmbox")
local TouchMenu = require("ui/widget/touchmenu")
local GestureRange = require("ui/gesturerange")
local OTAManager = require("ui/otamanager")
local UIManager = require("ui/uimanager")
local Device = require("ui/device")
local Geom = require("ui/geometry")
@ -136,6 +138,26 @@ function ReaderMenu:setUpdateItemTable()
table.insert(self.tab_item_table.setting, Language:getLangMenuTable())
-- info tab
table.insert(self.tab_item_table.info, {
text = _("Check update"),
callback = function()
local ota_version = OTAManager:checkUpdate()
if ota_version == 0 then
UIManager:show(InfoMessage:new{
text = _("Your koreader is updated."),
})
elseif ota_version == nil then
UIManager:show(InfoMessage:new{
text = _("OTA server is not available."),
})
elseif ota_version then
UIManager:show(ConfirmBox:new{
text = _("Do you want to update to version ")..ota_version.."?",
ok_callback = function() OTAManager:zsync() end
})
end
end
})
table.insert(self.tab_item_table.info, {
text = _("Version"),
callback = function()

@ -0,0 +1,88 @@
local Device = require("ui/device")
local DEBUG = require("dbg")
local OTAManager = {
ota_server = "http://vislab.bjmu.edu.cn/apps/koreader/ota/",
ota_channel = "nightly", -- or "stable"
zsync_template = "koreader-%s-latest-%s.zsync",
installed_package = "ota/koreader.installed.tar",
package_indexfile = "ota/package.index",
updated_package = "ota/koreader.updated.tar",
}
function OTAManager:getOTAModel()
if Device:isKindle() then
return "kindle"
elseif Device:isKobo() then
return "kobo"
else
return ""
end
end
function OTAManager:getOTAChannel()
return self.ota_channel
end
function OTAManager:setOTAChannel(channel)
-- channel should be "nightly" or "stable"
self.ota_channel = channel
end
function OTAManager:getZsyncFilename()
return self.zsync_template:format(self:getOTAModel(), self:getOTAChannel())
end
function OTAManager:checkUpdate()
local http = require("socket.http")
local ltn12 = require("ltn12")
local zsync_file = self:getZsyncFilename()
local ota_zsync_file = self.ota_server .. zsync_file
local local_zsync_file = "ota/" .. zsync_file
-- download zsync file from OTA server
local r, c, h = http.request{
url = ota_zsync_file,
sink = ltn12.sink.file(io.open(local_zsync_file, "w"))}
-- parse OTA package version
if c ~= 200 then return end
local ota_package = nil
local zsync = io.open(local_zsync_file, "r")
if zsync then
for line in zsync:lines() do
ota_package = line:match("^Filename:%s*(.-)%s*$")
if ota_package then break end
end
zsync:close()
end
local local_version = io.open("git-rev", "r"):read()
local ota_version = nil
if ota_package then
ota_version = ota_package:match(".-(v%d.-)%.tar")
end
-- return ota package version if package on OTA server has version
-- larger than the local package version
if ota_version and ota_version > local_version then
return ota_version
elseif ota_version and ota_version == local_version then
return 0
end
end
function OTAManager:_buildLocalPackage()
return os.execute(string.format(
"./tar cvf %s -C .. -T %s --no-recursion",
self.installed_package, self.package_indexfile))
end
function OTAManager:zsync()
if self:_buildLocalPackage() == 0 then
return os.execute(string.format(
"./zsync -i %s -o %s -u %s %s &",
self.installed_package, self.updated_package,
self.ota_server, "ota/" .. self:getZsyncFilename()
))
end
end
return OTAManager

@ -76,8 +76,19 @@ if [ "$(nice)" == "5" ] ; then
renice -n -5 $$
fi
# working directory of koreader
KOREADER_DIR=/mnt/us/koreader
# update to new version from OTA directory
NEWUPDATE=${KOREADER_DIR}/ota/koreader.updated.tar
if [ -f $NEWUPDATE ]; then
# TODO: any graphic indication for the updating progress?
logmsg "Updating koreader . . ."
cd /mnt/us && tar xf $NEWUPDATE && rm $NEWUPDATE
fi
# we're always starting from our working directory
cd /mnt/us/koreader
cd $KOREADER_DIR
# export trained OCR data directory
export TESSDATA_PREFIX="data"
@ -91,26 +102,26 @@ iptables -A INPUT -i wlan0 -p udp --dport 5670 -j ACCEPT
iptables -A INPUT -i wlan0 -p tcp --dport 49152:49162 -j ACCEPT
# bind-mount system fonts
if ! grep /mnt/us/koreader/fonts/host /proc/mounts > /dev/null 2>&1 ; then
if ! grep ${KOREADER_DIR}/fonts/host /proc/mounts > /dev/null 2>&1 ; then
logmsg "Mounting system fonts . . ."
mount -o bind /usr/java/lib/fonts /mnt/us/koreader/fonts/host
mount -o bind /usr/java/lib/fonts ${KOREADER_DIR}/fonts/host
fi
# bind-mount altfonts
if [ -d /mnt/us/fonts ] ; then
mkdir -p /mnt/us/koreader/fonts/altfonts
if ! grep /mnt/us/koreader/fonts/altfonts /proc/mounts > /dev/null 2>&1 ; then
mkdir -p ${KOREADER_DIR}/fonts/altfonts
if ! grep ${KOREADER_DIR}/fonts/altfonts /proc/mounts > /dev/null 2>&1 ; then
logmsg "Mounting altfonts . . ."
mount -o bind /mnt/us/fonts /mnt/us/koreader/fonts/altfonts
mount -o bind /mnt/us/fonts ${KOREADER_DIR}/fonts/altfonts
fi
fi
# bind-mount linkfonts
if [ -d /mnt/us/linkfonts/fonts ] ; then
mkdir -p /mnt/us/koreader/fonts/linkfonts
if ! grep /mnt/us/koreader/fonts/linkfonts /proc/mounts > /dev/null 2>&1 ; then
mkdir -p ${KOREADER_DIR}/fonts/linkfonts
if ! grep ${KOREADER_DIR}/fonts/linkfonts /proc/mounts > /dev/null 2>&1 ; then
logmsg "Mounting linkfonts . . ."
mount -o bind /mnt/us/linkfonts/fonts /mnt/us/koreader/fonts/linkfonts
mount -o bind /mnt/us/linkfonts/fonts ${KOREADER_DIR}/fonts/linkfonts
fi
fi
@ -172,21 +183,21 @@ if pidof reader.lua > /dev/null 2>&1 ; then
fi
# unmount system fonts
if grep /mnt/us/koreader/fonts/host /proc/mounts > /dev/null 2>&1 ; then
if grep ${KOREADER_DIR}/fonts/host /proc/mounts > /dev/null 2>&1 ; then
logmsg "Unmounting system fonts . . ."
umount /mnt/us/koreader/fonts/host
umount ${KOREADER_DIR}/fonts/host
fi
# unmount altfonts
if grep /mnt/us/koreader/fonts/altfonts /proc/mounts > /dev/null 2>&1 ; then
if grep ${KOREADER_DIR}/fonts/altfonts /proc/mounts > /dev/null 2>&1 ; then
logmsg "Unmounting altfonts . . ."
umount /mnt/us/koreader/fonts/altfonts
umount ${KOREADER_DIR}/fonts/altfonts
fi
# unmount linkfonts
if grep /mnt/us/koreader/fonts/linkfonts /proc/mounts > /dev/null 2>&1 ; then
if grep ${KOREADER_DIR}/fonts/linkfonts /proc/mounts > /dev/null 2>&1 ; then
logmsg "Unmounting linkfonts . . ."
umount /mnt/us/koreader/fonts/linkfonts
umount ${KOREADER_DIR}/fonts/linkfonts
fi
# Resume cvm (only if we stopped it)

@ -1,8 +1,19 @@
#!/bin/sh
export LC_ALL="en_US.UTF-8"
# working directory of koreader
KOREADER_DIR=/mnt/onboard/.kobo/koreader
# update to new version from OTA directory
NEWUPDATE=${KOREADER_DIR}/ota/koreader.updated.tar
if [ -f $NEWUPDATE ]; then
# TODO: any graphic indication for the updating progress?
logmsg "Updating koreader . . ."
cd /mnt/onboard/.kobo && tar xf $NEWUPDATE && rm $NEWUPDATE
fi
# we're always starting from our working directory
cd /mnt/onboard/.kobo/koreader/
cd $KOREADER_DIR
# export trained OCR data directory
export TESSDATA_PREFIX="data"

@ -1 +1 @@
Subproject commit 87d869223a1948a1e3431d57cf3bf1bc7aaad8de
Subproject commit d68bae7862977310c6cdfe5e83f876346a218dec

@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: https://github.com/koreader/koreader-base/issues\n"
"POT-Creation-Date: 2014-07-27 13:41+0000\n"
"POT-Creation-Date: 2014-08-01 04:35+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@ -17,9 +17,9 @@ msgid ""
" others."
msgstr ""
#: frontend/apps/reader/modules/readermenu.lua:175
#: frontend/apps/reader/modules/readermenu.lua:181
#: frontend/apps/reader/modules/readermenu.lua:187
#: frontend/apps/reader/modules/readermenu.lua:197
#: frontend/apps/reader/modules/readermenu.lua:203
#: frontend/apps/reader/modules/readermenu.lua:209
msgid ""
" pages"
msgstr ""
@ -65,8 +65,8 @@ msgid ""
"Apply"
msgstr ""
#: frontend/apps/filemanager/filemanagermenu.lua:103
#: frontend/apps/reader/modules/readermenu.lua:94
#: frontend/apps/filemanager/filemanagermenu.lua:105
#: frontend/apps/reader/modules/readermenu.lua:96
#: frontend/apps/reader/modules/readertypeset.lua:66
msgid ""
"Auto"
@ -83,7 +83,7 @@ msgid ""
msgstr ""
#: frontend/apps/reader/modules/readergoto.lua:36
#: frontend/apps/reader/modules/readermenu.lua:208
#: frontend/apps/reader/modules/readermenu.lua:230
#: frontend/ui/widget/confirmbox.lua:29
#: plugins/evernote.koplugin/main.lua:124
#: plugins/zsync.koplugin/main.lua:279
@ -101,6 +101,12 @@ msgid ""
"Change font"
msgstr ""
#: frontend/apps/filemanager/filemanagermenu.lua:142
#: frontend/apps/reader/modules/readermenu.lua:142
msgid ""
"Check update"
msgstr ""
#: plugins/zsync.koplugin/main.lua:226
#: plugins/zsync.koplugin/main.lua:236
msgid ""
@ -127,9 +133,9 @@ msgid ""
"Copy"
msgstr ""
#: frontend/apps/reader/modules/readermenu.lua:175
#: frontend/apps/reader/modules/readermenu.lua:181
#: frontend/apps/reader/modules/readermenu.lua:187
#: frontend/apps/reader/modules/readermenu.lua:197
#: frontend/apps/reader/modules/readermenu.lua:203
#: frontend/apps/reader/modules/readermenu.lua:209
msgid ""
"Custom "
msgstr ""
@ -176,17 +182,23 @@ msgid ""
"Do you want to Turn on Wifi?"
msgstr ""
#: frontend/apps/filemanager/filemanagermenu.lua:155
#: frontend/apps/reader/modules/readermenu.lua:155
msgid ""
"Do you want to update to version "
msgstr ""
#: frontend/ui/data/strings.lua:17
msgid ""
"Document Language"
msgstr ""
#: frontend/apps/reader/modules/readermenu.lua:265
#: frontend/apps/reader/modules/readermenu.lua:287
msgid ""
"Document menu"
msgstr ""
#: frontend/apps/reader/modules/readermenu.lua:162
#: frontend/apps/reader/modules/readermenu.lua:184
msgid ""
"E-ink full refresh rate"
msgstr ""
@ -223,12 +235,12 @@ msgid ""
"Evernote"
msgstr ""
#: frontend/apps/reader/modules/readermenu.lua:170
#: frontend/apps/reader/modules/readermenu.lua:192
msgid ""
"Every 6 pages"
msgstr ""
#: frontend/apps/reader/modules/readermenu.lua:165
#: frontend/apps/reader/modules/readermenu.lua:187
msgid ""
"Every page"
msgstr ""
@ -254,7 +266,7 @@ msgid ""
"File does not exist"
msgstr ""
#: frontend/apps/filemanager/filemanagermenu.lua:180
#: frontend/apps/filemanager/filemanagermenu.lua:202
msgid ""
"File manager menu"
msgstr ""
@ -279,8 +291,8 @@ msgid ""
"Font Weight"
msgstr ""
#: frontend/apps/filemanager/filemanagermenu.lua:100
#: frontend/apps/reader/modules/readermenu.lua:91
#: frontend/apps/filemanager/filemanagermenu.lua:102
#: frontend/apps/reader/modules/readermenu.lua:93
msgid ""
"Font size"
msgstr ""
@ -325,8 +337,8 @@ msgid ""
"Go to Page or Location"
msgstr ""
#: frontend/apps/filemanager/filemanagermenu.lua:148
#: frontend/apps/reader/modules/readermenu.lua:148
#: frontend/apps/filemanager/filemanagermenu.lua:170
#: frontend/apps/reader/modules/readermenu.lua:170
msgid ""
"Help"
msgstr ""
@ -362,7 +374,7 @@ msgid ""
"Indentation"
msgstr ""
#: frontend/apps/reader/modules/readermenu.lua:203
#: frontend/apps/reader/modules/readermenu.lua:225
msgid ""
"Input page number for a full refresh"
msgstr ""
@ -387,8 +399,8 @@ msgid ""
"Language"
msgstr ""
#: frontend/apps/filemanager/filemanagermenu.lua:127
#: frontend/apps/reader/modules/readermenu.lua:118
#: frontend/apps/filemanager/filemanagermenu.lua:129
#: frontend/apps/reader/modules/readermenu.lua:120
msgid ""
"Large"
msgstr ""
@ -434,8 +446,8 @@ msgid ""
"Logout"
msgstr ""
#: frontend/apps/filemanager/filemanagermenu.lua:119
#: frontend/apps/reader/modules/readermenu.lua:110
#: frontend/apps/filemanager/filemanagermenu.lua:121
#: frontend/apps/reader/modules/readermenu.lua:112
msgid ""
"Medium"
msgstr ""
@ -445,8 +457,8 @@ msgid ""
"More"
msgstr ""
#: frontend/apps/filemanager/filemanagermenu.lua:89
#: frontend/apps/reader/modules/readermenu.lua:82
#: frontend/apps/filemanager/filemanagermenu.lua:91
#: frontend/apps/reader/modules/readermenu.lua:84
msgid ""
"Night mode"
msgstr ""
@ -467,12 +479,18 @@ msgid ""
msgstr ""
#: frontend/apps/reader/modules/readerfrontlight.lua:115
#: frontend/apps/reader/modules/readermenu.lua:214
#: frontend/apps/reader/modules/readermenu.lua:236
#: frontend/ui/widget/confirmbox.lua:28
msgid ""
"OK"
msgstr ""
#: frontend/apps/filemanager/filemanagermenu.lua:151
#: frontend/apps/reader/modules/readermenu.lua:151
msgid ""
"OTA server is not available."
msgstr ""
#: frontend/apps/reader/modules/readertypeset.lua:150
msgid ""
"Off"
@ -513,8 +531,8 @@ msgid ""
"Paste"
msgstr ""
#: frontend/apps/filemanager/filemanagermenu.lua:151
#: frontend/apps/reader/modules/readermenu.lua:151
#: frontend/apps/filemanager/filemanagermenu.lua:173
#: frontend/apps/reader/modules/readermenu.lua:173
msgid ""
"Please report bugs to \n"
"https://github.com/koreader/koreader/issues"
@ -615,12 +633,12 @@ msgid ""
"Share"
msgstr ""
#: frontend/apps/reader/modules/readermenu.lua:129
#: frontend/apps/reader/modules/readermenu.lua:131
msgid ""
"Show advanced options"
msgstr ""
#: frontend/apps/filemanager/filemanagermenu.lua:67
#: frontend/apps/filemanager/filemanagermenu.lua:69
msgid ""
"Show hidden files"
msgstr ""
@ -630,13 +648,13 @@ msgid ""
"Show page overlap"
msgstr ""
#: frontend/apps/filemanager/filemanagermenu.lua:111
#: frontend/apps/reader/modules/readermenu.lua:102
#: frontend/apps/filemanager/filemanagermenu.lua:113
#: frontend/apps/reader/modules/readermenu.lua:104
msgid ""
"Small"
msgstr ""
#: frontend/apps/filemanager/filemanagermenu.lua:75
#: frontend/apps/filemanager/filemanagermenu.lua:77
msgid ""
"Start with last opened file"
msgstr ""
@ -716,8 +734,8 @@ msgid ""
"Underscore"
msgstr ""
#: frontend/apps/filemanager/filemanagermenu.lua:140
#: frontend/apps/reader/modules/readermenu.lua:140
#: frontend/apps/filemanager/filemanagermenu.lua:162
#: frontend/apps/reader/modules/readermenu.lua:162
msgid ""
"Version"
msgstr ""
@ -752,6 +770,12 @@ msgid ""
"Yinxiang"
msgstr ""
#: frontend/apps/filemanager/filemanagermenu.lua:147
#: frontend/apps/reader/modules/readermenu.lua:147
msgid ""
"Your koreader is updated."
msgstr ""
#: plugins/zsync.koplugin/main.lua:42
msgid ""
"ZSync"

Loading…
Cancel
Save