conduit r1842 - in trunk: . conduit/modules conduit/modules/FeedModule



Author: jstowers
Date: Wed Jan 28 13:22:40 2009
New Revision: 1842
URL: http://svn.gnome.org/viewvc/conduit?rev=1842&view=rev

Log:
2009-01-29  John Stowers  <john stowers gmail com>

	* conduit/modules/FeedModule/FeedModule.py:
	* conduit/modules/FeedModule/config.glade:
	Feedmodule can now choose n random enclosures from
	a feed.

	* NEWS:
	* conduit/modules/Makefile.am:
	* conduit/modules/DesktopWallpaperModule.py:
	Add a new dataprovider that changes the desktop
	wallpaper. Connect to a flickr rss feed to see an
	example of it in use.



Added:
   trunk/conduit/modules/DesktopWallpaperModule.py
Modified:
   trunk/ChangeLog
   trunk/NEWS
   trunk/conduit/modules/FeedModule/FeedModule.py
   trunk/conduit/modules/FeedModule/config.glade
   trunk/conduit/modules/Makefile.am

Modified: trunk/NEWS
==============================================================================
--- trunk/NEWS	(original)
+++ trunk/NEWS	Wed Jan 28 13:22:40 2009
@@ -3,6 +3,7 @@
 * Support Firefox3 Bookmarks
 * Support Google Bookmarks
 * Support Nautilus Bookmarks
+* Add dataprovider for changing desktop wallpaper
 
 NEW in 0.3.15:
 ==============

Added: trunk/conduit/modules/DesktopWallpaperModule.py
==============================================================================
--- (empty file)
+++ trunk/conduit/modules/DesktopWallpaperModule.py	Wed Jan 28 13:22:40 2009
@@ -0,0 +1,65 @@
+import logging
+log = logging.getLogger( "modules.DesktopWallpaper")
+
+import gconf
+import conduit
+import conduit.utils as Utils
+import conduit.dataproviders.File as FileDataProvider
+import conduit.dataproviders.DataProvider as DataProvider
+
+MODULES = {
+    "DesktopWallpaperDataProvider" : { "type": "dataprovider" }
+}
+
+class DesktopWallpaperDataProvider(FileDataProvider.FolderTwoWay):
+
+    _name_ = "Desktop Wallpaper"
+    _description_ = "Changes your Desktop Wallpaper"
+    _category_ = conduit.dataproviders.CATEGORY_MISC
+    _module_type_ = "sink"
+    _in_type_ = "file"
+    _out_type_ = "file"
+    _icon_ = "preferences-desktop-theme"
+    _configurable_ = False
+
+    def __init__(self, *args):
+        #Put photos into the users Pictures dir
+        pdir = Utils.exec_command_and_return_result("xdg-user-dir", "PICTURES")
+        if 1:
+            folder = "file://"+pdir.strip()
+        else:
+            folder = "file://"+Utils.new_tempdir()
+
+        log.info("Storing pictures in %s" % folder)
+
+        FileDataProvider.FolderTwoWay.__init__(
+                            self,
+                            folder=folder,
+                            folderGroupName="Pictures",
+                            includeHidden=False,
+                            compareIgnoreMtime=False,
+                            followSymlinks=False
+                            )
+
+        self._client = gconf.client_get_default()
+
+    def get_UID(self):
+        return Utils.get_user_string()
+
+    def put(self, vfsFile, overwrite, LUID=None):
+        rid = FileDataProvider.FolderTwoWay.put(self, vfsFile, overwrite, LUID)
+
+        #if the file was successfully transferred then set it
+        #as the wallpaper
+        if vfsFile.exists():
+            self._client.set_string(
+                    "/desktop/gnome/background/picture_filename",
+                    vfsFile.get_local_uri()
+            )
+
+        return rid
+
+    def refresh(self):
+        DataProvider.TwoWay.refresh(self)
+
+

Modified: trunk/conduit/modules/FeedModule/FeedModule.py
==============================================================================
--- trunk/conduit/modules/FeedModule/FeedModule.py	(original)
+++ trunk/conduit/modules/FeedModule/FeedModule.py	Wed Jan 28 13:22:40 2009
@@ -1,3 +1,4 @@
+import random
 import logging
 log = logging.getLogger("modules.Feed")
 
@@ -68,6 +69,7 @@
         self.feedUrl = ""
         self.files = {}
         self.limit = 0        
+        self.randomize = False
         self.downloadPhotos = True
         self.downloadAudio = True
         self.downloadVideo = True
