package net.rdrei.android.scdl2.api.entity;
import android.net.Uri;
import android.os.Parcel;
import android.os.Parcelable;
import com.google.gson.annotations.SerializedName;
import net.rdrei.android.scdl2.Config;
import net.rdrei.android.scdl2.api.SoundcloudEntity;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Locale;
import roboguice.util.Ln;
/**
* Entity tracking some of the Track information.
* <p/>
* TODO: Add and display user information.
*
* @author pascal
*/
public class TrackEntity implements SoundcloudEntity, Parcelable {
private static final long serialVersionUID = 3L;
private long id;
private long duration;
private String title;
private boolean downloadable;
@SerializedName("purchase_url")
private String purchaseUrl;
@SerializedName("purchase_title")
private String purchaseTitle;
@SerializedName("download_url")
private String downloadUrl;
@SerializedName("artwork_url")
private String artworkUrl;
@SerializedName("original_format")
private String originalFormat;
private String description;
private String permalink;
@SerializedName("original_content_size")
private long originalContentSize;
private UserEntity user;
public TrackEntity() {
super();
}
private TrackEntity(final Parcel in) {
id = in.readLong();
duration = in.readLong();
title = in.readString();
downloadable = in.readByte() == 1;
downloadUrl = in.readString();
artworkUrl = in.readString();
originalFormat = in.readString();
description = in.readString();
permalink = in.readString();
originalContentSize = in.readLong();
purchaseTitle = in.readString();
purchaseUrl = in.readString();
user = in.readParcelable(UserEntity.class.getClassLoader());
}
public static final Parcelable.Creator<TrackEntity> CREATOR = new Creator<TrackEntity>() {
@Override
public TrackEntity[] newArray(final int size) {
return new TrackEntity[size];
}
@Override
public TrackEntity createFromParcel(final Parcel source) {
Ln.d("Creating new TrackEntity from parcel source.");
return new TrackEntity(source);
}
};
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(final Parcel dest, final int flags) {
dest.writeLong(id);
dest.writeLong(duration);
dest.writeString(title);
dest.writeByte((byte) (downloadable ? 1 : 0));
dest.writeString(downloadUrl);
dest.writeString(artworkUrl);
dest.writeString(originalFormat);
dest.writeString(description);
dest.writeString(permalink);
dest.writeLong(originalContentSize);
dest.writeString(getPurchaseTitle());
dest.writeString(getPurchaseUrl());
dest.writeParcelable(user, 0);
}
public long getId() {
return id;
}
public void setId(final long id) {
this.id = id;
}
public long getDuration() {
return duration;
}
public void setDuration(final long duration) {
this.duration = duration;
}
public String getTitle() {
return title;
}
public void setTitle(final String title) {
this.title = title;
}
public boolean isDownloadable() {
return downloadable;
}
public void setDownloadable(final boolean downloadable) {
this.downloadable = downloadable;
}
/**
* Get the download URL as string, including client id parameter.
*
* @return
*/
public String getDownloadUrl() {
final StringBuffer buffer = new StringBuffer();
buffer.append(downloadUrl);
buffer.append("?client_id=");
buffer.append(Config.API_CONSUMER_KEY);
return buffer.toString();
}
public Uri getDownloadUri() {
return Uri.parse(downloadUrl);
}
public void setDownloadUrl(final String downloadUrl) {
this.downloadUrl = downloadUrl;
}
public String getDescription() {
return description;
}
public void setDescription(final String description) {
this.description = description;
}
public String getArtworkUrl() {
return artworkUrl;
}
public Uri getArtworkUri() {
return Uri.parse(artworkUrl);
}
public void setArtworkUrl(final String artworkUrl) {
this.artworkUrl = artworkUrl;
}
/**
* @return the originalFormat
*/
public String getOriginalFormat() {
return originalFormat;
}
/**
* @param originalFormat the originalFormat to set
*/
public void setOriginalFormat(final String originalFormat) {
this.originalFormat = originalFormat;
}
public String getDownloadFilename() {
return permalink + "." + originalFormat;
}
public String getPermalink() {
return permalink;
}
public void setPermalink(final String permalink) {
this.permalink = permalink;
}
public String getFormattedDuration() {
final SimpleDateFormat formatter = new SimpleDateFormat("m:ss", Locale.US);
final Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(getDuration());
return formatter.format(calendar.getTime());
}
public String getFormattedSize() {
return String.format(Locale.US, "%.1fMB", this.getOriginalContentSize() / (1024f * 1024f));
}
public long getOriginalContentSize() {
return originalContentSize;
}
public void setOriginalContentSize(final long originalContentSize) {
this.originalContentSize = originalContentSize;
}
public UserEntity getUser() {
return user;
}
public void setUser(final UserEntity user) {
this.user = user;
}
public boolean isPurchasable() {
if (purchaseUrl != null) {
return purchaseUrl.startsWith("http://") || purchaseUrl.startsWith("https://");
}
return false;
}
public String getPurchaseUrl() {
return purchaseUrl;
}
public String getPurchaseTitle() {
return purchaseTitle;
}
public void setPurchaseUrl(String purchaseUrl) {
this.purchaseUrl = purchaseUrl;
}
}