All pastes #617139 Raw Edit

Someone

public text v1 · immutable
·published 2007-07-13 01:34 UTC
rendered paste body
Index: src/core.py
===================================================================
--- src/core.py	(revision 909)
+++ src/core.py	(working copy)
@@ -223,16 +223,19 @@ class Manager:
         # Load the preferences
         self.config = pref.Preferences(os.path.join(self.base_dir, PREFS_FILENAME))
         
         # Apply preferences. Note that this is before any torrents are added
         self.apply_prefs()
 
         PREF_FUNCTIONS["enable_dht"] = self.set_DHT 
 
+        # event callbacks for use with plugins
+        self.event_callback = {}
+
         # Unpickle the state, or create a new one
         if not blank_slate:
             try:
                 pkl_file = open(os.path.join(self.base_dir, STATE_FILENAME), 'rb')
                 self.state = pickle.load(pkl_file)
                 pkl_file.close()
 
                 # Sync with the core: tell core about torrents, and get unique_IDs
@@ -243,17 +246,20 @@ class Manager:
 
                 # Apply the queue at this time, after all is loaded and ready
                 self.apply_queue()
             except IOError:
                 self.state = persistent_state()
         else:
             self.state = persistent_state()
 
-
+    def connect_event(self, event_type, callback):
+        if event_type not in self.event_callback:
+            self.event_callback[event_type] = []
+        self.event_callback[event_type].append(callback)
 
     def quit(self):
         # Analyze data needed for pickling, etc.
         self.pre_quitting()
 
         # Pickle the prefs
         print "Saving prefs..."
         self.config.save()
@@ -523,17 +529,20 @@ class Manager:
                 ret.append(event)
                 try:
                     if event['unique_ID'] not in self.unique_IDs:
                         event = pop_event()
                         continue
                 except KeyError:
                     event = pop_event()
                     continue
-                    
+                # Call any event callbacks
+                for event in self.event_callback[event['event_type']]:
+                    event()
+
                 if event['event_type'] is self.constants['EVENT_FINISHED']:
                     # Queue seeding torrent to bottom if needed
                     if(self.get_pref('enable_move_completed')):
                         try:
                             deluge_core.move_storage(event['unique_ID'], self.get_pref('default_finished_path'))
                         except SystemError:
                             raise SystemError("You cannot move torrent to a different partition.  Please fix your preferences")
                             continue