diff options
author | Alan Fitton <ajf@eth0.org.uk> | 2011-08-27 22:24:12 +0000 |
---|---|---|
committer | Alan Fitton <ajf@eth0.org.uk> | 2011-08-27 22:24:12 +0000 |
commit | ed3cec7420b188b85a1585479215f519a301fc37 (patch) | |
tree | 2e9cc02b7361e5f70e88f7f7809d7ff37dab0735 | |
parent | 7020a3a7db7ce7e192e7b84e0f359b85584fe1a4 (diff) |
issue 58
-rw-r--r-- | src/requests.c | 12 | ||||
-rw-r--r-- | src/requests.h | 2 | ||||
-rw-r--r-- | src/torrent.h | 3 | ||||
-rw-r--r-- | src/trg-main-window.c | 4 | ||||
-rw-r--r-- | src/trg-preferences-dialog.c | 4 | ||||
-rw-r--r-- | src/trg-prefs.c | 14 | ||||
-rw-r--r-- | src/trg-prefs.h | 3 | ||||
-rw-r--r-- | src/trg-torrent-add-dialog.c | 33 | ||||
-rw-r--r-- | src/trg-torrent-add-dialog.h | 2 |
9 files changed, 62 insertions, 15 deletions
diff --git a/src/requests.c b/src/requests.c index 252a1dd..0f56a8d 100644 --- a/src/requests.c +++ b/src/requests.c @@ -19,12 +19,14 @@ #include <stdio.h> +#include <glib/gstdio.h> #include <glib-object.h> #include <json-glib/json-glib.h> #include "protocol-constants.h" #include "base64.h" #include "json.h" +#include "torrent.h" #include "requests.h" static JsonNode *base_request(gchar * method); @@ -33,7 +35,7 @@ JsonNode *generic_request(gchar * method, JsonArray * ids) { JsonNode *root = base_request(method); - if (ids != NULL) + if (ids) json_object_set_array_member(node_get_arguments(root), PARAM_IDS, ids); @@ -174,15 +176,19 @@ JsonNode *torrent_add_url(const gchar * url, gboolean paused) return root; } -JsonNode *torrent_add(gchar * filename, gboolean paused) +JsonNode *torrent_add(gchar * filename, gint flags) { JsonNode *root = base_request(METHOD_TORRENT_ADD); JsonObject *args = node_get_arguments(root); gchar *encodedFile = base64encode(filename); if (encodedFile) json_object_set_string_member(args, PARAM_METAINFO, encodedFile); - json_object_set_boolean_member(args, PARAM_PAUSED, paused); + json_object_set_boolean_member(args, PARAM_PAUSED, (flags & TORRENT_ADD_FLAG_PAUSED) == TORRENT_ADD_FLAG_PAUSED); g_free(encodedFile); + + if ((flags & TORRENT_ADD_FLAG_DELETE)) + g_unlink(filename); + return root; } diff --git a/src/requests.h b/src/requests.h index 8bd5a10..b8a7cc5 100644 --- a/src/requests.h +++ b/src/requests.h @@ -34,7 +34,7 @@ JsonNode *torrent_start(JsonArray * array); JsonNode *torrent_verify(JsonArray * array); JsonNode *torrent_reannounce(JsonArray * array); JsonNode *torrent_remove(JsonArray * array, int removeData); -JsonNode *torrent_add(gchar * filename, gboolean paused); +JsonNode *torrent_add(gchar * filename, gint flags); JsonNode *torrent_add_url(const gchar * url, gboolean paused); JsonNode *torrent_set_location(JsonArray * array, gchar * location, gboolean move); diff --git a/src/torrent.h b/src/torrent.h index 85d9632..77a3004 100644 --- a/src/torrent.h +++ b/src/torrent.h @@ -34,6 +34,9 @@ #define FILTER_FLAG_TRACKER (1 << 9) /* 0x512 */ #define FILTER_FLAG_DIR (1 << 10) /* 0x1024 */ +#define TORRENT_ADD_FLAG_PAUSED (1 << 0) /* 0x01 */ +#define TORRENT_ADD_FLAG_DELETE (1 << 1) /* 0x02 */ + gint64 torrent_get_size(JsonObject * t); const gchar *torrent_get_name(JsonObject * t); gint64 torrent_get_rate_down(JsonObject * t); diff --git a/src/trg-main-window.c b/src/trg-main-window.c index 790caf9..7f63866 100644 --- a/src/trg-main-window.c +++ b/src/trg-main-window.c @@ -444,12 +444,12 @@ gboolean trg_add_from_filename(TrgMainWindow * win, gchar ** uris) gdk_threads_leave(); } else { struct add_torrent_threadfunc_args *args = - g_new(struct add_torrent_threadfunc_args, 1); + g_new0(struct add_torrent_threadfunc_args, 1); args->list = filesList; args->cb_data = win; args->client = client; - args->paused = trg_prefs_get_bool(prefs, TRG_PREFS_KEY_START_PAUSED, TRG_PREFS_GLOBAL); args->extraArgs = FALSE; + args->flags = trg_prefs_get_add_flags(prefs); launch_add_thread(args); } diff --git a/src/trg-preferences-dialog.c b/src/trg-preferences-dialog.c index b1ee78e..136e461 100644 --- a/src/trg-preferences-dialog.c +++ b/src/trg-preferences-dialog.c @@ -368,6 +368,10 @@ static GtkWidget *trg_prefs_behaviorPage(TrgPreferencesDialog * dlg) { TRG_PREFS_KEY_ADD_OPTIONS_DIALOG, TRG_PREFS_GLOBAL); hig_workarea_add_wide_control(t, &row, w); + w = trgp_check_new(dlg, _("Delete local .torrent file after adding"), + TRG_PREFS_KEY_DELETE_LOCAL_TORRENT, TRG_PREFS_GLOBAL); + hig_workarea_add_wide_control(t, &row, w); + return t; } diff --git a/src/trg-prefs.c b/src/trg-prefs.c index 7f57eed..319d91e 100644 --- a/src/trg-prefs.c +++ b/src/trg-prefs.c @@ -24,6 +24,7 @@ #include <glib/gprintf.h> #include "util.h" +#include "torrent.h" #include "trg-client.h" #include "trg-prefs.h" @@ -383,3 +384,16 @@ void trg_prefs_load(TrgPrefs *p) { priv->profile = json_array_get_object_element(profiles, profile_id); } } + +guint trg_prefs_get_add_flags(TrgPrefs *p) +{ + guint flags = 0x00; + + if (trg_prefs_get_bool(p, TRG_PREFS_KEY_START_PAUSED, TRG_PREFS_GLOBAL)) + flags |= TORRENT_ADD_FLAG_PAUSED; + + if (trg_prefs_get_bool(p, TRG_PREFS_KEY_DELETE_LOCAL_TORRENT, TRG_PREFS_GLOBAL)) + flags |= TORRENT_ADD_FLAG_DELETE; + + return flags; +} diff --git a/src/trg-prefs.h b/src/trg-prefs.h index b655d74..1ae07f5 100644 --- a/src/trg-prefs.h +++ b/src/trg-prefs.h @@ -53,6 +53,7 @@ #define TRG_PREFS_KEY_ADD_OPTIONS_DIALOG "add-options-dialog" #define TRG_PREFS_KEY_START_PAUSED "start-paused" #define TRG_PREFS_KEY_UPDATE_ACTIVE_ONLY "update-active-only" +#define TRG_PREFS_KEY_DELETE_LOCAL_TORRENT "delete-local-torrent" #define TRG_PREFS_KEY_TREE_VIEWS "tree-views" #define TRG_PREFS_KEY_TV_SORT_TYPE "sort-type" @@ -123,6 +124,8 @@ void trg_prefs_set_bool(TrgPrefs *p, gchar *key, gboolean value, int flags); gboolean trg_prefs_save(TrgPrefs *p); void trg_prefs_load(TrgPrefs *p); +guint trg_prefs_get_add_flags(TrgPrefs *p); + G_END_DECLS #endif /* _TRG_PREFS_H_ */ diff --git a/src/trg-torrent-add-dialog.c b/src/trg-torrent-add-dialog.c index ae44c0e..e3718c7 100644 --- a/src/trg-torrent-add-dialog.c +++ b/src/trg-torrent-add-dialog.c @@ -82,6 +82,7 @@ struct _TrgTorrentAddDialogPrivate { GtkWidget *file_list; GtkTreeStore *store; GtkWidget *paused_check; + GtkWidget *delete_check; }; static void @@ -137,11 +138,13 @@ static gpointer add_files_threadfunc(gpointer data) { struct add_torrent_threadfunc_args *files_thread_data = (struct add_torrent_threadfunc_args *) data; + GSList *li; for (li = files_thread_data->list; li; li = g_slist_next(li)) { + gchar *fileName = (gchar *) li->data; JsonNode *request = - torrent_add((gchar *) li->data, files_thread_data->paused); + torrent_add(fileName, files_thread_data->flags); JsonObject *args = node_get_arguments(request); JsonObject *response; gint status; @@ -214,10 +217,13 @@ trg_torrent_add_response_cb(GtkDialog * dlg, gint res_id, gpointer data) TrgTorrentAddDialogPrivate *priv = TRG_TORRENT_ADD_DIALOG_GET_PRIVATE(dlg); + guint flags = 0x00; + if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->paused_check))) + flags |= TORRENT_ADD_FLAG_PAUSED; + if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->delete_check))) + flags |= TORRENT_ADD_FLAG_DELETE; + if (res_id == GTK_RESPONSE_ACCEPT) { - gboolean paused = - gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON - (priv->paused_check)); gint priority = gtk_combo_box_get_active(GTK_COMBO_BOX(priv->priority_combo)) - 1; @@ -226,7 +232,7 @@ trg_torrent_add_response_cb(GtkDialog * dlg, gint res_id, gpointer data) if (g_slist_length(priv->filenames) == 1) { JsonNode *req = - torrent_add((gchar *) priv->filenames->data, paused); + torrent_add((gchar *) priv->filenames->data, flags); JsonObject *args = node_get_arguments(req); gtk_tree_model_foreach(GTK_TREE_MODEL(priv->store), add_file_indexes_foreachfunc, args); @@ -242,7 +248,7 @@ trg_torrent_add_response_cb(GtkDialog * dlg, gint res_id, gpointer data) args->client = priv->client; args->dir = g_strdup(dir); args->priority = priority; - args->paused = paused; + args->flags = flags; args->extraArgs = TRUE; launch_add_thread(args); @@ -832,11 +838,16 @@ static GObject *trg_torrent_add_dialog_constructor(GType type, priv->file_list = gtr_file_list_new(&priv->store); gtk_widget_set_sensitive(priv->file_list, FALSE); + priv->paused_check = gtk_check_button_new_with_mnemonic(_("Start _paused")); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(priv->paused_check), trg_prefs_get_bool(prefs, TRG_PREFS_KEY_START_PAUSED, TRG_PREFS_GLOBAL)); + priv->delete_check = gtk_check_button_new_with_mnemonic(_("Delete local .torrent file after adding")); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(priv->delete_check), + trg_prefs_get_bool(prefs, TRG_PREFS_KEY_DELETE_LOCAL_TORRENT, TRG_PREFS_GLOBAL)); + priv->priority_combo = gtr_priority_combo_new(); gtk_combo_box_set_active(GTK_COMBO_BOX(priv->priority_combo), 1); @@ -894,6 +905,11 @@ static GObject *trg_torrent_add_dialog_constructor(GType type, gtk_table_attach(GTK_TABLE(t), priv->paused_check, col, col + 2, row, row + 1, GTK_FILL, 0, 0, 0); + ++row; + col = 0; + gtk_table_attach(GTK_TABLE(t), priv->delete_check, col, col + 2, row, + row + 1, GTK_FILL, 0, 0, 0); + gtr_dialog_set_content(GTK_DIALOG(obj), t); g_signal_connect(G_OBJECT(obj), @@ -1003,12 +1019,13 @@ void trg_torrent_add_dialog(TrgMainWindow * win, TrgClient * client) gtk_widget_show_all(GTK_WIDGET(dialog)); } else { struct add_torrent_threadfunc_args *args = - g_new(struct add_torrent_threadfunc_args, 1); + g_new0(struct add_torrent_threadfunc_args, 1); + args->list = l; args->cb_data = win; args->client = client; - args->paused = trg_prefs_get_bool(prefs, TRG_PREFS_KEY_START_PAUSED, TRG_PREFS_GLOBAL); args->extraArgs = FALSE; + args->flags = trg_prefs_get_add_flags(prefs); launch_add_thread(args); } diff --git a/src/trg-torrent-add-dialog.h b/src/trg-torrent-add-dialog.h index 88ed9ab..0d95103 100644 --- a/src/trg-torrent-add-dialog.h +++ b/src/trg-torrent-add-dialog.h @@ -55,7 +55,7 @@ struct add_torrent_threadfunc_args { GSList *list; TrgClient *client; gpointer cb_data; - gboolean paused; + guint flags; gchar *dir; gint priority; gboolean extraArgs; |