psa: Added update notification in UI
[feedingit] / src / wc.py
index d99eae6..c28d1d7 100644 (file)
--- a/src/wc.py
+++ b/src/wc.py
@@ -40,13 +40,25 @@ except ImportError, exception:
 refresh_interval = 6 * 60 * 60
 
 class mywoodchuck (PyWoodchuck):
-    def __init__(self, listing, *args):
-        PyWoodchuck.__init__ (self, *args)
+    def __init__(self, listing, human_readable_name, identifier,
+                 request_feedback):
+        try:
+            PyWoodchuck.__init__ (self, human_readable_name, identifier,
+                                  request_feedback)
+        except Exception, e:
+            logger.error(
+                "Failed to establish a connection to the Woodchuck server: %s"
+                % (str(e),))
+            self.available = self.not_available
+            return
 
         self.listing = listing
 
+    def not_available(self):
+        return False
+
     # Woodchuck upcalls.
-    def stream_update_cb(self, stream):
+    def stream_update_cb(self, stream, *args, **kwargs):
         logger.debug("stream update called on %s (%s)"
                      % (stream.human_readable_name, stream.identifier,))
 
@@ -59,17 +71,27 @@ class mywoodchuck (PyWoodchuck):
                          % (stream.identifier, traceback.format_exc ()))
 
     def object_transfer_cb(self, stream, object,
-                           version, filename, quality):
-        log ("object transfer called on %s (%s) in stream %s (%s)"
-             % (object.human_readable_name, object.identifier,
-                stream.human_readable_name, stream.identifier))
+                           version, filename, quality,
+                           *args, **kwargs):
+        logger.debug ("object transfer called on %s (%s) in stream %s (%s)"
+                      % (object.human_readable_name, object.identifier,
+                         stream.human_readable_name, stream.identifier))
+        try:
+            self[stream.identifier][object.identifier].dont_transfer = True
+        except Exception, e:
+            logger.warn("Setting '%s'(%s).'%s'(%s).DontTransfer: %s"
+                        % (stream.human_readable_name, stream.identifier,
+                           object.human_readable_name, object.identifier,
+                           str(e)))
 
 _w = None
-def wc_init(listing):
+def wc_init(listing, request_feedback=False):
+    """Connect to the woodchuck server and initialize any state."""
     global _w
     assert _w is None
     
-    _w = mywoodchuck (listing, "FeedingIt", "org.maemo.feedingit")
+    _w = mywoodchuck (listing, "FeedingIt", "org.marcoz.feedingit",
+                      request_feedback)
 
     if not woodchuck_imported or not _w.available ():
         logger.info("Unable to contact Woodchuck server.")
@@ -77,7 +99,7 @@ def wc_init(listing):
         logger.debug("Woodchuck appears to be available.")
 
 def wc():
-    """Connect to the woodchuck server and initialize any state."""
+    """Return the Woodchuck singleton."""
     global _w
     assert _w is not None
     return _w