Don't show URL in FeedView,
authorMoritz Venn <ritzmo@users.schwerkraft.elitedvb.net>
Mon, 22 Oct 2007 18:18:10 +0000 (18:18 +0000)
committerMoritz Venn <ritzmo@users.schwerkraft.elitedvb.net>
Mon, 22 Oct 2007 18:18:10 +0000 (18:18 +0000)
Don't convert Feeds to 4-tuples and use an own Component for them

simplerss/src/RSSList.py
simplerss/src/RSSPoller.py
simplerss/src/RSSScreens.py

index a32ed8c..7ff4814 100644 (file)
@@ -2,15 +2,15 @@ from Components.GUIComponent import GUIComponent
 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 = [ ]
@@ -34,16 +34,9 @@ class RSSList(GUIComponent):
 
        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()
 
@@ -53,19 +46,60 @@ class RSSList(GUIComponent):
        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
index 7571b92..8a25ba7 100644 (file)
@@ -140,7 +140,7 @@ class RSSPoller:
                else:
                        # Id is 0 -> empty out new items
                        if self.current_feed == 0:
-                               self.new_items = [ ]
+                               del self.new_items[:]
                        # Feed supposed to autoupdate
                        feed = self.feeds[self.current_feed]
                        if feed.autoupdate:
index 983116d..b837e42 100644 (file)
@@ -11,7 +11,8 @@ from Components.Label import Label
 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):
@@ -197,7 +198,7 @@ class RSSFeedView(RSSBaseView):
                self.nextFeedCB=nextFeedCB
                self.previousFeedCB=previousFeedCB
 
-               self["content"] = RSSList(data)
+               self["content"] = RSSEntryList(data)
                self["summary"] = Label()
                self["info"] = Label()
 
@@ -375,8 +376,8 @@ class RSSOverview(RSSBaseView):
                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)
@@ -390,21 +391,15 @@ class RSSOverview(RSSBaseView):
                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"
@@ -412,12 +407,6 @@ class RSSOverview(RSSBaseView):
 
                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()
@@ -430,7 +419,7 @@ class RSSOverview(RSSBaseView):
        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:
@@ -480,12 +469,12 @@ class RSSOverview(RSSBaseView):
        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()
@@ -495,8 +484,8 @@ class RSSOverview(RSSBaseView):
                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,
@@ -510,6 +499,6 @@ class RSSOverview(RSSBaseView):
 
                # 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)