summaryrefslogtreecommitdiff
path: root/src/requests.c
diff options
context:
space:
mode:
authorGravatar Alan Fitton <ajf@eth0.org.uk>2011-10-01 18:09:23 +0000
committerGravatar Alan Fitton <ajf@eth0.org.uk>2011-10-01 18:09:23 +0000
commit786bfb4ef30c02d2aa1336effcf258d786857def (patch)
treefc597ed2b42626ab3dd259623e70f9791ab7c06d /src/requests.c
parentd5df15f1fec2971e05a9352585414d92580b7ab1 (diff)
accept URLs and magnet links as application arguments, DHT on magnet warning, fix files model to accept new files after first update (required for magnet).
Diffstat (limited to 'src/requests.c')
-rw-r--r--src/requests.c29
1 files changed, 20 insertions, 9 deletions
diff --git a/src/requests.c b/src/requests.c
index c77217d..fe3f90e 100644
--- a/src/requests.c
+++ b/src/requests.c
@@ -209,29 +209,40 @@ JsonNode *torrent_add_url(const gchar * url, gboolean paused)
return root;
}
-JsonNode *torrent_add(gchar * filename, gint flags)
+JsonNode *torrent_add(gchar * target, gint flags)
{
JsonNode *root;
JsonObject *args;
+ gboolean isMagnet = g_str_has_prefix(target, "magnet:");
+ gboolean isUri = isMagnet || g_regex_match_simple ("^(([^:/?#]+):)?(//([^/?#]*))?", target, 0, 0);
+ gchar *encodedFile;
- if (!g_file_test(filename, G_FILE_TEST_IS_REGULAR))
+ if (!isUri && !g_file_test(target, G_FILE_TEST_IS_REGULAR))
{
- g_error("file \"%s\" does not exist.", filename);
+ g_error("file \"%s\" does not exist.", target);
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);
+ if (isUri) {
+ json_object_set_string_member(args, PARAM_FILENAME, target);
+ } else {
+ encodedFile = trg_base64encode(target);
+ if (encodedFile) {
+ json_object_set_string_member(args, PARAM_METAINFO, encodedFile);
+ g_free(encodedFile);
+ } else {
+ g_error("unable to base64 encode file \"%s\".", target);
+ return NULL;
+ }
+ }
- json_object_set_boolean_member(args, PARAM_PAUSED, (flags & TORRENT_ADD_FLAG_PAUSED) == TORRENT_ADD_FLAG_PAUSED);
- g_free(encodedFile);
+ json_object_set_boolean_member(args, PARAM_PAUSED, (flags & TORRENT_ADD_FLAG_PAUSED));
if ((flags & TORRENT_ADD_FLAG_DELETE))
- g_unlink(filename);
+ g_unlink(target);
return root;
}