# An example plugin for use with Deluge import deluge.common, deluge.pref, gtk, gtk.glade # This plugin is intended to be used with Deluge's default GTK interface class plugin_Example: # The plugin's class ## Your plugin's contructor should follow this format ## path = A string containing the path to the plugin ## deluge_core = The active instance of the Deluge Manager ## deluge_interface = The active instance of the Deluge Interface def __init__(self, path, deluge_core, deluge_interface): # Save the path, interface, and core so they can be used later self.path = path self.core = deluge_core self.interface = deluge_interface # Create an options file and try to load existing Values self.config_file = deluge.common.CONFIG_DIR + "/example.conf" self.config = deluge.pref.Preferences() try: self.config.load(self.config_file) except IOError: # File does not exist pass # Extract the configuration dialog from the gladefile self.glade = gtk.glade.XML(path + "/example.glade") self.dialog = self.glade.get_widget("dialog") self.dialog.set_icon_from_file(self.path + "/example-plugin.png") # Access the interface's toolbar self.toolbar = self.interface.toolbar # Make a toolbar button icon = gtk.Image() icon.set_from_file(self.path + "/example-plugin.png") # Toolbar items should be 22x22 pixel images self.button = gtk.ToolButton(icon_widget=icon, label="Example Plugin") self.button.connect("clicked", self.clicked) # Connect the signal handler for the button self.toolbar.add(self.button) # Add button to toolbar self.button.show_all() # Show the button ## unload is called when the plugin is removed or Deluge is shut down def unload(self): self.toolbar.remove(self.button) # Remove the button from the toolbar self.config.save(self.config_file) ## update will be called every UPDATE_INTERVAL (usually about 1 second) def update(self): # As this plugin doesn't need to do anything every interval, this # function will remain empty pass ## This will be only called if your plugin is configurable def configure(self): entry1 = self.glade.get_widget("entry1") entry2 = self.glade.get_widget("entry2") try: entry1.set_text(self.config.get("option1")) entry2.set_text(self.config.get("option2")) except KeyError: entry1.set_text("") entry2.set_text("") self.dialog.show() response = self.dialog.run() self.dialog.hide() if response: self.config.set("option1", entry1.get_text()) self.config.set("option2", entry2.get_text()) ## This will be called whenever self.button is clicked def clicked(self, button): # Build a dialog from scratch rather than from a glade file dialog = gtk.Dialog(title="Example Plugin", parent=self.interface.window, buttons=(gtk.STOCK_OK, 0)) dialog.set_icon_from_file(self.path + "/example-plugin.png") try: text = "This is a popup notification from Example Plugin\n" + \ "Your value for option1 is %s\n"%self.config.get("option1") + \ "and option2 is %s"%self.config.get("option2") except KeyError: text = "This is a popup notification from Example Plugin\n" + \ "If you had set options by configuring this plugin,\n" + \ "they would appear here" label = gtk.Label(text) dialog.vbox.pack_start(label) dialog.show_all() dialog.run() dialog.hide() dialog.destroy()