From 9337a6f69f622b4bde27f270f3efa96ef985bdfb Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Thu, 2 Oct 2008 15:29:45 +0000 Subject: [PATCH] (gtk) #1026: "new torrent" dialogue: remember last announce URL --- gtk/makemeta-ui.c | 42 ++++++++++++++++++++++++++++++++++++++++++ gtk/tracker-list.c | 38 +++++++++++++++++++++++++++++++------- gtk/tracker-list.h | 6 +++++- 3 files changed, 78 insertions(+), 8 deletions(-) diff --git a/gtk/makemeta-ui.c b/gtk/makemeta-ui.c index 8974467ce..b6f7912a6 100644 --- a/gtk/makemeta-ui.c +++ b/gtk/makemeta-ui.c @@ -18,6 +18,7 @@ #include #include +#include "conf.h" #include "hig.h" #include "makemeta-ui.h" #include "tracker-list.h" @@ -26,6 +27,7 @@ #define UPDATE_INTERVAL_MSEC 200 #define UI_KEY "ui" +#define ANNOUNCE_KEY "recent-announce-url" typedef struct { @@ -211,6 +213,16 @@ response_cb( GtkDialog* d, trackers = tracker_list_get_trackers( ui->announce_list, &trackerCount ); + pref_int_set( ANNOUNCE_KEY"-count", trackerCount ); + for( i=0; ibuilder, NULL, trackers, trackerCount, @@ -355,6 +367,7 @@ GtkWidget* make_meta_ui( GtkWindow * parent, tr_handle * handle ) { + int n; int row = 0; GtkWidget * d, *t, *w, *h, *h2, *v, *focusMe, *extras; GtkBox * main_vbox; @@ -414,6 +427,35 @@ make_meta_ui( GtkWindow * parent, hig_workarea_add_section_title( t, &row, _( "Trackers" ) ); w = tracker_list_new( NULL ); + + n = pref_int_get( ANNOUNCE_KEY"-count" ); + if( n > 0 ) + { + int i; + int trackerCount = 0; + tr_tracker_info * trackers = g_new0( tr_tracker_info, n ); + + for( i=0; i= 0 && announce && *announce ) { + trackers[trackerCount].tier = tier; + trackers[trackerCount++].announce = (char*) announce; + } + } + + if( trackerCount > 0 ) + tracker_list_add_trackers( w, trackers, trackerCount ); + + g_free( trackers ); + } + ui->announce_list = w; hig_workarea_add_wide_control( t, &row, w ); diff --git a/gtk/tracker-list.c b/gtk/tracker-list.c index 8879ec8c7..baeec3090 100644 --- a/gtk/tracker-list.c +++ b/gtk/tracker-list.c @@ -29,7 +29,7 @@ #include "util.h" #define UPDATE_INTERVAL_MSEC 2000 - +#define PAGE_KEY "page" struct tracker_page { @@ -85,7 +85,8 @@ tracker_model_new( tr_torrent * tor ) GtkTreeIter iter; const tr_tracker_info * tinf = inf->trackers + i; gtk_list_store_append( store, &iter ); - gtk_list_store_set( store, &iter, TR_COL_TIER, tinf->tier + 1, + gtk_list_store_set( store, &iter, + TR_COL_TIER, tinf->tier + 1, TR_COL_ANNOUNCE, tinf->announce, -1 ); } @@ -139,7 +140,8 @@ onTrackerAddClicked( GtkButton * w UNUSED, gtk_list_store_append( page->store, &iter ); setTrackerChangeState( page, TRUE ); - gtk_list_store_set( page->store, &iter, TR_COL_TIER, 1, + gtk_list_store_set( page->store, &iter, + TR_COL_TIER, 1, TR_COL_ANNOUNCE, "http://", -1 ); path = gtk_tree_model_get_path( GTK_TREE_MODEL( page->store ), &iter ); @@ -375,7 +377,7 @@ tracker_list_new( TrTorrent * gtor ) onTrackerSelectionChanged( sel, page ); - g_object_set_data_full( G_OBJECT( top ), "page", page, g_free ); + g_object_set_data_full( G_OBJECT( top ), PAGE_KEY, page, g_free ); return top; } @@ -384,7 +386,7 @@ tracker_list_get_trackers( GtkWidget * list, int * trackerCount ) { struct tracker_page * page = g_object_get_data( G_OBJECT( - list ), "page" ); + list ), PAGE_KEY ); GtkTreeModel * model = GTK_TREE_MODEL( page->store ); const int n = gtk_tree_model_iter_n_children( model, NULL ); tr_tracker_info * trackers; @@ -395,10 +397,13 @@ tracker_list_get_trackers( GtkWidget * list, trackers = g_new0( tr_tracker_info, n ); if( gtk_tree_model_get_iter_first( model, &iter ) ) do { - gtk_tree_model_get( model, &iter, TR_COL_TIER, - &trackers[i].tier, + int tier; + gtk_tree_model_get( model, &iter, + TR_COL_TIER, &tier, TR_COL_ANNOUNCE, &trackers[i].announce, -1 ); + /* tracker_info.tier is zero-based, but the display is 1-based */ + trackers[i].tier = tier - 1; ++i; } while( gtk_tree_model_iter_next( model, &iter ) ); @@ -410,3 +415,22 @@ tracker_list_get_trackers( GtkWidget * list, return trackers; } +void +tracker_list_add_trackers( GtkWidget * list, + const tr_tracker_info * trackers, + int trackerCount ) +{ + int i; + struct tracker_page * page = g_object_get_data( G_OBJECT( list ), PAGE_KEY ); + GtkListStore * store = page->store; + + for( i=0; i