5 from PySide import QtGui
6 from PySide import QtDeclarative
8 from os import mkdir, remove, stat, environ
9 from os.path import isfile, isdir, exists
11 # Comment the line below if you don't want to use OpenGL for QML rendering or if it is not supported
12 from PySide import QtOpenGL, QtCore
14 from rss_sqlite import Listing
15 CONFIGDIR = environ.get("HOME", "/home/user") + "/.feedingit"
16 #CONFIGDIR = "/home/user/.feedingit"
19 #logger = logging.getLogger(__name__)
22 debugging.init(dot_directory=".feedingit", program_name="feedingit-pyside")
24 from cgi import escape
27 class Controller(QtCore.QObject):
29 def __init__(self, listing):
30 QtCore.QObject.__init__(self)
31 from XmlHandler import XmlHandler
32 self._handler = XmlHandler(listing)
34 @QtCore.Slot(str,str, result=str)
35 def getArticle(self, key, article):
36 feed = listing.getFeed(key)
38 file = open(feed.getContentLink(article))
39 html = file.read().replace("body", "body bgcolor='#ffffff'", 1)
42 html = "<html><body>Error retrieving article</body></html>"
45 @QtCore.Slot(str, result=str)
46 def getFeedsXml(self, catid):
47 return self._handler.generateFeedsXml(catid)
49 @QtCore.Slot(str,result=str)
50 def getArticlesXml(self, key):
51 #onlyUnread = arguments.get("onlyUnread","False")
52 return self._handler.generateArticlesXml(key, "False")
54 @QtCore.Slot(result=str)
55 def getCategoryXml(self):
56 return self._handler.generateCategoryXml()
58 @QtCore.Slot(QtCore.QObject)
59 def feedClicked(self, wrapper):
60 #print 'User clicked on:', wrapper._key
61 #articlesModel.updateModel(wrapper._key)
65 def updateFeed(self, key):
66 listing.updateFeed(key)
70 for feed in listing.getSortedListOfKeys("Manual"):
71 listing.updateFeed(feed)
73 @QtCore.Slot(str,str,str)
74 def addFeed(self, title, url, catid):
75 listing.addFeed(title,url, category=catid)
78 def addCategory(self, name):
79 listing.addCategory(name)
82 def markAllAsRead(self, key):
83 feed = listing.getFeed(key)
86 @QtCore.Slot(str, str)
87 def setEntryRead(self, key, articleid):
88 feed = listing.getFeed(key)
89 feed.setEntryRead(articleid)
90 listing.updateUnread(key)
92 @QtCore.Slot(str, result=str)
93 def getConfig(self, item):
94 if (item == "hideReadFeed"):
96 if (item == "hideReadArticles"):
102 if not isdir(CONFIGDIR):
106 logger.error("Error: Can't create configuration directory")
110 from config import Config
112 config = Config(None,CONFIGDIR+"config.ini")
115 listing = Listing(config, CONFIGDIR)
120 from jobmanager import JobManager
123 app = QtGui.QApplication(sys.argv)
124 view = QtDeclarative.QDeclarativeView()
126 controller = Controller(listing)
128 rc = view.rootContext()
130 rc.setContextProperty('controller', controller)
132 # Comment the two lines below if you don't want to use OpenGL for QML rendering or if it is not supported
133 #glw = QtOpenGL.QGLWidget()
134 #view.setViewport(glw)
136 if os.path.exists('/usr/share/feedingit/qml'):
137 glw = QtOpenGL.QGLWidget()
138 view.setViewport(glw)
139 view.setSource('/usr/share/feedingit/qml/main.qml')
140 view.showFullScreen()
142 view.setSource(os.path.join('qml','main.qml'))
144 #view.setSource(os.path.join('qml','FeedingIt.qml'))
146 #view.showFullScreen()
148 sys.exit(app.exec_())
150 if __name__ == "__main__":