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
12 # Comment the line below if you don't want to use OpenGL for QML rendering or if it is not supported
13 from PySide import QtOpenGL, QtCore
15 from rss_sqlite import Listing
16 CONFIGDIR = environ.get("HOME", "/home/user") + "/.feedingit"
17 #CONFIGDIR = "/home/user/.feedingit"
20 #logger = logging.getLogger(__name__)
23 debugging.init(dot_directory=".feedingit", program_name="feedingit-pyside")
25 from cgi import escape
28 class Controller(QtCore.QObject):
30 def __init__(self, listing):
31 QtCore.QObject.__init__(self)
32 from XmlHandler import XmlHandler
33 self._handler = XmlHandler(listing)
35 @QtCore.Slot(str,str, result=str)
36 def getArticle(self, key, article):
37 feed = listing.getFeed(key)
39 file = codecs.open(feed.getContentLink(article), "r", "utf-8")
40 html = file.read().replace("body", "body bgcolor='#ffffff'", 1)
43 html = u"<html><body>Error retrieving article</body></html>"
46 @QtCore.Slot(str, result=str)
47 def getFeedsXml(self, catid):
48 return self._handler.generateFeedsXml(catid)
50 @QtCore.Slot(str,result=str)
51 def getArticlesXml(self, key):
52 #onlyUnread = arguments.get("onlyUnread","False")
53 return self._handler.generateArticlesXml(key, "False")
55 @QtCore.Slot(result=str)
56 def getCategoryXml(self):
57 return self._handler.generateCategoryXml()
59 @QtCore.Slot(QtCore.QObject)
60 def feedClicked(self, wrapper):
61 #print 'User clicked on:', wrapper._key
62 #articlesModel.updateModel(wrapper._key)
66 def updateFeed(self, key):
67 listing.updateFeed(key)
71 for catid in listing.getListOfCategories():
72 for feed in listing.getSortedListOfKeys("Manual", category=catid):
73 listing.updateFeed(feed)
76 def updateCategory(self, catid):
77 for feed in listing.getSortedListOfKeys("Manual", category=catid):
78 listing.updateFeed(feed)
80 @QtCore.Slot(str,str,str)
81 def addFeed(self, title, url, catid):
82 listing.addFeed(title,url, category=catid)
85 def addCategory(self, name):
86 listing.addCategory(name)
89 def removeFeed(self, key):
90 listing.removeFeed(key)
93 def removeCategory(self, catid):
94 listing.removeCategory(catid)
97 def markAllAsRead(self, key):
98 feed = listing.getFeed(key)
101 @QtCore.Slot(str, str)
102 def setEntryRead(self, key, articleid):
103 feed = listing.getFeed(key)
104 feed.setEntryRead(articleid)
105 listing.updateUnread(key)
107 @QtCore.Slot(str, result=str)
108 def getConfig(self, item):
109 if (item == "hideReadFeed"):
111 if (item == "hideReadArticles"):
115 @QtCore.Slot(str, result=int)
116 def importOpml(self, filename):
117 from opml_lib import parseOpml
118 file = open(filename, "r")
119 feeds = parseOpml(file.read())
121 for (title, url) in feeds:
122 listing.addFeed(title, url)
125 @QtCore.Slot(str, result=str)
126 def exportOpml(self, filename="/home/user/MyDocs/feedingit-export.opml"):
127 logger.debug("ExportOpmlData: %s" % filename)
128 from opml_lib import getOpmlText
130 str = getOpmlText(listing)
131 file = open(filename, "w")
136 logger.debug("Error exporting: %s" % filename)
141 if not isdir(CONFIGDIR):
145 logger.error("Error: Can't create configuration directory")
149 from config import Config
151 config = Config(None,CONFIGDIR+"config.ini")
154 listing = Listing(config, CONFIGDIR)
159 from jobmanager import JobManager
162 app = QtGui.QApplication(sys.argv)
163 view = QtDeclarative.QDeclarativeView()
165 controller = Controller(listing)
167 rc = view.rootContext()
169 rc.setContextProperty('controller', controller)
171 # Comment the two lines below if you don't want to use OpenGL for QML rendering or if it is not supported
172 #glw = QtOpenGL.QGLWidget()
173 #view.setViewport(glw)
175 if os.path.exists('/usr/share/feedingit/qml'):
176 glw = QtOpenGL.QGLWidget()
177 view.setViewport(glw)
178 view.setSource('/usr/share/feedingit/qml/main.qml')
179 view.showFullScreen()
181 view.setSource(os.path.join('qml','main.qml'))
183 #view.setSource(os.path.join('qml','FeedingIt.qml'))
185 #view.showFullScreen()
187 sys.exit(app.exec_())
189 if __name__ == "__main__":