summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/dispatch.c18
-rw-r--r--src/requests.c3
-rw-r--r--src/trg-cell-renderer-wanted.h1
-rw-r--r--src/trg-client.c1
-rw-r--r--src/trg-torrent-add-dialog.c33
5 files changed, 30 insertions, 26 deletions
diff --git a/src/dispatch.c b/src/dispatch.c
index 70a6cc6..b5fc216 100644
--- a/src/dispatch.c
+++ b/src/dispatch.c
@@ -27,7 +27,7 @@
#include "http.h"
#include "json.h"
-static void dispatch_async_threadfunc(gpointer task, gpointer user_data);
+static void dispatch_async_threadfunc(struct DispatchAsyncData *task, trg_client *client);
JsonObject *dispatch(trg_client * client, JsonNode * req, int *status)
{
@@ -74,22 +74,18 @@ JsonObject *dispatch(trg_client * client, JsonNode * req, int *status)
return deserialized;
}
-static void dispatch_async_threadfunc(gpointer task, gpointer user_data)
+static void dispatch_async_threadfunc(struct DispatchAsyncData *task, trg_client *client)
{
- trg_client *client = (trg_client*)user_data;
- struct DispatchAsyncData *args = (struct DispatchAsyncData*)task;
-
int status;
- JsonObject *result = dispatch(client, args->req, &status);
- if (args->callback)
- args->callback(result, status, args->data);
- g_free(args);
+ JsonObject *result = dispatch(client, task->req, &status);
+ if (task->callback)
+ task->callback(result, status, task->data);
+ g_free(task);
}
GThreadPool *dispatch_init_pool(trg_client *client)
{
- GThreadPool *pool = g_thread_pool_new((GFunc)dispatch_async_threadfunc, client, DISPATCH_POOL_SIZE, FALSE, NULL);
- return pool;
+ return g_thread_pool_new((GFunc)dispatch_async_threadfunc, client, DISPATCH_POOL_SIZE, FALSE, NULL);
}
gboolean dispatch_async(trg_client * client, JsonNode * req,
diff --git a/src/requests.c b/src/requests.c
index 36363bf..a891364 100644
--- a/src/requests.c
+++ b/src/requests.c
@@ -175,7 +175,8 @@ JsonNode *torrent_add(gchar * filename, gboolean paused)
JsonNode *root = base_request(METHOD_TORRENT_ADD);
JsonObject *args = node_get_arguments(root);
gchar *encodedFile = base64encode(filename);
- json_object_set_string_member(args, PARAM_METAINFO, encodedFile);
+ if (encodedFile)
+ json_object_set_string_member(args, PARAM_METAINFO, encodedFile);
json_object_set_boolean_member(args, PARAM_PAUSED, paused);
g_free(encodedFile);
return root;
diff --git a/src/trg-cell-renderer-wanted.h b/src/trg-cell-renderer-wanted.h
index f8f83d8..9f73206 100644
--- a/src/trg-cell-renderer-wanted.h
+++ b/src/trg-cell-renderer-wanted.h
@@ -17,7 +17,6 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-
#ifndef TRG_CELL_RENDERER_WANTED_H_
#define TRG_CELL_RENDERER_WANTED_H_
diff --git a/src/trg-client.c b/src/trg-client.c
index af02bc0..0ef1f2d 100644
--- a/src/trg-client.c
+++ b/src/trg-client.c
@@ -32,6 +32,7 @@
#include "trg-client.h"
#include "trg-preferences.h"
#include "util.h"
+#include "dispatch.h"
gboolean trg_client_supports_tracker_edit(trg_client * tc)
{
diff --git a/src/trg-torrent-add-dialog.c b/src/trg-torrent-add-dialog.c
index 3c0ffc9..5ea7a6a 100644
--- a/src/trg-torrent-add-dialog.c
+++ b/src/trg-torrent-add-dialog.c
@@ -154,7 +154,7 @@ static gpointer add_files_threadfunc(gpointer data)
(struct add_torrent_threadfunc_args *) data;
GSList *li;
- for (li = files_thread_data->list; li != NULL; li = g_slist_next(li)) {
+ for (li = files_thread_data->list; li; li = g_slist_next(li)) {
JsonNode *request =
torrent_add((gchar *) li->data, files_thread_data->paused);
JsonObject *args = node_get_arguments(request);
@@ -455,7 +455,6 @@ onViewPathToggled(GtkTreeView * view,
(G_OBJECT(col), TR_COLUMN_ID_KEY));
if ((cid == FC_PRIORITY) || (cid == FC_ENABLED)) {
GtkTreeIter iter;
- /*GArray *indices = getActiveFilesForPath(view, path); */
GtkTreeModel *model = gtk_tree_view_get_model(view);
gtk_tree_model_get_iter(model, &iter, path);
@@ -745,11 +744,19 @@ static void store_add_node(GtkTreeStore * store, GtkTreeIter * parent,
}
}
- for (li = node->children; li != NULL; li = g_list_next(li))
+ for (li = node->children; li; li = g_list_next(li))
store_add_node(store, node->name ? &child : NULL,
(trg_torrent_file_node *) li->data);
}
+static void torrent_not_parsed_warning(GtkWindow *parent)
+{
+ GtkWidget *dialog = gtk_message_dialog_new(parent, GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_WARNING, GTK_BUTTONS_OK, _("Unable to parse torrent file. File preferences unavailable, but you can still try uploading it."));
+ gtk_window_set_transient_for(GTK_WINDOW(dialog), parent);
+ gtk_dialog_run(GTK_DIALOG(dialog));
+ gtk_widget_destroy(dialog);
+}
+
static void trg_torrent_add_dialog_set_filenames(TrgTorrentAddDialog * d,
GSList * filenames)
{
@@ -764,11 +771,18 @@ static void trg_torrent_add_dialog_set_filenames(TrgTorrentAddDialog * d,
gchar *file_name = (gchar *) filenames->data;
gchar *file_name_base = g_path_get_basename(file_name);
trg_torrent_file *tor_data = trg_parse_torrent_file(file_name);
- store_add_node(priv->store, NULL, tor_data->top_node);
- trg_torrent_file_free(tor_data);
+
gtk_button_set_label(chooser, file_name_base);
g_free(file_name_base);
- gtk_widget_set_sensitive(priv->file_list, TRUE);
+
+ if (!tor_data) {
+ torrent_not_parsed_warning(GTK_WINDOW(priv->parent));
+ gtk_widget_set_sensitive(priv->file_list, FALSE);
+ } else {
+ store_add_node(priv->store, NULL, tor_data->top_node);
+ trg_torrent_file_free(tor_data);
+ gtk_widget_set_sensitive(priv->file_list, TRUE);
+ }
} else {
gtk_widget_set_sensitive(priv->file_list, FALSE);
if (nfiles < 1) {
@@ -918,13 +932,6 @@ static GObject *trg_torrent_add_dialog_constructor(GType type,
++col;
priv->dest_combo = trg_destination_folder_new(priv->client);
- /*if( !gtk_file_chooser_set_current_folder( GTK_FILE_CHOOSER( w ),
- data->downloadDir ) )
- g_warning( "couldn't select '%s'", data->downloadDir );
- list = get_recent_destinations( );
- for( walk = list; walk; walk = walk->next )
- gtk_file_chooser_add_shortcut_folder( GTK_FILE_CHOOSER( w ), walk->data, NULL );
- g_slist_free( list ); */
gtk_table_attach(GTK_TABLE(t), priv->dest_combo, col, col + 1, row,
row + 1, ~0, 0, 0, 0);
gtk_label_set_mnemonic_widget(GTK_LABEL(l), priv->dest_combo);