summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Alan Fitton <ajf@eth0.org.uk>2011-08-27 22:24:12 +0000
committerGravatar Alan Fitton <ajf@eth0.org.uk>2011-08-27 22:24:12 +0000
commited3cec7420b188b85a1585479215f519a301fc37 (patch)
tree2e9cc02b7361e5f70e88f7f7809d7ff37dab0735
parent7020a3a7db7ce7e192e7b84e0f359b85584fe1a4 (diff)
issue 58
-rw-r--r--src/requests.c12
-rw-r--r--src/requests.h2
-rw-r--r--src/torrent.h3
-rw-r--r--src/trg-main-window.c4
-rw-r--r--src/trg-preferences-dialog.c4
-rw-r--r--src/trg-prefs.c14
-rw-r--r--src/trg-prefs.h3
-rw-r--r--src/trg-torrent-add-dialog.c33
-rw-r--r--src/trg-torrent-add-dialog.h2
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;