package com.atomjack.vcfp.model;
import android.os.Parcel;
import android.os.Parcelable;
import android.text.TextUtils;
import org.simpleframework.xml.Attribute;
import org.simpleframework.xml.ElementList;
import org.simpleframework.xml.Root;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.concurrent.TimeUnit;
@Root(strict=false)
public class PlexVideo extends PlexMedia {
@Attribute(required=false)
public String index;
@Attribute(required=false)
public String parentIndex;
@Attribute(required=false)
public String type;
@Attribute(required=false)
public String year;
@ElementList(required=false, inline=true, entry="Genre")
public ArrayList<Genre> genre;
@Attribute(required=false)
public String summary;
@Attribute(required=false)
public String originallyAvailableAt;
public String showTitle;
@Attribute(required=false)
public String guid;
public Date airDate() {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
try {
return formatter.parse(originallyAvailableAt);
} catch (Exception ex) {
ex.printStackTrace();
return null;
}
}
@Override
public boolean isMovie() {
return type.equals("movie");
}
@Override
public boolean isShow() {
return type.equals("episode");
}
@Override
public boolean isClip() {
return type.equals("clip");
}
@Override
public String getTitle() {
return type.equals("movie") || type.equals("clip") ? title : grandparentTitle.replaceAll("\\([0-9]{4}\\)", "").trim();
}
@Override
public String getEpisodeTitle() {
return type.equals("episode") ? title : "";
}
@Override
public String getSummary() {
return summary;
}
public PlexVideo() {
super();
genre = new ArrayList<Genre>();
}
public PlexServer getServer() {
return server;
}
public void setServer(PlexServer server) {
this.server = server;
}
public String getGenres() {
return TextUtils.join(", ", genre);
}
public String getDuration() {
if(TimeUnit.MILLISECONDS.toHours((long)duration) > 0) {
return String.format("%d hr %d min",
TimeUnit.MILLISECONDS.toHours((long)duration),
TimeUnit.MILLISECONDS.toMinutes((long)duration) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours((long)duration)));
} else {
return String.format("%d min", TimeUnit.MILLISECONDS.toMinutes((long)duration));
}
}
@Override
public void writeToParcel(Parcel out, int flags) {
super.writeToParcel(out, flags);
out.writeString(index);
out.writeString(parentIndex);
out.writeString(type);
out.writeString(year);
out.writeString(summary);
out.writeString(originallyAvailableAt);
out.writeString(showTitle);
out.writeTypedList(genre);
out.writeString(guid);
}
public PlexVideo(Parcel in) {
super(in);
index = in.readString();
parentIndex = in.readString();
type = in.readString();
year = in.readString();
summary = in.readString();
originallyAvailableAt = in.readString();
showTitle = in.readString();
genre = new ArrayList<Genre>();
in.readTypedList(genre, Genre.CREATOR);
guid = in.readString();
}
public int describeContents() {
return 0;
}
public static final Parcelable.Creator<PlexVideo> CREATOR = new Parcelable.Creator<PlexVideo>() {
public PlexVideo createFromParcel(Parcel in) {
return new PlexVideo(in);
}
public PlexVideo[] newArray(int size) {
return new PlexVideo[size];
}
};
public void setClipDuration() {
if(isClip())
duration = media.get(0).parts.get(0).duration;
}
}
@Root(strict=false)
class Genre implements Parcelable {
@Attribute
public String tag;
@Attribute(required=false)
public int id;
@Override
public String toString() {
return tag;
}
public Genre() {
super();
}
protected Genre(Parcel in) {
tag = in.readString();
id = in.readInt();
}
public void writeToParcel(Parcel out, int flags) {
out.writeString(tag);
out.writeInt(id);
}
public int describeContents() {
return 0;
}
public static final Parcelable.Creator<Genre> CREATOR = new Parcelable.Creator<Genre>() {
public Genre createFromParcel(Parcel in) {
return new Genre(in);
}
public Genre[] newArray(int size) {
return new Genre[size];
}
};
}