diff options
Diffstat (limited to 'subsonic-main/src/main/java/net/sourceforge/subsonic/controller/PersonalSettingsController.java')
-rw-r--r-- | subsonic-main/src/main/java/net/sourceforge/subsonic/controller/PersonalSettingsController.java | 164 |
1 files changed, 164 insertions, 0 deletions
diff --git a/subsonic-main/src/main/java/net/sourceforge/subsonic/controller/PersonalSettingsController.java b/subsonic-main/src/main/java/net/sourceforge/subsonic/controller/PersonalSettingsController.java new file mode 100644 index 00000000..3bc3f7a5 --- /dev/null +++ b/subsonic-main/src/main/java/net/sourceforge/subsonic/controller/PersonalSettingsController.java @@ -0,0 +1,164 @@ +/* + 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 org.springframework.web.servlet.mvc.*; +import org.apache.commons.lang.StringUtils; +import net.sourceforge.subsonic.service.*; +import net.sourceforge.subsonic.command.*; +import net.sourceforge.subsonic.domain.*; + +import javax.servlet.http.*; +import java.util.*; + +/** + * Controller for the page used to administrate per-user settings. + * + * @author Sindre Mehus + */ +public class PersonalSettingsController extends SimpleFormController { + + private SettingsService settingsService; + private SecurityService securityService; + + @Override + protected Object formBackingObject(HttpServletRequest request) throws Exception { + PersonalSettingsCommand command = new PersonalSettingsCommand(); + + User user = securityService.getCurrentUser(request); + UserSettings userSettings = settingsService.getUserSettings(user.getUsername()); + + command.setUser(user); + command.setLocaleIndex("-1"); + command.setThemeIndex("-1"); + command.setAvatars(settingsService.getAllSystemAvatars()); + command.setCustomAvatar(settingsService.getCustomAvatar(user.getUsername())); + command.setAvatarId(getAvatarId(userSettings)); + command.setPartyModeEnabled(userSettings.isPartyModeEnabled()); + command.setShowNowPlayingEnabled(userSettings.isShowNowPlayingEnabled()); + command.setShowChatEnabled(userSettings.isShowChatEnabled()); + command.setNowPlayingAllowed(userSettings.isNowPlayingAllowed()); + command.setMainVisibility(userSettings.getMainVisibility()); + command.setPlaylistVisibility(userSettings.getPlaylistVisibility()); + command.setFinalVersionNotificationEnabled(userSettings.isFinalVersionNotificationEnabled()); + command.setBetaVersionNotificationEnabled(userSettings.isBetaVersionNotificationEnabled()); + command.setLastFmEnabled(userSettings.isLastFmEnabled()); + command.setLastFmUsername(userSettings.getLastFmUsername()); + command.setLastFmPassword(userSettings.getLastFmPassword()); + + Locale currentLocale = userSettings.getLocale(); + Locale[] locales = settingsService.getAvailableLocales(); + String[] localeStrings = new String[locales.length]; + for (int i = 0; i < locales.length; i++) { + localeStrings[i] = locales[i].getDisplayName(locales[i]); + if (locales[i].equals(currentLocale)) { + command.setLocaleIndex(String.valueOf(i)); + } + } + command.setLocales(localeStrings); + + String currentThemeId = userSettings.getThemeId(); + Theme[] themes = settingsService.getAvailableThemes(); + command.setThemes(themes); + for (int i = 0; i < themes.length; i++) { + if (themes[i].getId().equals(currentThemeId)) { + command.setThemeIndex(String.valueOf(i)); + break; + } + } + + return command; + } + + @Override + protected void doSubmitAction(Object comm) throws Exception { + PersonalSettingsCommand command = (PersonalSettingsCommand) comm; + + int localeIndex = Integer.parseInt(command.getLocaleIndex()); + Locale locale = null; + if (localeIndex != -1) { + locale = settingsService.getAvailableLocales()[localeIndex]; + } + + int themeIndex = Integer.parseInt(command.getThemeIndex()); + String themeId = null; + if (themeIndex != -1) { + themeId = settingsService.getAvailableThemes()[themeIndex].getId(); + } + + String username = command.getUser().getUsername(); + UserSettings settings = settingsService.getUserSettings(username); + + settings.setLocale(locale); + settings.setThemeId(themeId); + settings.setPartyModeEnabled(command.isPartyModeEnabled()); + settings.setShowNowPlayingEnabled(command.isShowNowPlayingEnabled()); + settings.setShowChatEnabled(command.isShowChatEnabled()); + settings.setNowPlayingAllowed(command.isNowPlayingAllowed()); + settings.setMainVisibility(command.getMainVisibility()); + settings.setPlaylistVisibility(command.getPlaylistVisibility()); + settings.setFinalVersionNotificationEnabled(command.isFinalVersionNotificationEnabled()); + settings.setBetaVersionNotificationEnabled(command.isBetaVersionNotificationEnabled()); + settings.setLastFmEnabled(command.isLastFmEnabled()); + settings.setLastFmUsername(command.getLastFmUsername()); + settings.setSystemAvatarId(getSystemAvatarId(command)); + settings.setAvatarScheme(getAvatarScheme(command)); + + if (StringUtils.isNotBlank(command.getLastFmPassword())) { + settings.setLastFmPassword(command.getLastFmPassword()); + } + + settings.setChanged(new Date()); + settingsService.updateUserSettings(settings); + + command.setReloadNeeded(true); + } + + private int getAvatarId(UserSettings userSettings) { + AvatarScheme avatarScheme = userSettings.getAvatarScheme(); + return avatarScheme == AvatarScheme.SYSTEM ? userSettings.getSystemAvatarId() : avatarScheme.getCode(); + } + + private AvatarScheme getAvatarScheme(PersonalSettingsCommand command) { + if (command.getAvatarId() == AvatarScheme.NONE.getCode()) { + return AvatarScheme.NONE; + } + if (command.getAvatarId() == AvatarScheme.CUSTOM.getCode()) { + return AvatarScheme.CUSTOM; + } + return AvatarScheme.SYSTEM; + } + + private Integer getSystemAvatarId(PersonalSettingsCommand command) { + int avatarId = command.getAvatarId(); + if (avatarId == AvatarScheme.NONE.getCode() || + avatarId == AvatarScheme.CUSTOM.getCode()) { + return null; + } + return avatarId; + } + + public void setSettingsService(SettingsService settingsService) { + this.settingsService = settingsService; + } + + public void setSecurityService(SecurityService securityService) { + this.securityService = securityService; + } +} |