package com.mercandalli.android.apps.files.file.audio;
import android.os.Parcel;
import android.support.annotation.Nullable;
import com.mercandalli.android.apps.files.file.FileModel;
import com.mercandalli.android.apps.files.file.audio.metadata.read.AudioMetaDataRead;
import com.mercandalli.android.apps.files.file.audio.metadata.read.MusicMetadata;
import com.mercandalli.android.apps.files.file.audio.metadata.read.MusicMetadataSet;
import java.io.File;
/**
* An audio {@link FileModel}. Contains a title, album, artist.
*/
public class FileAudioModel extends FileModel {
protected String mTitle;
protected String mAlbum;
protected String mArtist;
public static class FileAudioModelBuilder extends FileModelBuilder {
private String mTitle;
private String mAlbum;
private String mArtist;
public FileAudioModelBuilder title(String title) {
this.mTitle = title;
return this;
}
public FileAudioModelBuilder album(String album) {
this.mAlbum = album;
return this;
}
public FileAudioModelBuilder artist(String artist) {
this.mArtist = artist;
return this;
}
public FileAudioModelBuilder fileModel(FileModel fileModel) {
id(fileModel.getId());
idUser(fileModel.getIdUser());
idFileParent(fileModel.getIdFileParent());
name(fileModel.getName());
url(fileModel.getUrl());
size(fileModel.getSize());
isPublic(fileModel.isPublic());
type(fileModel.getType());
isDirectory(fileModel.isDirectory());
dateCreation(fileModel.getDateCreation());
isApkUpdate(fileModel.isApkUpdate());
content(fileModel.getContent());
file(fileModel.getFile());
lastModified(fileModel.getLastModified());
count(fileModel.getCount());
return this;
}
public FileAudioModelBuilder file(final File file) {
super.file(file);
//jaudiotage
/*
if (mUrl == null || !mUrl.toLowerCase().endsWith(".mp3")) {
return this;
}
final IMusicMetadata metadata;
try {
metadata = (new MyID3().read(file)).getSimplified();
title(metadata.getSongTitle());
album(metadata.getAlbum());
artist(metadata.getArtist());
return this;
} catch (IOException e) {
e.printStackTrace();
}
*/
final MusicMetadataSet extract = AudioMetaDataRead.extract(file);
if (extract == null) {
return this;
}
final MusicMetadata metadata = extract.getSimplified();
title(metadata.getSongTitle());
album(metadata.getAlbum());
artist(metadata.getArtist());
return this;
}
@Override
public FileAudioModel build() {
final FileAudioModel fileAudioModel = new FileAudioModel();
fileAudioModel.mId = mId;
fileAudioModel.mIdUser = mIdUser;
fileAudioModel.mIdFileParent = mIdFileParent;
fileAudioModel.mName = mName;
fileAudioModel.mUrl = mUrl;
fileAudioModel.mSize = mSize;
fileAudioModel.mIsPublic = mIsPublic;
fileAudioModel.mType = mType;
fileAudioModel.mIsDirectory = mIsDirectory;
fileAudioModel.mDateCreation = mDateCreation;
fileAudioModel.mIsApkUpdate = mIsApkUpdate;
fileAudioModel.mContent = mContent;
fileAudioModel.mFile = mFile;
fileAudioModel.mLastModified = mLastModified;
fileAudioModel.mCount = mCount;
fileAudioModel.mTitle = mTitle;
fileAudioModel.mAlbum = mAlbum;
fileAudioModel.mArtist = mArtist;
return fileAudioModel;
}
}
@Nullable
public String getTitle() {
return mTitle;
}
@Nullable
public String getAlbum() {
return mAlbum;
}
@Nullable
public String getArtist() {
return mArtist;
}
@Nullable
public String getPath() {
if (isOnline()) {
return getOnlineUrl();
}
final File file = getFile();
if (file == null) {
return null;
}
return file.getPath();
}
/* Parcelable */
public static final Creator<FileModel> CREATOR = new Creator<FileModel>() {
@Override
public FileModel createFromParcel(Parcel in) {
return new FileModelBuilder().parcel(in).build();
}
@Override
public FileModel[] newArray(int size) {
return new FileModel[size];
}
};
}