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-state-selector.c | 50 +++++++++++++++++++++++++++--------------------- 1 file changed, 28 insertions(+), 22 deletions(-) (limited to 'src/trg-state-selector.c') 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, -- cgit v1.2.3