diff --git a/deluge/core/core.py b/deluge/core/core.py
index 1eb80eb..73de401 100644
--- a/deluge/core/core.py
+++ b/deluge/core/core.py
@@ -382,6 +382,20 @@ def connect_peer(self, torrent_id, ip, port):
log.warning("Error adding peer %s:%s to %s", ip, port, torrent_id)
@export
+ def add_url_seed(self, torrent_id, url):
+ log.debug("adding torrent url %s" % url)
+ self.torrentmanager[torrent_id].add_url_seed(url)
+
+ @export
+ def remove_url_seed(self, torrent_id, url):
+ log.debug("removing torrent url %s" % url)
+ self.torrentmanager[torrent_id].remove_url_seed(url)
+
+ @export
+ def url_seeds(self, torrent_id):
+ return self.torrrentmanager[torrent_id].url_seeds()
+
+ @export
def move_storage(self, torrent_ids, dest):
log.debug("Moving storage %s to %s", torrent_ids, dest)
for torrent_id in torrent_ids:
diff --git a/deluge/core/torrent.py b/deluge/core/torrent.py
index 5e8c26e..9b8fee9 100644
--- a/deluge/core/torrent.py
+++ b/deluge/core/torrent.py
@@ -829,6 +829,34 @@ def connect_peer(self, ip, port):
return False
return True
+ def add_url_seed(self, url):
+ """
+ add manual webseed
+ url is assumed correctly formatted and valid
+
+ follows libtorrent bep 19
+ http://www.rasterbar.com/products/libtorrent/manual.html#http-seeding
+ """
+ try:
+ self.handle.add_url_seed(url)
+ except:
+ log.debug("Unable to add webseed")
+
+ def remove_url_seed(self, url):
+ """
+ remove a webseed if it exists
+ url is assumed correct
+
+ webseeds may automatically be removed by libtorrent if they are invalid or fail
+ """
+ self.handle.remove_url_seed(url)
+
+ def url_seeds(self):
+ """
+ returns a list of webseeds
+ """
+ return self.handle.url_seeds()
+
def move_storage(self, dest):
"""Move a torrent's storage location"""
diff --git a/deluge/ui/gtkui/glade/dgtkpopups.glade b/deluge/ui/gtkui/glade/dgtkpopups.glade
index 68f2c4b..8796b35 100644
--- a/deluge/ui/gtkui/glade/dgtkpopups.glade
+++ b/deluge/ui/gtkui/glade/dgtkpopups.glade
@@ -260,4 +260,117 @@
+
+
+ 5
+ Add Webseed
+ GTK_WIN_POS_MOUSE
+ GDK_WINDOW_TYPE_HINT_DIALOG
+ True
+ True
+ False
+ False
+
+
+ True
+ 2
+
+
+ True
+ 2
+
+
+ True
+ 5
+
+
+ True
+ gtk-add
+
+
+ False
+ False
+
+
+
+
+ True
+ 0
+ <b>Add Webseed</b>
+ True
+
+
+ 1
+
+
+
+
+
+
+ True
+
+
+ False
+ 1
+
+
+
+
+ True
+ True
+ True
+ 39
+ http://
+
+
+ 2
+
+
+
+
+ False
+ 1
+
+
+
+
+ True
+ GTK_BUTTONBOX_END
+
+
+ True
+ True
+ True
+ GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK
+ gtk-cancel
+ True
+ 0
+
+
+
+
+ True
+ True
+ True
+ True
+ True
+ GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK
+ gtk-ok
+ True
+ 1
+
+
+ 1
+
+
+
+
+ False
+ GTK_PACK_END
+
+
+
+
+
+
diff --git a/deluge/ui/gtkui/glade/main_window.glade b/deluge/ui/gtkui/glade/main_window.glade
index d575269..6b1baf4 100644
--- a/deluge/ui/gtkui/glade/main_window.glade
+++ b/deluge/ui/gtkui/glade/main_window.glade
@@ -2716,5 +2716,22 @@
+
+
+
diff --git a/deluge/ui/gtkui/peers_tab.py b/deluge/ui/gtkui/peers_tab.py
index bb2316f..27876f4 100644
--- a/deluge/ui/gtkui/peers_tab.py
+++ b/deluge/ui/gtkui/peers_tab.py
@@ -67,6 +67,7 @@ def __init__(self):
self.peer_menu = glade.get_widget("menu_peer_tab")
glade.signal_autoconnect({
"on_menuitem_add_peer_activate": self._on_menuitem_add_peer_activate,
+ "on_menuitem_add_webseed_activate": self._on_menuitem_add_webseed_activate,
})
self.listview = glade.get_widget("peers_listview")
@@ -399,3 +400,18 @@ def _on_menuitem_add_peer_activate(self, menuitem):
client.core.connect_peer(self.torrent_id, ip, port)
peer_dialog.destroy()
return True
+
+ def _on_menuitem_add_webseed_activate(self, menuitem):
+ """This is a callback for manually adding a webseed"""
+ log.debug("on_menuitem_add_webseed")
+ dialog_glade = gtk.glade.XML(
+ pkg_resources.resource_filename("deluge.ui.gtkui",
+ "glade/dgtkpopups.glade"))
+ add_webseed_dialog = dialog_glade.get_widget("add_webseed_dialog")
+ address = dialog_glade.get_widget("webseed_address")
+ response = add_webseed_dialog.run()
+ if response:
+ client.core.add_url_seed(self.torrent_id, address.get_text())
+ #else the user clicked cancel
+ add_webseed_dialog.destroy()
+ return True