diff options
author | Alan Fitton <ajf@eth0.org.uk> | 2011-09-18 19:19:02 +0000 |
---|---|---|
committer | Alan Fitton <ajf@eth0.org.uk> | 2011-09-18 19:19:02 +0000 |
commit | c86f130d7c337d7f1e3937d0a18b990fbbc5abed (patch) | |
tree | c26f853306a38c93e4417a7e96223f09050d0615 /src | |
parent | 97b9420e91e83043b4640b25732241e75d80dfee (diff) |
fix for non-existant torrent files
Diffstat (limited to 'src')
-rw-r--r-- | src/requests.c | 15 | ||||
-rw-r--r-- | src/trg-file-parser.c | 3 | ||||
-rw-r--r-- | src/trg-torrent-add-dialog.c | 21 | ||||
-rw-r--r-- | src/util.c | 2 |
4 files changed, 30 insertions, 11 deletions
diff --git a/src/requests.c b/src/requests.c index 1923102..cc1f7ac 100644 --- a/src/requests.c +++ b/src/requests.c @@ -211,11 +211,22 @@ JsonNode *torrent_add_url(const gchar * url, gboolean paused) JsonNode *torrent_add(gchar * filename, gint flags) { - JsonNode *root = base_request(METHOD_TORRENT_ADD); - JsonObject *args = node_get_arguments(root); + JsonNode *root; + JsonObject *args; + + if (!g_file_test(filename, G_FILE_TEST_IS_REGULAR)) + { + g_error("file \"%s\" does not exist.", filename); + return NULL; + } + + root = base_request(METHOD_TORRENT_ADD); + args = node_get_arguments(root); + gchar *encodedFile = trg_base64encode(filename); if (encodedFile) json_object_set_string_member(args, PARAM_METAINFO, encodedFile); + json_object_set_boolean_member(args, PARAM_PAUSED, (flags & TORRENT_ADD_FLAG_PAUSED) == TORRENT_ADD_FLAG_PAUSED); g_free(encodedFile); diff --git a/src/trg-file-parser.c b/src/trg-file-parser.c index c79ec76..12f8b29 100644 --- a/src/trg-file-parser.c +++ b/src/trg-file-parser.c @@ -116,8 +116,9 @@ trg_torrent_file *trg_parse_torrent_file(const gchar *filename) mf = g_mapped_file_new(filename, FALSE, &error); if (error) { - g_error("%s",error->message); + g_message("%s",error->message); g_error_free(error); + g_mapped_file_unref(mf); return NULL; } else { top_node = be_decoden(g_mapped_file_get_contents(mf), g_mapped_file_get_length(mf)); diff --git a/src/trg-torrent-add-dialog.c b/src/trg-torrent-add-dialog.c index 9dc69b7..fb0ba57 100644 --- a/src/trg-torrent-add-dialog.c +++ b/src/trg-torrent-add-dialog.c @@ -144,9 +144,14 @@ static gpointer add_files_threadfunc(gpointer data) gchar *fileName = (gchar *) li->data; JsonNode *request = torrent_add(fileName, files_thread_data->flags); - JsonObject *args = node_get_arguments(request); + JsonObject *args; trg_response *response; + if (!request) + continue; + + args = node_get_arguments(request); + if (files_thread_data->extraArgs) add_set_common_args(args, files_thread_data->priority, files_thread_data->dir); @@ -230,12 +235,14 @@ 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, flags); - JsonObject *args = node_get_arguments(req); - gtk_tree_model_foreach(GTK_TREE_MODEL(priv->store), - add_file_indexes_foreachfunc, args); - add_set_common_args(args, priority, dir); - dispatch_async(priv->client, req, - on_generic_interactive_action, priv->parent); + if (req) { + JsonObject *args = node_get_arguments(req); + gtk_tree_model_foreach(GTK_TREE_MODEL(priv->store), + add_file_indexes_foreachfunc, args); + add_set_common_args(args, priority, dir); + dispatch_async(priv->client, req, + on_generic_interactive_action, priv->parent); + } g_str_slist_free(priv->filenames); } else { struct add_torrent_threadfunc_args *args = @@ -53,7 +53,7 @@ void g_str_slist_free(GSList * list) GRegex *trg_uri_host_regex_new(void) { - return g_regex_new("^[^:/?#]+:?//([^/?#]*)", G_REGEX_OPTIMIZE, 0, + return g_regex_new("^[^:/?#]+:?//([^/?#:]*)", G_REGEX_OPTIMIZE, 0, NULL); } |