diff --git a/app/src/main/java/org/transdroid/core/gui/TorrentsActivity.java b/app/src/main/java/org/transdroid/core/gui/TorrentsActivity.java index c4051e19..a763be98 100644 --- a/app/src/main/java/org/transdroid/core/gui/TorrentsActivity.java +++ b/app/src/main/java/org/transdroid/core/gui/TorrentsActivity.java @@ -21,6 +21,8 @@ import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; +import java.io.UnsupportedEncodingException; +import java.net.URLDecoder; import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -945,6 +947,14 @@ public class TorrentsActivity extends Activity implements OnNavigationListener, @Background public void addTorrentByMagnetUrl(String url, String title) { + + // Since v39 Chrome sends application/x-www-form-urlencoded magnet links and most torrent clients do not understand those, so decode first + try { + url = URLDecoder.decode(url, "UTF-8"); + } catch (UnsupportedEncodingException e) { + // Ignore: UTF-8 is always available on Android devices + } + AddByMagnetUrlTask addByMagnetUrlTask = AddByMagnetUrlTask.create(currentConnection, url); if (!Daemon.supportsAddByMagnetUrl(currentConnection.getType())) { // No support for magnet links: forcefully let the task fail to report the error @@ -953,6 +963,7 @@ public class TorrentsActivity extends Activity implements OnNavigationListener, currentConnection.getType().name() + " does not support magnet links")), false); return; } + DaemonTaskResult result = addByMagnetUrlTask.execute(log); if (result instanceof DaemonTaskSuccessResult) { onTaskSucceeded((DaemonTaskSuccessResult) result, getString(R.string.result_added, title)); @@ -960,6 +971,7 @@ public class TorrentsActivity extends Activity implements OnNavigationListener, } else { onCommunicationError((DaemonTaskFailureResult) result, false); } + } @Background diff --git a/app/src/main/java/org/transdroid/daemon/Deluge/DelugeAdapter.java b/app/src/main/java/org/transdroid/daemon/Deluge/DelugeAdapter.java index 2d0be0a0..ceb9688e 100644 --- a/app/src/main/java/org/transdroid/daemon/Deluge/DelugeAdapter.java +++ b/app/src/main/java/org/transdroid/daemon/Deluge/DelugeAdapter.java @@ -274,8 +274,6 @@ public class DelugeAdapter implements IDaemonAdapter { // Request to add a magnet link by URL String magnet = ((AddByMagnetUrlTask) task).getUrl(); - // Deluge doesn't support (fully) application/x-www-form-urlencoded magnet links - magnet = URLDecoder.decode(magnet, "UTF-8"); params.put(magnet); params.put(new JSONArray());