TubeLab-App-Android/torrentStream/src/main/java/com/github/se_bastiaan/torrentstream/TorrentOptions.java

152 lines
4.7 KiB
Java

/*
* Copyright (C) 2015-2018 Sébastiaan (github.com/se-bastiaan)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.github.se_bastiaan.torrentstream;
import java.io.File;
public final class TorrentOptions {
String saveLocation = "/";
String proxyHost;
String proxyUsername;
String proxyPassword;
String peerFingerprint;
Integer maxDownloadSpeed = 0;
Integer maxUploadSpeed = 0;
Integer maxConnections = 200;
Integer maxDht = 88;
Integer listeningPort = -1;
Boolean removeFiles = false;
Boolean anonymousMode = false;
Boolean autoDownload = true;
Long prepareSize = 15 * 1024L * 1024L;
private TorrentOptions() {
// Unused
}
private TorrentOptions(TorrentOptions torrentOptions) {
this.saveLocation = torrentOptions.saveLocation;
this.proxyHost = torrentOptions.proxyHost;
this.proxyUsername = torrentOptions.proxyUsername;
this.proxyPassword = torrentOptions.proxyPassword;
this.peerFingerprint = torrentOptions.peerFingerprint;
this.maxDownloadSpeed = torrentOptions.maxDownloadSpeed;
this.maxUploadSpeed = torrentOptions.maxUploadSpeed;
this.maxConnections = torrentOptions.maxConnections;
this.maxDht = torrentOptions.maxDht;
this.listeningPort = torrentOptions.listeningPort;
this.removeFiles = torrentOptions.removeFiles;
this.anonymousMode = torrentOptions.anonymousMode;
this.autoDownload = torrentOptions.autoDownload;
this.prepareSize = torrentOptions.prepareSize;
}
public Builder toBuilder() {
return new Builder(this);
}
public static class Builder {
private TorrentOptions torrentOptions;
public Builder() {
torrentOptions = new TorrentOptions();
}
private Builder(TorrentOptions torrentOptions) {
torrentOptions = new TorrentOptions(torrentOptions);
}
public Builder saveLocation(String saveLocation) {
torrentOptions.saveLocation = saveLocation;
return this;
}
public Builder saveLocation(File saveLocation) {
torrentOptions.saveLocation = saveLocation.getAbsolutePath();
return this;
}
public Builder maxUploadSpeed(Integer maxUploadSpeed) {
torrentOptions.maxUploadSpeed = maxUploadSpeed;
return this;
}
public Builder maxDownloadSpeed(Integer maxDownloadSpeed) {
torrentOptions.maxDownloadSpeed = maxDownloadSpeed;
return this;
}
public Builder maxConnections(Integer maxConnections) {
torrentOptions.maxConnections = maxConnections;
return this;
}
public Builder maxActiveDHT(Integer maxActiveDHT) {
torrentOptions.maxDht = maxActiveDHT;
return this;
}
public Builder removeFilesAfterStop(Boolean b) {
torrentOptions.removeFiles = b;
return this;
}
public Builder prepareSize(Long prepareSize) {
torrentOptions.prepareSize = prepareSize;
return this;
}
public Builder listeningPort(Integer port) {
torrentOptions.listeningPort = port;
return this;
}
public Builder proxy(String host, String username, String password) {
torrentOptions.proxyHost = host;
torrentOptions.proxyUsername = username;
torrentOptions.proxyPassword = password;
return this;
}
public Builder peerFingerprint(String peerId) {
torrentOptions.peerFingerprint = peerId;
torrentOptions.anonymousMode = false;
return this;
}
public Builder anonymousMode(Boolean enable) {
torrentOptions.anonymousMode = enable;
if (torrentOptions.anonymousMode)
torrentOptions.peerFingerprint = null;
return this;
}
public Builder autoDownload(Boolean enable) {
torrentOptions.autoDownload = enable;
return this;
}
public TorrentOptions build() {
return torrentOptions;
}
}
}