qml - Improving menu layout
[feedingit] / psa_harmattan / feedingit / pysrc / feedingit.py
1 #!/usr/bin/python
2
3 import sys
4
5 from PySide import QtGui
6 from PySide import QtDeclarative
7 import os
8 from os import mkdir, remove, stat, environ
9 from os.path import isfile, isdir, exists
10
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
13
14 from rss_sqlite import Listing
15 CONFIGDIR = environ.get("HOME", "/home/user") + "/.feedingit"
16 #CONFIGDIR = "/home/user/.feedingit"
17
18 import logging
19 #logger = logging.getLogger(__name__)
20
21 import debugging
22 debugging.init(dot_directory=".feedingit", program_name="feedingit-pyside")
23
24 from cgi import escape
25 from re import sub
26
27 class Controller(QtCore.QObject):
28     
29     def __init__(self, listing):
30         QtCore.QObject.__init__(self)
31         from XmlHandler import XmlHandler
32         self._handler = XmlHandler(listing)
33
34     @QtCore.Slot(str,str, result=str)
35     def getArticle(self, key, article):
36        feed = listing.getFeed(key)
37        try:
38           file = open(feed.getContentLink(article))
39           html = file.read().replace("body", "body bgcolor='#ffffff'", 1)
40           file.close()
41        except:
42           html = "<html><body>Error retrieving article</body></html>"
43        return html
44     
45     @QtCore.Slot(str, result=str)
46     def getFeedsXml(self, catid):
47         return self._handler.generateFeedsXml(catid)
48     
49     @QtCore.Slot(str,result=str)
50     def getArticlesXml(self, key):
51         #onlyUnread = arguments.get("onlyUnread","False")
52         return self._handler.generateArticlesXml(key, "False")
53     
54     @QtCore.Slot(result=str)
55     def getCategoryXml(self):
56         return self._handler.generateCategoryXml()
57     
58     @QtCore.Slot(QtCore.QObject)
59     def feedClicked(self, wrapper):
60         #print 'User clicked on:', wrapper._key
61         #articlesModel.updateModel(wrapper._key)
62         pass
63         
64     @QtCore.Slot(str)
65     def updateFeed(self, key):
66         listing.updateFeed(key)
67         
68     @QtCore.Slot()
69     def updateAll(self):
70         for feed in listing.getListOfFeeds("Manual"):
71             listing.updateFeed(feed)
72             
73     @QtCore.Slot(str,str,str)
74     def addFeed(self, title, url, catid):
75         listing.addFeed(title,url, category=catid)
76         
77     @QtCore.Slot(str)
78     def addCategory(self, name):
79         listing.addCategory(name)
80
81     @QtCore.Slot(str)
82     def markAllAsRead(self, key):
83         feed = listing.getFeed(key)
84         feed.markAllAsRead()
85
86     @QtCore.Slot(str, str)
87     def setEntryRead(self, key, articleid):
88         feed = listing.getFeed(key)
89         feed.setEntryRead(articleid)
90         listing.updateUnread(key)
91
92     @QtCore.Slot(str, result=str)
93     def getConfig(self, item):
94         if (item == "hideReadFeed"):
95             return "True"
96         if (item == "hideReadArticles"):
97             return "False"
98         return ""
99
100 def main():
101
102     if not isdir(CONFIGDIR):
103         try:
104             mkdir(CONFIGDIR)
105         except:
106             logger.error("Error: Can't create configuration directory")
107             from sys import exit
108             exit(1)
109             
110     from config import Config
111     global config
112     config = Config(None,CONFIGDIR+"config.ini")
113
114     global listing
115     listing = Listing(config, CONFIGDIR)
116     
117     import mainthread
118     mainthread.init()
119
120     from jobmanager import JobManager
121     JobManager(True)
122
123     app = QtGui.QApplication(sys.argv)
124     view = QtDeclarative.QDeclarativeView()
125
126     controller = Controller(listing)
127  
128     rc = view.rootContext()
129  
130     rc.setContextProperty('controller', controller)
131
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)
135
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()
141     else:
142         view.setSource(os.path.join('qml','main.qml'))
143         view.show()
144         #view.setSource(os.path.join('qml','FeedingIt.qml'))
145
146     #view.showFullScreen()
147     #view.show()
148     sys.exit(app.exec_())
149
150 if __name__ == "__main__":
151     
152     main()