/* This file is part of the Android Clementine Remote.
* Copyright (C) 2013, Andreas Muttscheller <asfa194@gmail.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package de.qspool.clementineremote.backend.player;
import com.google.protobuf.ByteString;
import android.annotation.SuppressLint;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import java.util.LinkedList;
import java.util.List;
import de.qspool.clementineremote.App;
import de.qspool.clementineremote.R;
import de.qspool.clementineremote.backend.pb.ClementineRemoteProtocolBuffer.SongMetadata;
/**
* Representation of a song
*/
public class MySong {
private int id;
private int index;
private String title = "";
private String artist = "";
private String album = "";
private String albumartist = "";
private String prettyLength = "";
private int length;
private String genre = "";
private String year = "";
private int track;
private int disc;
private int playcount;
private byte[] art;
private boolean loved;
private List<LyricsProvider> mLyricsProvider = new LinkedList<LyricsProvider>();
private String filename = "";
private long size;
private boolean local;
private float rating;
private String url;
public boolean equals(MySong song) {
if (song.id == this.id
&& song.index == this.index
&& song.artist.equals(this.artist)
&& song.title.equals(this.title)
&& song.album.equals(this.album)
&& song.albumartist.equals(this.albumartist)) {
return true;
} else {
return false;
}
}
@SuppressLint("DefaultLocale")
public boolean contains(String constraint) {
String cs = constraint.toLowerCase();
return (title.toLowerCase().contains(cs) ||
artist.toLowerCase().contains(cs) ||
album.toLowerCase().contains(cs) ||
albumartist.toLowerCase().contains(cs) ||
genre.toLowerCase().contains(cs) ||
year.toLowerCase().contains(cs));
}
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append(artist);
sb.append(" - ");
sb.append(title);
return sb.toString();
}
public static MySong fromProtocolBuffer(SongMetadata songMetadata) {
MySong song = new MySong();
// Apply the metadata
song.setId(songMetadata.getId());
song.setIndex(songMetadata.getIndex());
song.setArtist(songMetadata.getArtist());
song.setTitle(songMetadata.getTitle());
song.setAlbum(songMetadata.getAlbum());
song.setAlbumartist(songMetadata.getAlbumartist());
song.setPrettyLength(songMetadata.getPrettyLength());
song.setLength(songMetadata.getLength());
song.setGenre(songMetadata.getGenre());
song.setYear(songMetadata.getPrettyYear());
song.setTrack(songMetadata.getTrack());
song.setDisc(songMetadata.getDisc());
song.setPlaycount(songMetadata.getPlaycount());
song.setFilename(songMetadata.getFilename());
song.setSize(songMetadata.getFileSize());
song.setLocal(songMetadata.getIsLocal());
song.setRating(songMetadata.getRating());
song.setUrl(songMetadata.getUrl());
if (songMetadata.hasArt()) {
song.setArt(songMetadata.getArt());
}
return song;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getIndex() {
return index;
}
public void setIndex(int index) {
this.index = index;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getArtist() {
return artist;
}
public void setArtist(String artist) {
this.artist = artist;
}
public String getAlbum() {
return album;
}
public void setAlbum(String album) {
this.album = album;
}
public String getAlbumartist() {
return albumartist;
}
public void setAlbumartist(String albumartist) {
this.albumartist = albumartist;
}
public String getPrettyLength() {
return prettyLength;
}
public void setPrettyLength(String prettyLength) {
this.prettyLength = prettyLength;
}
public int getLength() {
return length;
}
public void setLength(int length) {
this.length = length;
}
public String getGenre() {
return genre;
}
public void setGenre(String genre) {
this.genre = genre;
}
public String getYear() {
return year;
}
public void setYear(String year) {
this.year = year;
}
public int getTrack() {
return track;
}
public void setTrack(int track) {
this.track = track;
}
public int getDisc() {
return disc;
}
public void setDisc(int disc) {
this.disc = disc;
}
public int getPlaycount() {
return playcount;
}
public void setPlaycount(int playcount) {
this.playcount = playcount;
}
public Bitmap getArt() {
if (art == null) {
return BitmapFactory.decodeResource(App.getApp().getResources(), R.drawable.nocover);
} else {
return BitmapFactory.decodeByteArray(art, 0, art.length);
}
}
public void setArt(ByteString byteString) {
this.art = byteString.toByteArray();
}
public boolean isLoved() {
return loved;
}
public void setLoved(boolean loved) {
this.loved = loved;
}
public List<LyricsProvider> getLyricsProvider() {
return mLyricsProvider;
}
public String getFilename() {
return filename;
}
public void setFilename(String filename) {
this.filename = filename;
}
public long getSize() {
return size;
}
public void setSize(long size) {
this.size = size;
}
public boolean isLocal() {
return local;
}
public void setLocal(boolean local) {
this.local = local;
}
public float getRating() {
return rating;
}
public void setRating(float rating) {
this.rating = rating;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
}