@@ -85,7 +87,7 @@
     def _add_file(self, url, title, t):
         log.debug("Got enclosure %s %s (%s)" % (title,url,t))
         if self._is_allowed_type(t):
-            if len(self.files) < self.limit or self.limit == 0:
+            if len(self.files) < self.limit or self.limit == 0 or self.randomize:
                 self.files[url] = (title,t)
         else:
             log.debug("Enclosure %s is an illegal type (%s)" % (title,t))
@@ -104,6 +106,7 @@
         url = tree.get_widget("url")
         limitCb = tree.get_widget("limitdownloads")
         limitSb = tree.get_widget("limitnumber")        
+        randomize = tree.get_widget("randomize")
         photosCb = tree.get_widget("downloadphotos")
         audioCb = tree.get_widget("downloadaudio")
         videoCb = tree.get_widget("downloadvideo")
@@ -115,6 +118,7 @@
         else:
             limitCb.set_active(False)
         url.set_text(self.feedUrl)
+        randomize.set_active(self.randomize)
         photosCb.set_active(self.downloadPhotos)
         audioCb.set_active(self.downloadAudio)
         videoCb.set_active(self.downloadVideo)
@@ -125,8 +129,8 @@
         if response == True:
             self.feedUrl = url.get_text()
             if limitCb.get_active():
-                #Need to cast to a float cause it returns an int
                 self.limit = int(limitSb.get_value())
+            self.randomize = randomize.get_active()
             self.downloadPhotos = photosCb.get_active()
             self.downloadAudio = audioCb.get_active()
             self.downloadVideo = videoCb.get_active()
@@ -147,8 +151,24 @@
                 self._add_file(media['url'], entry.title, media['type'])
 
     def get_all(self):
-        DataProvider.DataSource.get_all(self)                            
-        return self.files.keys()
+        DataProvider.DataSource.get_all(self)
+        all_files = self.files.keys()
+
+        if self.randomize:
+            if self.limit == 0:
+                #no need to randomly choose between *all* files,
+                #as order is irellevant, really
+                return all_files
+            else:
+                #randomly choose limit files from all_files
+                lim = self.limit
+                files = []
+                while lim > 0:
+                    files.append(all_files.pop(random.randint(0,len(all_files)-1)))
+                    lim -= 1
+                return files
+        else:
+            return all_files
             
     def get(self, url):
         DataProvider.DataSource.get(self, url)
@@ -176,6 +196,7 @@
         return {
             "feedUrl" : self.feedUrl,
             "limit" : self.limit,
+            "randomize" : self.randomize,
             "downloadPhotos" : self.downloadPhotos,
             "downloadAudio" : self.downloadAudio,
             "downloadVideo" : self.downloadVideo

Modified: trunk/conduit/modules/FeedModule/config.glade
==============================================================================
--- trunk/conduit/modules/FeedModule/config.glade	(original)
+++ trunk/conduit/modules/FeedModule/config.glade	Wed Jan 28 13:22:40 2009
@@ -92,6 +92,18 @@
               </packing>
             </child>
             <child>
+              <widget class="GtkCheckButton" id="randomize">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="label" translatable="yes">Randomize Enclosures</property>
+                <property name="response_id">0</property>
+                <property name="draw_indicator">True</property>
+              </widget>
+              <packing>
+                <property name="position">6</property>
+              </packing>
+            </child>
+            <child>
               <widget class="GtkCheckButton" id="downloadphotos">
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
@@ -104,7 +116,7 @@
               <packing>
                 <property name="expand">False</property>
                 <property name="fill">False</property>
-                <property name="position">6</property>
+                <property name="position">7</property>
               </packing>
             </child>
             <child>
@@ -120,7 +132,7 @@
               <packing>
                 <property name="expand">False</property>
                 <property name="fill">False</property>
-                <property name="position">7</property>
+                <property name="position">8</property>
               </packing>
             </child>
             <child>
@@ -136,7 +148,7 @@
               <packing>
                 <property name="expand">False</property>
                 <property name="fill">False</property>
-                <property name="position">8</property>
+                <property name="position">9</property>
               </packing>
             </child>
           </widget>

Modified: trunk/conduit/modules/Makefile.am
==============================================================================
--- trunk/conduit/modules/Makefile.am	(original)
+++ trunk/conduit/modules/Makefile.am	Wed Jan 28 13:22:40 2009
@@ -17,7 +17,8 @@
 	NetworkModule \
 	GConfModule \
 	ZotoModule \
-	Firefox3Module
+	Firefox3Module \
+	DesktopWallpaperModule.py
 
 conduit_handlersdir = $(libdir)/conduit/modules
 conduit_handlers_PYTHON = \



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]