from Components.MultiContent import MultiContentEntryText
from enigma import eListboxPythonMultiContent, eListbox, gFont, RT_HALIGN_LEFT, RT_WRAP
-class RSSList(GUIComponent):
- """Simple List Component used for RSS-Feeds. Displays first two Elements of a 4-Tupel."""
- def __init__(self, entries):
+class RSSBaseList(GUIComponent):
+ """Base List Component for RSSFeeds."""
+ def __init__(self, entries, itemheight):
GUIComponent.__init__(self)
self.list = entries
+ self.itemheight = itemheight
self.l = eListboxPythonMultiContent()
self.l.setFont(0, gFont("Regular", 22))
self.l.setFont(1, gFont("Regular", 18))
- self.l.setBuildFunc(self.buildListboxEntry)
self.l.setList(self.list)
self.onSelectionChanged = [ ]
def postWidgetCreate(self, instance):
instance.setContent(self.l)
- instance.setItemHeight(100)
+ instance.setItemHeight(self.itemheight)
instance.selectionChanged.get().append(self.selectionChanged)
- def buildListboxEntry(self, title, link, summary, enclosures):
- res = [ None ]
- width = self.l.getItemSize().width()
- res.append(MultiContentEntryText(pos=(0, 0), size=(width, 75), font=0, flags = RT_HALIGN_LEFT|RT_WRAP, text = title))
- res.append(MultiContentEntryText(pos=(0, 75), size=(width, 20), font=1, flags = RT_HALIGN_LEFT, text = link))
- return res
-
def getCurrentEntry(self):
return self.l.getCurrentSelection()
def moveToIndex(self, index):
self.instance.moveSelectionTo(index)
+ def moveToEntry(self, identifier):
+ pass
+
+ def moveDown(self):
+ self.instance.moveSelection(self.instance.moveDown)
+
+ def moveUp(self):
+ self.instance.moveSelection(self.instance.moveUp)
+
+class RSSFeedList(RSSBaseList):
+ def __init__(self, entries):
+ RSSBaseList.__init__(self, entries, 100)
+ self.l.setBuildFunc(self.buildListboxEntry)
+
+ def moveToEntry(self, feed):
+ if feed is None:
+ return
+
+ idx = 0
+ for x in self.list:
+ if feed.title == x[0].title:
+ self.instance.moveSelectionTo(idx)
+ break
+ idx += 1
+
+ def buildListboxEntry(self, feed):
+ res = [ None ]
+ width = self.l.getItemSize().width()
+ res.append(MultiContentEntryText(pos=(0, 0), size=(width, 75), font=0, flags = RT_HALIGN_LEFT|RT_WRAP, text = feed.title))
+ res.append(MultiContentEntryText(pos=(0, 75), size=(width, 20), font=1, flags = RT_HALIGN_LEFT, text = feed.description))
+ return res
+
+ def getCurrentEntry(self):
+ # We know that the list will never be empty...
+ return self.l.getCurrentSelection()[0]
+
+class RSSEntryList(RSSBaseList):
+ def __init__(self, entries):
+ RSSBaseList.__init__(self, entries, 50)
+ self.l.setBuildFunc(self.buildListboxEntry)
+
def moveToEntry(self, entry):
if entry is None:
return
- count = 0
+ idx = 0
for x in self.list:
if entry[0] == x[0]:
- self.instance.moveSelectionTo(count)
+ self.instance.moveSelectionTo(idx)
break
- count += 1
-
- def moveDown(self):
- self.instance.moveSelection(self.instance.moveDown)
+ idx += 1
- def moveUp(self):
- self.instance.moveSelection(self.instance.moveUp)
\ No newline at end of file
+ def buildListboxEntry(self, title, link, summary, enclosures):
+ res = [ None ]
+ width = self.l.getItemSize().width()
+ res.append(MultiContentEntryText(pos=(0, 0), size=(width, 50), font=0, flags = RT_HALIGN_LEFT|RT_WRAP, text = title))
+ return res
\ No newline at end of file
from Components.ScrollLabel import ScrollLabel
from Components.Pixmap import Pixmap
-from RSSList import RSSList
+from RSSFeed import BaseFeed
+from RSSList import RSSFeedList, RSSEntryList
from RSSSetup import RSSSetup
class RSSBaseView(Screen):
self.nextFeedCB=nextFeedCB
self.previousFeedCB=previousFeedCB
- self["content"] = RSSList(data)
+ self["content"] = RSSEntryList(data)
self["summary"] = Label()
self["info"] = Label()
self.fillFeeds()
# We always have at least "New Items"-Feed
- self["content"] = RSSList(self.feeds)
- self["summary"] = Label(self.feeds[0][2])
+ self["content"] = RSSFeedList(self.feeds)
+ self["summary"] = Label(' '.join([str(len(self.feeds[0][0].history)), "Entries"]))
self["info"] = Label("Feed 1/%s" % len(self.feeds))
self["content"].connectSelChanged(self.updateInfo)
self.rssPoller.removeCallback(self.pollCallback)
def fillFeeds(self):
- self.feeds = [(
- "New Items",
- "New Items since last Auto-Update",
- ' '.join([str(len(self.rssPoller.new_items)), "Entries"]),
- self.rssPoller.new_items
- )]
- self.feeds.extend([
- (
- feed.title,
- feed.description,
- ' '.join([str(len(feed.history)), "Entries"]),
- feed.history
- )
- for feed in self.rssPoller.feeds
- ])
+ # Build virtual "new item"-Feed
+ newItemFeed = BaseFeed("", False)
+ newItemFeed.title = "New Items"
+ newItemFeed.description = "New Items since last Auto-Update"
+ newItemFeed.history = self.rssPoller.new_items
+
+ # Feedlist contains our virtual Feed and all real ones
+ self.feeds = [(newItemFeed,)]
+ self.feeds.extend([(feed,) for feed in self.rssPoller.feeds])
def pollCallback(self, id = None):
print "[SimpleRSS] SimpleRSS called back"
if id is not None:
print "[SimpleRSS] pollCallback updating feed", id
- self.feeds[id+1] = (
- self.rssPoller.feeds[id].title,
- self.rssPoller.feeds[id].description,
- ' '.join([str(len(self.rssPoller.feeds[id].history)), "Entries"]),
- self.rssPoller.feeds[id].history
- )
else:
print "[SimpleRSS] pollCallback updating all feeds"
self.fillFeeds()
def updateInfo(self):
current_entry = self["content"].getCurrentEntry()
if current_entry:
- self["summary"].setText(current_entry[2])
+ self["summary"].setText(' '.join([str(len(current_entry.history)), "Entries"]))
self["info"].setText("Feed %s/%s" % (self["content"].getCurrentIndex()+1, len(self.feeds)))
# Should never happen
else:
def nextFeedCB(self):
self["content"].moveUp()
current_entry = self["content"].getCurrentEntry()
- return (current_entry[0], current_entry[3], self["content"].getCurrentIndex())
+ return (current_entry.title, current_entry.history, self["content"].getCurrentIndex())
def previousFeedCB(self):
self["content"].moveDown()
current_entry = self["content"].getCurrentEntry()
- return (current_entry[0], current_entry[3], self["content"].getCurrentIndex())
+ return (current_entry.title, current_entry.history, self["content"].getCurrentIndex())
def showCurrentEntry(self):
current_entry = self["content"].getCurrentEntry()
self.session.openWithCallback(
self.refresh,
RSSFeedView,
- current_entry[3],
- feedTitle=current_entry[0],
+ current_entry.history,
+ feedTitle=current_entry.title,
nextFeedCB=self.nextFeedCB,
previousFeedCB=self.previousFeedCB,
rssPoller=self.rssPoller,
# Build a list of all enclosures in this feed
enclosures = []
- for entry in current_entry[3]:
+ for entry in current_entry.history:
enclosures.extend(entry[3])
RSSBaseView.selectEnclosure(self, enclosures)