--- /dev/null
+#!/usr/bin/python
+
+import sys
+
+from PySide import QtGui
+from PySide import QtDeclarative
+import os
+from os import mkdir, remove, stat, environ
+from os.path import isfile, isdir, exists
+
+# Comment the line below if you don't want to use OpenGL for QML rendering or if it is not supported
+from PySide import QtOpenGL, QtCore
+
+from rss_sqlite import Listing
+CONFIGDIR = environ.get("HOME", "/home/user") + "/.feedingit"
+#CONFIGDIR = "/home/user/.feedingit"
+
+import logging
+#logger = logging.getLogger(__name__)
+
+import debugging
+debugging.init(dot_directory=".feedingit", program_name="feedingit-pyside")
+
+from cgi import escape
+from re import sub
+
+class FeedWrapper(QtCore.QObject):
+ def __init__(self, key):
+ QtCore.QObject.__init__(self)
+ self._key = key
+ def _name(self):
+ return listing.getFeedTitle(self._key)
+ def _unread(self):
+ return listing.getFeedNumberOfUnreadItems(self._key)
+ def _updatedDate(self):
+ return listing.getFeedUpdateTime(self._key)
+ def _icon(self):
+ return listing.getFavicon(self._key)
+ def _feedid(self):
+ return self._key
+ def _updating(self):
+ return false
+
+ changed = QtCore.Signal()
+
+ title = QtCore.Property(unicode, _name, notify=changed)
+ feedid = QtCore.Property(unicode, _feedid, notify=changed)
+ unread = QtCore.Property(unicode, _unread, notify=changed)
+ updatedDate= QtCore.Property(unicode, _updatedDate, notify=changed)
+ icon = QtCore.Property(unicode, _icon, notify=changed)
+ updating = QtCore.Property(unicode, _icon, notify=changed)
+
+class FeedsModel(QtCore.QAbstractListModel):
+ COLUMNS = ('feed', )
+ _category = None
+
+ def __init__(self):
+ QtCore.QAbstractListModel.__init__(self)
+ self._feeds = listing.getListOfFeeds(self._category)
+ self.setRoleNames(dict(enumerate(FeedsModel.COLUMNS)))
+
+ def rowCount(self, parent=QtCore.QModelIndex()):
+ return len(self._feeds)
+
+ def data(self, index, role):
+ if index.isValid() and role == FeedsModel.COLUMNS.index('feed'):
+ print self._feeds[index.row()]
+ return FeedWrapper(self._feeds[index.row()])
+ return None
+
+class ArticleWrapper(QtCore.QObject):
+ def __init__(self, feed, articleid):
+ QtCore.QObject.__init__(self)
+ self._feed = feed
+ self._articleid = articleid
+ def _name(self):
+ return self.fix_title(self._feed.getTitle(self._articleid))
+ def _unread(self):
+ return str(self._feed.isEntryRead(self._articleid))
+ def _getarticleid(self):
+ return self._articleid
+ def _updatedDate(self):
+ return self._feed.getDateStamp(self._articleid)
+ def _path(self):
+ return self._feed.getContentLink(self._articleid)
+
+ changed = QtCore.Signal()
+
+ title = QtCore.Property(unicode, _name, notify=changed)
+ articleid = QtCore.Property(unicode, _getarticleid, notify=changed)
+ unread = QtCore.Property(unicode, _unread, notify=changed)
+ updatedDate= QtCore.Property(unicode, _updatedDate, notify=changed)
+ path = QtCore.Property(unicode, _path, notify=changed)
+
+class ArticlesModel(QtCore.QAbstractListModel):
+ COLUMNS = ('article', )
+ _articles = []
+ _key = None
+ _feed = None
+
+ def __init__(self,):
+ QtCore.QAbstractListModel.__init__(self)
+ self.setRoleNames(dict(enumerate(ArticlesModel.COLUMNS)))
+
+ def updateModel(self, key):
+ self._key = key
+ self._feed = listing.getFeed(self._key)
+ self._articles = self._feed.getIds()
+
+ def rowCount(self, parent=QtCore.QModelIndex()):
+ print "art " + str(len(self._articles))
+ return len(self._articles)
+
+ def data(self, index, role):
+ print "data" + str(index) + " " + str(role)
+ if index.isValid() and role == ArticlesModel.COLUMNS.index('article'):
+ return ArticleWrapper(self._articles[index.row()])
+ return None
+
+class Controller(QtCore.QObject):
+
+ def __init__(self, listing):
+ QtCore.QObject.__init__(self)
+ from XmlHandler import XmlHandler
+ self._handler = XmlHandler(listing)
+
+ @QtCore.Slot(str,str, result=str)
+ def getArticle(self, key, article):
+ feed = listing.getFeed(key)
+ try:
+ file = open(feed.getContentLink(article))
+ html = file.read().replace("body", "body bgcolor='#ffffff'", 1)
+ file.close()
+ except:
+ html = "<html><body>Error retrieving article</body></html>"
+ return html
+
+ @QtCore.Slot(str, result=str)
+ def getFeedsXml(self, catid):
+ return self._handler.generateFeedsXml(catid)
+
+ @QtCore.Slot(str,result=str)
+ def getArticlesXml(self, key):
+ #onlyUnread = arguments.get("onlyUnread","False")
+ return self._handler.generateArticlesXml(key, "False")
+
+ @QtCore.Slot(result=str)
+ def getCategoryXml(self):
+ return self._handler.generateCategoryXml()
+
+ @QtCore.Slot(QtCore.QObject)
+ def feedClicked(self, wrapper):
+ #print 'User clicked on:', wrapper._key
+ #articlesModel.updateModel(wrapper._key)
+ pass
+
+ @QtCore.Slot(str)
+ def updateFeed(self, key):
+ print 'updating feed ', key
+ listing.updateFeed(key)
+
+ @QtCore.Slot()
+ def updateAll(self):
+ for feed in listing.getListOfFeeds("Manual"):
+ listing.updateFeed(feed)
+
+ @QtCore.Slot(str,str,str)
+ def addFeed(self, title, url, catid):
+ listing.addFeed(title,url, category=catid)
+
+ @QtCore.Slot(str)
+ def addCategory(self, name):
+ listing.addCategory(name)
+
+ @QtCore.Slot(str)
+ def markAllAsRead(self, key):
+ feed = listing.getFeed(key)
+ feed.markAllAsRead()
+
+ @QtCore.Slot(str, str)
+ def setEntryRead(self, key, articleid):
+ feed = listing.getFeed(key)
+ feed.setEntryRead(articleid)
+ listing.updateUnread(key)
+
+ @QtCore.Slot(str, result=str)
+ def getConfig(self, item):
+ if (item == "hideReadFeed"):
+ return "True"
+ if (item == "hideReadArticles"):
+ return "False"
+ return ""
+
+def main():
+
+ if not isdir(CONFIGDIR):
+ try:
+ mkdir(CONFIGDIR)
+ except:
+ logger.error("Error: Can't create configuration directory")
+ from sys import exit
+ exit(1)
+
+ from config import Config
+ global config
+ config = Config(None,CONFIGDIR+"config.ini")
+
+ global listing
+ listing = Listing(config, CONFIGDIR)
+
+ import mainthread
+ mainthread.init()
+
+ from jobmanager import JobManager
+ JobManager(True)
+
+ app = QtGui.QApplication(sys.argv)
+ view = QtDeclarative.QDeclarativeView()
+
+ global articlesModel
+ feedsModel = FeedsModel()
+ articlesModel = ArticlesModel()
+
+ controller = Controller(listing)
+
+ rc = view.rootContext()
+
+ rc.setContextProperty('controller', controller)
+ rc.setContextProperty('feedsModel', feedsModel)
+ rc.setContextProperty('articlesModel', articlesModel)
+
+ # Comment the two lines below if you don't want to use OpenGL for QML rendering or if it is not supported
+ glw = QtOpenGL.QGLWidget()
+ view.setViewport(glw)
+
+ if os.path.exists('/usr/share/feedingit/qml'):
+ view.setSource('/usr/share/feedingit/qml/main.qml')
+ else:
+ #view.setSource(os.path.join('qml','main.qml'))
+ view.setSource(os.path.join('qml','FeedingIt.qml'))
+
+ #view.showFullScreen()
+ view.show()
+ sys.exit(app.exec_())
+
+if __name__ == "__main__":
+
+ main()