diff --git a/frontend/ui/opdsparser.lua b/frontend/ui/opdsparser.lua
index a78eadcf7..a1321b3a9 100644
--- a/frontend/ui/opdsparser.lua
+++ b/frontend/ui/opdsparser.lua
@@ -33,13 +33,12 @@ end
function OPDSParser:createFlatXTable(xlex, curr_element)
curr_element = curr_element or {}
- local curr_attr_name;
- local attr_count = 0;
+ local curr_attr_name
+ local attr_count = 0
-- start reading the thing
- local txt
for event, offset, size in xlex:Lexemes() do
- txt = ffi.string(xlex.buf + offset, size)
+ local txt = ffi.string(xlex.buf + offset, size)
if event == luxl.EVENT_START then
if txt ~= "xml" then
-- does current element already have something
@@ -61,7 +60,7 @@ function OPDSParser:createFlatXTable(xlex, curr_element)
curr_attr_name = unescape(txt)
elseif event == luxl.EVENT_ATTR_VAL then
curr_element[curr_attr_name] = unescape(txt)
- attr_count = attr_count + 1;
+ attr_count = attr_count + 1
curr_attr_name = nil
elseif event == luxl.EVENT_TEXT then
curr_element = unescape(txt)
@@ -73,16 +72,23 @@ function OPDSParser:createFlatXTable(xlex, curr_element)
end
function OPDSParser:parse(text)
- -- luxl cannot properly handle xml comments and we need first remove them
- text = text:gsub("", "")
- -- luxl prefers
, other two forms are valid in HTML,
- -- but will kick the ass of luxl
+ -- Murder Calibre's whole "content" block, because luxl doesn't really deal well with various XHTML quirks,
+ -- as the list of crappy replacements below attests to...
+ -- There's also a high probability of finding orphaned tags or badly nested ones in there, which will screw everything up.
+ text = text:gsub('.-', '')
+ -- luxl doesn't handle XML comments, so strip them
+ text = text:gsub("", "")
+ -- luxl prefers
, the other two forms are valid in HTML, but will kick luxl's ass
text = text:gsub("
", "
")
text = text:gsub("
", "
")
-- Same deal with hr
text = text:gsub("
", "
")
text = text:gsub("
", "
")
- -- some OPDS catalogs wrap text in a CDATA section, remove it as it causes parsing problems
+ -- It's also allergic to orphaned (As opposed to a balanced pair)...
+ text = text:gsub("", "")
+ -- Let's assume it might also happen to strong...
+ text = text:gsub("", "")
+ -- Some OPDS catalogs wrap text in a CDATA section, remove it as it causes parsing problems
text = text:gsub("", function (s)
return s:gsub( "%p", {["&"] = "&", ["<"] = "<", [">"] = ">" } )
end )
diff --git a/frontend/ui/widget/opdsbrowser.lua b/frontend/ui/widget/opdsbrowser.lua
index 62a2a4780..b1277115c 100644
--- a/frontend/ui/widget/opdsbrowser.lua
+++ b/frontend/ui/widget/opdsbrowser.lua
@@ -78,7 +78,7 @@ function OPDSBrowser:init()
servers = {
{
title = "Project Gutenberg",
- url = "http://m.gutenberg.org/ebooks.opds/?format=opds",
+ url = "https://m.gutenberg.org/ebooks.opds/?format=opds",
},
{
title = "Project Gutenberg [Searchable]",
@@ -87,11 +87,11 @@ function OPDSBrowser:init()
},
{
title = "Feedbooks",
- url = "http://www.feedbooks.com/publicdomain/catalog.atom",
+ url = "https://catalog.feedbooks.com/catalog/public_domain.atom",
},
{
title = "ManyBooks",
- url = "http://manybooks.net/opds/index.php",
+ url = "https://manybooks.net/opds/index.php",
},
{
title = "Internet Archive",
@@ -99,11 +99,11 @@ function OPDSBrowser:init()
},
{
title = "Flibusta (Russian)",
- url = "http://www.flibusta.is/opds",
+ url = "https://www.flibusta.is/opds",
},
{
title = "Flibusta [Ru] [Searchable]",
- url = "http://www.flibusta.is/opds/search?searchTerm=%s",
+ url = "https://www.flibusta.is/opds/search?searchTerm=%s",
searchable = true,
},
{
@@ -388,9 +388,9 @@ end
function OPDSBrowser:getCatalog(item_url, username, password)
local ok, catalog = pcall(self.parseFeed, self, item_url, username, password)
if not ok and catalog then
- logger.info("cannot get catalog info from", item_url, catalog)
+ logger.info("cannot get catalog info from", item_url or "nil", catalog)
UIManager:show(InfoMessage:new{
- text = T(_("Cannot get catalog info from %1"), (BD.url(item_url) or "")),
+ text = T(_("Cannot get catalog info from %1"), (item_url and BD.url(item_url) or "nil")),
})
return
end
@@ -498,7 +498,7 @@ function OPDSBrowser:genItemTableFromCatalog(catalog, item_url, username, passwo
end
end
if author then
- item.text = title .. "\n" .. author
+ item.text = title .. " - " .. author
end
end
item.title = title
@@ -676,7 +676,7 @@ function OPDSBrowser:showDownloads(item)
end
function OPDSBrowser:browse(browse_url, username, password)
- logger.dbg("Browse opds url", browse_url)
+ logger.dbg("Browse opds url", browse_url or "nil")
table.insert(self.paths, {
url = browse_url,
username = username,