aboutsummaryrefslogtreecommitdiff
path: root/subsonic-main/src/main/java/net/sourceforge/subsonic/domain/MediaFile.java
diff options
context:
space:
mode:
Diffstat (limited to 'subsonic-main/src/main/java/net/sourceforge/subsonic/domain/MediaFile.java')
-rw-r--r--subsonic-main/src/main/java/net/sourceforge/subsonic/domain/MediaFile.java449
1 files changed, 449 insertions, 0 deletions
diff --git a/subsonic-main/src/main/java/net/sourceforge/subsonic/domain/MediaFile.java b/subsonic-main/src/main/java/net/sourceforge/subsonic/domain/MediaFile.java
new file mode 100644
index 00000000..4f315028
--- /dev/null
+++ b/subsonic-main/src/main/java/net/sourceforge/subsonic/domain/MediaFile.java
@@ -0,0 +1,449 @@
+/*
+ This file is part of Subsonic.
+
+ Subsonic 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.
+
+ Subsonic 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 Subsonic. If not, see <http://www.gnu.org/licenses/>.
+
+ Copyright 2009 (C) Sindre Mehus
+ */
+package net.sourceforge.subsonic.domain;
+
+import net.sourceforge.subsonic.util.FileUtil;
+import org.apache.commons.io.FilenameUtils;
+
+import java.io.File;
+import java.util.Date;
+
+/**
+ * A media file (audio, video or directory) with an assortment of its meta data.
+ *
+ * @author Sindre Mehus
+ * @version $Id$
+ */
+public class MediaFile {
+
+ private int id;
+ private String path;
+ private String folder;
+ private MediaType mediaType;
+ private String format;
+ private String title;
+ private String albumName;
+ private String artist;
+ private String albumArtist;
+ private Integer discNumber;
+ private Integer trackNumber;
+ private Integer year;
+ private String genre;
+ private Integer bitRate;
+ private boolean variableBitRate;
+ private Integer durationSeconds;
+ private Long fileSize;
+ private Integer width;
+ private Integer height;
+ private String coverArtPath;
+ private String parentPath;
+ private int playCount;
+ private Date lastPlayed;
+ private String comment;
+ private Date created;
+ private Date changed;
+ private Date lastScanned;
+ private Date starredDate;
+ private Date childrenLastUpdated;
+ private boolean present;
+
+ public MediaFile(int id, String path, String folder, MediaType mediaType, String format, String title,
+ String albumName, String artist, String albumArtist, Integer discNumber, Integer trackNumber, Integer year, String genre, Integer bitRate,
+ boolean variableBitRate, Integer durationSeconds, Long fileSize, Integer width, Integer height, String coverArtPath,
+ String parentPath, int playCount, Date lastPlayed, String comment, Date created, Date changed, Date lastScanned,
+ Date childrenLastUpdated, boolean present) {
+ this.id = id;
+ this.path = path;
+ this.folder = folder;
+ this.mediaType = mediaType;
+ this.format = format;
+ this.title = title;
+ this.albumName = albumName;
+ this.artist = artist;
+ this.albumArtist = albumArtist;
+ this.discNumber = discNumber;
+ this.trackNumber = trackNumber;
+ this.year = year;
+ this.genre = genre;
+ this.bitRate = bitRate;
+ this.variableBitRate = variableBitRate;
+ this.durationSeconds = durationSeconds;
+ this.fileSize = fileSize;
+ this.width = width;
+ this.height = height;
+ this.coverArtPath = coverArtPath;
+ this.parentPath = parentPath;
+ this.playCount = playCount;
+ this.lastPlayed = lastPlayed;
+ this.comment = comment;
+ this.created = created;
+ this.changed = changed;
+ this.lastScanned = lastScanned;
+ this.childrenLastUpdated = childrenLastUpdated;
+ this.present = present;
+ }
+
+ public MediaFile() {
+ }
+
+ public int getId() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+
+ public String getPath() {
+ return path;
+ }
+
+ public void setPath(String path) {
+ this.path = path;
+ }
+
+ public String getFolder() {
+ return folder;
+ }
+
+ public void setFolder(String folder) {
+ this.folder = folder;
+ }
+
+ public File getFile() {
+ // TODO: Optimize
+ return new File(path);
+ }
+
+ public boolean exists() {
+ return FileUtil.exists(getFile());
+ }
+
+ public MediaType getMediaType() {
+ return mediaType;
+ }
+
+ public void setMediaType(MediaType mediaType) {
+ this.mediaType = mediaType;
+ }
+
+ public boolean isVideo() {
+ return mediaType == MediaType.VIDEO;
+ }
+
+ public boolean isAudio() {
+ return mediaType == MediaType.MUSIC || mediaType == MediaType.AUDIOBOOK || mediaType == MediaType.PODCAST;
+ }
+
+ public String getFormat() {
+ return format;
+ }
+
+ public void setFormat(String format) {
+ this.format = format;
+ }
+
+ public boolean isDirectory() {
+ return !isFile();
+ }
+
+ public boolean isFile() {
+ return mediaType != MediaType.DIRECTORY && mediaType != MediaType.ALBUM;
+ }
+
+ public boolean isAlbum() {
+ return mediaType == MediaType.ALBUM;
+ }
+
+ public String getTitle() {
+ return title;
+ }
+
+ public void setTitle(String title) {
+ this.title = title;
+ }
+
+ public String getAlbumName() {
+ return albumName;
+ }
+
+ public void setAlbumName(String album) {
+ this.albumName = album;
+ }
+
+ public String getArtist() {
+ return artist;
+ }
+
+ public void setArtist(String artist) {
+ this.artist = artist;
+ }
+
+ public String getAlbumArtist() {
+ return albumArtist;
+ }
+
+ public void setAlbumArtist(String albumArtist) {
+ this.albumArtist = albumArtist;
+ }
+
+ public String getName() {
+ if (isFile()) {
+ return title != null ? title : FilenameUtils.getBaseName(path);
+ }
+
+ return FilenameUtils.getName(path);
+ }
+
+ public Integer getDiscNumber() {
+ return discNumber;
+ }
+
+ public void setDiscNumber(Integer discNumber) {
+ this.discNumber = discNumber;
+ }
+
+ public Integer getTrackNumber() {
+ return trackNumber;
+ }
+
+ public void setTrackNumber(Integer trackNumber) {
+ this.trackNumber = trackNumber;
+ }
+
+ public Integer getYear() {
+ return year;
+ }
+
+ public void setYear(Integer year) {
+ this.year = year;
+ }
+
+ public String getGenre() {
+ return genre;
+ }
+
+ public void setGenre(String genre) {
+ this.genre = genre;
+ }
+
+ public Integer getBitRate() {
+ return bitRate;
+ }
+
+ public void setBitRate(Integer bitRate) {
+ this.bitRate = bitRate;
+ }
+
+ public boolean isVariableBitRate() {
+ return variableBitRate;
+ }
+
+ public void setVariableBitRate(boolean variableBitRate) {
+ this.variableBitRate = variableBitRate;
+ }
+
+ public Integer getDurationSeconds() {
+ return durationSeconds;
+ }
+
+ public void setDurationSeconds(Integer durationSeconds) {
+ this.durationSeconds = durationSeconds;
+ }
+
+ public String getDurationString() {
+ if (durationSeconds == null) {
+ return null;
+ }
+
+ StringBuilder result = new StringBuilder(8);
+
+ int seconds = durationSeconds;
+
+ int hours = seconds / 3600;
+ seconds -= hours * 3600;
+
+ int minutes = seconds / 60;
+ seconds -= minutes * 60;
+
+ if (hours > 0) {
+ result.append(hours).append(':');
+ if (minutes < 10) {
+ result.append('0');
+ }
+ }
+
+ result.append(minutes).append(':');
+ if (seconds < 10) {
+ result.append('0');
+ }
+ result.append(seconds);
+
+ return result.toString();
+ }
+
+ public Long getFileSize() {
+ return fileSize;
+ }
+
+ public void setFileSize(Long fileSize) {
+ this.fileSize = fileSize;
+ }
+
+ public Integer getWidth() {
+ return width;
+ }
+
+ public void setWidth(Integer width) {
+ this.width = width;
+ }
+
+ public Integer getHeight() {
+ return height;
+ }
+
+ public void setHeight(Integer height) {
+ this.height = height;
+ }
+
+ public String getCoverArtPath() {
+ return coverArtPath;
+ }
+
+ public void setCoverArtPath(String coverArtPath) {
+ this.coverArtPath = coverArtPath;
+ }
+
+
+ public String getParentPath() {
+ return parentPath;
+ }
+
+ public void setParentPath(String parentPath) {
+ this.parentPath = parentPath;
+ }
+
+ public File getParentFile() {
+ return getFile().getParentFile();
+ }
+
+ public int getPlayCount() {
+ return playCount;
+ }
+
+ public void setPlayCount(int playCount) {
+ this.playCount = playCount;
+ }
+
+ public Date getLastPlayed() {
+ return lastPlayed;
+ }
+
+ public void setLastPlayed(Date lastPlayed) {
+ this.lastPlayed = lastPlayed;
+ }
+
+ public String getComment() {
+ return comment;
+ }
+
+ public void setComment(String comment) {
+ this.comment = comment;
+ }
+
+ public Date getCreated() {
+ return created;
+ }
+
+ public void setCreated(Date created) {
+ this.created = created;
+ }
+
+ public Date getChanged() {
+ return changed;
+ }
+
+ public void setChanged(Date changed) {
+ this.changed = changed;
+ }
+
+ public Date getLastScanned() {
+ return lastScanned;
+ }
+
+ public void setLastScanned(Date lastScanned) {
+ this.lastScanned = lastScanned;
+ }
+
+ public Date getStarredDate() {
+ return starredDate;
+ }
+
+ public void setStarredDate(Date starredDate) {
+ this.starredDate = starredDate;
+ }
+
+ /**
+ * Returns when the children was last updated in the database.
+ */
+ public Date getChildrenLastUpdated() {
+ return childrenLastUpdated;
+ }
+
+ public void setChildrenLastUpdated(Date childrenLastUpdated) {
+ this.childrenLastUpdated = childrenLastUpdated;
+ }
+
+ public boolean isPresent() {
+ return present;
+ }
+
+ public void setPresent(boolean present) {
+ this.present = present;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ return o instanceof MediaFile && ((MediaFile) o).path.equals(path);
+ }
+
+ @Override
+ public int hashCode() {
+ return path.hashCode();
+ }
+
+ public File getCoverArtFile() {
+ // TODO: Optimize
+ return coverArtPath == null ? null : new File(coverArtPath);
+ }
+
+ @Override
+ public String toString() {
+ return getName();
+ }
+
+ public static enum MediaType {
+ MUSIC,
+ PODCAST,
+ AUDIOBOOK,
+ VIDEO,
+ DIRECTORY,
+ ALBUM
+ }
+}