From 77af0273de909f89c3c13e558432facd275ea379 Mon Sep 17 00:00:00 2001 From: Eric Kok Date: Fri, 10 Jul 2020 00:18:42 +0200 Subject: [PATCH] Allow Transmission users to set a base dir for ftp download url construction; fixes #518 --- .../java/org/transdroid/daemon/Daemon.java | 2 +- .../Transmission/TransmissionAdapter.java | 21 +++++++++++++++---- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/org/transdroid/daemon/Daemon.java b/app/src/main/java/org/transdroid/daemon/Daemon.java index 121f6674..aa05d946 100644 --- a/app/src/main/java/org/transdroid/daemon/Daemon.java +++ b/app/src/main/java/org/transdroid/daemon/Daemon.java @@ -329,7 +329,7 @@ public enum Daemon { } public static boolean needsManualPathSpecified(Daemon type) { - return type == uTorrent || type == BitTorrent || type == KTorrent || type == BuffaloNas; + return type == uTorrent || type == BitTorrent || type == KTorrent || type == BuffaloNas || type == Transmission; } public static boolean supportsFilePaths(Daemon type) { diff --git a/app/src/main/java/org/transdroid/daemon/Transmission/TransmissionAdapter.java b/app/src/main/java/org/transdroid/daemon/Transmission/TransmissionAdapter.java index 7acc1e85..53929e1a 100644 --- a/app/src/main/java/org/transdroid/daemon/Transmission/TransmissionAdapter.java +++ b/app/src/main/java/org/transdroid/daemon/Transmission/TransmissionAdapter.java @@ -17,13 +17,14 @@ */ package org.transdroid.daemon.Transmission; +import net.iharder.Base64; +import net.iharder.Base64.InputStream; + import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.DefaultHttpClient; -import net.iharder.Base64; -import net.iharder.Base64.InputStream; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; @@ -579,6 +580,18 @@ public class TransmissionAdapter implements IDaemonAdapter { private ArrayList parseJsonFileList(JSONObject response, Torrent torrent) throws JSONException { + String absoluteDir = torrent.getLocationDir(); + String relativeDir = settings.getDownloadDir(); + if (relativeDir == null) { + // We can make no assumptions except the torrent's location is the main download dir + relativeDir = ""; + } else if (absoluteDir.startsWith(relativeDir)) { + relativeDir = absoluteDir.substring(relativeDir.length()); + if (relativeDir.startsWith("/")) { + relativeDir = relativeDir.substring(1); + } + } + // Parse response ArrayList torrentfiles = new ArrayList<>(); JSONArray rarray = response.getJSONArray("torrents"); @@ -592,8 +605,8 @@ public class TransmissionAdapter implements IDaemonAdapter { torrentfiles.add(new TorrentFile( String.valueOf(i), file.getString(RPC_FILE_NAME), - file.getString(RPC_FILE_NAME), - torrent.getLocationDir() + file.getString(RPC_FILE_NAME), + relativeDir + file.getString(RPC_FILE_NAME), + absoluteDir + file.getString(RPC_FILE_NAME), file.getLong(RPC_FILE_LENGTH), file.getLong(RPC_FILE_COMPLETED), convertTransmissionPriority(stat.getBoolean(RPC_FILESTAT_WANTED), stat.getInt(RPC_FILESTAT_PRIORITY))));