summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar Alan Fitton <ajf@eth0.org.uk>2011-09-18 19:19:02 +0000
committerGravatar Alan Fitton <ajf@eth0.org.uk>2011-09-18 19:19:02 +0000
commitc86f130d7c337d7f1e3937d0a18b990fbbc5abed (patch)
treec26f853306a38c93e4417a7e96223f09050d0615 /src
parent97b9420e91e83043b4640b25732241e75d80dfee (diff)
fix for non-existant torrent files
Diffstat (limited to 'src')
-rw-r--r--src/requests.c15
-rw-r--r--src/trg-file-parser.c3
-rw-r--r--src/trg-torrent-add-dialog.c21
-rw-r--r--src/util.c2
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 =
diff --git a/src/util.c b/src/util.c
index 1bfc20b..a9123c6 100644
--- a/src/util.c
+++ b/src/util.c
@@ -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);
}