aboutsummaryrefslogtreecommitdiff
path: root/subsonic-main/src/main/java/net/sourceforge/subsonic/controller/PersonalSettingsController.java
diff options
context:
space:
mode:
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.java164
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;
+ }
+}