psa: implemented settings
[feedingit] / psa_harmattan / feedingit / deb_dist / feedingit-0.1.0 / pysrc / feedingit.py
index 209c021..d2060e8 100644 (file)
@@ -7,6 +7,8 @@ from PySide import QtDeclarative
 import os
 from os import mkdir, remove, stat, environ
 from os.path import isfile, isdir, exists
+import codecs
+from gconf import client_get_default
 
 # 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
@@ -16,7 +18,7 @@ CONFIGDIR = environ.get("HOME", "/home/user") + "/.feedingit"
 #CONFIGDIR = "/home/user/.feedingit"
 
 import logging
-#logger = logging.getLogger(__name__)
+logger = logging.getLogger(__name__)
 
 import debugging
 debugging.init(dot_directory=".feedingit", program_name="feedingit-pyside")
@@ -35,11 +37,11 @@ class Controller(QtCore.QObject):
     def getArticle(self, key, article):
        feed = listing.getFeed(key)
        try:
-          file = open(feed.getContentLink(article))
+          file = codecs.open(feed.getContentLink(article), "r", "utf-8")
           html = file.read().replace("body", "body bgcolor='#ffffff'", 1)
           file.close()
        except:
-          html = "<html><body>Error retrieving article</body></html>"
+          html = u"<html><body>Error retrieving article</body></html>"
        return html
     
     @QtCore.Slot(str, result=str)
@@ -49,7 +51,7 @@ class Controller(QtCore.QObject):
     @QtCore.Slot(str,result=str)
     def getArticlesXml(self, key):
         #onlyUnread = arguments.get("onlyUnread","False")
-        return self._handler.generateArticlesXml(key, "False")
+        return self._handler.generateArticlesXml(key, config.getHideReadArticles())
     
     @QtCore.Slot(result=str)
     def getCategoryXml(self):
@@ -67,9 +69,15 @@ class Controller(QtCore.QObject):
         
     @QtCore.Slot()
     def updateAll(self):
-        for feed in listing.getSortedListOfKeys("Manual"):
-            listing.updateFeed(feed)
-            
+        for catid in listing.getListOfCategories():
+            for feed in listing.getSortedListOfKeys("Manual", category=catid):
+                listing.updateFeed(feed)
+
+    @QtCore.Slot(str)
+    def updateCategory(self, catid):
+        for feed in listing.getSortedListOfKeys("Manual", category=catid):
+            listing.updateFeed(feed)           
+
     @QtCore.Slot(str,str,str)
     def addFeed(self, title, url, catid):
         listing.addFeed(title,url, category=catid)
@@ -79,6 +87,14 @@ class Controller(QtCore.QObject):
         listing.addCategory(name)
 
     @QtCore.Slot(str)
+    def removeFeed(self, key):
+        listing.removeFeed(key)
+
+    @QtCore.Slot(str)
+    def removeCategory(self, catid):
+        listing.removeCategory(catid)
+
+    @QtCore.Slot(str)
     def markAllAsRead(self, key):
         feed = listing.getFeed(key)
         feed.markAllAsRead()
@@ -96,6 +112,63 @@ class Controller(QtCore.QObject):
         if (item == "hideReadArticles"):
             return "False"
         return ""
+    
+    @QtCore.Slot(str, str)
+    def populateFileDialog(self, path, type):
+        import glob
+        import os.path
+        for file in glob.glob(path+type):
+            logger.debug(file)
+            root.addFileNotification(file, os.path.basename(file))
+    
+    @QtCore.Slot(str, result=int)
+    def importOpml(self, filename):
+        from opml_lib import parseOpml
+        file = open(filename, "r")
+        feeds = parseOpml(file.read())
+        file.close()
+        for (title, url) in feeds:
+            listing.addFeed(title, url)
+        return len(feeds)
+    
+    @QtCore.Slot(str, result=str)
+    def exportOpml(self, filename="/home/user/MyDocs/feedingit-export.opml"):
+        logger.debug("ExportOpmlData: %s" % filename)
+        from opml_lib import getOpmlText
+        try:
+            str = getOpmlText(listing)
+            file = open(filename, "w")
+            file.write(str)
+            file.close()
+            return filename
+        except:
+            logger.debug("Error exporting: %s" % filename)
+            return "error"
+        
+    @QtCore.Slot(str, result=bool)
+    def getBooleanSetting(self, setting):
+        if (setting == "theme"):
+            return config.getTheme()
+        elif (setting == "imageCache" ):
+            return config.getImageCache()
+        elif (setting == "hideReadFeeds"):
+            return config.getHideReadFeeds()
+        elif (setting == "hideReadArticles"):
+            return config.getHideReadArticles()
+        else:
+            return 'True'
+        
+    @QtCore.Slot(str, bool)
+    def setBooleanSetting(self, setting, value):
+        if (setting == "theme"):
+            config.setTheme(value)
+        elif (setting == "imageCache" ):
+            config.setImageCache(value)
+        elif (setting == "hideReadFeeds"):
+            config.setHideReadFeeds(value)
+        elif (setting == "hideReadArticles"):
+            config.setHideReadArticles(value)
+        config.saveConfig()
 
 def main():
 
@@ -125,6 +198,7 @@ def main():
 
     controller = Controller(listing)
  
+    global root
     rc = view.rootContext()
  
     rc.setContextProperty('controller', controller)
@@ -142,6 +216,7 @@ def main():
         view.setSource(os.path.join('qml','main.qml'))
         view.show()
         #view.setSource(os.path.join('qml','FeedingIt.qml'))
+    root = view.rootObject()
 
     #view.showFullScreen()
     #view.show()