News Downloader: feed config editor (#4126)

pull/4148/merge
mwoz123 6 years ago committed by poire-z
parent a33827faf3
commit 3fcd7344e4

@ -1,27 +1,31 @@
return {
-- list your feeds here:
return {--do NOT change this line
{ "http://feeds.reuters.com/Reuters/worldNews?format=xml", limit = 2, download_full_article=true},
--HELP:
-- use syntax: {"http://your-url.com", limit=max_number_of_items_to_be_created, download_full_article=true/false},
{ "https://www.pcworld.com/index.rss", limit = 7 , download_full_article=false},
-- remember to put coma at the end of each line!
-- comment out line ("--" at line start) to stop downloading source
--{ "http://www.football.co.uk/international/rss.xml", limit = 0 , download_full_article=false},
-- you can also edit this file in external text editor. Config file is located under:
-- <your_download_directory>/feed_config.lua
-- default: <koreader_dir>/news/feed_config.lua
-- DETAILS:
-- set 'limit' to "0" means no limit.
-- 'download_full_article=true' - means download full article (may not always work correctly)
-- 'download_full_article=false' - means use only feed description to create feeds (usually only beginning of the article)
-- default value is 'true' (if no 'download_full_article' entry)
-- comment out line ("--" at line start) to stop downloading source
-- LIST YOUR FEEDS HERE:
--HELP:
-- use syntax: {"your_url", limit= max_number_of_items_to_be_created, download_full_article=true/false}
{ "http://feeds.reuters.com/Reuters/worldNews?format=xml", limit = 2, download_full_article=true},
-- set 'limit' to change number of 'news' to be created
-- 'limit' equal "0" means no limit.
{ "https://www.pcworld.com/index.rss", limit = 7 , download_full_article=false},
-- 'download_full_article=false' - means download full article using feed link (may not always work correctly)
-- 'download_full_article=true' - means use only feed description to create feeds (usually only part of the article)
-- { "http://www.football.co.uk/international/rss.xml", limit = 2},
}
}--do NOT change this line

@ -4,13 +4,12 @@ local DownloadBackend = require("internaldownloadbackend")
local ReadHistory = require("readhistory")
local FFIUtil = require("ffi/util")
local InfoMessage = require("ui/widget/infomessage")
local InputDialog = require("ui/widget/inputdialog")
local LuaSettings = require("frontend/luasettings")
local UIManager = require("ui/uimanager")
local NetworkMgr = require("ui/network/manager")
local WidgetContainer = require("ui/widget/container/widgetcontainer")
local dateparser = require("lib.dateparser")
local ffi = require("ffi")
local C = ffi.C
local logger = require("logger")
local util = require("util")
local _ = require("gettext")
@ -20,7 +19,7 @@ local NewsDownloader = WidgetContainer:new{}
local initialized = false
local wifi_enabled_before_action = true
local feed_config_file = "feed_config.lua"
local feed_config_file_name = "feed_config.lua"
local news_downloader_config_file = "news_downloader_settings.lua"
local config_key_custom_dl_dir = "custom_dl_dir";
local file_extension = ".html"
@ -97,21 +96,16 @@ function NewsDownloader:addToMainMenu(menu_items)
text = _("Remove news"),
callback = function() self:removeNewsButKeepFeedConfig() end,
},
{
text = _("Set custom download directory"),
callback = function() self:setCustomDownloadDirectory() end,
},
{
text = _("Settings"),
sub_item_table = {
{
text = _("Change feeds configuration"),
callback = function()
UIManager:show(InfoMessage:new{
text = T(_("To change feed (Atom/RSS) sources please manually edit the configuration file:\n%1\n\nIt is very simple and contains comments as well as sample configuration."),
feed_config_path)
})
end,
callback = function() self:changeFeedConfig() end,
},
{
text = _("Set custom download directory"),
callback = function() self:setCustomDownloadDirectory() end,
},
},
},
@ -142,11 +136,11 @@ function NewsDownloader:lazyInitialization()
logger.dbg("NewsDownloader: Creating initial directory")
lfs.mkdir(news_download_dir_path)
end
feed_config_path = news_download_dir_path .. feed_config_file
feed_config_path = news_download_dir_path .. feed_config_file_name
if not lfs.attributes(feed_config_path, "mode") then
logger.dbg("NewsDownloader: Creating initial feed config.")
FFIUtil.copyFile(FFIUtil.joinPath(self.path, feed_config_file),
FFIUtil.copyFile(FFIUtil.joinPath(self.path, feed_config_file_name),
feed_config_path)
end
initialized = true
@ -352,11 +346,11 @@ end
function NewsDownloader:removeNewsButKeepFeedConfig()
logger.dbg("NewsDownloader: Removing news from :", news_download_dir_path)
for entry in lfs.dir(news_download_dir_path) do
if entry ~= "." and entry ~= ".." and entry ~= feed_config_file then
if entry ~= "." and entry ~= ".." and entry ~= feed_config_file_name then
local entry_path = news_download_dir_path .. "/" .. entry
local entry_mode = lfs.attributes(entry_path, "mode")
if entry_mode == "file" then
C.remove(entry_path)
os.remove(entry_path)
elseif entry_mode == "directory" then
FFIUtil.purgeDir(entry_path)
end
@ -379,8 +373,8 @@ function NewsDownloader:setCustomDownloadDirectory()
news_downloader_settings:saveSetting(config_key_custom_dl_dir, ("%s/"):format(path))
news_downloader_settings:flush()
logger.dbg("NewsDownloader: Coping to new download folder previous feed_config_file from: ", feed_config_path)
FFIUtil.copyFile(feed_config_path, ("%s/%s"):format(path, feed_config_file))
logger.dbg("NewsDownloader: Coping to new download folder previous feed_config_file_name from: ", feed_config_path)
FFIUtil.copyFile(feed_config_path, ("%s/%s"):format(path, feed_config_file_name))
initialized = false
self:lazyInitialization()
@ -388,6 +382,47 @@ function NewsDownloader:setCustomDownloadDirectory()
}:chooseDir()
end
function NewsDownloader:changeFeedConfig()
local feed_config_file = io.open(feed_config_path, "rb")
local config = feed_config_file:read("*all")
feed_config_file:close()
local config_editor
config_editor = InputDialog:new{
title = T(_("Config: %1"),feed_config_path),
input = config,
input_type = "string",
fullscreen = true,
condensed = true,
allow_newline = true,
cursor_at_end = false,
add_nav_bar = true,
reset_callback = function()
return config
end,
save_callback = function(content)
if content and #content > 0 then
local parse_error = util.checkLuaSyntax(content)
if not parse_error then
local syntax_okay, syntax_error = pcall(loadstring(content))
if syntax_okay then
feed_config_file = io.open(feed_config_path, "w")
feed_config_file:write(content)
feed_config_file:close()
return true, _("Configuration saved")
else
return false, T(_("Configuration invalid: %1"), syntax_error)
end
else
return false, T(_("Configuration invalid: %1"), parse_error)
end
end
return false, _("Configuration empty")
end,
}
UIManager:show(config_editor)
config_editor:onShowKeyboard()
end
function NewsDownloader:onCloseDocument()
local document_full_path = self.ui.document.file
if document_full_path and news_download_dir_path and news_download_dir_path == string.sub(document_full_path, 1, string.len(news_download_dir_path)) then

Loading…
Cancel
Save