Allow adding multiple trackers at once in the edit tracker dialog

This commit is contained in:
Andrew Resch 2008-09-20 02:08:56 +00:00
parent 42d239c91a
commit 31a157091a
3 changed files with 65 additions and 51 deletions

View File

@ -9,3 +9,4 @@ Deluge 1.1.0 - "" (In Development)
* Add peer progress to the peers tab
* Sorting # column will place downloaders above seeds
* Remove dependency on libtorrent for add torrent dialog
* Allow adding multiple trackers at once in the edit tracker dialog

View File

@ -1,7 +1,7 @@
#
# edittrackersdialog.py
#
# Copyright (C) 2007 Andrew Resch ('andar') <andrewresch@gmail.com>
# Copyright (C) 2007, 2008 Andrew Resch ('andar') <andrewresch@gmail.com>
#
# Deluge is free software.
#
@ -125,7 +125,7 @@ class EditTrackersDialog:
log.debug("on_button_add_clicked")
# Show the add tracker dialog
self.add_tracker_dialog.show()
self.glade.get_widget("entry_tracker").grab_focus()
self.glade.get_widget("textview_trackers").grab_focus()
def on_button_remove_clicked(self, widget):
log.debug("on_button_remove_clicked")
@ -185,38 +185,43 @@ class EditTrackersDialog:
def on_button_add_ok_clicked(self, widget):
log.debug("on_button_add_ok_clicked")
from re import search as re_search
tracker = self.glade.get_widget("entry_tracker").get_text()
if not re_search("[udp|http]s?://", tracker):
# Bad url.. lets prepend http://
tracker = "http://" + tracker
# Figure out what tier number to use.. it's going to be the highest+1
# Also check for duplicates
self.highest_tier = 0
self.duplicate = False
def tier_count(model, path, iter, data):
tier = model.get_value(iter, 0)
if tier > self.highest_tier:
self.highest_tier = tier
tracker = model.get_value(iter, 1)
if data == tracker:
# We already have this tracker in the list
self.duplicate = True
# Check if there are any entries
if self.liststore.iter_n_children(None) > 0:
self.liststore.foreach(tier_count, tracker)
else:
self.highest_tier = -1
# If not a duplicate, then add it to the list
if not self.duplicate:
# Add the tracker to the list
self.add_tracker(self.highest_tier + 1, tracker)
# Create a list of trackers from the textview widget
textview = self.glade.get_widget("textview_trackers")
trackers = []
b = textview.get_buffer()
lines = b.get_text(b.get_start_iter(), b.get_end_iter()).strip().split("\n")
for l in lines:
if deluge.common.is_url(l):
trackers.append(l)
for tracker in trackers:
# Figure out what tier number to use.. it's going to be the highest+1
# Also check for duplicates
highest_tier = 0
duplicate = False
def tier_count(model, path, iter, data):
tier = model.get_value(iter, 0)
if tier > data[1]:
data[1] = tier
tracker = model.get_value(iter, 1)
if data[0] == tracker:
# We already have this tracker in the list
data[2] = True
# Check if there are any entries
if self.liststore.iter_n_children(None) > 0:
self.liststore.foreach(tier_count, [tracker, highest_tier, duplicate])
else:
highest_tier = -1
# If not a duplicate, then add it to the list
if not duplicate:
# Add the tracker to the list
self.add_tracker(highest_tier + 1, tracker)
# Clear the entry widget and hide the dialog
self.glade.get_widget("entry_tracker").set_text("")
textview.get_buffer().set_text("")
self.add_tracker_dialog.hide()
def on_button_add_cancel_clicked(self, widget):

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd">
<!--Generated with glade3 3.4.5 on Wed Aug 13 20:02:28 2008 -->
<!--Generated with glade3 3.4.5 on Fri Sep 19 18:55:00 2008 -->
<glade-interface>
<widget class="GtkDialog" id="edit_trackers_dialog">
<property name="width_request">400</property>
@ -93,7 +93,7 @@
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label" translatable="no">gtk-go-up</property>
<property name="label">gtk-go-up</property>
<property name="use_stock">True</property>
<property name="response_id">0</property>
<signal name="clicked" handler="on_button_up_clicked"/>
@ -134,7 +134,7 @@
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label" translatable="no">gtk-remove</property>
<property name="label">gtk-remove</property>
<property name="use_stock">True</property>
<property name="response_id">0</property>
<signal name="clicked" handler="on_button_remove_clicked"/>
@ -149,7 +149,7 @@
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label" translatable="no">gtk-go-down</property>
<property name="label">gtk-go-down</property>
<property name="use_stock">True</property>
<property name="response_id">0</property>
<signal name="clicked" handler="on_button_down_clicked"/>
@ -186,7 +186,7 @@
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label" translatable="no">gtk-cancel</property>
<property name="label">gtk-cancel</property>
<property name="use_stock">True</property>
<property name="response_id">0</property>
<signal name="clicked" handler="on_button_cancel_clicked"/>
@ -198,7 +198,7 @@
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label" translatable="no">gtk-ok</property>
<property name="label">gtk-ok</property>
<property name="use_stock">True</property>
<property name="response_id">0</property>
<signal name="clicked" handler="on_button_ok_clicked"/>
@ -218,6 +218,7 @@
</widget>
<widget class="GtkDialog" id="add_tracker_dialog">
<property name="width_request">400</property>
<property name="height_request">200</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="border_width">5</property>
<property name="title" translatable="yes">Add Tracker</property>
@ -256,7 +257,7 @@
<widget class="GtkLabel" id="label1">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label" translatable="yes">&lt;b&gt;Add Tracker&lt;/b&gt;</property>
<property name="label" translatable="yes">&lt;b&gt;Add Trackers&lt;/b&gt;</property>
<property name="use_markup">True</property>
</widget>
<packing>
@ -290,21 +291,30 @@
<widget class="GtkLabel" id="label2">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label" translatable="yes">Tracker:</property>
<property name="xalign">0</property>
<property name="yalign">0</property>
<property name="label" translatable="yes">Trackers:</property>
</widget>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
</packing>
</child>
<child>
<widget class="GtkEntry" id="entry_tracker">
<widget class="GtkScrolledWindow" id="scrolledwindow1">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="has_focus">True</property>
<property name="is_focus">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="activates_default">True</property>
<property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
<property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
<property name="shadow_type">GTK_SHADOW_IN</property>
<child>
<widget class="GtkTextView" id="textview_trackers">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="left_margin">1</property>
<property name="right_margin">1</property>
<property name="accepts_tab">False</property>
</widget>
</child>
</widget>
<packing>
<property name="position">1</property>
@ -312,8 +322,6 @@
</child>
</widget>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">2</property>
</packing>
</child>
@ -333,7 +341,7 @@
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label" translatable="no">gtk-cancel</property>
<property name="label">gtk-cancel</property>
<property name="use_stock">True</property>
<property name="response_id">0</property>
<signal name="clicked" handler="on_button_add_cancel_clicked"/>
@ -347,7 +355,7 @@
<property name="has_default">True</property>
<property name="receives_default">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label" translatable="no">gtk-ok</property>
<property name="label">gtk-ok</property>
<property name="use_stock">True</property>
<property name="response_id">0</property>
<signal name="clicked" handler="on_button_add_ok_clicked"/>
@ -482,7 +490,7 @@
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label" translatable="no">gtk-cancel</property>
<property name="label">gtk-cancel</property>
<property name="use_stock">True</property>
<property name="response_id">0</property>
<signal name="clicked" handler="on_button_edit_cancel_clicked"/>
@ -496,7 +504,7 @@
<property name="has_default">True</property>
<property name="receives_default">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label" translatable="no">gtk-ok</property>
<property name="label">gtk-ok</property>
<property name="use_stock">True</property>
<property name="response_id">0</property>
<signal name="clicked" handler="on_button_edit_ok_clicked"/>