package com.sdsmdg.harjot.MusicDNA.lyrics; import android.os.Parcel; import android.os.Parcelable; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutput; import java.io.ObjectOutputStream; import java.io.Serializable; public class Lyrics implements Serializable, Parcelable { private String mTitle; private String mArtist; private String mOriginalTitle; private String mOriginalArtist; private String mSourceUrl; private String mCoverURL; private String mLyrics; private String mSource; private boolean mLRC = false; private final int mFlag; public static final int NO_RESULT = -2; public static final int NEGATIVE_RESULT = -1; public static final int POSITIVE_RESULT = 1; public static final int ERROR = -3; public static final int SEARCH_ITEM = 2; public interface Callback { void onLyricsDownloaded(Lyrics lyrics); } public Lyrics(int flag) { this.mFlag = flag; } protected Lyrics(Parcel in) { mTitle = in.readString(); mArtist = in.readString(); mOriginalTitle = in.readString(); mOriginalArtist = in.readString(); mSourceUrl = in.readString(); mCoverURL = in.readString(); mLyrics = in.readString(); mSource = in.readString(); mLRC = in.readByte() != 0; mFlag = in.readInt(); } public static final Creator<Lyrics> CREATOR = new Creator<Lyrics>() { @Override public Lyrics createFromParcel(Parcel in) { return new Lyrics(in); } @Override public Lyrics[] newArray(int size) { return new Lyrics[size]; } }; public String getTrack() { return mTitle; } public void setTitle(String title) { this.mTitle = title; } public String getOriginalTrack() { if (mOriginalTitle != null) return mOriginalTitle; else return mTitle; } public void setOriginalTitle(String originalTitle) { this.mOriginalTitle = originalTitle; } public String getArtist() { return mArtist; } public void setArtist(String artist) { this.mArtist = artist; } public String getOriginalArtist() { if (mOriginalArtist != null) return mOriginalArtist; else return mArtist; } public void setOriginalArtist(String originalArtist) { this.mOriginalArtist = originalArtist; } public String getURL() { return mSourceUrl; } public void setURL(String uRL) { this.mSourceUrl = uRL; } public String getCoverURL() { return mCoverURL; } public void setCoverURL(String coverURL) { this.mCoverURL = coverURL; } public String getText() { return mLyrics; } public void setText(String lyrics) { this.mLyrics = lyrics; } public String getSource() { return mSource; } public int getFlag() { return mFlag; } public void setSource(String mSource) { this.mSource = mSource; } public void setLRC(boolean LRC) { this.mLRC = LRC; } public boolean isLRC() { return this.mLRC; } public byte[] toBytes() throws IOException { ByteArrayOutputStream bos = new ByteArrayOutputStream(); try { ObjectOutput out = new ObjectOutputStream(bos); out.writeObject(this); out.close(); } finally { bos.close(); } return bos.toByteArray(); } public static Lyrics fromBytes(byte[] data) throws IOException, ClassNotFoundException { if (data == null) return null; ByteArrayInputStream in = new ByteArrayInputStream(data); ObjectInputStream is = new ObjectInputStream(in); return (Lyrics) is.readObject(); } @Override public boolean equals(Object object) { boolean isLyrics = object instanceof Lyrics; if (isLyrics && (this.getURL() != null) && ((Lyrics) object).getURL() != null) return this.getURL().equals(((Lyrics) object).getURL()); else if (isLyrics) { Lyrics other = (Lyrics) object; boolean result = this.getText().equals(other.getText()); result &= this.getFlag() == other.getFlag(); result &= this.getSource().equals(other.getSource()); result &= this.getArtist().equals(other.getArtist()); result &= this.getTrack().equals(other.getTrack()); return result; } else return false; } @Override public int hashCode() { // Potential issue with the Birthday Paradox when we hash over 50k lyrics return this.getURL() != null ? this.getURL().hashCode() : (""+this.getOriginalArtist()+this.getOriginalTrack()+this.getSource()).hashCode(); } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeString(mTitle); dest.writeString(mArtist); dest.writeString(mOriginalTitle); dest.writeString(mOriginalArtist); dest.writeString(mSourceUrl); dest.writeString(mCoverURL); dest.writeString(mLyrics); dest.writeString(mSource); dest.writeByte((byte) (mLRC ? 1 : 0)); dest.writeInt(mFlag); } }