From a1a18f77a50804e0127dfa4b0f5240c49c541184 Mon Sep 17 00:00:00 2001 From: Scott Jackson Date: Mon, 2 Jul 2012 21:24:02 -0700 Subject: Initial Commit --- .../net/sourceforge/subsonic/ajax/TagService.java | 128 +++++++++++++++++++++ 1 file changed, 128 insertions(+) create mode 100644 subsonic-main/src/main/java/net/sourceforge/subsonic/ajax/TagService.java (limited to 'subsonic-main/src/main/java/net/sourceforge/subsonic/ajax/TagService.java') diff --git a/subsonic-main/src/main/java/net/sourceforge/subsonic/ajax/TagService.java b/subsonic-main/src/main/java/net/sourceforge/subsonic/ajax/TagService.java new file mode 100644 index 00000000..f7373b4e --- /dev/null +++ b/subsonic-main/src/main/java/net/sourceforge/subsonic/ajax/TagService.java @@ -0,0 +1,128 @@ +/* + 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 . + + Copyright 2009 (C) Sindre Mehus + */ +package net.sourceforge.subsonic.ajax; + +import net.sourceforge.subsonic.Logger; +import net.sourceforge.subsonic.domain.MediaFile; +import net.sourceforge.subsonic.service.MediaFileService; +import net.sourceforge.subsonic.service.metadata.MetaData; +import net.sourceforge.subsonic.service.metadata.MetaDataParser; +import net.sourceforge.subsonic.service.metadata.MetaDataParserFactory; +import org.apache.commons.io.FilenameUtils; +import org.apache.commons.lang.ObjectUtils; +import org.apache.commons.lang.StringUtils; + +/** + * Provides AJAX-enabled services for editing tags in music files. + * This class is used by the DWR framework (http://getahead.ltd.uk/dwr/). + * + * @author Sindre Mehus + */ +public class TagService { + + private static final Logger LOG = Logger.getLogger(TagService.class); + + private MetaDataParserFactory metaDataParserFactory; + private MediaFileService mediaFileService; + + /** + * Updated tags for a given music file. + * + * @param id The ID of the music file. + * @param track The track number. + * @param artist The artist name. + * @param album The album name. + * @param title The song title. + * @param year The release year. + * @param genre The musical genre. + * @return "UPDATED" if the new tags were updated, "SKIPPED" if no update was necessary. + * Otherwise the error message is returned. + */ + public String setTags(int id, String track, String artist, String album, String title, String year, String genre) { + + track = StringUtils.trimToNull(track); + artist = StringUtils.trimToNull(artist); + album = StringUtils.trimToNull(album); + title = StringUtils.trimToNull(title); + year = StringUtils.trimToNull(year); + genre = StringUtils.trimToNull(genre); + + Integer trackNumber = null; + if (track != null) { + try { + trackNumber = new Integer(track); + } catch (NumberFormatException x) { + LOG.warn("Illegal track number: " + track, x); + } + } + + Integer yearNumber = null; + if (year != null) { + try { + yearNumber = new Integer(year); + } catch (NumberFormatException x) { + LOG.warn("Illegal year: " + year, x); + } + } + + try { + + MediaFile file = mediaFileService.getMediaFile(id); + MetaDataParser parser = metaDataParserFactory.getParser(file.getFile()); + + if (!parser.isEditingSupported()) { + return "Tag editing of " + FilenameUtils.getExtension(file.getPath()) + " files is not supported."; + } + + MetaData existingMetaData = parser.getRawMetaData(file.getFile()); + + if (StringUtils.equals(artist, existingMetaData.getArtist()) && + StringUtils.equals(album, existingMetaData.getAlbumName()) && + StringUtils.equals(title, existingMetaData.getTitle()) && + ObjectUtils.equals(yearNumber, existingMetaData.getYear()) && + StringUtils.equals(genre, existingMetaData.getGenre()) && + ObjectUtils.equals(trackNumber, existingMetaData.getTrackNumber())) { + return "SKIPPED"; + } + + MetaData newMetaData = new MetaData(); + newMetaData.setArtist(artist); + newMetaData.setAlbumName(album); + newMetaData.setTitle(title); + newMetaData.setYear(yearNumber); + newMetaData.setGenre(genre); + newMetaData.setTrackNumber(trackNumber); + parser.setMetaData(file, newMetaData); + mediaFileService.refreshMediaFile(file); + return "UPDATED"; + + } catch (Exception x) { + LOG.warn("Failed to update tags for " + id, x); + return x.getMessage(); + } + } + + public void setMediaFileService(MediaFileService mediaFileService) { + this.mediaFileService = mediaFileService; + } + + public void setMetaDataParserFactory(MetaDataParserFactory metaDataParserFactory) { + this.metaDataParserFactory = metaDataParserFactory; + } +} -- cgit v1.2.3