summaryrefslogtreecommitdiff
path: root/src/trg-trackers-tree-view.c
diff options
context:
space:
mode:
authorGravatar Alan Fitton <ajf@eth0.org.uk>2011-02-18 17:50:29 +0000
committerGravatar Alan Fitton <ajf@eth0.org.uk>2011-02-18 17:50:29 +0000
commitb885c3371d3dfbcebd05e8b081d7089cc3475311 (patch)
treee497146dce9b6cee7fe5cbe1c935ac9fd3261f0a /src/trg-trackers-tree-view.c
parent8aacf43b3b4f21247a63b8301c952c6a8c98585e (diff)
remove trackers instantly (before an update)
Diffstat (limited to 'src/trg-trackers-tree-view.c')
-rw-r--r--src/trg-trackers-tree-view.c67
1 files changed, 26 insertions, 41 deletions
diff --git a/src/trg-trackers-tree-view.c b/src/trg-trackers-tree-view.c
index 3ed4d4d..c0f45b2 100644
--- a/src/trg-trackers-tree-view.c
+++ b/src/trg-trackers-tree-view.c
@@ -48,38 +48,6 @@ trg_trackers_tree_view_class_init(TrgTrackersTreeViewClass * klass)
g_type_class_add_private(klass, sizeof(TrgTrackersTreeViewPrivate));
}
-static void
-trg_trackers_tree_view_json_id_array_foreach(GtkTreeModel * model,
- GtkTreePath *
- path G_GNUC_UNUSED,
- GtkTreeIter * iter,
- gpointer data)
-{
- JsonArray *output = (JsonArray *) data;
- gint64 id;
- gtk_tree_model_get(model, iter, TRACKERCOL_ID, &id, -1);
- json_array_add_int_element(output, id);
-}
-
-static JsonArray *trackers_build_json_id_array(TrgTrackersTreeView * tv)
-{
- GtkTreeSelection *selection =
- gtk_tree_view_get_selection(GTK_TREE_VIEW(tv));
-
- JsonArray *ids = json_array_new();
- gtk_tree_selection_selected_foreach(selection,
- (GtkTreeSelectionForeachFunc)
- trg_trackers_tree_view_json_id_array_foreach,
- ids);
-
- if (json_array_get_length(ids) < 1) {
- json_array_unref(ids);
- return NULL;
- }
-
- return ids;
-}
-
void trg_trackers_tree_view_new_connection(TrgTrackersTreeView * tv,
trg_client * tc)
{
@@ -224,26 +192,43 @@ static void delete_tracker(GtkWidget * w, gpointer data)
{
TrgTrackersTreeViewPrivate *priv =
TRG_TRACKERS_TREE_VIEW_GET_PRIVATE(data);
- TrgTrackersTreeView *tv = TRG_TRACKERS_TREE_VIEW(data);
- TrgTrackersModel *model =
- TRG_TRACKERS_MODEL(gtk_tree_view_get_model(GTK_TREE_VIEW(data)));
+ GtkTreeView *tv = GTK_TREE_VIEW(data);
+ GList *selectionRefs = trg_tree_view_get_selected_refs_list(tv);
+ GtkTreeModel *model = gtk_tree_view_get_model(tv);
+ JsonArray *trackerIds = json_array_new();
+ JsonArray *torrentIds = json_array_new();
- JsonArray *trackerIds, *torrentIds;
JsonNode *req;
JsonObject *args;
+ GList *li;
+
+ for (li = selectionRefs; li != NULL; li = g_list_next(li)) {
+ GtkTreeRowReference *rr = (GtkTreeRowReference*)li->data;
+ GtkTreePath *path = gtk_tree_row_reference_get_path(rr);
+ if (path != NULL) {
+ gint64 trackerId;
+ GtkTreeIter trackerIter;
+ gtk_tree_model_get_iter(model, &trackerIter, path);
+ gtk_tree_model_get(model, &trackerIter, TRACKERCOL_ID, &trackerId, -1);
+ json_array_add_int_element(trackerIds, trackerId);
+ gtk_list_store_remove(GTK_LIST_STORE(model), &trackerIter);
+ gtk_tree_path_free(path);
+ }
+ gtk_tree_row_reference_free(rr);
+ }
+ g_list_free(selectionRefs);
- if ((trackerIds = trackers_build_json_id_array(tv)) == NULL)
- return;
-
- torrentIds = json_array_new();
json_array_add_int_element(torrentIds,
- trg_trackers_model_get_torrent_id(model));
+ trg_trackers_model_get_torrent_id(TRG_TRACKERS_MODEL(model)));
req = torrent_set(torrentIds);
args = node_get_arguments(req);
json_object_set_array_member(args, "trackerRemove", trackerIds);
+ trg_trackers_model_set_update_barrier(TRG_TRACKERS_MODEL(model),
+ priv->client->updateSerial + 1);
+
dispatch_async(priv->client, req, on_generic_interactive_action,
priv->win);
}