You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
432 lines
16 KiB
432 lines
16 KiB
/* |
|
* This file is part of Transdroid <http://www.transdroid.org> |
|
* |
|
* 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 <http://www.gnu.org/licenses/>. |
|
* |
|
*/ |
|
package org.transdroid.daemon; |
|
|
|
import org.transdroid.daemon.adapters.aria2c.Aria2Adapter; |
|
import org.transdroid.daemon.adapters.bitComet.BitCometAdapter; |
|
import org.transdroid.daemon.adapters.bitflu.BitfluAdapter; |
|
import org.transdroid.daemon.adapters.buffaloNas.BuffaloNasAdapter; |
|
import org.transdroid.daemon.adapters.dLinkRouterBT.DLinkRouterBTAdapter; |
|
import org.transdroid.daemon.adapters.deluge.DelugeAdapter; |
|
import org.transdroid.daemon.adapters.deluge.DelugeRpcAdapter; |
|
import org.transdroid.daemon.adapters.kTorrent.KTorrentAdapter; |
|
import org.transdroid.daemon.adapters.qBittorrent.QBittorrentAdapter; |
|
import org.transdroid.daemon.adapters.rTorrent.RTorrentAdapter; |
|
import org.transdroid.daemon.adapters.synology.SynologyAdapter; |
|
import org.transdroid.daemon.adapters.tTorrent.TTorrentAdapter; |
|
import org.transdroid.daemon.adapters.tfb4rt.Tfb4rtAdapter; |
|
import org.transdroid.daemon.adapters.transmission.TransmissionAdapter; |
|
import org.transdroid.daemon.adapters.uTorrent.UTorrentAdapter; |
|
import org.transdroid.daemon.adapters.vuze.VuzeAdapter; |
|
|
|
/** |
|
* Factory for new instances of server daemons, based on user settings. |
|
* |
|
* @author erickok |
|
*/ |
|
public enum Daemon { |
|
|
|
Aria2 { |
|
public IDaemonAdapter createAdapter(DaemonSettings settings) { |
|
return new Aria2Adapter(settings); |
|
} |
|
}, |
|
Bitflu { |
|
public IDaemonAdapter createAdapter(DaemonSettings settings) { |
|
return new BitfluAdapter(settings); |
|
} |
|
}, |
|
BitTorrent { |
|
public IDaemonAdapter createAdapter(DaemonSettings settings) { |
|
return new UTorrentAdapter(settings); |
|
} |
|
}, |
|
BuffaloNas { |
|
public IDaemonAdapter createAdapter(DaemonSettings settings) { |
|
return new BuffaloNasAdapter(settings); |
|
} |
|
}, |
|
Deluge { |
|
public IDaemonAdapter createAdapter(DaemonSettings settings) { |
|
return new DelugeAdapter(settings); |
|
} |
|
}, |
|
DelugeRpc { |
|
public IDaemonAdapter createAdapter(DaemonSettings settings) { |
|
return new DelugeRpcAdapter(settings, false); |
|
} |
|
}, |
|
Deluge2Rpc { |
|
public IDaemonAdapter createAdapter(DaemonSettings settings) { |
|
return new DelugeRpcAdapter(settings, true); |
|
} |
|
}, |
|
Dummy { |
|
public IDaemonAdapter createAdapter(DaemonSettings settings) { |
|
return new DummyAdapter(settings); |
|
} |
|
}, |
|
DLinkRouterBT { |
|
public IDaemonAdapter createAdapter(DaemonSettings settings) { |
|
return new DLinkRouterBTAdapter(settings); |
|
} |
|
}, |
|
KTorrent { |
|
public IDaemonAdapter createAdapter(DaemonSettings settings) { |
|
return new KTorrentAdapter(settings); |
|
} |
|
}, |
|
qBittorrent { |
|
public IDaemonAdapter createAdapter(DaemonSettings settings) { |
|
return new QBittorrentAdapter(settings); |
|
} |
|
}, |
|
rTorrent { |
|
public IDaemonAdapter createAdapter(DaemonSettings settings) { |
|
return new RTorrentAdapter(settings); |
|
} |
|
}, |
|
Tfb4rt { |
|
public IDaemonAdapter createAdapter(DaemonSettings settings) { |
|
return new Tfb4rtAdapter(settings); |
|
} |
|
}, |
|
tTorrent { |
|
public IDaemonAdapter createAdapter(DaemonSettings settings) { |
|
return new TTorrentAdapter(settings); |
|
} |
|
}, |
|
Synology { |
|
public IDaemonAdapter createAdapter(DaemonSettings settings) { |
|
return new SynologyAdapter(settings); |
|
} |
|
}, |
|
Transmission { |
|
public IDaemonAdapter createAdapter(DaemonSettings settings) { |
|
return new TransmissionAdapter(settings); |
|
} |
|
}, |
|
uTorrent { |
|
public IDaemonAdapter createAdapter(DaemonSettings settings) { |
|
return new UTorrentAdapter(settings); |
|
} |
|
}, |
|
Vuze { |
|
public IDaemonAdapter createAdapter(DaemonSettings settings) { |
|
return new VuzeAdapter(settings); |
|
} |
|
}, |
|
BitComet { |
|
public IDaemonAdapter createAdapter(DaemonSettings settings) { |
|
return new BitCometAdapter(settings); |
|
} |
|
}; |
|
|
|
/** |
|
* Returns the code as used in preferences matching the given daemon type |
|
* |
|
* @return A string of the form 'daemon_<type>' that represents the daemon's enum value |
|
*/ |
|
public static String toCode(Daemon type) { |
|
if (type == null) |
|
return null; |
|
switch (type) { |
|
case Aria2: |
|
return "daemon_aria2"; |
|
case BitComet: |
|
return "daemon_bitcomet"; |
|
case Bitflu: |
|
return "daemon_bitflue"; |
|
case BitTorrent: |
|
return "daemon_bittorrent"; |
|
case BuffaloNas: |
|
return "daemon_buffalonas"; |
|
case Deluge: |
|
return "daemon_deluge"; |
|
case DelugeRpc: |
|
return "daemon_deluge_rpc"; |
|
case Deluge2Rpc: |
|
return "daemon_deluge2_rpc"; |
|
case DLinkRouterBT: |
|
return "daemon_dlinkrouterbt"; |
|
case Dummy: |
|
return "daemon_dummy"; |
|
case KTorrent: |
|
return "daemon_ktorrent"; |
|
case qBittorrent: |
|
return "daemon_qbittorrent"; |
|
case rTorrent: |
|
return "daemon_rtorrent"; |
|
case Synology: |
|
return "daemon_synology"; |
|
case Tfb4rt: |
|
return "daemon_tfb4rt"; |
|
case tTorrent: |
|
return "daemon_ttorrent"; |
|
case Transmission: |
|
return "daemon_transmission"; |
|
case uTorrent: |
|
return "daemon_utorrent"; |
|
case Vuze: |
|
return "daemon_vuze"; |
|
default: |
|
return null; |
|
} |
|
} |
|
|
|
/** |
|
* Returns the daemon enum type based on the code used in the user preferences. |
|
* |
|
* @param daemonCode The 'daemon_<name>' type code |
|
* @return The corresponding daemon enum value, or null if it was an empty or invalid code |
|
*/ |
|
public static Daemon fromCode(String daemonCode) { |
|
if (daemonCode == null) { |
|
return null; |
|
} |
|
if (daemonCode.equals("daemon_aria2")) { |
|
return Aria2; |
|
} |
|
if (daemonCode.equals("daemon_bitcomet")) { |
|
return BitComet; |
|
} |
|
if (daemonCode.equals("daemon_bitflu")) { |
|
return Bitflu; |
|
} |
|
if (daemonCode.equals("daemon_bittorrent")) { |
|
return BitTorrent; |
|
} |
|
if (daemonCode.equals("daemon_buffalonas")) { |
|
return BuffaloNas; |
|
} |
|
if (daemonCode.equals("daemon_deluge")) { |
|
return Deluge; |
|
} |
|
if (daemonCode.equals("daemon_deluge_rpc")) { |
|
return DelugeRpc; |
|
} |
|
if (daemonCode.equals("daemon_deluge2_rpc")) { |
|
return Deluge2Rpc; |
|
} |
|
if (daemonCode.equals("daemon_dlinkrouterbt")) { |
|
return DLinkRouterBT; |
|
} |
|
if (daemonCode.equals("daemon_dummy")) { |
|
return Dummy; |
|
} |
|
if (daemonCode.equals("daemon_ktorrent")) { |
|
return KTorrent; |
|
} |
|
if (daemonCode.equals("daemon_qbittorrent")) { |
|
return qBittorrent; |
|
} |
|
if (daemonCode.equals("daemon_rtorrent")) { |
|
return rTorrent; |
|
} |
|
if (daemonCode.equals("daemon_synology")) { |
|
return Synology; |
|
} |
|
if (daemonCode.equals("daemon_tfb4rt")) { |
|
return Tfb4rt; |
|
} |
|
if (daemonCode.equals("daemon_ttorrent")) { |
|
return tTorrent; |
|
} |
|
if (daemonCode.equals("daemon_transmission")) { |
|
return Transmission; |
|
} |
|
if (daemonCode.equals("daemon_utorrent")) { |
|
return uTorrent; |
|
} |
|
if (daemonCode.equals("daemon_vuze")) { |
|
return Vuze; |
|
} |
|
return null; |
|
} |
|
|
|
public static int getDefaultPortNumber(Daemon type, boolean ssl) { |
|
if (type == null) { |
|
return 8080; // Only happens when the daemon type isn't even set yet |
|
} |
|
switch (type) { |
|
case BitTorrent: |
|
case uTorrent: |
|
case KTorrent: |
|
case qBittorrent: |
|
case BuffaloNas: |
|
return 8080; |
|
case DLinkRouterBT: |
|
case Dummy: |
|
case rTorrent: |
|
case Tfb4rt: |
|
case BitComet: |
|
if (ssl) { |
|
return 443; |
|
} else { |
|
return 80; |
|
} |
|
case Deluge: |
|
return 8112; |
|
|
|
case DelugeRpc: |
|
case Deluge2Rpc: |
|
return DelugeRpcAdapter.DEFAULT_PORT; |
|
|
|
case Synology: |
|
if (ssl) { |
|
return 5001; |
|
} else { |
|
return 5000; |
|
} |
|
case Transmission: |
|
return 9091; |
|
case Bitflu: |
|
return 4081; |
|
case Vuze: |
|
return 6884; |
|
case Aria2: |
|
return 6800; |
|
case tTorrent: |
|
return 1080; |
|
} |
|
return 8080; |
|
} |
|
|
|
public static boolean supportsStats(Daemon type) { |
|
return type == Transmission || type == qBittorrent || type == Dummy; |
|
} |
|
|
|
public static boolean supportsAvailability(Daemon type) { |
|
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 == DelugeRpc || type == Deluge2Rpc || type == rTorrent || type == Vuze || type == DLinkRouterBT || type == Bitflu |
|
|| type == qBittorrent || type == BuffaloNas || type == BitComet || type == Aria2 || type == tTorrent || type == Dummy; |
|
} |
|
|
|
public static boolean supportsFineDetails(Daemon type) { |
|
return type == uTorrent || type == BitTorrent || type == Daemon.Transmission || type == Deluge || type == DelugeRpc |
|
|| type == Deluge2Rpc || type == rTorrent || type == qBittorrent || type == Aria2 || type == Dummy; |
|
} |
|
|
|
public static boolean needsManualPathSpecified(Daemon type) { |
|
return type == uTorrent || type == BitTorrent || type == KTorrent || type == BuffaloNas || type == Transmission; |
|
} |
|
|
|
public static boolean supportsFilePaths(Daemon type) { |
|
return type == uTorrent || type == BitTorrent || type == Vuze || type == Deluge || type == DelugeRpc || type == Deluge2Rpc |
|
|| type == Transmission || type == rTorrent || type == KTorrent || type == BuffaloNas || type == Aria2 || type == Dummy; |
|
} |
|
|
|
public static boolean supportsStoppingStarting(Daemon type) { |
|
return type == uTorrent || type == rTorrent || type == BitTorrent || type == Dummy; |
|
} |
|
|
|
public static boolean supportsForcedStarting(Daemon type) { |
|
return type == uTorrent || type == BitTorrent || type == Dummy; |
|
} |
|
|
|
public static boolean supportsCustomFolder(Daemon type) { |
|
return type == rTorrent || type == Tfb4rt || type == Bitflu || type == Deluge || type == DelugeRpc || type == Deluge2Rpc || type == Aria2 |
|
|| type == Transmission || type == BitTorrent || type == uTorrent || type == qBittorrent || type == Dummy; |
|
} |
|
|
|
public static boolean supportsSetTransferRates(Daemon type) { |
|
return type == Deluge || type == DelugeRpc || type == Deluge2Rpc |
|
|| type == Transmission || type == uTorrent || type == BitTorrent || type == rTorrent || type == Vuze || type == BuffaloNas |
|
|| type == BitComet || type == Aria2 || type == qBittorrent || type == Dummy; |
|
} |
|
|
|
public static boolean supportsAddByFile(Daemon type) { |
|
// Supported by every client except Bitflu |
|
return type != Bitflu; |
|
} |
|
|
|
public static boolean supportsAddByMagnetUrl(Daemon type) { |
|
return type == uTorrent || type == BitTorrent || type == Transmission || type == Synology || type == Deluge || type == DelugeRpc |
|
|| type == Deluge2Rpc || type == Bitflu || type == KTorrent || type == rTorrent || type == qBittorrent || type == BitComet |
|
|| type == Aria2 || type == tTorrent || type == Dummy; |
|
} |
|
|
|
public static boolean supportsRemoveWithData(Daemon type) { |
|
return type == uTorrent || type == Vuze || type == Transmission || type == Deluge || type == DelugeRpc || type == Deluge2Rpc |
|
|| type == BitTorrent || type == Tfb4rt || type == DLinkRouterBT || type == Bitflu || type == qBittorrent || type == BuffaloNas |
|
|| type == BitComet || type == rTorrent || type == Aria2 || type == tTorrent || type == Dummy; |
|
} |
|
|
|
public static boolean supportsFilePrioritySetting(Daemon type) { |
|
return type == BitTorrent || type == uTorrent || type == Transmission || type == KTorrent || type == rTorrent || type == Vuze |
|
|| type == Deluge || type == DelugeRpc || type == Deluge2Rpc |
|
|| type == qBittorrent || type == tTorrent || type == Dummy; |
|
} |
|
|
|
public static boolean supportsDateAdded(Daemon type) { |
|
return type == Vuze || type == Transmission || type == rTorrent || type == Bitflu || type == BitComet || type == uTorrent |
|
|| type == BitTorrent || type == Deluge || type == DelugeRpc || type == Deluge2Rpc |
|
|| type == qBittorrent || type == Dummy; |
|
} |
|
|
|
public static boolean supportsLabels(Daemon type) { |
|
return type == uTorrent || type == BitTorrent || type == Deluge || type == DelugeRpc || type == Deluge2Rpc || type == BitComet |
|
|| type == rTorrent || type == qBittorrent || type == Dummy; |
|
} |
|
|
|
public static boolean supportsSetLabel(Daemon type) { |
|
return type == uTorrent || type == BitTorrent || type == rTorrent || type == Deluge || type == DelugeRpc || type == Deluge2Rpc |
|
|| type == qBittorrent || type == Dummy; |
|
} |
|
|
|
public static boolean supportsSetDownloadLocation(Daemon type) { |
|
return type == Transmission || type == Deluge || type == DelugeRpc || type == Deluge2Rpc || type == qBittorrent || type == Dummy; |
|
} |
|
|
|
public static boolean supportsSetAlternativeMode(Daemon type) { |
|
return type == Transmission || type == qBittorrent || type == Dummy; |
|
} |
|
|
|
public static boolean supportsSetTrackers(Daemon type) { |
|
return type == uTorrent || type == BitTorrent || type == Deluge || type == DelugeRpc || type == Deluge2Rpc || type == Dummy; |
|
} |
|
|
|
public static boolean supportsForceRecheck(Daemon type) { |
|
return type == uTorrent || type == BitTorrent || type == Deluge || type == DelugeRpc || type == Deluge2Rpc || type == rTorrent |
|
|| type == Transmission || type == Dummy || type == qBittorrent; |
|
} |
|
|
|
public static boolean supportsSequentialDownload(Daemon type) { |
|
return type == qBittorrent; |
|
} |
|
|
|
public static boolean supportsFirstLastPiece(Daemon type) { |
|
return type == qBittorrent; |
|
} |
|
|
|
public static boolean supportsExtraPassword(Daemon type) { |
|
return type == Deluge || type == Aria2; |
|
} |
|
|
|
public static boolean supportsRemoteRssManagement(Daemon type) { |
|
return type == uTorrent || type == DelugeRpc || type == Deluge2Rpc; |
|
} |
|
|
|
public abstract IDaemonAdapter createAdapter(DaemonSettings settings); |
|
|
|
}
|
|
|