mirror of
https://github.com/koreader/koreader.git
synced 2025-12-13 20:36:53 +01:00
TouchMenu: added options to menu items with the following defaults:
keep_menu_open = false
hold_keep_menu_open = true
So, default for Tap callback is to close menu, and for Hold callback
to keep menu open.
In both cases, provide the TouchMenu instance as the 1st argument to
the callback functions (instead of a refresh_menu_func I added in #3941)
so the callback can do more things, like closing, refreshing,
changing menu items text and re-ordering...
ReaderZooming: show symbol for default (like it was done for
ReaderFont, ReaderHyphenation...)
TextEditor plugin: update the previously opened files list in real
time, so the menu can be kept open and used as the TextEditor main
interface.
SSH plugin: keep menu open and update the Start/Stop state in real time
ReadTimer plugin: tried to do what feels right (but I don't use it)
Also remove forgotten cp in the move/paste file code
242 lines
8.0 KiB
Lua
242 lines
8.0 KiB
Lua
local InputContainer = require("ui/widget/container/inputcontainer")
|
|
local InputDialog = require("ui/widget/inputdialog")
|
|
local DoubleKeyValuePage = require("doublekeyvaluepage")
|
|
local MultiInputDialog = require("ui/widget/multiinputdialog")
|
|
local InfoMessage = require("ui/widget/infomessage")
|
|
local UIManager = require("ui/uimanager")
|
|
local Screen = require("device").screen
|
|
local _ = require("gettext")
|
|
local NetworkMgr = require("ui/network/manager")
|
|
|
|
local Goodreads = InputContainer:new {
|
|
name = "goodreads",
|
|
goodreads_key = "",
|
|
goodreads_secret = "",
|
|
}
|
|
|
|
function Goodreads:init()
|
|
local gr_sett = DoubleKeyValuePage:readGRSettings().data
|
|
if gr_sett.goodreads then
|
|
self.goodreads_key = gr_sett.goodreads.key
|
|
self.goodreads_secret = gr_sett.goodreads.secret
|
|
end
|
|
self.ui.menu:registerToMainMenu(self)
|
|
end
|
|
|
|
function Goodreads:addToMainMenu(menu_items)
|
|
menu_items.goodreads = {
|
|
text = _("Goodreads"),
|
|
sub_item_table = {
|
|
{
|
|
text = _("Settings"),
|
|
keep_menu_open = true,
|
|
callback = function() self:updateSettings() end,
|
|
},
|
|
{
|
|
text = _("Search all books"),
|
|
keep_menu_open = true,
|
|
callback = function(touchmenu_instance)
|
|
if self.goodreads_key ~= "" then
|
|
touchmenu_instance:closeMenu()
|
|
self:search("all")
|
|
else
|
|
UIManager:show(InfoMessage:new{
|
|
text = _("Please set up your Goodreads key in the settings dialog"),
|
|
})
|
|
end
|
|
end,
|
|
},
|
|
{
|
|
text = _("Search for book by title"),
|
|
keep_menu_open = true,
|
|
callback = function(touchmenu_instance)
|
|
if self.goodreads_key ~= "" then
|
|
touchmenu_instance:closeMenu()
|
|
self:search("title")
|
|
else
|
|
UIManager:show(InfoMessage:new{
|
|
text = _("Please set up your Goodreads key in the settings dialog"),
|
|
})
|
|
end
|
|
end,
|
|
},
|
|
{
|
|
text = _("Search for book by author"),
|
|
keep_menu_open = true,
|
|
callback = function(touchmenu_instance)
|
|
if self.goodreads_key ~= "" then
|
|
touchmenu_instance:closeMenu()
|
|
self:search("author")
|
|
else
|
|
UIManager:show(InfoMessage:new{
|
|
text = _("Please set up your Goodreads key in the settings dialog"),
|
|
})
|
|
end
|
|
end,
|
|
},
|
|
},
|
|
}
|
|
end
|
|
|
|
function Goodreads:updateSettings()
|
|
local hint_top
|
|
local text_top
|
|
local hint_bottom
|
|
local text_bottom
|
|
local text_info = _(
|
|
[[How to generate a key and a secret key:
|
|
|
|
1. Go to https://www.goodreads.com/user/sign_up and create an account
|
|
2. Register for a development key on the following page: https://www.goodreads.com/user/sign_in?rd=true
|
|
3. Your key and secret key will now be available on https://www.goodreads.com/api/key
|
|
4. Enter your generated key and your secret key in the settings dialog (Login to Goodreads window)
|
|
]])
|
|
|
|
if self.goodreads_key == "" then
|
|
hint_top = _("Goodreads key left empty")
|
|
text_top = ""
|
|
else
|
|
hint_top = ""
|
|
text_top = self.goodreads_key
|
|
end
|
|
|
|
if self.goodreads_secret == "" then
|
|
hint_bottom = _("Goodreads secret left empty (optional)")
|
|
text_bottom = ""
|
|
else
|
|
hint_bottom = ""
|
|
text_bottom = self.goodreads_key
|
|
end
|
|
self.settings_dialog = MultiInputDialog:new {
|
|
title = _("Login to Goodreads"),
|
|
fields = {
|
|
{
|
|
text = text_top,
|
|
input_type = "string",
|
|
hint = hint_top ,
|
|
},
|
|
{
|
|
text = text_bottom,
|
|
input_type = "string",
|
|
hint = hint_bottom,
|
|
},
|
|
},
|
|
buttons = {
|
|
{
|
|
{
|
|
text = _("Cancel"),
|
|
callback = function()
|
|
self.settings_dialog:onClose()
|
|
UIManager:close(self.settings_dialog)
|
|
end
|
|
},
|
|
{
|
|
text = _("Info"),
|
|
callback = function()
|
|
UIManager:show(InfoMessage:new{text = text_info })
|
|
end
|
|
},
|
|
{
|
|
text = _("Apply"),
|
|
callback = function()
|
|
self:saveSettings(MultiInputDialog:getFields())
|
|
self.settings_dialog:onClose()
|
|
UIManager:close(self.settings_dialog)
|
|
end
|
|
},
|
|
},
|
|
},
|
|
width = Screen:getWidth() * 0.95,
|
|
height = Screen:getHeight() * 0.2,
|
|
input_type = "text",
|
|
}
|
|
UIManager:show(self.settings_dialog)
|
|
self.settings_dialog:onShowKeyboard()
|
|
end
|
|
|
|
function Goodreads:saveSettings(fields)
|
|
if fields then
|
|
self.goodreads_key = fields[1]
|
|
self.goodreads_secret = fields[2]
|
|
end
|
|
local settings = {
|
|
key = self.goodreads_key,
|
|
secret = self.goodreads_secret,
|
|
}
|
|
DoubleKeyValuePage:saveGRSettings(settings)
|
|
end
|
|
|
|
-- search_type = all - search all
|
|
-- search_type = author - serch book by author
|
|
-- search_type = title - search book by title
|
|
function Goodreads:search(search_type)
|
|
local title_header
|
|
local hint
|
|
local search_input
|
|
local text_input
|
|
local info
|
|
local result
|
|
if not NetworkMgr:isOnline() then
|
|
NetworkMgr:promptWifiOn()
|
|
return
|
|
end
|
|
if search_type == "all" then
|
|
title_header = _("Search all books in Goodreads")
|
|
hint = _("Title, author or ISBN")
|
|
elseif search_type == "author" then
|
|
title_header = _("Search for book by author in Goodreads")
|
|
hint = _("Author")
|
|
elseif search_type == "title" then
|
|
title_header = _("Search for book by title in Goodreads")
|
|
hint = _("Title")
|
|
end
|
|
|
|
search_input = InputDialog:new{
|
|
title = title_header,
|
|
input = "",
|
|
input_hint = hint,
|
|
input_type = "string",
|
|
buttons = {
|
|
{
|
|
{
|
|
text = _("Cancel"),
|
|
callback = function()
|
|
UIManager:close(search_input)
|
|
end,
|
|
},
|
|
{
|
|
text = _("Find"),
|
|
is_enter_default = true,
|
|
callback = function()
|
|
text_input = search_input:getInputText()
|
|
if text_input ~= nil and text_input ~= "" then
|
|
info = InfoMessage:new{text = _("Please wait…")}
|
|
UIManager:close(search_input)
|
|
UIManager:show(info)
|
|
UIManager:forceRePaint()
|
|
result = DoubleKeyValuePage:new{
|
|
title = _("Select book"),
|
|
text_input = text_input,
|
|
search_type = search_type,
|
|
}
|
|
if #result.kv_pairs > 0 then
|
|
UIManager:show(result)
|
|
end
|
|
UIManager:close(info)
|
|
|
|
else
|
|
UIManager:show(InfoMessage:new{
|
|
text =_("Please enter text"),
|
|
})
|
|
end
|
|
end,
|
|
},
|
|
}
|
|
},
|
|
}
|
|
UIManager:show(search_input)
|
|
search_input:onShowKeyboard()
|
|
end
|
|
|
|
return Goodreads
|