copying qml/Feeds.qml -> /scratchbox/users/ymarcoz/home/ymarcoz/workspace/feedingit/psa_harmattan/feedingit/deb_dist/feedingit-0.1.0/debian/feedingit/usr/share/feedingit/qml
copying qml/Articles.qml -> /scratchbox/users/ymarcoz/home/ymarcoz/workspace/feedingit/psa_harmattan/feedingit/deb_dist/feedingit-0.1.0/debian/feedingit/usr/share/feedingit/qml
copying qml/TestWebview.qml -> /scratchbox/users/ymarcoz/home/ymarcoz/workspace/feedingit/psa_harmattan/feedingit/deb_dist/feedingit-0.1.0/debian/feedingit/usr/share/feedingit/qml
+copying qml/SwitchSetting.qml -> /scratchbox/users/ymarcoz/home/ymarcoz/workspace/feedingit/psa_harmattan/feedingit/deb_dist/feedingit-0.1.0/debian/feedingit/usr/share/feedingit/qml
copying qml/FeedingIt.qml -> /scratchbox/users/ymarcoz/home/ymarcoz/workspace/feedingit/psa_harmattan/feedingit/deb_dist/feedingit-0.1.0/debian/feedingit/usr/share/feedingit/qml
copying qml/Categories.qml -> /scratchbox/users/ymarcoz/home/ymarcoz/workspace/feedingit/psa_harmattan/feedingit/deb_dist/feedingit-0.1.0/debian/feedingit/usr/share/feedingit/qml
copying qml/TextInputClear.qml -> /scratchbox/users/ymarcoz/home/ymarcoz/workspace/feedingit/psa_harmattan/feedingit/deb_dist/feedingit-0.1.0/debian/feedingit/usr/share/feedingit/qml
+copying qml/SettingsPage.qml -> /scratchbox/users/ymarcoz/home/ymarcoz/workspace/feedingit/psa_harmattan/feedingit/deb_dist/feedingit-0.1.0/debian/feedingit/usr/share/feedingit/qml
copying qml/ArticleViewer.qml -> /scratchbox/users/ymarcoz/home/ymarcoz/workspace/feedingit/psa_harmattan/feedingit/deb_dist/feedingit-0.1.0/debian/feedingit/usr/share/feedingit/qml
copying qml/MainPage.qml -> /scratchbox/users/ymarcoz/home/ymarcoz/workspace/feedingit/psa_harmattan/feedingit/deb_dist/feedingit-0.1.0/debian/feedingit/usr/share/feedingit/qml
copying qml/main.qml -> /scratchbox/users/ymarcoz/home/ymarcoz/workspace/feedingit/psa_harmattan/feedingit/deb_dist/feedingit-0.1.0/debian/feedingit/usr/share/feedingit/qml
copying qml/Settings.qml -> /scratchbox/users/ymarcoz/home/ymarcoz/workspace/feedingit/psa_harmattan/feedingit/deb_dist/feedingit-0.1.0/debian/feedingit/usr/share/feedingit/qml
copying qml/ArticleDisplay.qml -> /scratchbox/users/ymarcoz/home/ymarcoz/workspace/feedingit/psa_harmattan/feedingit/deb_dist/feedingit-0.1.0/debian/feedingit/usr/share/feedingit/qml
copying qml/AddFeed.qml -> /scratchbox/users/ymarcoz/home/ymarcoz/workspace/feedingit/psa_harmattan/feedingit/deb_dist/feedingit-0.1.0/debian/feedingit/usr/share/feedingit/qml
+copying qml/storage.js -> /scratchbox/users/ymarcoz/home/ymarcoz/workspace/feedingit/psa_harmattan/feedingit/deb_dist/feedingit-0.1.0/debian/feedingit/usr/share/feedingit/qml
copying qml/feedSearch.js -> /scratchbox/users/ymarcoz/home/ymarcoz/workspace/feedingit/psa_harmattan/feedingit/deb_dist/feedingit-0.1.0/debian/feedingit/usr/share/feedingit/qml
creating /scratchbox/users/ymarcoz/home/ymarcoz/workspace/feedingit/psa_harmattan/feedingit/deb_dist/feedingit-0.1.0/debian/feedingit/usr/share/feedingit/qml/common
copying qml/common/AddCat.qml -> /scratchbox/users/ymarcoz/home/ymarcoz/workspace/feedingit/psa_harmattan/feedingit/deb_dist/feedingit-0.1.0/debian/feedingit/usr/share/feedingit/qml/common
* source package automatically created by stdeb 0.6.0+git
- -- Yves <yves@marcoz.org> Tue, 15 Nov 2011 22:13:06 -0800
+ -- Yves <yves@marcoz.org> Mon, 21 Nov 2011 21:11:33 -0800
Version: 0.1.0-1
Architecture: all
Maintainer: Yves <yves@marcoz.org>
-Installed-Size: 772
+Installed-Size: 796
Depends: python-pyside.qtgui, python-pyside.qtopengl, python-pyside.qtdeclarative, python-dbus, python-gconf
Breaks: python (<< 2.6)
Section: user/development
4420c31f88de68fe6e1b7637abb06196 usr/bin/feedingit
6a42e9aebedfd157062bd5a9616dc935 usr/share/applications/feedingit.desktop
eda8cc6ffe8d842d6dfe0244b01b3042 usr/share/dbus-1/services/feedingit_status.service
-b0694ac13e871b46b2a598a20aea01f7 usr/share/doc/feedingit/changelog.Debian.gz
+5c7f442c0e8c3d7c05597d9684796864 usr/share/doc/feedingit/changelog.Debian.gz
bac2be6ae9673ee5096e20e8b714c9cd usr/share/feedingit/BeautifulSoup.py
8f6e980f2e1154103a90763be6c00dc4 usr/share/feedingit/XmlHandler.py
d41d8cd98f00b204e9800998ecf8427e usr/share/feedingit/__init__.py
-6b5296119ef6bc859c3e3a8706fa7f0d usr/share/feedingit/config.py
-9cf859c8297e4b0e8466cb5861eb75e7 usr/share/feedingit/debugging.py
+68a56a1175b749024474aa1df2ebf650 usr/share/feedingit/config.py
+b4b00de5dccaf56d81a9dab1eeac63e1 usr/share/feedingit/debugging.py
fae02e730b76761d43a626fe19828d5e usr/share/feedingit/download.py
-6227346488fba33c8222965dd3b23690 usr/share/feedingit/feedingit.py
+cc95b9d73b6905e9aa9f16c62bbb60c6 usr/share/feedingit/feedingit.py
afa4f462892136f59beaf96b6bf1cf96 usr/share/feedingit/feedparser.py
c1a0c0a9ccefd64d1e27bddb817c72a3 usr/share/feedingit/httpprogresshandler.py
f1e9ba0f44786f513659a7fa3111fc8a usr/share/feedingit/jobmanager.py
0201faa30d34c58d71f36ab42a7a8233 usr/share/feedingit/mainthread.py
d9c0665dfdd5cf19f1529ce88af95134 usr/share/feedingit/opml.py
-26c43c6f67a53f45078ecbd66d895ddd usr/share/feedingit/opml_lib.py
-38643cdd42bdb32d373eba77fb9cb355 usr/share/feedingit/qml/AddFeed.qml
+7c3358bb2e3cba866248e75556a159d3 usr/share/feedingit/opml_lib.py
+4ef0e77dd5685db3a51306fd7ccf585f usr/share/feedingit/qml/AddFeed.qml
af27062fdba0bc7a3df92116e8340d19 usr/share/feedingit/qml/ArticleDisplay.qml
-80858d581189fcf00ab1c6192be87e27 usr/share/feedingit/qml/ArticleViewer.qml
+9b095f75f329ce61bd4170b0037dc9c4 usr/share/feedingit/qml/ArticleViewer.qml
15083e9a1fac05c8efaaa085dfabcbcb usr/share/feedingit/qml/Articles.qml
8f480702a2107a8017fdd94226b9b7d4 usr/share/feedingit/qml/Categories.qml
cd30f5eaec0885358261d7a96bfaf8cd usr/share/feedingit/qml/FeedingIt.qml
-02784496485eb5547a1ad48c043bb2a9 usr/share/feedingit/qml/Feeds.qml
+3f5a5feca57160c2956a38579a325816 usr/share/feedingit/qml/Feeds.qml
bec5fe4599a3ad5799ed96d7ed81fb5f usr/share/feedingit/qml/MainPage.qml
-1c500d41d190f8f8c6d478fda117bb28 usr/share/feedingit/qml/Settings.qml
+54e67ad61b7d3cdf39fa532caaa73ed8 usr/share/feedingit/qml/Settings.qml
+e38d52fab962c2b3afb6d7e17a1f525a usr/share/feedingit/qml/SettingsPage.qml
+1ea79be910afd546622a21125d7828ff usr/share/feedingit/qml/SwitchSetting.qml
aa3fc0a4edbd17d93a9dc5c39c433c3d usr/share/feedingit/qml/TestWebview.qml
508fde19c7bb7bc4892bd6642fbcb7d3 usr/share/feedingit/qml/TextInputClear.qml
cef5ae4af926a759f4a233336c00f017 usr/share/feedingit/qml/common/AddCat.qml
1c7751b124aa1bdf4b89ec76cdf815a2 usr/share/feedingit/qml/i18n/FeedingIt.ts
7790a99425dd7c1046e6ae3b1ee72a03 usr/share/feedingit/qml/i18n/qml_en.qm
1674fcce45bcf3319e61d19a9adf4fdd usr/share/feedingit/qml/i18n/qml_en.ts
-82ce3a19141362b7c01968f69ccdaaff usr/share/feedingit/qml/main.qml
+2bbcf082ceb0e97171bab040e8fba0a2 usr/share/feedingit/qml/main.qml
+40606cd0365957b1607a2bf2cf3bc030 usr/share/feedingit/qml/storage.js
e3b4184531f29bbf86d812f9b8adacc2 usr/share/feedingit/rss_sqlite.py
721777a26cd2a5b8466ce2aa2b99fad7 usr/share/feedingit/update_feeds.py
6ccf12dc4379e91800ae8505b2e86082 usr/share/feedingit/updatedbus.py
self.config["feedsort"] = configParser.get(section, "feedsort")
except:
self.config["feedsort"] = "Manual"
+ try:
+ self.config["theme"] = configParser.get(section, "theme")
+ except:
+ self.config["theme"] = True
def saveConfig(self):
configParser = RawConfigParser()
configParser.set(section, 'hidereadarticles', str(self.config["hidereadarticles"]))
configParser.set(section, 'extBrowser', str(self.config["extBrowser"]))
configParser.set(section, 'feedsort', str(self.config["feedsort"]))
+ configParser.set(section, 'theme', str(self.config["theme"]))
# Writing our configuration file
file = open(self.configFilename, 'wb')
return self.config["artFontSize"]
def getExpiry(self):
return self.config["expiry"]
+ def setExpiry(self, expiry):
+ self.config["expiry"] = expiry
def isAutoUpdateEnabled(self):
return self.config["autoupdate"]
def getUpdateInterval(self):
return "sans italic %s" % self.config["fontSize"]
def getUnreadFont(self):
return "sans %s" % self.config["fontSize"]
- def getOrientation(self):
+ def getOrientation(self, index):
return ranges["orientation"].index(self.config["orientation"])
+ def getOrientationChoices(self):
+ return ranges["orientation"]
+ def setOrientation(self, choice):
+ self.config["orientation"] = index
def getImageCache(self):
return self.config["imageCache"]
+ def setImageCache(self, cache):
+ self.config["imageCache"] = bool(cache)
@mainthread
def getProxy(self):
if self.config["proxy"] == False:
return (False, None)
def getHideReadFeeds(self):
return self.config["hidereadfeeds"]
+ def setHideReadFeeds(self, setting):
+ self.config["hidereadfeeds"] = bool(setting)
def getHideReadArticles(self):
return self.config["hidereadarticles"]
+ def setHideReadArticles(self, setting):
+ self.config["hidereadarticles"] = bool(setting)
def getOpenInExternalBrowser(self):
return self.config["extBrowser"]
def getFeedSortOrder(self):
return self.config["feedsort"]
+ def getFeedSortOrderChoices(self):
+ return ranges["feedsort"]
+ def setFeedSortOrder(self, setting):
+ self.config["feedsort"] = setting
+ def getTheme(self):
+ return self.config["theme"]
+ def setTheme(self, theme):
+ self.config["theme"] = bool(theme)
% (''.join(traceback.format_exception(exctype, value, tb)),))
original_excepthook(exctype, value, tb)
-def init(dot_directory, debug=False, max_logfiles=1, program_name=None):
+def init(dot_directory, debug=True, max_logfiles=1, program_name=None):
if not os.path.isabs(dot_directory):
dot_directory = os.path.join(os.path.expanduser("~"), dot_directory)
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
#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")
@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):
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
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():
controller = Controller(listing)
+ global root
rc = view.rootContext()
rc.setContextProperty('controller', controller)
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()
Item {
width: articleViewer.width; height: backRect.height + 3
id: listItem
+
Rectangle {
id: backRect; color: settings.backColour; opacity: index % 2 ? 0.2 : 0.4;
height: articleText.height + 22; width: listItem.width;
//Component.onCompleted: console.log("item:"+feedid + " "+ visible + " "+ height + " " + width)
id: wrapper;
//width: wrapper.ListView.view.width;
- visible: (unread == "0" && feedsItem.hideReadFeeds=="True") ? false : true
+ visible: (unread == "0" && settings.hideReadFeeds) ? false : true
//visible: true
height: (visible) ? 86 : 0
width: parent.width
import QtQuick 1.0
import com.nokia.meego 1.0
-import com.nokia.extras 1.0
PageStackWindow {
id: window
signal longPressFeed(string key)
signal categoryReloadRequest()
signal feedReloadRequest()
+ signal addFileSignal(string fullname, string filename)
+
property string feedid
property string catid
- Component.onCompleted: theme.inverted= true
+ function addFileNotification(fullname, filename) {
+ window.addFileSignal(fullname,filename)
+ }
onLongPressFeed: {
unsubscribeFeedMenu.key = key
id: myMenu
visualParent: pageStack
MenuLayout {
- MenuItem { text: qsTr("Settings"); onClicked: {} }
- MenuItem { text: qsTr("Export Feeds"); onClicked: { var file=controller.exportOpml(); banner.text=qsTr("Feeds exported as "+file); banner.open() } }
- MenuItem { text: qsTr("Invert Theme"); onClicked: { theme.inverted = !theme.inverted } }
- MenuItem { text: qsTr("Add Feeds"); onClicked: { pageStack.push(addFeedPage) } }
+ MenuItem { text: qsTr("Settings"); onClicked: {pageStack.push(settingsPage)} }
+ MenuItem { text: qsTr("Manage Subscriptions"); onClicked: { pageStack.push(addFeedPage) } }
MenuItem { text: qsTr("Update All Categories"); onClicked: controller.updateAll(); }
MenuItem { text: qsTr("About FeedingIt"); onClicked: query.open(); }
}
Component {
id: addFeedPage
- AddFeed {}
+ AddFeed {
+ id: addFeedItem
+
+ Connections {
+ target: window
+ onAddFileSignal: addFeedItem.addFileToDialog(fullname, filename)
+ }
+ }
+ }
+
+ Component {
+ id: settingsPage
+ SettingsPage {
+ id: settingsItem
+ tools: commonTools
+ }
}
Settings {
id: settings
}
- InfoBanner {
+ Rectangle {
id: banner
+ x: 10
+ width: parent.width - 20
+ height: bannerText.height + 20
+ y: 50
+ z:8
+
+ visible: false
+ radius: 4
+ border.color: "white"
+ color: "black"
+
+ Text {
+ id: bannerText
+ anchors.centerIn: parent
+ font.pixelSize: 24
+ //text: "Test"
+ color: "white"
+ wrapMode: Text.WordWrap;
+ }
+
+ Timer {
+ id: bannerTimer
+ interval: 3000
+ repeat: false
+ running: false
+ onTriggered: banner.visible = false
+ }
+
+ function show(str) {
+ bannerText.text = str;
+ banner.visible = true
+ bannerTimer.start()
+ }
+
+ MouseArea {
+ anchors.fill: parent
+ onClicked: {
+ bannerTimer.stop()
+ banner.visible= false
+ }
+ }
+
//text: "This is an info banner with no icon"
}
}
#!/usr/bin/make -f
# This file was automatically generated by stdeb 0.6.0+git at
-# Tue, 15 Nov 2011 22:13:06 -0800
+# Mon, 21 Nov 2011 21:11:33 -0800
%:
dh $@ --with python2 --buildsystem=python_distutils
self.config["feedsort"] = configParser.get(section, "feedsort")
except:
self.config["feedsort"] = "Manual"
+ try:
+ self.config["theme"] = configParser.get(section, "theme")
+ except:
+ self.config["theme"] = True
def saveConfig(self):
configParser = RawConfigParser()
configParser.set(section, 'hidereadarticles', str(self.config["hidereadarticles"]))
configParser.set(section, 'extBrowser', str(self.config["extBrowser"]))
configParser.set(section, 'feedsort', str(self.config["feedsort"]))
+ configParser.set(section, 'theme', str(self.config["theme"]))
# Writing our configuration file
file = open(self.configFilename, 'wb')
return self.config["artFontSize"]
def getExpiry(self):
return self.config["expiry"]
+ def setExpiry(self, expiry):
+ self.config["expiry"] = expiry
def isAutoUpdateEnabled(self):
return self.config["autoupdate"]
def getUpdateInterval(self):
return "sans italic %s" % self.config["fontSize"]
def getUnreadFont(self):
return "sans %s" % self.config["fontSize"]
- def getOrientation(self):
+ def getOrientation(self, index):
return ranges["orientation"].index(self.config["orientation"])
+ def getOrientationChoices(self):
+ return ranges["orientation"]
+ def setOrientation(self, choice):
+ self.config["orientation"] = index
def getImageCache(self):
return self.config["imageCache"]
+ def setImageCache(self, cache):
+ self.config["imageCache"] = bool(cache)
@mainthread
def getProxy(self):
if self.config["proxy"] == False:
return (False, None)
def getHideReadFeeds(self):
return self.config["hidereadfeeds"]
+ def setHideReadFeeds(self, setting):
+ self.config["hidereadfeeds"] = bool(setting)
def getHideReadArticles(self):
return self.config["hidereadarticles"]
+ def setHideReadArticles(self, setting):
+ self.config["hidereadarticles"] = bool(setting)
def getOpenInExternalBrowser(self):
return self.config["extBrowser"]
def getFeedSortOrder(self):
return self.config["feedsort"]
+ def getFeedSortOrderChoices(self):
+ return ranges["feedsort"]
+ def setFeedSortOrder(self, setting):
+ self.config["feedsort"] = setting
+ def getTheme(self):
+ return self.config["theme"]
+ def setTheme(self, theme):
+ self.config["theme"] = bool(theme)
% (''.join(traceback.format_exception(exctype, value, tb)),))
original_excepthook(exctype, value, tb)
-def init(dot_directory, debug=False, max_logfiles=1, program_name=None):
+def init(dot_directory, debug=True, max_logfiles=1, program_name=None):
if not os.path.isabs(dot_directory):
dot_directory = os.path.join(os.path.expanduser("~"), dot_directory)
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
#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")
@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):
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
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():
controller = Controller(listing)
+ global root
rc = view.rootContext()
rc.setContextProperty('controller', controller)
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()
Item {
width: articleViewer.width; height: backRect.height + 3
id: listItem
+
Rectangle {
id: backRect; color: settings.backColour; opacity: index % 2 ? 0.2 : 0.4;
height: articleText.height + 22; width: listItem.width;
//Component.onCompleted: console.log("item:"+feedid + " "+ visible + " "+ height + " " + width)
id: wrapper;
//width: wrapper.ListView.view.width;
- visible: (unread == "0" && feedsItem.hideReadFeeds=="True") ? false : true
+ visible: (unread == "0" && settings.hideReadFeeds) ? false : true
//visible: true
height: (visible) ? 86 : 0
width: parent.width
import QtQuick 1.0
import com.nokia.meego 1.0
-import com.nokia.extras 1.0
PageStackWindow {
id: window
signal longPressFeed(string key)
signal categoryReloadRequest()
signal feedReloadRequest()
+ signal addFileSignal(string fullname, string filename)
+
property string feedid
property string catid
- Component.onCompleted: theme.inverted= true
+ function addFileNotification(fullname, filename) {
+ window.addFileSignal(fullname,filename)
+ }
onLongPressFeed: {
unsubscribeFeedMenu.key = key
id: myMenu
visualParent: pageStack
MenuLayout {
- MenuItem { text: qsTr("Settings"); onClicked: {} }
- MenuItem { text: qsTr("Export Feeds"); onClicked: { var file=controller.exportOpml(); banner.text=qsTr("Feeds exported as "+file); banner.open() } }
- MenuItem { text: qsTr("Invert Theme"); onClicked: { theme.inverted = !theme.inverted } }
- MenuItem { text: qsTr("Add Feeds"); onClicked: { pageStack.push(addFeedPage) } }
+ MenuItem { text: qsTr("Settings"); onClicked: {pageStack.push(settingsPage)} }
+ MenuItem { text: qsTr("Manage Subscriptions"); onClicked: { pageStack.push(addFeedPage) } }
MenuItem { text: qsTr("Update All Categories"); onClicked: controller.updateAll(); }
MenuItem { text: qsTr("About FeedingIt"); onClicked: query.open(); }
}
Component {
id: addFeedPage
- AddFeed {}
+ AddFeed {
+ id: addFeedItem
+
+ Connections {
+ target: window
+ onAddFileSignal: addFeedItem.addFileToDialog(fullname, filename)
+ }
+ }
+ }
+
+ Component {
+ id: settingsPage
+ SettingsPage {
+ id: settingsItem
+ tools: commonTools
+ }
}
Settings {
id: settings
}
- InfoBanner {
+ Rectangle {
id: banner
+ x: 10
+ width: parent.width - 20
+ height: bannerText.height + 20
+ y: 50
+ z:8
+
+ visible: false
+ radius: 4
+ border.color: "white"
+ color: "black"
+
+ Text {
+ id: bannerText
+ anchors.centerIn: parent
+ font.pixelSize: 24
+ //text: "Test"
+ color: "white"
+ wrapMode: Text.WordWrap;
+ }
+
+ Timer {
+ id: bannerTimer
+ interval: 3000
+ repeat: false
+ running: false
+ onTriggered: banner.visible = false
+ }
+
+ function show(str) {
+ bannerText.text = str;
+ banner.visible = true
+ bannerTimer.start()
+ }
+
+ MouseArea {
+ anchors.fill: parent
+ onClicked: {
+ bannerTimer.stop()
+ banner.visible= false
+ }
+ }
+
//text: "This is an info banner with no icon"
}
}
Standards-Version: 3.9.1
Build-Depends: python-all (>= 2.6.6-3), debhelper (>= 7.4.3)
Checksums-Sha1:
- c045507274a13c3bea0e1cb6006fea9004ba30b7 178550 feedingit_0.1.0.orig.tar.gz
- a09869b196b8514cf6431eb04ddd98e6e9dd1c39 894 feedingit_0.1.0-1.debian.tar.gz
+ e4330c217f401270d8d72ce61b19738e9bfd2088 181121 feedingit_0.1.0.orig.tar.gz
+ 03bbd591b1f8061782cad693c74bd8998d90873d 892 feedingit_0.1.0-1.debian.tar.gz
Checksums-Sha256:
- 92ba00c80c8450eaaae39346abb2a442b5e1714bc396cf7a7267c0b00e74c9df 178550 feedingit_0.1.0.orig.tar.gz
- 2644b6342aa0f4e8e2c9e1a98d3402b446b50ab4f4b85cecd4a14d557854636c 894 feedingit_0.1.0-1.debian.tar.gz
+ e0976e4078949e8f90fb5595ad2e0beac46d6ffdd7777540cdfcf6aabc912c0a 181121 feedingit_0.1.0.orig.tar.gz
+ 7d0569d259111ec8c692a85684605d19f7ace917d3a602b47a6e3925811ff731 892 feedingit_0.1.0-1.debian.tar.gz
Files:
- 25f89c7eed2efea44ebc3a15bafd7d8f 178550 feedingit_0.1.0.orig.tar.gz
- 1d29f8a2b74b889cec7df9d63e96bfc8 894 feedingit_0.1.0-1.debian.tar.gz
+ a87f884427e09496169d8d45661888e6 181121 feedingit_0.1.0.orig.tar.gz
+ b7c8797b89ea548c7d22ac74a9552e5b 892 feedingit_0.1.0-1.debian.tar.gz
Format: 1.8
-Date: Tue, 15 Nov 2011 22:13:06 -0800
+Date: Mon, 21 Nov 2011 21:11:33 -0800
Source: feedingit
Binary: feedingit
Architecture: source all
.
* source package automatically created by stdeb 0.6.0+git
Checksums-Sha1:
- a71a6948e1e975888c79be71ca6248b09f7db08e 753 feedingit_0.1.0-1.dsc
- c045507274a13c3bea0e1cb6006fea9004ba30b7 178550 feedingit_0.1.0.orig.tar.gz
- a09869b196b8514cf6431eb04ddd98e6e9dd1c39 894 feedingit_0.1.0-1.debian.tar.gz
- 3dc207cf3b6b6db9193d230ac67d864c1aa09aef 168136 feedingit_0.1.0-1_all.deb
+ 4a31204eed5ce466fd01cfbb01421f33e678374f 753 feedingit_0.1.0-1.dsc
+ e4330c217f401270d8d72ce61b19738e9bfd2088 181121 feedingit_0.1.0.orig.tar.gz
+ 03bbd591b1f8061782cad693c74bd8998d90873d 892 feedingit_0.1.0-1.debian.tar.gz
+ 57723377cfd1516d9747e2b49f2e46fb29dcb998 171812 feedingit_0.1.0-1_all.deb
Checksums-Sha256:
- 96d4c7e6525bd5547946f9cf8f7b182d759d34c3d33523955aca28b8583d773c 753 feedingit_0.1.0-1.dsc
- 92ba00c80c8450eaaae39346abb2a442b5e1714bc396cf7a7267c0b00e74c9df 178550 feedingit_0.1.0.orig.tar.gz
- 2644b6342aa0f4e8e2c9e1a98d3402b446b50ab4f4b85cecd4a14d557854636c 894 feedingit_0.1.0-1.debian.tar.gz
- dca845bc6ce162cc9a22dc965a3a60cb182d1135167fbebfa9836a0f869e9ab3 168136 feedingit_0.1.0-1_all.deb
+ e99828280e4a7a5fe3ac36d30943be2197cd9e56f1c83c24b8f6118179d6158d 753 feedingit_0.1.0-1.dsc
+ e0976e4078949e8f90fb5595ad2e0beac46d6ffdd7777540cdfcf6aabc912c0a 181121 feedingit_0.1.0.orig.tar.gz
+ 7d0569d259111ec8c692a85684605d19f7ace917d3a602b47a6e3925811ff731 892 feedingit_0.1.0-1.debian.tar.gz
+ 3b8879e509aca560d19cb147c6f13140b6630980d30b4c50ed5708277f500b54 171812 feedingit_0.1.0-1_all.deb
Files:
- 51acff2d37b5d47ce0c7141e228d9084 753 user/development optional feedingit_0.1.0-1.dsc
- 25f89c7eed2efea44ebc3a15bafd7d8f 178550 user/development optional feedingit_0.1.0.orig.tar.gz
- 1d29f8a2b74b889cec7df9d63e96bfc8 894 user/development optional feedingit_0.1.0-1.debian.tar.gz
- 2b3f1acb38b76d65e916f1fbe6baa208 168136 user/development optional feedingit_0.1.0-1_all.deb
+ 8fccb57ce60335a7c8a8a85eb4f4ecb6 753 user/development optional feedingit_0.1.0-1.dsc
+ a87f884427e09496169d8d45661888e6 181121 user/development optional feedingit_0.1.0.orig.tar.gz
+ b7c8797b89ea548c7d22ac74a9552e5b 892 user/development optional feedingit_0.1.0-1.debian.tar.gz
+ f4162b7fec29248b13fc683a1b0c06b0 171812 user/development optional feedingit_0.1.0-1_all.deb
self.config["feedsort"] = configParser.get(section, "feedsort")
except:
self.config["feedsort"] = "Manual"
+ try:
+ self.config["theme"] = configParser.get(section, "theme")
+ except:
+ self.config["theme"] = True
def saveConfig(self):
configParser = RawConfigParser()
configParser.set(section, 'hidereadarticles', str(self.config["hidereadarticles"]))
configParser.set(section, 'extBrowser', str(self.config["extBrowser"]))
configParser.set(section, 'feedsort', str(self.config["feedsort"]))
+ configParser.set(section, 'theme', str(self.config["theme"]))
# Writing our configuration file
file = open(self.configFilename, 'wb')
return self.config["artFontSize"]
def getExpiry(self):
return self.config["expiry"]
+ def setExpiry(self, expiry):
+ self.config["expiry"] = expiry
def isAutoUpdateEnabled(self):
return self.config["autoupdate"]
def getUpdateInterval(self):
return "sans italic %s" % self.config["fontSize"]
def getUnreadFont(self):
return "sans %s" % self.config["fontSize"]
- def getOrientation(self):
+ def getOrientation(self, index):
return ranges["orientation"].index(self.config["orientation"])
+ def getOrientationChoices(self):
+ return ranges["orientation"]
+ def setOrientation(self, choice):
+ self.config["orientation"] = index
def getImageCache(self):
return self.config["imageCache"]
+ def setImageCache(self, cache):
+ self.config["imageCache"] = bool(cache)
@mainthread
def getProxy(self):
if self.config["proxy"] == False:
return (False, None)
def getHideReadFeeds(self):
return self.config["hidereadfeeds"]
+ def setHideReadFeeds(self, setting):
+ self.config["hidereadfeeds"] = bool(setting)
def getHideReadArticles(self):
return self.config["hidereadarticles"]
+ def setHideReadArticles(self, setting):
+ self.config["hidereadarticles"] = bool(setting)
def getOpenInExternalBrowser(self):
return self.config["extBrowser"]
def getFeedSortOrder(self):
return self.config["feedsort"]
+ def getFeedSortOrderChoices(self):
+ return ranges["feedsort"]
+ def setFeedSortOrder(self, setting):
+ self.config["feedsort"] = setting
+ def getTheme(self):
+ return self.config["theme"]
+ def setTheme(self, theme):
+ self.config["theme"] = bool(theme)
% (''.join(traceback.format_exception(exctype, value, tb)),))
original_excepthook(exctype, value, tb)
-def init(dot_directory, debug=False, max_logfiles=1, program_name=None):
+def init(dot_directory, debug=True, max_logfiles=1, program_name=None):
if not os.path.isabs(dot_directory):
dot_directory = os.path.join(os.path.expanduser("~"), dot_directory)
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
#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")
@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):
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
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():
controller = Controller(listing)
+ global root
rc = view.rootContext()
rc.setContextProperty('controller', controller)
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()
anchors.margins: UiConstants.DefaultMargin
anchors.fill: parent
+ function addFileToDialog(fullname, filename) {
+ fileDialog.model.append({name: filename,
+ fullname: fullname})
+ }
+
TabGroup {
id: tabGroup
anchors.fill: parent
Column {
spacing: 10
+ width: parent.width
Text {
id: searchText
font.pixelSize: 22
color: "white"
- text: "Search for feeds"
+ text: qsTr("Add a feed by URL, or search by keyword")
}
TextInputClear {
id: searchInput
- placeHolder: "Enter a search term"
+ placeHolder: qsTr("Enter a URL or keywords")
}
Button {
id: searchButton
text: "Search"
- onClicked: FeedJS.keywordSearch(searchInput.text)
+ onClicked: {
+ var key = searchInput.text
+ if (key.substring(0, 4) === "http") {
+ categoryDialog.confirmCategory("", urlInput.text);
+ } else {
+ FeedJS.keywordSearch(searchInput.text)
+ }
+ }
}
}
SelectionDialog {
id: searchDialog
- titleText: "Select feed:"
+ titleText: qsTr("Select feed:")
//model: []
onSelectedIndexChanged: {
if (selectedIndex>=0) {
} //searchTab
Item {
- id: urlTab
-
- Column {
- Text {
- id: urlText
- font.pixelSize: 22
- color: "white"
- text: "Enter the feed URL"
- }
-
- TextInputClear {
- id: urlInput
- placeHolder: "Feed URL"
- width: parent.width
- }
-
- Button {
- id: urlButton
- text: "Add"
- onClicked: {
- console.log("Adding "+urlInput.text)
- //controller.addFeed("",urlInput.text,1);
- categoryDialog.confirmCategory("", urlInput.text);
- }
- width: 150
- }
- }
-
- } //urlTab
-
- Item {
- id: opmlTab
-
- Column {
- Text {
- id: opmlText
- font.pixelSize: 22
- color: "white"
- text: "Enter the OPML filename in MyDocs folder"
- }
-
- TextInputClear {
- id: opmlInput
- placeHolder: "OPML filename"
- width: parent.width
- }
-
- Button {
- id: opmlButton
- text: "Import"
- onClicked: {
- console.log("Importing "+opmlInput.text)
- //controller.addFeed("",urlInput.text,1);
- var num = controller.importOpml(opmlInput.text)
- banner.text=qsTr("Successfully imported "+num+" feeds.")
- banner.open()
- }
- width: 150
- }
- }
-
- } //opmlTab
-
- Item {
id: categoryTab
+ anchors.fill: parent
Column {
+ width: parent.width
+ spacing: 10
Text {
id: categoryText
font.pixelSize: 22
Button {
id: categoryButton
- text: "Add"
+ text: "Add Category"
onClicked: {
if (categoryInput.text != "") {
controller.addCategory(categoryInput.text)
window.categoryReloadRequest()
}
}
- width: 150
+ //width: 150
}
}
tab: searchTab
}
TabButton {
- text: "URL"
- tab: urlTab
- }
- TabButton {
- text: "Import"
- tab: opmlTab
- }
- TabButton {
text: "Categories"
tab: categoryTab
}
}
+ ToolIcon {
+ platformIconId: "toolbar-view-menu"
+ anchors.right: (parent === undefined) ? undefined : parent.right
+ onClicked: (manageFeedsMenu.status == DialogStatus.Closed) ? manageFeedsMenu.open() : manageFeedsMenu.close()
+ }
+ }
+ }
+
+ Menu {
+ id: manageFeedsMenu
+ visualParent: pageStack
+ MenuLayout {
+ MenuItem { text: qsTr("Import Feeds From File"); onClicked: {
+ fileDialog.model.clear()
+ controller.populateFileDialog("/home/user/MyDocs/","*.*ml")
+ fileDialog.open()
+ } }
+ MenuItem {
+ text: qsTr("Export Feeds");
+ onClicked: { var file=controller.exportOpml("/home/user/MyDocs/feedingit-export.opml"); banner.show(qsTr("Feeds exported as %1").arg(file)) }
+ }
}
}
SelectionDialog {
id: categoryDialog
- titleText: "Select category:"
+ titleText: qsTr("Select category:")
property string feedTitle
property string feedUrl
categoryDialog.selectedIndex = -1;
}
}
+
+ SelectionDialog {
+ id: fileDialog
+ titleText: qsTr("Select a file to import")
+ model: ListModel {
+ id: fileList
+ }
+
+ onSelectedIndexChanged: {
+ var num = controller.importOpml(fileDialog.model.get(fileDialog.selectedIndex).fullname);
+ console.log("Import "+fileDialog.model.get(fileDialog.selectedIndex).fullname)
+ banner.show(qsTr("Successfully imported %1 feeds.").args(num));
+ }
+ }
}
Item {
width: articleViewer.width; height: backRect.height + 3
id: listItem
+
Rectangle {
id: backRect; color: settings.backColour; opacity: index % 2 ? 0.2 : 0.4;
height: articleText.height + 22; width: listItem.width;
--- /dev/null
+import QtQuick 1.0
+import QtMobility.systeminfo 1.2
+
+AlignedTimer {
+ id: heartbeat
+ maximumInterval: 15
+ minimumInterval: 5
+ onTimeout: {
+ var timestamp = Qt.formatDateTime(new Date(), "hh:mm:ss") + qsTr(" - heartbeat!")
+ console.log(timestamp)
+ prevLabel.text = lastLabel.text
+ lastLabel.text = timestamp
+ }
+}
//Component.onCompleted: console.log("item:"+feedid + " "+ visible + " "+ height + " " + width)
id: wrapper;
//width: wrapper.ListView.view.width;
- visible: (unread == "0" && feedsItem.hideReadFeeds=="True") ? false : true
+ visible: (unread == "0" && settings.hideReadFeeds) ? false : true
//visible: true
height: (visible) ? 86 : 0
width: parent.width
property int secondaryTextSize: 14
property string backColour: theme.inverted? "#dddddd" : "#222222"
+
+ property bool hideReadFeeds: controller.getBooleanSetting("hideReadFeeds")
+ property bool hideReadArticles: controller.getBooleanSetting("hideReadArticles")
+
+ Component.onCompleted: {
+ theme.inverted = controller.getBooleanSetting("theme")
+ }
}
--- /dev/null
+import QtQuick 1.0
+import com.nokia.meego 1.0
+
+Page {
+ id: settingsPage
+ anchors.margins: UiConstants.DefaultMargin
+ anchors.fill: parent
+
+ Column {
+ width: parent.width
+
+ SwitchSetting {
+ text: qsTr("Use Dark Theme")
+ checked: controller.getBooleanSetting("theme")
+
+ onSwitched: {
+ controller.setBooleanSetting("theme", checked)
+ theme.inverted = checked
+ }
+ }
+
+ SwitchSetting {
+ text: qsTr("Hide Read Feeds")
+ checked: controller.getBooleanSetting("hideReadFeeds")
+
+ onSwitched: {
+ controller.setBooleanSetting("hideReadFeeds", checked)
+ settings.hideReadFeeds = checked
+ }
+ }
+
+ SwitchSetting {
+ text: qsTr("Hide Read Articles")
+ checked: controller.getBooleanSetting("hideReadArticles")
+
+ onSwitched: {
+ controller.setBooleanSetting("hideReadArticles", checked)
+ settings.hideReadArticles = checked
+ }
+ }
+
+ SwitchSetting {
+ text: qsTr("Cache Images")
+ checked: controller.getBooleanSetting("imageCache")
+
+ onSwitched: {
+ controller.setBooleanSetting("imageCache", checked)
+ }
+ }
+ }
+
+}
--- /dev/null
+import QtQuick 1.0
+import com.nokia.meego 1.0
+
+Row {
+ width: parent.width
+ property alias text: themeText.text
+ property alias checked: themeSwitch.checked
+ signal switched()
+
+ Text {
+ id: themeText
+ color: settings.mainTextColour;
+ font.pointSize: settings.mainTextSize
+ width: parent.width - themeSwitch.width
+ }
+
+ Switch {
+ id: themeSwitch
+
+ onCheckedChanged: {
+ switched()
+ //theme.inverted = checked
+ }
+ }
+}
import QtQuick 1.0
import com.nokia.meego 1.0
-import com.nokia.extras 1.0
PageStackWindow {
id: window
signal longPressFeed(string key)
signal categoryReloadRequest()
signal feedReloadRequest()
+ signal addFileSignal(string fullname, string filename)
+
property string feedid
property string catid
- Component.onCompleted: theme.inverted= true
+ function addFileNotification(fullname, filename) {
+ window.addFileSignal(fullname,filename)
+ }
onLongPressFeed: {
unsubscribeFeedMenu.key = key
id: myMenu
visualParent: pageStack
MenuLayout {
- MenuItem { text: qsTr("Settings"); onClicked: {} }
- MenuItem { text: qsTr("Export Feeds"); onClicked: { var file=controller.exportOpml(); banner.text=qsTr("Feeds exported as "+file); banner.open() } }
- MenuItem { text: qsTr("Invert Theme"); onClicked: { theme.inverted = !theme.inverted } }
- MenuItem { text: qsTr("Add Feeds"); onClicked: { pageStack.push(addFeedPage) } }
+ MenuItem { text: qsTr("Settings"); onClicked: {pageStack.push(settingsPage)} }
+ MenuItem { text: qsTr("Manage Subscriptions"); onClicked: { pageStack.push(addFeedPage) } }
MenuItem { text: qsTr("Update All Categories"); onClicked: controller.updateAll(); }
MenuItem { text: qsTr("About FeedingIt"); onClicked: query.open(); }
}
Component {
id: addFeedPage
- AddFeed {}
+ AddFeed {
+ id: addFeedItem
+
+ Connections {
+ target: window
+ onAddFileSignal: addFeedItem.addFileToDialog(fullname, filename)
+ }
+ }
+ }
+
+ Component {
+ id: settingsPage
+ SettingsPage {
+ id: settingsItem
+ tools: commonTools
+ }
}
Settings {
id: settings
}
- InfoBanner {
+ Rectangle {
id: banner
+ x: 10
+ width: parent.width - 20
+ height: bannerText.height + 20
+ y: 50
+ z:8
+
+ visible: false
+ radius: 4
+ border.color: "white"
+ color: "black"
+
+ Text {
+ id: bannerText
+ anchors.centerIn: parent
+ font.pixelSize: 24
+ //text: "Test"
+ color: "white"
+ wrapMode: Text.WordWrap;
+ }
+
+ Timer {
+ id: bannerTimer
+ interval: 3000
+ repeat: false
+ running: false
+ onTriggered: banner.visible = false
+ }
+
+ function show(str) {
+ bannerText.text = str;
+ banner.visible = true
+ bannerTimer.start()
+ }
+
+ MouseArea {
+ anchors.fill: parent
+ onClicked: {
+ bannerTimer.stop()
+ banner.visible= false
+ }
+ }
+
//text: "This is an info banner with no icon"
}
}