From 22cb487080baf47c937b458a28e0e09e05c0cc05 Mon Sep 17 00:00:00 2001 From: Eric Kok Date: Mon, 8 Jul 2013 20:17:25 +0200 Subject: [PATCH] Added a dummy client adapter for fast UI testing. --- core/libs/transdroid-connect.jar | Bin 250075 -> 256540 bytes core/res/values/strings.xml | 2 + lib/src/org/transdroid/daemon/Daemon.java | 47 +-- .../org/transdroid/daemon/DummyAdapter.java | 276 ++++++++++++++++++ .../org/transdroid/daemon/TorrentFile.java | 4 + 5 files changed, 311 insertions(+), 18 deletions(-) create mode 100644 lib/src/org/transdroid/daemon/DummyAdapter.java diff --git a/core/libs/transdroid-connect.jar b/core/libs/transdroid-connect.jar index d3f9e9d44ff25e9122ac254ca6295ba35d4265af..4fb67c710dd3e0d335101af685f572f4930a0b94 100644 GIT binary patch delta 33226 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 K+eaW%sQ&>%PyzY? diff --git a/core/res/values/strings.xml b/core/res/values/strings.xml index 7703fa51..84e2540e 100644 --- a/core/res/values/strings.xml +++ b/core/res/values/strings.xml @@ -219,6 +219,7 @@ Buffalo NAS -1.31 Deluge 1.2+ DLink Router BT + Dummy Ktorrent qBittorrent rTorrent @@ -234,6 +235,7 @@ daemon_buffalonas daemon_deluge daemon_dlinkrouterbt + daemon_dummy daemon_ktorrent daemon_qbittorrent daemon_rtorrent diff --git a/lib/src/org/transdroid/daemon/Daemon.java b/lib/src/org/transdroid/daemon/Daemon.java index edd9301b..847175f2 100644 --- a/lib/src/org/transdroid/daemon/Daemon.java +++ b/lib/src/org/transdroid/daemon/Daemon.java @@ -59,6 +59,11 @@ public enum Daemon { return new DelugeAdapter(settings); } }, + Dummy { + public IDaemonAdapter createAdapter(DaemonSettings settings) { + return new DummyAdapter(settings); + } + }, DLinkRouterBT { public IDaemonAdapter createAdapter(DaemonSettings settings) { return new DLinkRouterBTAdapter(settings); @@ -132,6 +137,8 @@ public enum Daemon { return "daemon_deluge"; case DLinkRouterBT: return "daemon_dlinkrouterbt"; + case Dummy: + return "daemon_dummy"; case KTorrent: return "daemon_ktorrent"; case qBittorrent: @@ -178,6 +185,9 @@ public enum Daemon { if (daemonCode.equals("daemon_dlinkrouterbt")) { return DLinkRouterBT; } + if (daemonCode.equals("daemon_dummy")) { + return Dummy; + } if (daemonCode.equals("daemon_ktorrent")) { return KTorrent; } @@ -217,6 +227,7 @@ public enum Daemon { case BuffaloNas: return 8080; case DLinkRouterBT: + case Dummy: case rTorrent: case Tfb4rt: case BitComet: @@ -240,19 +251,19 @@ public enum Daemon { } public static boolean supportsStats(Daemon type) { - return type == Transmission || type == Bitflu; + return type == Transmission || type == Bitflu || type == Dummy; } public static boolean supportsAvailability(Daemon type) { - return type == uTorrent || type == BitTorrent || type == DLinkRouterBT || type == Transmission || type == Vuze || type == BuffaloNas; + return type == uTorrent || type == BitTorrent || type == DLinkRouterBT || type == Transmission || type == Vuze || type == BuffaloNas || type == Dummy; } public static boolean supportsFileListing(Daemon type) { - return type == Synology || type == Transmission || type == uTorrent || type == BitTorrent || type == KTorrent || type == Deluge || type == rTorrent || type == Vuze || type == DLinkRouterBT || type == Bitflu || type == qBittorrent || type == BuffaloNas || type == BitComet; + return type == Synology || type == Transmission || type == uTorrent || type == BitTorrent || type == KTorrent || type == Deluge || type == rTorrent || type == Vuze || type == DLinkRouterBT || type == Bitflu || type == qBittorrent || type == BuffaloNas || type == BitComet || type == Dummy; } public static boolean supportsFineDetails(Daemon type) { - return type == uTorrent || type == BitTorrent || type == Daemon.Transmission || type == Deluge || type == rTorrent || type == qBittorrent; + return type == uTorrent || type == BitTorrent || type == Daemon.Transmission || type == Deluge || type == rTorrent || type == qBittorrent || type == Dummy; } public static boolean needsManualPathSpecified(Daemon type) { @@ -260,23 +271,23 @@ public enum Daemon { } public static boolean supportsFilePaths(Daemon type) { - return type == uTorrent || type == BitTorrent || type == Vuze || type == Deluge || type == Transmission || type == rTorrent || type == KTorrent || type == BuffaloNas; + return type == uTorrent || type == BitTorrent || type == Vuze || type == Deluge || type == Transmission || type == rTorrent || type == KTorrent || type == BuffaloNas || type == Dummy; } public static boolean supportsStoppingStarting(Daemon type) { - return type == uTorrent || type == rTorrent || type == BitTorrent || type == BitComet; + return type == uTorrent || type == rTorrent || type == BitTorrent || type == BitComet || type == Dummy; } public static boolean supportsForcedStarting(Daemon type) { - return type == uTorrent || type == BitTorrent; + return type == uTorrent || type == BitTorrent || type == Dummy; } public static boolean supportsCustomFolder(Daemon type) { - return type == rTorrent || type == Tfb4rt || type == Bitflu || type == Deluge || type == Transmission; + return type == rTorrent || type == Tfb4rt || type == Bitflu || type == Deluge || type == Transmission || type == Dummy; } public static boolean supportsSetTransferRates(Daemon type) { - return type == Deluge || type == Transmission || type == uTorrent || type == BitTorrent || type == Deluge || type == rTorrent || type == Vuze || type == BuffaloNas || type == BitComet; + return type == Deluge || type == Transmission || type == uTorrent || type == BitTorrent || type == Deluge || type == rTorrent || type == Vuze || type == BuffaloNas || type == BitComet || type == Dummy; } public static boolean supportsAddByFile(Daemon type) { @@ -285,39 +296,39 @@ public enum Daemon { } public static boolean supportsAddByMagnetUrl(Daemon type) { - return type == uTorrent || type == BitTorrent || type == Transmission || type == Synology || type == Deluge || type == Bitflu || type == KTorrent || type == rTorrent || type == qBittorrent || type == BitComet; + return type == uTorrent || type == BitTorrent || type == Transmission || type == Synology || type == Deluge || type == Bitflu || type == KTorrent || type == rTorrent || type == qBittorrent || type == BitComet || type == Dummy; } public static boolean supportsRemoveWithData(Daemon type) { - return type == uTorrent || type == Vuze || type == Transmission || type == Deluge || type == BitTorrent || type == Tfb4rt || type == DLinkRouterBT || type == Bitflu || type == qBittorrent || type == BuffaloNas || type == BitComet || type == rTorrent; + return type == uTorrent || type == Vuze || type == Transmission || type == Deluge || type == BitTorrent || type == Tfb4rt || type == DLinkRouterBT || type == Bitflu || type == qBittorrent || type == BuffaloNas || type == BitComet || type == rTorrent || type == Dummy; } public static boolean supportsFilePrioritySetting(Daemon type) { - return type == BitTorrent || type == uTorrent || type == Transmission || type == KTorrent || type == rTorrent || type == Vuze || type == Deluge || type == qBittorrent; + return type == BitTorrent || type == uTorrent || type == Transmission || type == KTorrent || type == rTorrent || type == Vuze || type == Deluge || type == qBittorrent || type == Dummy; } public static boolean supportsDateAdded(Daemon type) { - return type == Vuze || type == Transmission || type == rTorrent || type == Bitflu || type == BitComet; + return type == Vuze || type == Transmission || type == rTorrent || type == Bitflu || type == BitComet || type == Dummy; } public static boolean supportsLabels(Daemon type) { - return type == uTorrent || type == BitTorrent || type == Deluge || type == BitComet || type == rTorrent; // || type == Vuze + return type == uTorrent || type == BitTorrent || type == Deluge || type == BitComet || type == rTorrent || type == Dummy; // || type == Vuze } public static boolean supportsSetLabel(Daemon type) { - return type == uTorrent || type == BitTorrent || type == rTorrent; + return type == uTorrent || type == BitTorrent || type == rTorrent || type == Dummy; } public static boolean supportsSetDownloadLocation(Daemon type) { - return type == Transmission || type == Deluge; + return type == Transmission || type == Deluge || type == Dummy; } public static boolean supportsSetAlternativeMode(Daemon type) { - return type == Transmission; + return type == Transmission || type == Dummy; } public static boolean supportsSetTrackers(Daemon type) { - return type == uTorrent || type == BitTorrent || type == Deluge; + return type == uTorrent || type == BitTorrent || type == Deluge || type == Dummy; } public static boolean supportsExtraPassword(Daemon type) { diff --git a/lib/src/org/transdroid/daemon/DummyAdapter.java b/lib/src/org/transdroid/daemon/DummyAdapter.java new file mode 100644 index 00000000..746f66b8 --- /dev/null +++ b/lib/src/org/transdroid/daemon/DummyAdapter.java @@ -0,0 +1,276 @@ +/* + * This file is part of Transdroid + * + * Transdroid is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Transdroid is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Transdroid. If not, see . + * + */ +package org.transdroid.daemon; + +import java.io.File; +import java.net.URI; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Date; +import java.util.List; +import java.util.Random; + +import org.transdroid.daemon.DaemonException.ExceptionType; +import org.transdroid.daemon.task.AddByFileTask; +import org.transdroid.daemon.task.AddByMagnetUrlTask; +import org.transdroid.daemon.task.AddByUrlTask; +import org.transdroid.daemon.task.DaemonTask; +import org.transdroid.daemon.task.DaemonTaskFailureResult; +import org.transdroid.daemon.task.DaemonTaskResult; +import org.transdroid.daemon.task.DaemonTaskSuccessResult; +import org.transdroid.daemon.task.GetFileListTask; +import org.transdroid.daemon.task.GetFileListTaskSuccessResult; +import org.transdroid.daemon.task.GetTorrentDetailsTask; +import org.transdroid.daemon.task.GetTorrentDetailsTaskSuccessResult; +import org.transdroid.daemon.task.RetrieveTask; +import org.transdroid.daemon.task.RetrieveTaskSuccessResult; +import org.transdroid.daemon.task.SetFilePriorityTask; +import org.transdroid.daemon.task.SetLabelTask; +import org.transdroid.daemon.util.DLog; + +import android.net.Uri; + +/** + * A dummy adapter that does not communicate with some server, but maintains a local list of dummy data (reset every + * time it is recreated) to simplify testing. + * @author erickok + */ +public class DummyAdapter implements IDaemonAdapter { + + private static final String LOG_NAME = "Dummy daemon"; + + private DaemonSettings settings; + private List dummyTorrents; + private List