aboutsummaryrefslogtreecommitdiff
path: root/subsonic-main/src/main/java/net/sourceforge/subsonic/ajax/PlaylistService.java
diff options
context:
space:
mode:
authorScott Jackson <daneren2005@gmail.com>2012-07-02 21:24:02 -0700
committerScott Jackson <daneren2005@gmail.com>2012-07-02 21:24:02 -0700
commita1a18f77a50804e0127dfa4b0f5240c49c541184 (patch)
tree19a38880afe505beddb5590379a8134d7730a277 /subsonic-main/src/main/java/net/sourceforge/subsonic/ajax/PlaylistService.java
parentb61d787706979e7e20f4c3c4f93c1f129d92273f (diff)
downloaddsub-a1a18f77a50804e0127dfa4b0f5240c49c541184.tar.gz
dsub-a1a18f77a50804e0127dfa4b0f5240c49c541184.tar.bz2
dsub-a1a18f77a50804e0127dfa4b0f5240c49c541184.zip
Initial Commit
Diffstat (limited to 'subsonic-main/src/main/java/net/sourceforge/subsonic/ajax/PlaylistService.java')
-rw-r--r--subsonic-main/src/main/java/net/sourceforge/subsonic/ajax/PlaylistService.java187
1 files changed, 187 insertions, 0 deletions
diff --git a/subsonic-main/src/main/java/net/sourceforge/subsonic/ajax/PlaylistService.java b/subsonic-main/src/main/java/net/sourceforge/subsonic/ajax/PlaylistService.java
new file mode 100644
index 00000000..d3bf854f
--- /dev/null
+++ b/subsonic-main/src/main/java/net/sourceforge/subsonic/ajax/PlaylistService.java
@@ -0,0 +1,187 @@
+/*
+ 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.ajax;
+
+import java.text.DateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Locale;
+
+import javax.servlet.http.HttpServletRequest;
+
+import net.sourceforge.subsonic.dao.MediaFileDao;
+import net.sourceforge.subsonic.service.SettingsService;
+import org.directwebremoting.WebContextFactory;
+
+import net.sourceforge.subsonic.domain.MediaFile;
+import net.sourceforge.subsonic.domain.Playlist;
+import net.sourceforge.subsonic.service.MediaFileService;
+import net.sourceforge.subsonic.service.SecurityService;
+
+/**
+ * Provides AJAX-enabled services for manipulating playlists.
+ * This class is used by the DWR framework (http://getahead.ltd.uk/dwr/).
+ *
+ * @author Sindre Mehus
+ */
+public class PlaylistService {
+
+ private MediaFileService mediaFileService;
+ private SecurityService securityService;
+ private net.sourceforge.subsonic.service.PlaylistService playlistService;
+ private MediaFileDao mediaFileDao;
+ private SettingsService settingsService;
+
+ public List<Playlist> getReadablePlaylists() {
+ HttpServletRequest request = WebContextFactory.get().getHttpServletRequest();
+ String username = securityService.getCurrentUsername(request);
+ return playlistService.getReadablePlaylistsForUser(username);
+ }
+
+ public List<Playlist> getWritablePlaylists() {
+ HttpServletRequest request = WebContextFactory.get().getHttpServletRequest();
+ String username = securityService.getCurrentUsername(request);
+ return playlistService.getWritablePlaylistsForUser(username);
+ }
+
+ public PlaylistInfo getPlaylist(int id) {
+ HttpServletRequest request = WebContextFactory.get().getHttpServletRequest();
+
+ Playlist playlist = playlistService.getPlaylist(id);
+ List<MediaFile> files = playlistService.getFilesInPlaylist(id);
+
+ String username = securityService.getCurrentUsername(request);
+ mediaFileService.populateStarredDate(files, username);
+ return new PlaylistInfo(playlist, createEntries(files));
+ }
+
+ public List<Playlist> createEmptyPlaylist() {
+ HttpServletRequest request = WebContextFactory.get().getHttpServletRequest();
+ Locale locale = settingsService.getLocale();
+ DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.SHORT, locale);
+
+ Date now = new Date();
+ Playlist playlist = new Playlist();
+ playlist.setUsername(securityService.getCurrentUsername(request));
+ playlist.setCreated(now);
+ playlist.setChanged(now);
+ playlist.setPublic(false);
+ playlist.setName(dateFormat.format(now));
+
+ playlistService.createPlaylist(playlist);
+ return getReadablePlaylists();
+ }
+
+ public void appendToPlaylist(int playlistId, List<Integer> mediaFileIds) {
+ List<MediaFile> files = playlistService.getFilesInPlaylist(playlistId);
+ for (Integer mediaFileId : mediaFileIds) {
+ MediaFile file = mediaFileService.getMediaFile(mediaFileId);
+ if (file != null) {
+ files.add(file);
+ }
+ }
+ playlistService.setFilesInPlaylist(playlistId, files);
+ }
+
+ private List<PlaylistInfo.Entry> createEntries(List<MediaFile> files) {
+ List<PlaylistInfo.Entry> result = new ArrayList<PlaylistInfo.Entry>();
+ for (MediaFile file : files) {
+ result.add(new PlaylistInfo.Entry(file.getId(), file.getTitle(), file.getArtist(), file.getAlbumName(),
+ file.getDurationString(), file.getStarredDate() != null));
+ }
+
+ return result;
+ }
+
+ public PlaylistInfo toggleStar(int id, int index) {
+ HttpServletRequest request = WebContextFactory.get().getHttpServletRequest();
+ String username = securityService.getCurrentUsername(request);
+ List<MediaFile> files = playlistService.getFilesInPlaylist(id);
+ MediaFile file = files.get(index);
+
+ boolean starred = mediaFileDao.getMediaFileStarredDate(file.getId(), username) != null;
+ if (starred) {
+ mediaFileDao.unstarMediaFile(file.getId(), username);
+ } else {
+ mediaFileDao.starMediaFile(file.getId(), username);
+ }
+ return getPlaylist(id);
+ }
+
+ public PlaylistInfo remove(int id, int index) {
+ List<MediaFile> files = playlistService.getFilesInPlaylist(id);
+ files.remove(index);
+ playlistService.setFilesInPlaylist(id, files);
+ return getPlaylist(id);
+ }
+
+ public PlaylistInfo up(int id, int index) {
+ List<MediaFile> files = playlistService.getFilesInPlaylist(id);
+ if (index > 0) {
+ MediaFile file = files.remove(index);
+ files.add(index - 1, file);
+ playlistService.setFilesInPlaylist(id, files);
+ }
+ return getPlaylist(id);
+ }
+
+ public PlaylistInfo down(int id, int index) {
+ List<MediaFile> files = playlistService.getFilesInPlaylist(id);
+ if (index < files.size() - 1) {
+ MediaFile file = files.remove(index);
+ files.add(index + 1, file);
+ playlistService.setFilesInPlaylist(id, files);
+ }
+ return getPlaylist(id);
+ }
+
+ public void deletePlaylist(int id) {
+ playlistService.deletePlaylist(id);
+ }
+
+ public PlaylistInfo updatePlaylist(int id, String name, String comment, boolean isPublic) {
+ Playlist playlist = playlistService.getPlaylist(id);
+ playlist.setName(name);
+ playlist.setComment(comment);
+ playlist.setPublic(isPublic);
+ playlistService.updatePlaylist(playlist);
+ return getPlaylist(id);
+ }
+
+ public void setPlaylistService(net.sourceforge.subsonic.service.PlaylistService playlistService) {
+ this.playlistService = playlistService;
+ }
+
+ public void setSecurityService(SecurityService securityService) {
+ this.securityService = securityService;
+ }
+
+ public void setMediaFileService(MediaFileService mediaFileService) {
+ this.mediaFileService = mediaFileService;
+ }
+
+ public void setMediaFileDao(MediaFileDao mediaFileDao) {
+ this.mediaFileDao = mediaFileDao;
+ }
+
+ public void setSettingsService(SettingsService settingsService) {
+ this.settingsService = settingsService;
+ }
+} \ No newline at end of file