diff --git a/src/core.py b/src/core.py index 2a758e353..578a23a33 100644 --- a/src/core.py +++ b/src/core.py @@ -803,3 +803,6 @@ class Manager: def get_trackers(self, unique_ID): return deluge_core.get_trackers(unique_ID) + def replace_trackers(self, unique_ID, trackers): + return deluge_core.replace_trackers(unique_ID, trackers) + diff --git a/src/deluge_core.cpp b/src/deluge_core.cpp index a7920e622..078837d90 100644 --- a/src/deluge_core.cpp +++ b/src/deluge_core.cpp @@ -55,7 +55,9 @@ #include "libtorrent/natpmp.hpp" #include "libtorrent/extensions/metadata_transfer.hpp" #include "libtorrent/extensions/ut_pex.hpp" - +#include +#include +using namespace std; using namespace boost::filesystem; using namespace libtorrent; @@ -1359,6 +1361,34 @@ static PyObject *torrent_get_trackers(PyObject *self, PyObject *args) return Py_BuildValue("s",trackerslist.c_str()); } +static PyObject *torrent_replace_trackers(PyObject *self, PyObject *args) +{ + python_long unique_ID; + std::string tracker; + if (!PyArg_ParseTuple(args, "is", &unique_ID, &tracker)) + return NULL; + long index = get_index_from_unique_ID(unique_ID); + if (PyErr_Occurred()) + return NULL; + + torrent_handle& h = M_torrents->at(index).handle; + + std::vector trackerlist; + + std::string line; + + int i = 0; + + istringstream in(tracker); + while(getline(in, line)){ + trackerlist.push_back(line); + ++i; + } + h.replace_trackers(trackerlist); + h.force_reannounce(); + + return Py_None; +} //==================== // Python Module data //==================== @@ -1403,6 +1433,7 @@ static PyMethodDef deluge_core_methods[] = {"set_ratio", torrent_set_ratio, METH_VARARGS, "."}, {"proxy_settings", torrent_proxy_settings, METH_VARARGS, "."}, {"get_trackers", torrent_get_trackers, METH_VARARGS, "."}, + {"replace_trackers", torrent_replace_trackers, METH_VARARGS, "."}, {NULL} }; diff --git a/src/interface.py b/src/interface.py index b261e309b..244e91af4 100644 --- a/src/interface.py +++ b/src/interface.py @@ -317,28 +317,32 @@ class DelugeGTK: trackerslist = self.manager.get_trackers(torrent) self.show_edit_tracker_dialog(trackerslist) + def cancel_edit_window(self,arg=None): + self.edit_window.destroy() + + def accept_edit_window(self,arg=None): + torrent = self.get_selected_torrent() + self.newlist = self.edit_list.get_buffer() + self.start = self.textbuffer.get_start_iter() + self.end = self.textbuffer.get_end_iter() + self.textlist = self.textbuffer.get_text(self.start,self.end,include_hidden_chars=False) + self.manager.replace_trackers(torrent, self.textlist) + self.edit_window.destroy() + def show_edit_tracker_dialog(self,list): - textbuffer = gtk.TextBuffer(table=None) - textbuffer.set_text(list) - edit_glade = gtk.glade.XML(common.get_glade_file("edit_trackers.glade")) - edit_list = edit_glade.get_widget("txt_tracker_list") - edit_list.set_buffer(textbuffer) - edit_window = edit_glade.get_widget("edittrackers") - edit_window.set_position(gtk.WIN_POS_CENTER_ALWAYS) - edit_window.set_size_request(400, 200) - def cancel_edit_window(self,arg=None): - edit_window.destroy() - def accept_edit_window(self,arg=None): - newlist = edit_list.get_buffer() - start = textbuffer.get_start_iter() - end = textbuffer.get_end_iter() - textlist = textbuffer.get_text(start,end,include_hidden_chars=False) - edit_window.destroy() - edit_glade.signal_autoconnect({"cancel_button_clicked": cancel_edit_window, - "ok_button_clicked": accept_edit_window + self.textbuffer = gtk.TextBuffer(table=None) + self.textbuffer.set_text(list) + self.edit_glade = gtk.glade.XML(common.get_glade_file("edit_trackers.glade")) + self.edit_list = self.edit_glade.get_widget("txt_tracker_list") + self.edit_list.set_buffer(self.textbuffer) + self.edit_window = self.edit_glade.get_widget("edittrackers") + self.edit_window.set_position(gtk.WIN_POS_CENTER_ALWAYS) + self.edit_window.set_size_request(400, 200) + self.edit_glade.signal_autoconnect({"cancel_button_clicked": self.cancel_edit_window, + "ok_button_clicked": self.accept_edit_window }) - edit_window.show_all() + self.edit_window.show_all() return True