From 94e9936deac2818db70d77a70d809fe16234e05e Mon Sep 17 00:00:00 2001 From: Alan Fitton Date: Mon, 2 Jan 2012 00:04:22 +0000 Subject: contributed patch to change two Kbps to the correct KB/s. also have another go at the more efficient filter refreshes. --- src/trg-main-window.c | 1 - src/trg-state-selector.c | 50 +++++++++++++++++++++++------------------- src/trg-state-selector.h | 2 +- src/trg-torrent-model.c | 23 ++++++++++++------- src/trg-torrent-props-dialog.c | 4 ++-- 5 files changed, 46 insertions(+), 34 deletions(-) (limited to 'src') diff --git a/src/trg-main-window.c b/src/trg-main-window.c index 5461fb3..491d156 100644 --- a/src/trg-main-window.c +++ b/src/trg-main-window.c @@ -1298,7 +1298,6 @@ void trg_main_window_reload_dir_aliases(TrgMainWindow * win) trg_torrent_model_reload_dir_aliases(priv->client, GTK_TREE_MODEL (priv->torrentModel)); - trg_state_selector_update(priv->stateSelector); } static TrgTorrentTreeView diff --git a/src/trg-state-selector.c b/src/trg-state-selector.c index 5bad1cc..cbfacdd 100644 --- a/src/trg-state-selector.c +++ b/src/trg-state-selector.c @@ -161,26 +161,27 @@ static void trg_state_selector_update_dynamic_filter(GtkTreeModel * model, if (oldSerial != serial) { g_value_init(&gvalue, G_TYPE_INT); g_value_set_int(&gvalue, 1); - gtk_list_store_set_value(GTK_LIST_STORE(model), &iter, STATE_SELECTOR_COUNT, - &gvalue); + gtk_list_store_set_value(GTK_LIST_STORE(model), &iter, + STATE_SELECTOR_COUNT, &gvalue); memset(&gvalue, 0, sizeof(GValue)); g_value_init(&gvalue, G_TYPE_INT64); g_value_set_int64(&gvalue, serial); - gtk_list_store_set_value(GTK_LIST_STORE(model), &iter, STATE_SELECTOR_SERIAL, - &gvalue); + gtk_list_store_set_value(GTK_LIST_STORE(model), &iter, + STATE_SELECTOR_SERIAL, &gvalue); } else { g_value_init(&gvalue, G_TYPE_INT); g_value_set_int(&gvalue, ++oldCount); - gtk_list_store_set_value(GTK_LIST_STORE(model), &iter, STATE_SELECTOR_COUNT, - &gvalue); + gtk_list_store_set_value(GTK_LIST_STORE(model), &iter, + STATE_SELECTOR_COUNT, &gvalue); } gtk_tree_path_free(path); } static void refresh_statelist_cb(GtkWidget * w, gpointer data) { - trg_state_selector_update(TRG_STATE_SELECTOR(data)); + trg_state_selector_update(TRG_STATE_SELECTOR(data), + TORRENT_UPDATE_ADDREMOVE); } static void view_popup_menu(GtkWidget * treeview, GdkEventButton * event, @@ -263,7 +264,7 @@ static void trg_state_selector_insert(TrgStateSelector * s, int offset, gtk_list_store_insert(GTK_LIST_STORE(model), iter, args.pos); } -void trg_state_selector_update(TrgStateSelector * s) { +void trg_state_selector_update(TrgStateSelector * s, guint whatsChanged) { TrgStateSelectorPrivate *priv = TRG_STATE_SELECTOR_GET_PRIVATE(s); GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(s)); TrgClient *client = priv->client; @@ -300,7 +301,7 @@ void trg_state_selector_update(TrgStateSelector * s) { if (!t) continue; - if (priv->showTrackers) { + if (priv->showTrackers && (whatsChanged & TORRENT_UPDATE_ADDREMOVE)) { trackersList = json_array_get_elements( torrent_get_tracker_stats(t)); for (trackerItem = trackersList; trackerItem; @@ -328,9 +329,8 @@ void trg_state_selector_update(TrgStateSelector * s) { STATE_SELECTOR_ICON, GTK_STOCK_NETWORK, STATE_SELECTOR_NAME, announceHost, STATE_SELECTOR_SERIAL, updateSerial, - STATE_SELECTOR_COUNT, 1, - STATE_SELECTOR_BIT, FILTER_FLAG_TRACKER, - STATE_SELECTOR_INDEX, 0, -1); + STATE_SELECTOR_COUNT, 1, STATE_SELECTOR_BIT, + FILTER_FLAG_TRACKER, STATE_SELECTOR_INDEX, 0, -1); g_hash_table_insert(priv->trackers, announceHost, quick_tree_ref_new(model, &iter)); } @@ -338,7 +338,9 @@ void trg_state_selector_update(TrgStateSelector * s) { g_list_free(trackersList); } - if (priv->showDirs) { + if (priv->showDirs + && ((whatsChanged & TORRENT_UPDATE_ADDREMOVE) + || (whatsChanged & TORRENT_UPDATE_PATH_CHANGE))) { gchar *dir; gtk_tree_model_get(torrentModel, &torrentIter, TORRENT_COLUMN_DOWNLOADDIR_SHORT, &dir, -1); @@ -355,8 +357,7 @@ void trg_state_selector_update(TrgStateSelector * s) { STATE_SELECTOR_ICON, GTK_STOCK_DIRECTORY, STATE_SELECTOR_NAME, dir, STATE_SELECTOR_SERIAL, updateSerial, STATE_SELECTOR_BIT, FILTER_FLAG_DIR, - STATE_SELECTOR_COUNT, 1, - STATE_SELECTOR_INDEX, 0, -1); + STATE_SELECTOR_COUNT, 1, STATE_SELECTOR_INDEX, 0, -1); g_hash_table_insert(priv->directories, g_strdup(dir), quick_tree_ref_new(model, &iter)); } @@ -369,13 +370,15 @@ void trg_state_selector_update(TrgStateSelector * s) { cruft.serial = trg_client_get_serial(client); - if (priv->showTrackers) { + if (priv->showTrackers && ((whatsChanged & TORRENT_UPDATE_ADDREMOVE))) { cruft.table = priv->trackers; g_hash_table_foreach_remove(priv->trackers, trg_state_selector_remove_cruft, &cruft); } - if (priv->showDirs) { + if (priv->showDirs + && ((whatsChanged & TORRENT_UPDATE_ADDREMOVE) + || (whatsChanged & TORRENT_UPDATE_PATH_CHANGE))) { cruft.table = priv->directories; g_hash_table_foreach_remove(priv->directories, trg_state_selector_remove_cruft, &cruft); @@ -388,15 +391,18 @@ void trg_state_selector_set_show_dirs(TrgStateSelector * s, gboolean show) { if (!show) g_hash_table_remove_all(priv->directories); else - trg_state_selector_update(s); + trg_state_selector_update(s, TORRENT_UPDATE_PATH_CHANGE); } static void on_torrents_state_change(TrgTorrentModel * model, guint whatsChanged, gpointer data) { TrgStateSelector *selector = TRG_STATE_SELECTOR(data); - trg_state_selector_update(selector); - trg_state_selector_stats_update(selector, - trg_torrent_model_get_stats(model)); + trg_state_selector_update(selector, whatsChanged); + + if ((whatsChanged & TORRENT_UPDATE_ADDREMOVE) + || (whatsChanged & TORRENT_UPDATE_STATE_CHANGE)) + trg_state_selector_stats_update(selector, + trg_torrent_model_get_stats(model)); } void trg_state_selector_set_show_trackers(TrgStateSelector * s, gboolean show) { @@ -405,7 +411,7 @@ void trg_state_selector_set_show_trackers(TrgStateSelector * s, gboolean show) { if (!show) g_hash_table_remove_all(priv->trackers); else - trg_state_selector_update(s); + trg_state_selector_update(s, TORRENT_UPDATE_ADDREMOVE); } static void trg_state_selector_add_state(TrgStateSelector * selector, diff --git a/src/trg-state-selector.h b/src/trg-state-selector.h index f002b3b..2d9af17 100644 --- a/src/trg-state-selector.h +++ b/src/trg-state-selector.h @@ -64,7 +64,7 @@ GType trg_state_selector_get_type(void); TrgStateSelector *trg_state_selector_new(TrgClient * client, TrgTorrentModel *tmodel); G_END_DECLS guint32 trg_state_selector_get_flag(TrgStateSelector * s); -void trg_state_selector_update(TrgStateSelector * s); +void trg_state_selector_update(TrgStateSelector * s, guint whatsChanged); gchar *trg_state_selector_get_selected_text(TrgStateSelector * s); GRegex *trg_state_selector_get_url_host_regex(TrgStateSelector * s); void trg_state_selector_disconnect(TrgStateSelector * s); diff --git a/src/trg-torrent-model.c b/src/trg-torrent-model.c index e46b876..ace6bae 100644 --- a/src/trg-torrent-model.c +++ b/src/trg-torrent-model.c @@ -249,6 +249,8 @@ static gboolean trg_torrent_model_reload_dir_aliases_foreachfunc( void trg_torrent_model_reload_dir_aliases(TrgClient * tc, GtkTreeModel * model) { gtk_tree_model_foreach(model, trg_torrent_model_reload_dir_aliases_foreachfunc, tc); + g_signal_emit(model, signals[TMODEL_STATE_CHANGED], 0, + TORRENT_UPDATE_PATH_CHANGE); } static gboolean trg_torrent_model_stats_scan_foreachfunc(GtkTreeModel * model, @@ -274,23 +276,25 @@ static gboolean trg_torrent_model_stats_scan_foreachfunc(GtkTreeModel * model, stats->error++; if (flags & TORRENT_FLAG_COMPLETE - ) + ) stats->complete++; else stats->incomplete++; if (flags & TORRENT_FLAG_CHECKING - ) + ) stats->checking++; if (flags & TORRENT_FLAG_ACTIVE - ) + ) stats->active++; - if (flags & TORRENT_FLAG_SEEDING_WAIT) + if (flags & TORRENT_FLAG_SEEDING_WAIT + ) stats->seed_wait++; - if (flags & TORRENT_FLAG_DOWNLOADING_WAIT) + if (flags & TORRENT_FLAG_DOWNLOADING_WAIT + ) stats->down_wait++; stats->count++; @@ -720,9 +724,12 @@ trg_torrent_model_update_stats *trg_torrent_model_update( } if (whatsChanged != 0) { - trg_torrent_model_stat_counts_clear(&priv->stats); - gtk_tree_model_foreach(GTK_TREE_MODEL(model), - trg_torrent_model_stats_scan_foreachfunc, &(priv->stats)); + if ((whatsChanged & TORRENT_UPDATE_ADDREMOVE) + || (whatsChanged & TORRENT_UPDATE_STATE_CHANGE)) { + trg_torrent_model_stat_counts_clear(&priv->stats); + gtk_tree_model_foreach(GTK_TREE_MODEL(model), + trg_torrent_model_stats_scan_foreachfunc, &(priv->stats)); + } g_signal_emit(model, signals[TMODEL_STATE_CHANGED], 0, whatsChanged); } diff --git a/src/trg-torrent-props-dialog.c b/src/trg-torrent-props-dialog.c index 92c624c..1ab2f8a 100644 --- a/src/trg-torrent-props-dialog.c +++ b/src/trg-torrent-props-dialog.c @@ -195,7 +195,7 @@ static GtkWidget *trg_props_limitsPage(TrgTorrentPropsDialog * win, tb = trg_json_widget_check_new(&priv->widgets, json, FIELD_DOWNLOAD_LIMITED, - _("Limit download speed (Kbps)"), NULL); + _("Limit download speed (KB/s)"), NULL); w = trg_json_widget_spin_new(&priv->widgets, json, FIELD_DOWNLOAD_LIMIT, tb, 0, INT_MAX, 1); @@ -203,7 +203,7 @@ static GtkWidget *trg_props_limitsPage(TrgTorrentPropsDialog * win, tb = trg_json_widget_check_new(&priv->widgets, json, FIELD_UPLOAD_LIMITED, - _("Limit upload speed (Kbps)"), NULL); + _("Limit upload speed (KB/s)"), NULL); w = trg_json_widget_spin_new(&priv->widgets, json, FIELD_UPLOAD_LIMIT, tb, 0, INT_MAX, 1); -- cgit v1.2.3