blob: 7f40ea6e2021ba92d800806eb2a79f83f3155298 [file] [log] [blame]
package de.danoeh.antennapod.core.service.download;
import android.os.Bundle;
import android.os.Parcel;
import android.os.Parcelable;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import de.danoeh.antennapod.core.feed.FeedFile;
import de.danoeh.antennapod.core.util.URLChecker;
public class DownloadRequest implements Parcelable {
private final String destination;
private final String source;
private final String title;
private String username;
private String password;
private String lastModified;
private boolean deleteOnFailure;
private final long feedfileId;
private final int feedfileType;
private final Bundle arguments;
protected int progressPercent;
protected long soFar;
protected long size;
protected int statusMsg;
public DownloadRequest(@NonNull String destination,
@NonNull String source,
@NonNull String title,
long feedfileId,
int feedfileType,
String username,
String password,
boolean deleteOnFailure,
Bundle arguments) {
this.destination = destination;
this.source = source;
this.title = title;
this.feedfileId = feedfileId;
this.feedfileType = feedfileType;
this.username = username;
this.password = password;
this.deleteOnFailure = deleteOnFailure;
this.arguments = (arguments != null) ? arguments : new Bundle();
}
public DownloadRequest(String destination, String source, String title,
long feedfileId, int feedfileType) {
this(destination, source, title, feedfileId, feedfileType, null, null, true, null);
}
public DownloadRequest(Builder builder) {
this.destination = builder.destination;
this.source = builder.source;
this.title = builder.title;
this.feedfileId = builder.feedfileId;
this.feedfileType = builder.feedfileType;
this.username = builder.username;
this.password = builder.password;
this.lastModified = builder.lastModified;
this.deleteOnFailure = builder.deleteOnFailure;
this.arguments = (builder.arguments != null) ? builder.arguments : new Bundle();
}
private DownloadRequest(Parcel in) {
destination = in.readString();
source = in.readString();
title = in.readString();
feedfileId = in.readLong();
feedfileType = in.readInt();
lastModified = in.readString();
deleteOnFailure = (in.readByte() > 0);
arguments = in.readBundle();
if (in.dataAvail() > 0) {
username = in.readString();
} else {
username = null;
}
if (in.dataAvail() > 0) {
password = in.readString();
} else {
password = null;
}
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(destination);
dest.writeString(source);
dest.writeString(title);
dest.writeLong(feedfileId);
dest.writeInt(feedfileType);
dest.writeString(lastModified);
dest.writeByte((deleteOnFailure) ? (byte) 1 : 0);
dest.writeBundle(arguments);
if (username != null) {
dest.writeString(username);
}
if (password != null) {
dest.writeString(password);
}
}
public static final Parcelable.Creator<DownloadRequest> CREATOR = new Parcelable.Creator<DownloadRequest>() {
public DownloadRequest createFromParcel(Parcel in) {
return new DownloadRequest(in);
}
public DownloadRequest[] newArray(int size) {
return new DownloadRequest[size];
}
};
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
DownloadRequest that = (DownloadRequest) o;
if (lastModified != that.lastModified) return false;
if (deleteOnFailure != that.deleteOnFailure) return false;
if (feedfileId != that.feedfileId) return false;
if (feedfileType != that.feedfileType) return false;
if (progressPercent != that.progressPercent) return false;
if (size != that.size) return false;
if (soFar != that.soFar) return false;
if (statusMsg != that.statusMsg) return false;
if (!arguments.equals(that.arguments)) return false;
if (!destination.equals(that.destination)) return false;
if (password != null ? !password.equals(that.password) : that.password != null)
return false;
if (!source.equals(that.source)) return false;
if (title != null ? !title.equals(that.title) : that.title != null) return false;
if (username != null ? !username.equals(that.username) : that.username != null)
return false;
return true;
}
@Override
public int hashCode() {
int result = destination.hashCode();
result = 31 * result + source.hashCode();
result = 31 * result + (title != null ? title.hashCode() : 0);
result = 31 * result + (username != null ? username.hashCode() : 0);
result = 31 * result + (password != null ? password.hashCode() : 0);
result = 31 * result + (lastModified != null ? lastModified.hashCode() : 0);
result = 31 * result + (deleteOnFailure ? 1 : 0);
result = 31 * result + (int) (feedfileId ^ (feedfileId >>> 32));
result = 31 * result + feedfileType;
result = 31 * result + arguments.hashCode();
result = 31 * result + progressPercent;
result = 31 * result + (int) (soFar ^ (soFar >>> 32));
result = 31 * result + (int) (size ^ (size >>> 32));
result = 31 * result + statusMsg;
return result;
}
public String getDestination() {
return destination;
}
public String getSource() {
return source;
}
public String getTitle() {
return title;
}
public long getFeedfileId() {
return feedfileId;
}
public int getFeedfileType() {
return feedfileType;
}
public int getProgressPercent() {
return progressPercent;
}
public void setProgressPercent(int progressPercent) {
this.progressPercent = progressPercent;
}
public long getSoFar() {
return soFar;
}
public void setSoFar(long soFar) {
this.soFar = soFar;
}
public long getSize() {
return size;
}
public void setSize(long size) {
this.size = size;
}
public int getStatusMsg() {
return statusMsg;
}
public void setStatusMsg(int statusMsg) {
this.statusMsg = statusMsg;
}
public String getUsername() {
return username;
}
public String getPassword() {
return password;
}
public void setUsername(String username) {
this.username = username;
}
public void setPassword(String password) {
this.password = password;
}
public DownloadRequest setLastModified(@Nullable String lastModified) {
this.lastModified = lastModified;
return this;
}
@Nullable
public String getLastModified() {
return lastModified;
}
public boolean isDeleteOnFailure() {
return deleteOnFailure;
}
public Bundle getArguments() {
return arguments;
}
public static class Builder {
private String destination;
private String source;
private String title;
private String username;
private String password;
private String lastModified;
private boolean deleteOnFailure = false;
private long feedfileId;
private int feedfileType;
private Bundle arguments;
public Builder(@NonNull String destination, @NonNull FeedFile item) {
this.destination = destination;
this.source = URLChecker.prepareURL(item.getDownload_url());
this.title = item.getHumanReadableIdentifier();
this.feedfileId = item.getId();
this.feedfileType = item.getTypeAsInt();
}
public Builder deleteOnFailure(boolean deleteOnFailure) {
this.deleteOnFailure = deleteOnFailure;
return this;
}
public Builder lastModified(String lastModified) {
this.lastModified = lastModified;
return this;
}
public Builder withAuthentication(String username, String password) {
this.username = username;
this.password = password;
return this;
}
public DownloadRequest build() {
return new DownloadRequest(this);
}
public Builder withArguments(Bundle args) {
this.arguments = args;
return this;
}
}
}