aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorChristian Weiske <cweiske@cweiske.de>2011-11-23 06:39:54 +0100
committerChristian Weiske <cweiske@cweiske.de>2011-11-23 06:39:54 +0100
commit4ad1bb1258fc5731b5a09c8f34b9d41b63ad5263 (patch)
tree5eb76f9c6dbb4ffb5b5143ee08ebe9ee970d5a4d /src
parent199be805217069bf1ea6f4bf4337d7b26f149cac (diff)
downloadenigma2-curlytx-4ad1bb1258fc5731b5a09c8f34b9d41b63ad5263.tar.gz
enigma2-curlytx-4ad1bb1258fc5731b5a09c8f34b9d41b63ad5263.zip
first work on page import via atom feed
Diffstat (limited to 'src')
-rw-r--r--src/AtomFeed.py41
-rw-r--r--src/CurlyTxSettings.py19
-rw-r--r--src/config.py1
3 files changed, 60 insertions, 1 deletions
diff --git a/src/AtomFeed.py b/src/AtomFeed.py
new file mode 100644
index 0000000..07a6345
--- /dev/null
+++ b/src/AtomFeed.py
@@ -0,0 +1,41 @@
+from twisted.web.client import getPage
+from xml.etree.cElementTree import fromstring
+
+class AtomFeed:
+ """Simple XML parser that extracts pages from a atom feed
+ """
+ ns = "{http://www.w3.org/2005/Atom}"
+ def __init__(self, url, callback):
+ getPage(url).addCallback(self.parse, callback)
+
+ def parse(self, data, callback):
+ xml = fromstring(data)
+ pages = []
+ for entry in xml.findall("{0}entry".format(self.ns)):
+ titleE = entry.find("{0}title".format(self.ns))
+ url = self.bestLink(entry.findall("{0}link".format(self.ns)))
+ if titleE != None and titleE.text != "" and url != None:
+ pages.append({"title": titleE.text, "url": url})
+
+ callback(pages)
+
+ def bestLink(self, list):
+ foundLevel = -1
+ foundHref = None
+ for link in list:
+ if link.get("rel") != "alternate" and link.get("rel") != "":
+ continue
+ level = self.level(link)
+ if foundLevel > level:
+ continue
+ foundLevel = level
+ foundHref = link.get("href")
+ return foundHref
+
+ def level(self, link):
+ type = link.get("type")
+ if type == "text/plain":
+ return 3
+ elif type == "":
+ return 2
+ return 1
diff --git a/src/CurlyTxSettings.py b/src/CurlyTxSettings.py
index 14e1242..686212c 100644
--- a/src/CurlyTxSettings.py
+++ b/src/CurlyTxSettings.py
@@ -63,6 +63,7 @@ class CurlyTxSettings(ConfigListScreen, HelpableScreen, Screen):
list.append(getConfigListEntry(_("Show in main menu"), config.plugins.CurlyTx.menuMain))
list.append(getConfigListEntry(_("Show in extensions menu"), config.plugins.CurlyTx.menuExtensions))
list.append(getConfigListEntry(_("Menu title"), config.plugins.CurlyTx.menuTitle))
+ list.append(getConfigListEntry(_("Page feed URL"), config.plugins.CurlyTx.feedUrl))
return list
def loadHelp(self):
@@ -89,7 +90,7 @@ class CurlyTxSettings(ConfigListScreen, HelpableScreen, Screen):
ConfigListScreen.keyRight(self)
def deletePage(self):
- if len(config.plugins.CurlyTx.pages) == 0:
+ if len(config.plugins.CurlyTx.pages) == 0 or self["config"].getCurrentIndex() >= len(config.plugins.CurlyTx.pages):
return
from Screens.MessageBox import MessageBox
@@ -121,6 +122,9 @@ class CurlyTxSettings(ConfigListScreen, HelpableScreen, Screen):
self.pageEdited, CurlyTxPageEdit,
config.plugins.CurlyTx.pages[id], False
)
+ else:
+ from AtomFeed import AtomFeed
+ AtomFeed(config.plugins.CurlyTx.feedUrl.value, self.feedPagesReceived)
def pageEdited(self, page, new):
if not page:
@@ -131,6 +135,19 @@ class CurlyTxSettings(ConfigListScreen, HelpableScreen, Screen):
self["config"].setList(self.getConfigList())
+ def feedPagesReceived(self, pages):
+ if len(pages) == 0:
+ return
+
+ del config.plugins.CurlyTx.pages[:]
+ config.plugins.CurlyTx.pages.save()
+ print("CurlyTx", len(config.plugins.CurlyTx.pages))
+ for pageData in pages:
+ page = createPage()
+ page.title.value = pageData["title"]
+ page.uri.value = pageData["url"]
+ config.plugins.CurlyTx.pages.append(page)
+ self["config"].setList(self.getConfigList())
def keySave(self):
for i in range(0, len(config.plugins.CurlyTx.pages)):
diff --git a/src/config.py b/src/config.py
index 5f4c5eb..4314f08 100644
--- a/src/config.py
+++ b/src/config.py
@@ -24,6 +24,7 @@ config.plugins.CurlyTx = ConfigSubsection()
config.plugins.CurlyTx.menuMain = ConfigYesNo(default = True)
config.plugins.CurlyTx.menuExtensions = ConfigYesNo(default = False)
config.plugins.CurlyTx.menuTitle = ConfigText(default = "CurlyTx", fixed_size = False)
+config.plugins.CurlyTx.feedUrl = ConfigText(default = "", fixed_size = False)
config.plugins.CurlyTx.pages = ConfigSubList()
for id,value in config.plugins.CurlyTx.pages.stored_values.iteritems():
config.plugins.CurlyTx.pages.append(createPage())