diff options
Diffstat (limited to 'subsonic-main/src/main/java/net/sourceforge/subsonic/controller/ShareSettingsController.java')
-rw-r--r-- | subsonic-main/src/main/java/net/sourceforge/subsonic/controller/ShareSettingsController.java | 161 |
1 files changed, 161 insertions, 0 deletions
diff --git a/subsonic-main/src/main/java/net/sourceforge/subsonic/controller/ShareSettingsController.java b/subsonic-main/src/main/java/net/sourceforge/subsonic/controller/ShareSettingsController.java new file mode 100644 index 00000000..2b8a958a --- /dev/null +++ b/subsonic-main/src/main/java/net/sourceforge/subsonic/controller/ShareSettingsController.java @@ -0,0 +1,161 @@ +/* + 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.controller; + +import net.sourceforge.subsonic.domain.MediaFile; +import net.sourceforge.subsonic.domain.Share; +import net.sourceforge.subsonic.domain.User; +import net.sourceforge.subsonic.service.MediaFileService; +import net.sourceforge.subsonic.service.SecurityService; +import net.sourceforge.subsonic.service.ShareService; +import org.apache.commons.lang.StringUtils; +import org.springframework.web.servlet.ModelAndView; +import org.springframework.web.servlet.mvc.ParameterizableViewController; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * Controller for the page used to administrate the set of shared media. + * + * @author Sindre Mehus + */ +public class ShareSettingsController extends ParameterizableViewController { + + private ShareService shareService; + private SecurityService securityService; + private MediaFileService mediaFileService; + + @Override + protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception { + + Map<String, Object> map = new HashMap<String, Object>(); + + if (isFormSubmission(request)) { + String error = handleParameters(request); + map.put("error", error); + } + + ModelAndView result = super.handleRequestInternal(request, response); + map.put("shareBaseUrl", shareService.getShareBaseUrl()); + map.put("shareInfos", getShareInfos(request)); + map.put("user", securityService.getCurrentUser(request)); + + result.addObject("model", map); + return result; + } + + /** + * Determine if the given request represents a form submission. + * + * @param request current HTTP request + * @return if the request represents a form submission + */ + private boolean isFormSubmission(HttpServletRequest request) { + return "POST".equals(request.getMethod()); + } + + private String handleParameters(HttpServletRequest request) { + User user = securityService.getCurrentUser(request); + for (Share share : shareService.getSharesForUser(user)) { + int id = share.getId(); + + String description = getParameter(request, "description", id); + boolean delete = getParameter(request, "delete", id) != null; + String expireIn = getParameter(request, "expireIn", id); + + if (delete) { + shareService.deleteShare(id); + } else { + if (expireIn != null) { + share.setExpires(parseExpireIn(expireIn)); + } + share.setDescription(description); + shareService.updateShare(share); + } + } + + return null; + } + + private List<ShareInfo> getShareInfos(HttpServletRequest request) { + List<ShareInfo> result = new ArrayList<ShareInfo>(); + User user = securityService.getCurrentUser(request); + for (Share share : shareService.getSharesForUser(user)) { + List<MediaFile> files = shareService.getSharedFiles(share.getId()); + if (!files.isEmpty()) { + MediaFile file = files.get(0); + result.add(new ShareInfo(share, file.isDirectory() ? file : mediaFileService.getParentOf(file))); + } + } + return result; + } + + + private String getParameter(HttpServletRequest request, String name, int id) { + return StringUtils.trimToNull(request.getParameter(name + "[" + id + "]")); + } + + private Date parseExpireIn(String expireIn) { + int days = Integer.parseInt(expireIn); + if (days == 0) { + return null; + } + + Calendar calendar = Calendar.getInstance(); + calendar.add(Calendar.DAY_OF_YEAR, days); + return calendar.getTime(); + } + + public void setSecurityService(SecurityService securityService) { + this.securityService = securityService; + } + + public void setShareService(ShareService shareService) { + this.shareService = shareService; + } + + public void setMediaFileService(MediaFileService mediaFileService) { + this.mediaFileService = mediaFileService; + } + + public static class ShareInfo { + private final Share share; + private final MediaFile dir; + + public ShareInfo(Share share, MediaFile dir) { + this.share = share; + this.dir = dir; + } + + public Share getShare() { + return share; + } + + public MediaFile getDir() { + return dir; + } + } +}
\ No newline at end of file |