Files
koreader-mirror/plugins/goodreads.koplugin/main.lua
poire-z 850be52177 Keep some menus open when Tap or Hold (#4189)
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
2018-09-04 23:55:58 +02:00

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