Merge pull request #178 from plastikman/nolicense
Remove all premium/license calls.
This commit is contained in:
@@ -59,7 +59,6 @@
|
||||
<copy file="${basedir}/src/main/exe4j/libresonic-agent-elevated.exe.vmoptions" todir="${project.build.directory}"/>
|
||||
<copy file="${basedir}/src/main/exe4j/libresonic-service.exe.vmoptions" todir="${project.build.directory}"/>
|
||||
<exec executable="${exe4j.home}/bin/exe4jc">
|
||||
<arg value="--license=L-SINDRE_MEHUS#14926715500010001-1ty7dbe11l10ll#140"/>
|
||||
</exec>
|
||||
<exec executable="${exe4j.home}/bin/exe4jc">
|
||||
<arg value="${basedir}/src/main/exe4j/libresonic-agent.exe4j"/>
|
||||
|
||||
+5
-6
@@ -19,7 +19,6 @@
|
||||
*/
|
||||
package org.libresonic.player.command;
|
||||
|
||||
import org.libresonic.player.domain.LicenseInfo;
|
||||
|
||||
/**
|
||||
* @author Sindre Mehus
|
||||
@@ -33,7 +32,7 @@ public class NetworkSettingsCommand {
|
||||
private String urlRedirectCustomUrl;
|
||||
private String urlRedirectType;
|
||||
private int port;
|
||||
private LicenseInfo licenseInfo;
|
||||
private boolean toast;
|
||||
|
||||
public void setPortForwardingEnabled(boolean portForwardingEnabled) {
|
||||
this.portForwardingEnabled = portForwardingEnabled;
|
||||
@@ -74,12 +73,12 @@ public class NetworkSettingsCommand {
|
||||
this.port = port;
|
||||
}
|
||||
|
||||
public void setLicenseInfo(LicenseInfo licenseInfo) {
|
||||
this.licenseInfo = licenseInfo;
|
||||
public boolean isToast() {
|
||||
return toast;
|
||||
}
|
||||
|
||||
public LicenseInfo getLicenseInfo() {
|
||||
return licenseInfo;
|
||||
public void setToast(boolean toast) {
|
||||
this.toast = toast;
|
||||
}
|
||||
|
||||
public String getUrlRedirectType() {
|
||||
|
||||
+8
-1
@@ -57,7 +57,6 @@ public class DLNASettingsController {
|
||||
|
||||
map.put("dlnaEnabled", settingsService.isDlnaEnabled());
|
||||
map.put("dlnaServerName", settingsService.getDlnaServerName());
|
||||
map.put("licenseInfo", settingsService.getLicenseInfo());
|
||||
|
||||
model.addAttribute("model", map);
|
||||
return "dlnaSettings";
|
||||
@@ -83,4 +82,12 @@ public class DLNASettingsController {
|
||||
settingsService.save();
|
||||
upnpService.setMediaServerEnabled(dlnaEnabled);
|
||||
}
|
||||
|
||||
public void setSettingsService(SettingsService settingsService) {
|
||||
this.settingsService = settingsService;
|
||||
}
|
||||
|
||||
public void setUpnpService(UPnPService upnpService) {
|
||||
this.upnpService = upnpService;
|
||||
}
|
||||
}
|
||||
@@ -63,7 +63,6 @@ public class HelpController extends ParameterizableViewController {
|
||||
", java " + System.getProperty("java.version") +
|
||||
", " + System.getProperty("os.name");
|
||||
|
||||
map.put("licenseInfo", settingsService.getLicenseInfo());
|
||||
map.put("user", securityService.getCurrentUser(request));
|
||||
map.put("brand", settingsService.getBrand());
|
||||
map.put("localVersion", versionService.getLocalVersion());
|
||||
|
||||
@@ -119,7 +119,6 @@ public class MainController extends AbstractController {
|
||||
map.put("showArtistInfo", userSettings.isShowArtistInfoEnabled());
|
||||
map.put("partyMode", userSettings.isPartyModeEnabled());
|
||||
map.put("brand", settingsService.getBrand());
|
||||
map.put("showAd", !settingsService.isLicenseValid() && adService.showAd());
|
||||
map.put("viewAsList", isViewAsList(request, userSettings));
|
||||
if (dir.isAlbum()) {
|
||||
map.put("sieblingAlbums", getSieblingAlbums(dir));
|
||||
|
||||
-1
@@ -57,7 +57,6 @@ public class NetworkSettingsController {
|
||||
command.setUrlRedirectFrom(settingsService.getUrlRedirectFrom());
|
||||
command.setUrlRedirectCustomUrl(settingsService.getUrlRedirectCustomUrl());
|
||||
command.setPort(settingsService.getPort());
|
||||
command.setLicenseInfo(settingsService.getLicenseInfo());
|
||||
model.addAttribute("command",command);
|
||||
}
|
||||
|
||||
|
||||
-1
@@ -61,7 +61,6 @@ public class PlayQueueController extends ParameterizableViewController {
|
||||
map.put("partyMode", userSettings.isPartyModeEnabled());
|
||||
map.put("notify", userSettings.isSongNotificationEnabled());
|
||||
map.put("autoHide", userSettings.isAutoHidePlayQueue());
|
||||
map.put("licenseInfo", settingsService.getLicenseInfo());
|
||||
ModelAndView result = super.handleRequestInternal(request, response);
|
||||
result.addObject("model", map);
|
||||
return result;
|
||||
|
||||
-1
@@ -64,7 +64,6 @@ public class PodcastChannelsController extends ParameterizableViewController {
|
||||
map.put("channels", channels);
|
||||
map.put("channelMap", channelMap);
|
||||
map.put("newestEpisodes", podcastService.getNewestEpisodes(10));
|
||||
map.put("licenseInfo", settingsService.getLicenseInfo());
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
@@ -60,7 +60,6 @@ import org.libresonic.restapi.InternetRadioStation;
|
||||
import org.libresonic.restapi.InternetRadioStations;
|
||||
import org.libresonic.restapi.JukeboxPlaylist;
|
||||
import org.libresonic.restapi.JukeboxStatus;
|
||||
import org.libresonic.restapi.License;
|
||||
import org.libresonic.restapi.Lyrics;
|
||||
import org.libresonic.restapi.MediaType;
|
||||
import org.libresonic.restapi.MusicFolders;
|
||||
@@ -101,7 +100,6 @@ import org.libresonic.player.domain.ArtistBio;
|
||||
import org.libresonic.player.domain.Bookmark;
|
||||
import org.libresonic.player.domain.Genre;
|
||||
import org.libresonic.player.domain.InternetRadio;
|
||||
import org.libresonic.player.domain.LicenseInfo;
|
||||
import org.libresonic.player.domain.MediaFile;
|
||||
import org.libresonic.player.domain.MusicFolder;
|
||||
import org.libresonic.player.domain.MusicFolderContent;
|
||||
@@ -207,23 +205,6 @@ public class RESTController extends MultiActionController {
|
||||
jaxbWriter.writeResponse(request, response, res);
|
||||
}
|
||||
|
||||
@SuppressWarnings("UnusedDeclaration")
|
||||
public void getLicense(HttpServletRequest request, HttpServletResponse response) throws Exception {
|
||||
request = wrapRequest(request);
|
||||
License license = new License();
|
||||
|
||||
LicenseInfo licenseInfo = settingsService.getLicenseInfo();
|
||||
|
||||
license.setEmail(licenseInfo.getLicenseEmail());
|
||||
license.setValid(licenseInfo.isLicenseValid());
|
||||
license.setLicenseExpires(jaxbWriter.convertDate(licenseInfo.getLicenseExpires()));
|
||||
license.setTrialExpires(jaxbWriter.convertDate(licenseInfo.getTrialExpires()));
|
||||
|
||||
Response res = createResponse();
|
||||
res.setLicense(license);
|
||||
jaxbWriter.writeResponse(request, response, res);
|
||||
}
|
||||
|
||||
@SuppressWarnings("UnusedDeclaration")
|
||||
public void getMusicFolders(HttpServletRequest request, HttpServletResponse response) throws Exception {
|
||||
request = wrapRequest(request);
|
||||
@@ -2489,7 +2470,6 @@ public class RESTController extends MultiActionController {
|
||||
PROTOCOL_MISMATCH_SERVER_TOO_OLD(30, "Incompatible Libresonic REST protocol version. Server must upgrade."),
|
||||
NOT_AUTHENTICATED(40, "Wrong username or password."),
|
||||
NOT_AUTHORIZED(50, "User is not authorized for the given operation."),
|
||||
NOT_LICENSED(60, "The trial period for the Libresonic server is over. Please upgrade to Subsonic Premium. Visit libresonic.org for details."),
|
||||
NOT_FOUND(70, "Requested data was not found.");
|
||||
|
||||
private final int code;
|
||||
|
||||
@@ -63,7 +63,6 @@ public class RightController extends ParameterizableViewController {
|
||||
map.put("showNowPlaying", userSettings.isShowNowPlayingEnabled());
|
||||
map.put("showChat", userSettings.isShowChatEnabled());
|
||||
map.put("user", securityService.getCurrentUser(request));
|
||||
map.put("licenseInfo", settingsService.getLicenseInfo());
|
||||
|
||||
result.addObject("model", map);
|
||||
return result;
|
||||
|
||||
-1
@@ -80,7 +80,6 @@ public class ShareManagementController extends MultiActionController {
|
||||
}
|
||||
|
||||
map.put("playUrl", shareService.getShareUrl(share));
|
||||
map.put("licenseInfo", settingsService.getLicenseInfo());
|
||||
|
||||
return new ModelAndView("createShare", "model", map);
|
||||
}
|
||||
|
||||
-1
@@ -70,7 +70,6 @@ public class ShareSettingsController {
|
||||
map.put("shareBaseUrl", shareService.getShareBaseUrl());
|
||||
map.put("shareInfos", getShareInfos(request));
|
||||
map.put("user", securityService.getCurrentUser(request));
|
||||
map.put("licenseInfo", settingsService.getLicenseInfo());
|
||||
|
||||
model.addAttribute("model", map);
|
||||
return "shareSettings";
|
||||
|
||||
+8
-1
@@ -54,7 +54,6 @@ public class SonosSettingsController {
|
||||
|
||||
map.put("sonosEnabled", settingsService.isSonosEnabled());
|
||||
map.put("sonosServiceName", settingsService.getSonosServiceName());
|
||||
map.put("licenseInfo", settingsService.getLicenseInfo());
|
||||
|
||||
model.addAttribute("model", map);
|
||||
return "sonosSettings";
|
||||
@@ -83,4 +82,12 @@ public class SonosSettingsController {
|
||||
sonosService.setMusicServiceEnabled(false);
|
||||
sonosService.setMusicServiceEnabled(sonosEnabled);
|
||||
}
|
||||
|
||||
public void setSettingsService(SettingsService settingsService) {
|
||||
this.settingsService = settingsService;
|
||||
}
|
||||
|
||||
public void setSonosService(SonosService sonosService) {
|
||||
this.sonosService = sonosService;
|
||||
}
|
||||
}
|
||||
-1
@@ -85,7 +85,6 @@ public class VideoPlayerController extends ParameterizableViewController {
|
||||
map.put("duration", duration);
|
||||
map.put("bitRates", BIT_RATES);
|
||||
map.put("defaultBitRate", DEFAULT_BIT_RATE);
|
||||
map.put("licenseInfo", settingsService.getLicenseInfo());
|
||||
map.put("user", user);
|
||||
|
||||
ModelAndView result = super.handleRequestInternal(request, response);
|
||||
|
||||
@@ -1,89 +0,0 @@
|
||||
/*
|
||||
This file is part of Libresonic.
|
||||
|
||||
Libresonic 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.
|
||||
|
||||
Libresonic 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 Libresonic. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Copyright 2016 (C) Libresonic Authors
|
||||
Based upon Subsonic, Copyright 2009 (C) Sindre Mehus
|
||||
*/
|
||||
package org.libresonic.player.domain;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
|
||||
import org.libresonic.player.service.SettingsService;
|
||||
|
||||
/**
|
||||
* Controller for the "Podcast receiver" page.
|
||||
*
|
||||
* @author Sindre Mehus
|
||||
*/
|
||||
public class LicenseInfo {
|
||||
|
||||
private String licenseEmail;
|
||||
private boolean licenseValid;
|
||||
private final Date trialExpires;
|
||||
private long trialDaysLeft;
|
||||
private final Date licenseExpires;
|
||||
|
||||
public LicenseInfo(String licenseEmail, boolean licenseValid, Date trialExpires,
|
||||
long trialDaysLeft, Date licenseExpires) {
|
||||
this.licenseEmail = licenseEmail;
|
||||
this.licenseValid = licenseValid;
|
||||
this.trialExpires = trialExpires;
|
||||
this.trialDaysLeft = trialDaysLeft;
|
||||
this.licenseExpires = licenseExpires;
|
||||
}
|
||||
|
||||
public String getLicenseEmail() {
|
||||
return licenseEmail;
|
||||
}
|
||||
|
||||
public void setLicenseEmail(String licenseEmail) {
|
||||
this.licenseEmail = StringUtils.trimToNull(licenseEmail);
|
||||
}
|
||||
|
||||
public boolean isLicenseValid() {
|
||||
return licenseValid;
|
||||
}
|
||||
|
||||
public void setLicenseValid(boolean licenseValid) {
|
||||
this.licenseValid = licenseValid;
|
||||
}
|
||||
|
||||
public boolean isTrial() {
|
||||
return trialExpires != null && !licenseValid;
|
||||
}
|
||||
|
||||
public boolean isTrialExpired() {
|
||||
return trialExpires != null && (trialExpires.before(new Date()) || trialDaysLeft > SettingsService.TRIAL_DAYS + 1);
|
||||
}
|
||||
|
||||
public boolean isLicenseOrTrialValid() {
|
||||
return isLicenseValid() || !isTrialExpired();
|
||||
}
|
||||
|
||||
public Date getTrialExpires() {
|
||||
return trialExpires;
|
||||
}
|
||||
|
||||
public long getTrialDaysLeft() {
|
||||
return trialDaysLeft;
|
||||
}
|
||||
|
||||
public Date getLicenseExpires() {
|
||||
return licenseExpires;
|
||||
}
|
||||
}
|
||||
-14
@@ -24,7 +24,6 @@ import org.apache.commons.lang.StringUtils;
|
||||
import org.libresonic.player.Logger;
|
||||
import org.libresonic.player.controller.JAXBWriter;
|
||||
import org.libresonic.player.controller.RESTController;
|
||||
import org.libresonic.player.domain.LicenseInfo;
|
||||
import org.libresonic.player.domain.User;
|
||||
import org.libresonic.player.domain.Version;
|
||||
import org.libresonic.player.service.SecurityService;
|
||||
@@ -99,10 +98,6 @@ public class RESTRequestParameterProcessingFilter implements Filter {
|
||||
errorCode = authenticate(username, password, salt, token, previousAuth);
|
||||
}
|
||||
|
||||
if (errorCode == null) {
|
||||
errorCode = checkLicense(client);
|
||||
}
|
||||
|
||||
if (errorCode == null) {
|
||||
chain.doFilter(request, response);
|
||||
} else {
|
||||
@@ -162,15 +157,6 @@ public class RESTRequestParameterProcessingFilter implements Filter {
|
||||
return RESTController.ErrorCode.MISSING_PARAMETER;
|
||||
}
|
||||
|
||||
private RESTController.ErrorCode checkLicense(String client) {
|
||||
LicenseInfo licenseInfo = settingsService.getLicenseInfo();
|
||||
if (licenseInfo.isLicenseOrTrialValid()) {
|
||||
return null;
|
||||
}
|
||||
LOG.info("REST access for client '" + client + "' has expired.");
|
||||
return RESTController.ErrorCode.NOT_LICENSED;
|
||||
}
|
||||
|
||||
public static String decrypt(String s) {
|
||||
if (s == null) {
|
||||
return null;
|
||||
|
||||
@@ -232,8 +232,6 @@ public class NetworkService {
|
||||
HttpPost request = new HttpPost(enable ? URL_REDIRECTION_REGISTER_URL : URL_REDIRECTION_UNREGISTER_URL);
|
||||
|
||||
int port = settingsService.getPort();
|
||||
boolean trial = !settingsService.isLicenseValid();
|
||||
Date trialExpires = settingsService.getTrialExpires();
|
||||
|
||||
List<NameValuePair> params = new ArrayList<NameValuePair>();
|
||||
params.add(new BasicNameValuePair("serverId", settingsService.getServerId()));
|
||||
@@ -242,12 +240,6 @@ public class NetworkService {
|
||||
params.add(new BasicNameValuePair("localIp", settingsService.getLocalIpAddress()));
|
||||
params.add(new BasicNameValuePair("localPort", String.valueOf(port)));
|
||||
params.add(new BasicNameValuePair("contextPath", settingsService.getUrlRedirectContextPath()));
|
||||
params.add(new BasicNameValuePair("trial", String.valueOf(trial)));
|
||||
if (trial && trialExpires != null) {
|
||||
params.add(new BasicNameValuePair("trialExpires", String.valueOf(trialExpires.getTime())));
|
||||
} else {
|
||||
params.add(new BasicNameValuePair("licenseHolder", settingsService.getLicenseEmail()));
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -535,10 +535,6 @@ public class PodcastService {
|
||||
|
||||
try (CloseableHttpClient client = HttpClients.createDefault()) {
|
||||
|
||||
if (!settingsService.getLicenseInfo().isLicenseOrTrialValid()) {
|
||||
throw new Exception("Sorry, the trial period is expired.");
|
||||
}
|
||||
|
||||
PodcastChannel channel = getChannel(episode.getChannelId());
|
||||
RequestConfig requestConfig = RequestConfig.custom()
|
||||
.setConnectTimeout(2 * 60 * 1000) // 2 minutes
|
||||
|
||||
@@ -52,7 +52,6 @@ import org.libresonic.player.dao.UserDao;
|
||||
import org.libresonic.player.domain.AlbumListType;
|
||||
import org.libresonic.player.domain.Avatar;
|
||||
import org.libresonic.player.domain.InternetRadio;
|
||||
import org.libresonic.player.domain.LicenseInfo;
|
||||
import org.libresonic.player.domain.MediaLibraryStatistics;
|
||||
import org.libresonic.player.domain.MusicFolder;
|
||||
import org.libresonic.player.domain.Theme;
|
||||
@@ -73,9 +72,6 @@ public class SettingsService {
|
||||
private static final File LIBRESONIC_HOME_WINDOWS = new File("c:/libresonic");
|
||||
private static final File LIBRESONIC_HOME_OTHER = new File("/var/libresonic");
|
||||
|
||||
// Number of free trial days.
|
||||
public static final long TRIAL_DAYS = 30L;
|
||||
|
||||
// Global settings.
|
||||
private static final String KEY_INDEX_STRING = "IndexString";
|
||||
private static final String KEY_IGNORED_ARTICLES = "IgnoredArticles";
|
||||
@@ -102,9 +98,6 @@ public class SettingsService {
|
||||
private static final String KEY_PODCAST_EPISODE_DOWNLOAD_COUNT = "PodcastEpisodeDownloadCount";
|
||||
private static final String KEY_DOWNLOAD_BITRATE_LIMIT = "DownloadBitrateLimit";
|
||||
private static final String KEY_UPLOAD_BITRATE_LIMIT = "UploadBitrateLimit";
|
||||
private static final String KEY_LICENSE_EMAIL = "LicenseEmail";
|
||||
private static final String KEY_LICENSE_CODE = "LicenseCode";
|
||||
private static final String KEY_LICENSE_DATE = "LicenseDate";
|
||||
private static final String KEY_DOWNSAMPLING_COMMAND = "DownsamplingCommand4";
|
||||
private static final String KEY_HLS_COMMAND = "HlsCommand3";
|
||||
private static final String KEY_JUKEBOX_COMMAND = "JukeboxCommand2";
|
||||
@@ -131,7 +124,6 @@ public class SettingsService {
|
||||
private static final String KEY_ORGANIZE_BY_FOLDER_STRUCTURE = "OrganizeByFolderStructure";
|
||||
private static final String KEY_SORT_ALBUMS_BY_YEAR = "SortAlbumsByYear";
|
||||
private static final String KEY_MEDIA_LIBRARY_STATISTICS = "MediaLibraryStatistics";
|
||||
private static final String KEY_TRIAL_EXPIRES = "TrialExpires";
|
||||
private static final String KEY_DLNA_ENABLED = "DlnaEnabled";
|
||||
private static final String KEY_DLNA_SERVER_NAME = "DlnaServerName";
|
||||
private static final String KEY_SONOS_ENABLED = "SonosEnabled";
|
||||
@@ -178,9 +170,6 @@ public class SettingsService {
|
||||
private static final int DEFAULT_PODCAST_EPISODE_DOWNLOAD_COUNT = 1;
|
||||
private static final long DEFAULT_DOWNLOAD_BITRATE_LIMIT = 0;
|
||||
private static final long DEFAULT_UPLOAD_BITRATE_LIMIT = 0;
|
||||
private static final String DEFAULT_LICENSE_EMAIL = null;
|
||||
private static final String DEFAULT_LICENSE_CODE = null;
|
||||
private static final String DEFAULT_LICENSE_DATE = null;
|
||||
private static final String DEFAULT_DOWNSAMPLING_COMMAND = "ffmpeg -i %s -map 0:0 -b:a %bk -v 0 -f mp3 -";
|
||||
private static final String DEFAULT_HLS_COMMAND = "ffmpeg -ss %o -t %d -i %s -async 1 -b:v %bk -s %wx%h -ar 44100 -ac 2 -v 0 -f mpegts -c:v libx264 -preset superfast -c:a libmp3lame -threads 0 -";
|
||||
private static final String DEFAULT_JUKEBOX_COMMAND = "ffmpeg -ss %o -i %s -map 0:0 -v 0 -ar 44100 -ac 2 -f s16be -";
|
||||
@@ -206,7 +195,6 @@ public class SettingsService {
|
||||
private static final boolean DEFAULT_ORGANIZE_BY_FOLDER_STRUCTURE = true;
|
||||
private static final boolean DEFAULT_SORT_ALBUMS_BY_YEAR = true;
|
||||
private static final String DEFAULT_MEDIA_LIBRARY_STATISTICS = "0 0 0 0 0";
|
||||
private static final String DEFAULT_TRIAL_EXPIRES = null;
|
||||
private static final boolean DEFAULT_DLNA_ENABLED = false;
|
||||
private static final String DEFAULT_DLNA_SERVER_NAME = "Libresonic";
|
||||
private static final boolean DEFAULT_SONOS_ENABLED = false;
|
||||
@@ -223,7 +211,7 @@ public class SettingsService {
|
||||
// Array of obsolete keys. Used to clean property file.
|
||||
private static final List<String> OBSOLETE_KEYS = Arrays.asList("PortForwardingPublicPort", "PortForwardingLocalPort",
|
||||
"DownsamplingCommand", "DownsamplingCommand2", "DownsamplingCommand3", "AutoCoverBatch", "MusicMask",
|
||||
"VideoMask", "CoverArtMask, HlsCommand", "HlsCommand2", "JukeboxCommand", "UrlRedirectTrialExpires", "VideoTrialExpires",
|
||||
"VideoMask", "CoverArtMask, HlsCommand", "HlsCommand2", "JukeboxCommand",
|
||||
"CoverArtFileTypes", "UrlRedirectCustomHost", "CoverArtLimit", "StreamPort");
|
||||
|
||||
private static final String LOCALES_FILE = "/org/libresonic/player/i18n/locales.txt";
|
||||
@@ -248,12 +236,6 @@ public class SettingsService {
|
||||
|
||||
private static File libresonicHome;
|
||||
|
||||
private boolean licenseValidated = true;
|
||||
private Date licenseExpires;
|
||||
private final ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
|
||||
private ScheduledFuture<?> licenseValidationFuture;
|
||||
|
||||
private static final long LICENSE_VALIDATION_DELAY_HOURS = 12;
|
||||
private static final long LOCAL_IP_LOOKUP_DELAY_SECONDS = 60;
|
||||
private String localIpAddress;
|
||||
|
||||
@@ -280,15 +262,8 @@ public class SettingsService {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Start trial.
|
||||
if (getTrialExpires() == null) {
|
||||
Date expiryDate = new Date(System.currentTimeMillis() + TRIAL_DAYS * 24L * 3600L * 1000L);
|
||||
setTrialExpires(expiryDate);
|
||||
}
|
||||
|
||||
save(false);
|
||||
}
|
||||
|
||||
/**
|
||||
* Register in service locator so that non-Spring objects can access me.
|
||||
@@ -298,7 +273,6 @@ public class SettingsService {
|
||||
logServerInfo();
|
||||
ServiceLocator.setSettingsService(this);
|
||||
scheduleLocalIpAddressLookup();
|
||||
scheduleLicenseValidation();
|
||||
}
|
||||
|
||||
private void logServerInfo() {
|
||||
@@ -650,49 +624,6 @@ public class SettingsService {
|
||||
setLong(KEY_UPLOAD_BITRATE_LIMIT, limit);
|
||||
}
|
||||
|
||||
public String getLicenseEmail() {
|
||||
return properties.getProperty(KEY_LICENSE_EMAIL, DEFAULT_LICENSE_EMAIL);
|
||||
}
|
||||
|
||||
public void setLicenseEmail(String email) {
|
||||
setProperty(KEY_LICENSE_EMAIL, email);
|
||||
}
|
||||
|
||||
public String getLicenseCode() {
|
||||
return properties.getProperty(KEY_LICENSE_CODE, DEFAULT_LICENSE_CODE);
|
||||
}
|
||||
|
||||
public void setLicenseCode(String code) {
|
||||
setProperty(KEY_LICENSE_CODE, code);
|
||||
}
|
||||
|
||||
public Date getLicenseDate() {
|
||||
String value = properties.getProperty(KEY_LICENSE_DATE, DEFAULT_LICENSE_DATE);
|
||||
return value == null ? null : new Date(Long.parseLong(value));
|
||||
}
|
||||
|
||||
public void setLicenseDate(Date date) {
|
||||
String value = (date == null ? null : String.valueOf(date.getTime()));
|
||||
setProperty(KEY_LICENSE_DATE, value);
|
||||
}
|
||||
|
||||
public boolean isLicenseValid() {
|
||||
return true;
|
||||
}
|
||||
|
||||
public boolean isLicenseValid(String email, String license) {
|
||||
return true;
|
||||
}
|
||||
|
||||
public LicenseInfo getLicenseInfo() {
|
||||
Date trialExpires = getTrialExpires();
|
||||
Date now = new Date();
|
||||
boolean trialValid = trialExpires.after(now);
|
||||
long trialDaysLeft = trialValid ? (trialExpires.getTime() - now.getTime()) / (24L * 3600L * 1000L) : 0L;
|
||||
|
||||
return new LicenseInfo(getLicenseEmail(), isLicenseValid(), trialExpires, trialDaysLeft, licenseExpires);
|
||||
}
|
||||
|
||||
public String getDownsamplingCommand() {
|
||||
return properties.getProperty(KEY_DOWNSAMPLING_COMMAND, DEFAULT_DOWNSAMPLING_COMMAND);
|
||||
}
|
||||
@@ -846,16 +777,6 @@ public class SettingsService {
|
||||
properties.setProperty(KEY_URL_REDIRECT_TYPE, urlRedirectType.name());
|
||||
}
|
||||
|
||||
public Date getTrialExpires() {
|
||||
String value = properties.getProperty(KEY_TRIAL_EXPIRES, DEFAULT_TRIAL_EXPIRES);
|
||||
return value == null ? null : new Date(Long.parseLong(value));
|
||||
}
|
||||
|
||||
private void setTrialExpires(Date date) {
|
||||
String value = (date == null ? null : String.valueOf(date.getTime()));
|
||||
setProperty(KEY_TRIAL_EXPIRES, value);
|
||||
}
|
||||
|
||||
public String getUrlRedirectContextPath() {
|
||||
return properties.getProperty(KEY_URL_REDIRECT_CONTEXT_PATH, DEFAULT_URL_REDIRECT_CONTEXT_PATH);
|
||||
}
|
||||
@@ -1406,35 +1327,12 @@ public class SettingsService {
|
||||
return result.toArray(new String[result.size()]);
|
||||
}
|
||||
|
||||
private void validateLicense() {
|
||||
String email = getLicenseEmail();
|
||||
Date date = getLicenseDate();
|
||||
licenseValidated = true;
|
||||
return;
|
||||
}
|
||||
|
||||
public synchronized void scheduleLicenseValidation() {
|
||||
if (licenseValidationFuture != null) {
|
||||
licenseValidationFuture.cancel(true);
|
||||
}
|
||||
Runnable task = new Runnable() {
|
||||
public void run() {
|
||||
validateLicense();
|
||||
}
|
||||
};
|
||||
licenseValidated = true;
|
||||
licenseExpires = null;
|
||||
|
||||
licenseValidationFuture = executor.scheduleWithFixedDelay(task, 0L, LICENSE_VALIDATION_DELAY_HOURS, TimeUnit.HOURS);
|
||||
}
|
||||
|
||||
private void scheduleLocalIpAddressLookup() {
|
||||
Runnable task = new Runnable() {
|
||||
public void run() {
|
||||
localIpAddress = Util.getLocalIpAddress();
|
||||
}
|
||||
};
|
||||
executor.scheduleWithFixedDelay(task, 0L, LOCAL_IP_LOOKUP_DELAY_SECONDS, TimeUnit.SECONDS);
|
||||
}
|
||||
|
||||
public void setInternetRadioDao(InternetRadioDao internetRadioDao) {
|
||||
|
||||
@@ -347,10 +347,6 @@ public class SonosService implements SonosSoap {
|
||||
throw new SonosSoapFault.LoginInvalid();
|
||||
}
|
||||
|
||||
if (!settingsService.getLicenseInfo().isLicenseOrTrialValid()) {
|
||||
throw new SonosSoapFault.LoginUnauthorized();
|
||||
}
|
||||
|
||||
// Use username as session ID for easy access to it later.
|
||||
GetSessionIdResponse result = new GetSessionIdResponse();
|
||||
result.setGetSessionIdResult(user.getUsername());
|
||||
|
||||
@@ -125,11 +125,9 @@ public class UPnPService {
|
||||
// TODO: DLNACaps
|
||||
Version version = versionService.getLocalVersion();
|
||||
String versionString = version == null ? null : version.toString();
|
||||
String licenseEmail = settingsService.getLicenseEmail();
|
||||
String licenseString = licenseEmail == null ? "Unlicensed" : ("Licensed to " + licenseEmail);
|
||||
|
||||
DeviceDetails details = new DeviceDetails(serverName, new ManufacturerDetails(serverName),
|
||||
new ModelDetails(serverName, licenseString, versionString),
|
||||
new ModelDetails(serverName),
|
||||
new DLNADoc[]{new DLNADoc("DMS", DLNADoc.Version.V1_5)}, null);
|
||||
|
||||
Icon icon = new Icon("image/png", 512, 512, 32, getClass().getResource("logo-512.png"));
|
||||
|
||||
-5
@@ -67,11 +67,6 @@ public class FolderBasedContentDirectory extends LibresonicContentDirectory {
|
||||
public BrowseResult browse(String objectId, BrowseFlag browseFlag, String filter, long firstResult,
|
||||
long maxResults, SortCriterion[] orderby) throws ContentDirectoryException {
|
||||
|
||||
if (!settingsService.getLicenseInfo().isLicenseOrTrialValid()) {
|
||||
LOG.warn("UPnP/DLNA media server not available. Please upgrade to Subsonic Premium.");
|
||||
throw new ContentDirectoryException(ContentDirectoryErrorCode.CANNOT_PROCESS, "Please upgrade to Subsonic Premium");
|
||||
}
|
||||
|
||||
LOG.info("UPnP request - objectId: " + objectId + ", browseFlag: " + browseFlag + ", filter: " + filter +
|
||||
", firstResult: " + firstResult + ", maxResults: " + maxResults);
|
||||
|
||||
|
||||
-37
@@ -25,8 +25,6 @@ common.confirm = Potvr\u010Fte
|
||||
common.unknown = (Nezn\u00E1m\u00FD)
|
||||
common.default = (V\u00FDchoz\u00ED)
|
||||
common.settingssaved = Nastaven\u00ED byla ulo\u017Eena.
|
||||
common.trialexpired = Zku\u0161ebn\u00ED doba vypr\u0161ela {0}. Z\u00EDskejte <b><a href="premiumSettings.view?">Subsonic Premium</a></b> pro pou\u017Eit\u00ED t\u00E9to funkce.
|
||||
common.trialnotexpired = Tato funkce je dostupn\u00E1 do {0}. Pot\u00E9 mus\u00EDte z\u00EDskat <b><a href="premiumSettings.view?">Subsonic Premium</a></b>.
|
||||
|
||||
# login.jsp
|
||||
login.username = U\u017Eivatelsk\u00E9 jm\u00E9no
|
||||
@@ -73,9 +71,6 @@ top.upgrade = Je dostupn\u00E1 nov\u00E1 verze. St\u00E1hnout {0} {1} \
|
||||
<a href="#" onclick="window.open(''http://libresonic.org/'')">zde</a>.
|
||||
top.missing = Nebyly nalezeny \u017E\u00E1dn\u00E9 slo\u017Eky m\u00E9di\u00ED. Zm\u011B\u0148te nastaven\u00ED.
|
||||
top.logout = Odhl\u00E1sit u\u017Eivatele {0}
|
||||
top.getpremium = Z\u00EDskat Subsonic Premium
|
||||
top.gotpremium = Subsonic Premium
|
||||
top.trialdaysleft = Zb\u00FDv\u00E1 {0} dn\u016F zku\u0161ebn\u00ED doby
|
||||
|
||||
# left.jsp
|
||||
left.scanning = Prohled\u00E1v\u00E1n\u00ED slo\u017Eek m\u00E9di\u00ED...
|
||||
@@ -268,10 +263,6 @@ upload.unzipped = Rozbaleno {0}
|
||||
help.title = O aplikaci {0}
|
||||
help.upgrade = <b>Pozor!</b> Je dostupn\u00E1 nov\u00E1 verze. St\u00E1hnout {0} {1} \
|
||||
<a href="#" onclick="window.open(''http://libresonic.org/'')">zde</a>.
|
||||
help.premium.title = Licence
|
||||
help.premium.expires = (vypr\u0161\u00ED {0})
|
||||
help.premium.upgrade = Upgradujte na <a href="premiumSettings.view">Subsonic Premium</a>, abyste si u\u017Eili spoustu <a href="premiumSettings.view">funkc\u00ED nav\u00EDc</a>!
|
||||
help.premium.expired = (Licence vypr\u0161ela {0})
|
||||
help.version.title = Verze
|
||||
help.builddate.title = Datum sestaven\u00ED
|
||||
help.server.title = Server
|
||||
@@ -568,7 +559,6 @@ main.sharealbum = Sd\u00EDlet
|
||||
main.more = V\u00EDce akc\u00ED...
|
||||
main.more.selection = Vybran\u00E9 skladby...
|
||||
main.more.share = Sd\u00EDlet
|
||||
main.premium = <a href="{0}" style="text-decoration:underline">Z\u00EDskat Subsonic Premium</a><br>(a odebrat tuto reklamu)
|
||||
main.nowplaying = P\u0159ehr\u00E1v\u00E1n\u00ED
|
||||
main.lyrics = Texty
|
||||
main.minutesago = minut zp\u011Bt
|
||||
@@ -637,33 +627,6 @@ share.disabled = Abyste s n\u011Bk\u00FDm mohli sd\u00EDlet svou hudbu, mus\u00E
|
||||
P\u0159ejd\u011Bte na <a href="networkSettings.view"><b>Nastaven\u00ED > S\u00ED\u0165</b></a> (jsou vy\u017Eadov\u00E1na opr\u00E1vn\u011Bn\u00ED administr\u00E1tora).
|
||||
share.manage = Spravovat m\u00E1 sd\u00EDlen\u00E1 m\u00E9dia
|
||||
|
||||
# premium.jsp
|
||||
premium.title = Subsonic Premium
|
||||
premium.invalidlicense = Neplatn\u00FD licen\u010Dn\u00ED kl\u00ED\u010D.
|
||||
premium.text = <p>Upgradujte na Subsonic Premium, abyste si u\u017Eili tyto dal\u0161\u00ED funkce:</p> \
|
||||
<ul> \
|
||||
<li><a href="http://libresonic.org/pages/apps.jsp" target="blank">Aplikace</a> pro Android, iPhone, Blackberry a Windows Phone*.</li> \
|
||||
<li><a href="http://libresonic.org/pages/apps.jsp" target="blank">Aplikace</a> pro Mac, Windows, Chrome, Roku a spoustu dal\u0161\u00EDch*.</li> \
|
||||
<li>Streamov\u00E1n\u00ED videa.</li> \
|
||||
<li>P\u0159ij\u00EDma\u010D Podcast\u016F.</li> \
|
||||
<li>Va\u0161e osobn\u00ED serverov\u00E1 adresa: <em>vasejmeno</em>.libresonic.org (viz <a href="networkSettings.view">Nastaven\u00ED > S\u00ED\u0165</a>).</li> \
|
||||
<li>P\u0159ehr\u00E1v\u00E1n\u00ED sv\u00FDch m\u00E9di\u00ED na kompatibiln\u00EDch za\u0159\u00EDzen\u00EDch DLNA a UPnP.</li> \
|
||||
<li>Sd\u00EDlen\u00ED sv\u00FDch m\u00E9di\u00ED na Facebooku, Twitteru, Google+.</li> \
|
||||
<li>\u017D\u00E1dn\u00E9 reklamy ve webov\u00E9m rozhran\u00ED.</li> \
|
||||
<li>Ostatn\u00ED funkce, kter\u00E9 budou spu\u0161t\u011Bny pozd\u011Bji.</li> \
|
||||
</ul> \
|
||||
<p style="font-size:9px;">* N\u011Bkter\u00E9 aplikace mus\u00ED b\u00FDt zakoupeny samostatn\u011B.</p>
|
||||
premium.getpremium = Z\u00EDskat Subsonic Premium
|
||||
premium.licensed = M\u00E1te platnou licenci Subsonic Premium!
|
||||
premium.licensedexpires = Va\u0161e licence Subsonic Premium je platn\u00E1 do {0}
|
||||
premium.licensedexpired = Va\u0161e licence Subsonic Premium vypr\u0161ela {0}
|
||||
premium.licensedto = Licence je registrov\u00E1na na u\u017Eivatele {0}.
|
||||
premium.forcechange = Registrovat jin\u00FD licen\u010Dn\u00ED kl\u00ED\u010D
|
||||
premium.register = P\u0159i upgradu na Subsonic Premium obdr\u017E\u00EDte licen\u010Dn\u00ED kl\u00ED\u010D e-mailem. Zaregistrujte se n\u00ED\u017Ee.
|
||||
premium.resend = Ztracen\u00FD licen\u010Dn\u00ED kl\u00ED\u010D? <a href="http://libresonic.org/backend/requestLicense.view" target="_blank">Poslat ho znovu</a>.
|
||||
premium.register.email = E-mail
|
||||
premium.register.license = Licen\u010Dn\u00ED kl\u00ED\u010D
|
||||
|
||||
# podcastReceiver.jsp
|
||||
podcastreceiver.title = P\u0159ij\u00EDma\u010D Podcast\u016F
|
||||
podcastreceiver.expandall = Zobrazit epizody
|
||||
|
||||
-27
@@ -530,33 +530,6 @@ share.disabled = Um Musik mit jemanden teilen zu k\u00F6nnen musst du erst deine
|
||||
Bitte wechsle zu <a href="networkSettings.view"><b>Settings > Network</b></a> (Administratorrechte werden ben\u00F6tigt).
|
||||
share.manage = Meine geteilten Medien verwalten
|
||||
|
||||
# premium.jsp
|
||||
premium.title = Subsonic Premium
|
||||
premium.invalidlicense = Ung\u00FCltiger Lizenzschl\u00FCssel.
|
||||
premium.text = <p>Upgrade zu <a href="http://premium.libresonic.org/" target="_blank">Subsonic Premium</a> um diese Funktionen zu geniessen:</p> \
|
||||
<ul> \
|
||||
<li><a href="http://libresonic.org/pages/apps.jsp" target="_blank">Apps</a> f\u00FCr Android, iPhone, Windows Phone, Mac, Chrome und mehr*.</li> \
|
||||
<li>Videostreaming.</li> \
|
||||
<li>Streame zu deinen Chromecast und Sonos Ger\u00E4ten.</li> \
|
||||
<li>Podcast Empf\u00E4nger.</li> \
|
||||
<li>Deine pers\u00F6nliche Serveradresse: <em>deinname</em>.libresonic.org (siehe <a href="networkSettings.view">Einstellungen > Netzwerk</a>).</li> \
|
||||
<li>Spiele deine Medien auf kompatiblen DLNA/UPnP Ger\u00E4ten.</li> \
|
||||
<li>Teile deine Medien auf Facebook, Twitter, Google+.</li> \
|
||||
<li>Keine Werbung im Webinterface.</li> \
|
||||
<li>Weitere Funktionen die sp\u00E4ter ver\u00F6ffentlicht werden.</li> \
|
||||
</ul> \
|
||||
<p style="font-size:10px;">* Einige Apps m\u00FCssen seperat gekauft werden.</p>
|
||||
premium.getpremium = Erhalte Subsonic Premium
|
||||
premium.licensed = Du hast eine g\u00FCltige Subsonic Premium Lizenz!
|
||||
premium.licensedexpires = Deine Subsonic Premium Lizenz ist g\u00FCltig bis {0}
|
||||
premium.licensedexpired = Deine Subsonic Premium Lizenz ist abgelaufen am {0}
|
||||
premium.licensedto = Die Lizenz ist registriert f\u00FCr {0}.
|
||||
premium.forcechange = Einen anderen Lizenzschl\u00FCssel registrieren
|
||||
premium.register = Bei einem Upgrade auf Subsonic Premium erhalten sie ihren Lizenzschl\u00FCssel per Email. Bitte registrieren sie sich unten.
|
||||
premium.resend = Lizenzschl\u00FCssel verloren? <a href="http://libresonic.org/backend/requestLicense.view" target="_blank">Erneut zusenden</a>.
|
||||
premium.register.email = Email
|
||||
premium.register.license = License key
|
||||
|
||||
# userSettings.jsp
|
||||
usersettings.title = Benutzer ausw\u00E4hlen
|
||||
usersettings.newuser = Neuer Benutzer
|
||||
|
||||
-39
@@ -24,8 +24,6 @@ common.confirm = Please confirm
|
||||
common.unknown = (Unknown)
|
||||
common.default = (Default)
|
||||
common.settingssaved = Settings were saved.
|
||||
common.trialexpired = The trial period expired on {0}. Get <b><a href="premiumSettings.view?">Subsonic Premium</a></b> to use this feature.
|
||||
common.trialnotexpired = This feature is available until {0}. After that you must get <b><a href="premiumSettings.view?">Subsonic Premium</a></b>.
|
||||
|
||||
# login.jsp
|
||||
login.username = Username
|
||||
@@ -73,9 +71,6 @@ top.upgrade = A new version is available. Download {0} {1} \
|
||||
<a href="#" onclick="window.open(''http://libresonic.org/'')">here</a>.
|
||||
top.missing = No media folders found. Please change the settings.
|
||||
top.logout = Log out {0}
|
||||
top.getpremium = Get Subsonic Premium
|
||||
top.gotpremium = Subsonic Premium
|
||||
top.trialdaysleft = {0} day(s) left of trial
|
||||
|
||||
# left.jsp
|
||||
left.scanning = Scanning media folders...
|
||||
@@ -146,7 +141,6 @@ importPlaylist.error = Failed to import playlist. {0}
|
||||
|
||||
# videoPlayer.jsp
|
||||
videoPlayer.getflash = Please install Flash Player
|
||||
videoPlayer.getpremium = Get <b><a href='premiumSettings.view?' target='main'>Subsonic Premium</a></b> to play on Chromecast.
|
||||
|
||||
# status.jsp
|
||||
status.title = Status
|
||||
@@ -316,10 +310,6 @@ upload.unzipped = Unzipped {0}
|
||||
help.title = About {0}
|
||||
help.upgrade = <b>Note!</b> A new version is available. Download {0} {1} \
|
||||
<a href="#" onclick="window.open(''http://libresonic.org/'')">here</a>.
|
||||
help.premium.title = License
|
||||
help.premium.expires = (expires {0})
|
||||
help.premium.upgrade = Upgrade to <a href="premiumSettings.view">Subsonic Premium</a> to enjoy lots of <a href="premiumSettings.view">extra features</a>!
|
||||
help.premium.expired = (License expired {0})
|
||||
help.version.title = Version
|
||||
help.builddate.title = Build date
|
||||
help.server.title = Server
|
||||
@@ -344,7 +334,6 @@ settingsheader.podcast = Podcast
|
||||
settingsheader.player = Players
|
||||
settingsheader.dlna = DLNA/UPnP
|
||||
settingsheader.sonos = Sonos
|
||||
settingsheader.premium = Subsonic Premium
|
||||
settingsheader.share = Shared media
|
||||
settingsheader.network = Network
|
||||
settingsheader.transcoding = Transcoding
|
||||
@@ -642,7 +631,6 @@ main.sharealbum = Share
|
||||
main.more = More actions...
|
||||
main.more.selection = Selected songs...
|
||||
main.more.share = Share
|
||||
main.premium = <a href="{0}" style="text-decoration:underline">Get Subsonic Premium</a><br>(and remove this ad)
|
||||
main.nowplaying = Now playing
|
||||
main.lyrics = Lyrics
|
||||
main.minutesago = minutes ago
|
||||
@@ -718,33 +706,6 @@ share.disabled = To share your music with someone you must first register your o
|
||||
Please go to <a href="networkSettings.view"><b>Settings > Network</b></a> (administrative rights required).
|
||||
share.manage = Manage my shared media
|
||||
|
||||
# premium.jsp
|
||||
premium.title = Subsonic Premium
|
||||
premium.invalidlicense = Invalid license key.
|
||||
premium.text = <p>Upgrade to <a href="http://premium.libresonic.org/" target="_blank">Subsonic Premium</a> to enjoy these extra features:</p> \
|
||||
<ul> \
|
||||
<li><a href="http://libresonic.org/pages/apps.jsp" target="_blank">Apps</a> for Android, iPhone, Windows Phone, Mac, Chrome and more*.</li> \
|
||||
<li>Video streaming.</li> \
|
||||
<li>Stream to your Chromecast and Sonos devices.</li> \
|
||||
<li>Podcast receiver.</li> \
|
||||
<li>Your personal server address: <em>yourname</em>.libresonic.org (see <a href="networkSettings.view">Settings > Network</a>).</li> \
|
||||
<li>Play your media on compatible DLNA/UPnP devices.</li> \
|
||||
<li>Share your media on Facebook, Twitter, Google+.</li> \
|
||||
<li>No ads in the web interface.</li> \
|
||||
<li>Other features to be released later.</li> \
|
||||
</ul> \
|
||||
<p style="font-size:10px;">* Some apps must be purchased separately.</p>
|
||||
premium.getpremium = Get Subsonic Premium
|
||||
premium.licensed = You have a valid Subsonic Premium license!
|
||||
premium.licensedexpires = Your Subsonic Premium license is valid until {0}
|
||||
premium.licensedexpired = Your Subsonic Premium license expired {0}
|
||||
premium.licensedto = The license is registered to {0}.
|
||||
premium.forcechange = Register a different license key
|
||||
premium.register = When upgrading to Subsonic Premium you receive a license key by email. Please register it below.
|
||||
premium.resend = Lost the license key? <a href="http://libresonic.org/backend/requestLicense.view" target="_blank">Send it again</a>.
|
||||
premium.register.email = Email
|
||||
premium.register.license = License key
|
||||
|
||||
# podcastReceiver.jsp
|
||||
podcastreceiver.title = Podcasts
|
||||
podcastreceiver.empty = You haven't subscribed to any podcasts yet.
|
||||
|
||||
-3
@@ -15,9 +15,6 @@ help.license.text = {0} is free software distributed under the <a href="http://w
|
||||
# playerSettings.jsp
|
||||
playersettings.technology.jukebox.text = Play music directly on the audio device of the Libresonic server. (Authorised users only).
|
||||
|
||||
# main.jsp
|
||||
main.premium = <a href="{0}" style="text-decoration:underline">Get Subsonic Premium</a><br>(and remove this advert)
|
||||
|
||||
# helpPopup.jsp
|
||||
helppopup.musicmask.text = <p>Allows you to specify the type of files that should be recognised as music.</p>
|
||||
helppopup.videomask.text = <p>Allows you to specify the type of files that should be recognised as video.</p>
|
||||
|
||||
-38
@@ -24,8 +24,6 @@ common.confirm = Palun kinnita
|
||||
common.unknown = (Tundmatu)
|
||||
common.default = (Tavaline)
|
||||
common.settingssaved = Seaded on salvestatud.
|
||||
common.trialexpired = {0} aegus Teie prooviversioon. Selle kasutamiseks hankige <b><a href="premiumSettings.view?">Subsonic Premium</a></b>.
|
||||
common.trialnotexpired = Seda saab kasutada kuni{0}. Pärast tähtaja lõppu peate hankima <b><a href="premiumSettings.view?">Subsonic Premiumi</a></b>.
|
||||
|
||||
# login.jsp
|
||||
login.username = Kasutajanimi
|
||||
@@ -73,9 +71,6 @@ top.upgrade = Uuem versioon on saadaval. Lae alla {0} {1} \
|
||||
<a href\="\#" onclick\="window.open(''http\://libresonic.org/'')">siit</a>.
|
||||
top.missing = Meediakauste ei leitud. Palun muuda seadeid.
|
||||
top.logout = Logi välja {0}
|
||||
top.getpremium = Hankige Subsonic Premium
|
||||
top.gotpremium = Subsonic Premium
|
||||
top.trialdaysleft = {0} päev(a) jäänud prooviversiooni lõpuni
|
||||
|
||||
# left.jsp
|
||||
left.scanning = Meediakaustade skänneerimine...
|
||||
@@ -140,7 +135,6 @@ importPlaylist.error = Esitusloendi importimine ebaõnnestus. {0}
|
||||
|
||||
# videoPlayer.jsp
|
||||
videoPlayer.getflash = Palun paigalda Flash meediaesitaja
|
||||
videoPlayer.getpremium = Chromecastil esitamiseks ostke <b><a href='premiumSettings.view?' target='main'>Subsonic Premium</a></b>.
|
||||
|
||||
# status.jsp
|
||||
status.title = Olek
|
||||
@@ -266,10 +260,6 @@ upload.unzipped = {0} on lahti pakitud
|
||||
help.title = Info {0}´i kohta
|
||||
help.upgrade = <b>Note!</b> Saadaval on uuem versioon. Lae alla {0} {1} \
|
||||
<a href="#" onclick="window.open(''http://libresonic.org/'')">siit</a>.
|
||||
help.premium.title = Litsents
|
||||
help.premium.expires = (aegub {0})
|
||||
help.premium.upgrade = Paljude <a href="premiumSettings.view">lisavõimaluste</a> nautimiseks hankige<a href="premiumSettings.view">Subsonic Premium</a>!
|
||||
help.premium.expired = (Litsents aegus {0})
|
||||
help.version.title = Versioon
|
||||
help.builddate.title = Valmistamiskuupäev
|
||||
help.server.title = Server
|
||||
@@ -569,7 +559,6 @@ main.sharealbum = Jaga
|
||||
main.more = Rohkem tegevusi...
|
||||
main.more.selection = Valitud lood
|
||||
main.more.share = Jaga
|
||||
main.premium = <a href="{0}" style="text-decoration:underline">Hankige Subsonic Premium</a><br>(ja sellega eemaldate siinse reklaami)
|
||||
main.nowplaying = Hetkel esitamisel
|
||||
main.lyrics = Laulusõnad
|
||||
main.minutesago = minutit tagasi
|
||||
@@ -638,33 +627,6 @@ share.disabled = Esmalt, et saaksite muusikat jagada kellegagi, peate te registr
|
||||
Palun mine <a href="networkSettings.view"><b>Seaded > Võrk</b></a> (administraatori õigus on vajalik).
|
||||
share.manage = Halda minu jagatud meediat
|
||||
|
||||
# premium.jsp
|
||||
premium.title = Subsonic Premium
|
||||
premium.invalidlicense = Vigage litsentsivõti.
|
||||
premium.text = <p>Nende lisavõimaluste nautimiseks peate hankima Subsonic Premiumi:</p> \
|
||||
<ul> \
|
||||
<li><a href="http://libresonic.org/pages/apps.jsp" target="blank">Rakendused</a> Androidile, iPhoneile ja Windows Phoneile*.</li> \
|
||||
<li><a href="http://libresonic.org/pages/apps.jsp" target="blank">Rakendused</a> BlackBerryiel, Rokule, Macile, Windowsile, Chrome´le ja paljudele teistele*.</li> \
|
||||
<li>Video edastus.</li> \
|
||||
<li>Taskupleieri kasutusvõimalus (Podcast).</li> \
|
||||
<li>Teie personaalse nimega serveriaadress: <em>teienimi</em>.libresonic.org (asub <a href="networkSettings.view">Seaded > Võrk</a>).</li> \
|
||||
<li>Esitage oma meediattoetatud DLNA/UPnP seadmetes.</li> \
|
||||
<li>Jagage oma meediat Facebookis, Twitteris, Google+´is.</li> \
|
||||
<li>Reklaamivaba interneti kasutajaliides.</li> \
|
||||
<li>Teised võimalused avaldatakse hiljem.</li> \
|
||||
</ul> \
|
||||
<p style="font-size:9px;">* Mõned rakendused tuleb eraldi osta või sisaldavad reklaame.</p>
|
||||
premium.getpremium = Hankige Subsonic Premium
|
||||
premium.licensed = Teil on kehtiv litsents Subsonic Premiumile!
|
||||
premium.licensedexpires = Teie Subsonic Premiumi litsents kehtib kuni {0}
|
||||
premium.licensedexpired = Teie Subsonic Premiumi litsents aegub {0}
|
||||
premium.licensedto = Litsents on registreeritud aadressile {0}.
|
||||
premium.forcechange = Registreerige teise litsentsi võtmega
|
||||
premium.register = Subsonic Premiumi litsentsi võtme leiate oma e-postist. Palun registreerige see kõrvalolevast ankeedist.
|
||||
premium.resend = Kaotasite litsentsi võtme? <a href="http://libresonic.org/backend/requestLicense.view" target="_blank">Saatke see uuesti</a>.
|
||||
premium.register.email = E-spost
|
||||
premium.register.license = Litsentsi võti
|
||||
|
||||
# podcastReceiver.jsp
|
||||
podcastreceiver.title = Taskupleierite hankija
|
||||
podcastreceiver.expandall = Kuva osad
|
||||
|
||||
-38
@@ -25,8 +25,6 @@ common.confirm = \u3088\u308D\u3057\u3044\u3067\u3059\u304B\uFF1F
|
||||
common.unknown = (\u4E0D\u660E)
|
||||
common.default = (\u30C7\u30D5\u30A9\u30EB\u30C8)
|
||||
common.settingssaved = \u8A2D\u5B9A\u3092\u4FDD\u5B58\u3057\u307E\u3057\u305F\u3002
|
||||
common.trialexpired = \u8A66\u7528\u671F\u9593\u306F {0} \u307E\u3067\u3067\u3059\u3002\u3053\u306E\u6A5F\u80FD\u3092\u7D99\u7D9A\u3057\u3066\u5229\u7528\u3059\u308B\u306B\u306F <b><a href="premiumSettings.view?">Subsonic Premium</a></b> \u306B\u767B\u9332\u3057\u3066\u304F\u3060\u3055\u3044\u3002
|
||||
common.trialnotexpired = \u3053\u306E\u6A5F\u80FD\u306F {0} \u307E\u3067\u5229\u7528\u3067\u304D\u307E\u3059\u3002\u7D99\u7D9A\u3057\u3066\u5229\u7528\u3059\u308B\u306B\u306F<b><a href="premiumSettings.view?">Subsonic Premium</a></b>\u306B\u767B\u9332\u3057\u3066\u304F\u3060\u3055\u3044\u3002
|
||||
|
||||
# login.jsp
|
||||
login.username = \u30E6\u30FC\u30B6\u540D
|
||||
@@ -74,9 +72,6 @@ top.upgrade = \u65B0\u3057\u3044\u30D0\u30FC\u30B8\u30E7\u30F3\u304C\u30EA\u30EA
|
||||
\u3092<a href\="\#" onclick\="window.open(''http\://libresonic.org/'')">\u3053\u3053</a>\u304B\u3089\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9\u3057\u3066\u304F\u3060\u3055\u3044\u3002
|
||||
top.missing = \u97F3\u697D\u30D5\u30A9\u30EB\u30C0\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u8A2D\u5B9A\u3092\u898B\u76F4\u3057\u3066\u304F\u3060\u3055\u3044\u3002
|
||||
top.logout = {0} \u3092\u30ED\u30B0\u30A2\u30A6\u30C8\u3059\u308B
|
||||
top.getpremium = Subsonic Premium\u306B\u767B\u9332
|
||||
top.gotpremium = Subsonic Premium
|
||||
top.trialdaysleft = \u8A66\u7528\u671F\u9593\u306F\u6B8B\u308A {0} \u65E5\u3067\u3059
|
||||
|
||||
# left.jsp
|
||||
left.scanning = \u97F3\u697D\u30D5\u30A9\u30EB\u30C0\u3092\u30B9\u30AD\u30E3\u30F3\u3057\u3066\u3044\u307E\u3059...
|
||||
@@ -275,10 +270,6 @@ upload.unzipped = zip\u30D5\u30A1\u30A4\u30EB {0} \u3092\u5C55\u958B\u3057\u307E
|
||||
help.title = {0} \u306B\u3064\u3044\u3066
|
||||
help.upgrade = <b>\u6CE8\u610F!</b> \u65B0\u3057\u3044\u30D0\u30FC\u30B8\u30E7\u30F3\u304C\u30EA\u30EA\u30FC\u30B9\u3055\u308C\u3066\u3044\u307E\u3059\u3002<br>{0} {1} \
|
||||
\u3092<a href="#" onclick="window.open(''http://libresonic.org/'')">\u3053\u3053</a>\u304B\u3089\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9\u3057\u3066\u304F\u3060\u3055\u3044\u3002
|
||||
help.premium.title = \u30E9\u30A4\u30BB\u30F3\u30B9
|
||||
help.premium.expires = (\u30E9\u30A4\u30BB\u30F3\u30B9\u306E\u671F\u9650 {0})
|
||||
help.premium.upgrade = <a href="premiumSettings.view">Subsonic Premium</a> \u306B\u767B\u9332\u3057\u3066 <a href="premiumSettings.view">\u5168\u6A5F\u80FD</a> \u3092\u304A\u697D\u3057\u307F\u304F\u3060\u3055\u3044!
|
||||
help.premium.expired = (\u30E9\u30A4\u30BB\u30F3\u30B9\u306E\u6709\u52B9\u671F\u9650 {0})
|
||||
help.version.title = \u30D0\u30FC\u30B8\u30E7\u30F3
|
||||
help.builddate.title = \u30D3\u30EB\u30C9\u65E5
|
||||
help.server.title = \u30B5\u30FC\u30D0
|
||||
@@ -313,7 +304,6 @@ settingsheader.podcast = Podcast
|
||||
settingsheader.player = \u30D7\u30EC\u30FC\u30E4
|
||||
settingsheader.dlna = DLNA
|
||||
settingsheader.sonos = Sonos
|
||||
settingsheader.premium = Subsonic Premium
|
||||
settingsheader.share = \u5171\u6709\u306E\u8A2D\u5B9A
|
||||
settingsheader.network = \u30CD\u30C3\u30C8\u30EF\u30FC\u30AF
|
||||
settingsheader.transcoding = \u30C8\u30E9\u30F3\u30B9\u30B3\u30FC\u30C7\u30A3\u30F3\u30B0
|
||||
@@ -608,7 +598,6 @@ main.sharealbum = \u5171\u6709
|
||||
main.more = \u305D\u306E\u4ED6...
|
||||
main.more.selection = \u66F2\u76EE\u306E\u9078\u629E
|
||||
main.more.share = \u5171\u6709
|
||||
main.premium = <a href="{0}" style="text-decoration:underline">Subsonic Premium \u306B\u767B\u9332</a><br>(\u5E83\u544A\u304C\u9664\u53BB\u3067\u304D\u307E\u3059)
|
||||
main.nowplaying = \u518D\u751F\u4E2D
|
||||
main.lyrics = \u6B4C\u8A5E
|
||||
main.minutesago = \u5206\u524D
|
||||
@@ -683,33 +672,6 @@ share.disabled = \u3042\u306A\u305F\u306E\u66F2\u3092\u8AB0\u304B\u3068\u5171\u6
|
||||
\u53C2\u7167: <a href="networkSettings.view"><b>\u8A2D\u5B9A > \u30CD\u30C3\u30C8\u30EF\u30FC\u30AF</b></a> (\u7BA1\u7406\u8005\u6A29\u9650\u304C\u5FC5\u8981\u3067\u3059)
|
||||
share.manage = \u5171\u6709\u30E1\u30C7\u30A3\u30A2\u306E\u7BA1\u7406
|
||||
|
||||
# premium.jsp
|
||||
premium.title = Subsonic Premium
|
||||
premium.invalidlicense = \u7121\u52B9\u306A\u30E9\u30A4\u30BB\u30F3\u30B9\u30AD\u30FC\u3067\u3059\u3002
|
||||
premium.text = <p>Subsonic Premium \u306B\u767B\u9332\u3059\u308B\u3068\u3001\u4EE5\u4E0B\u306E\u6A5F\u80FD\u304C\u5229\u7528\u3067\u304D\u307E\u3059:</p> \
|
||||
<ul> \
|
||||
<li>Android, iPhone, Blackberry \u3084 Windows Phone* \u7B49\u306E<a href="http://libresonic.org/pages/apps.jsp" target="blank">\u30A2\u30D7\u30EA</a>\u3067\u518D\u751F\u3002</li> \
|
||||
<li>Mac, Windows, Chrome, Roku, \u305D\u306E\u4ED6* \u7528\u306E<a href="http://libresonic.org/pages/apps.jsp" target="blank">\u30A2\u30D7\u30EA</a>\u3067\u518D\u751F\u3002</li> \
|
||||
<li>\u30D3\u30C7\u30AA\u30B9\u30C8\u30EA\u30FC\u30DF\u30F3\u30B0\u518D\u751F\u3002</li> \
|
||||
<li>Podcast \u306E\u53D7\u4FE1\u3002</li> \
|
||||
<li>\u3042\u306A\u305F\u56FA\u6709\u306E\u30B5\u30FC\u30D0\u30A2\u30C9\u30EC\u30B9: <em>yourname</em>.libresonic.org \u306E\u4F7F\u7528(\u53C2\u7167: <a href="networkSettings.view">\u8A2D\u5B9A > \u30CD\u30C3\u30C8\u30EF\u30FC\u30AF</a>)\u3002</li> \
|
||||
<li>DLNA/UPnP \u4E92\u63DB\u30C7\u30D0\u30A4\u30B9\u3067\u97F3\u697D\u3092\u518D\u751F\u3002</li> \
|
||||
<li>Facebook, Twitter, Google+ \u3067\u97F3\u697D\u3092\u5171\u6709\u3002</li> \
|
||||
<li>\u30A6\u30A7\u30D6\u753B\u9762\u3067\u306E\u5E83\u544A\u306E\u975E\u8868\u793A\u3002</li> \
|
||||
<li>\u305D\u306E\u4ED6\u306E\u6A5F\u80FD\u3082\u4ECA\u5F8C\u306E\u30EA\u30EA\u30FC\u30B9\u3067\u8FFD\u52A0\u3002</li> \
|
||||
</ul> \
|
||||
<p style="font-size:9px;">* \u4E00\u90E8\u306E\u30A2\u30D7\u30EA\u306F\u5225\u9014\u8CFC\u5165\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002</p>
|
||||
premium.getpremium = Subsonic Premium \u306B\u767B\u9332
|
||||
premium.licensed = \u6709\u52B9\u306A Subsonic Premium \u30E9\u30A4\u30BB\u30F3\u30B9\u3092\u53D6\u5F97\u3057\u307E\u3057\u305F!
|
||||
premium.licensedexpires = Subsonic Premium \u30E9\u30A4\u30BB\u30F3\u30B9\u304C {0} \u307E\u3067\u6709\u52B9\u3067\u3059
|
||||
premium.licensedexpired = Subsonic Premium \u30E9\u30A4\u30BB\u30F3\u30B9\u306E\u6709\u52B9\u671F\u9650\u306F {0} \u307E\u3067\u3067\u3059
|
||||
premium.licensedto = \u30E9\u30A4\u30BB\u30F3\u30B9\u306F {0} \u306B\u767B\u9332\u3055\u308C\u307E\u3057\u305F\u3002
|
||||
premium.forcechange = \u5225\u306E\u30E9\u30A4\u30BB\u30F3\u30B9\u30AD\u30FC\u3092\u767B\u9332\u3059\u308B
|
||||
premium.register = Subsonic Premium \u306B\u767B\u9332\u3059\u308B\u5834\u5408\u306F\u3001\u30E1\u30FC\u30EB\u3067\u53D7\u3051\u53D6\u3063\u305F\u30E9\u30A4\u30BB\u30F3\u30B9\u30AD\u30FC\u3092\u3001\u4E0B\u6B04\u306B\u5165\u529B\u3057 OK \u30DC\u30BF\u30F3\u3092\u30AF\u30EA\u30C3\u30AF\u3057\u307E\u3059\u3002
|
||||
premium.resend = \u30E9\u30A4\u30BB\u30F3\u30B9\u30AD\u30FC\u3092\u5931\u304F\u3057\u307E\u3057\u305F\u304B? <a href="http://libresonic.org/backend/requestLicense.view" target="_blank">\u30E9\u30A4\u30BB\u30F3\u30B9\u30AD\u30FC\u3092\u518D\u53D6\u5F97\u3059\u308B</a>\u3002
|
||||
premium.register.email = \u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9
|
||||
premium.register.license = \u30E9\u30A4\u30BB\u30F3\u30B9\u30AD\u30FC
|
||||
|
||||
# podcastReceiver.jsp
|
||||
podcastreceiver.title = Podcast\u306E\u53D7\u4FE1
|
||||
podcastreceiver.empty = \u30DD\u30C3\u30C9\u30AD\u30E3\u30B9\u30C8\u304C\u767B\u9332\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002
|
||||
|
||||
-37
@@ -24,8 +24,6 @@ common.confirm = \uD655\uC778\uD558\uC2DC\uAE30 \uBC14\uB78D\uB2C8\uB2E4
|
||||
common.unknown = (\uC54C\uC218\uC5C6\uC74C)
|
||||
common.default = (\uAE30\uBCF8\uAC12)
|
||||
common.settingssaved = \uC124\uC815\uC774 \uC800\uC7A5\uB418\uC5C8\uC2B5\uB2C8\uB2E4.
|
||||
common.trialexpired = {0}\uC77C\uC5D0 \uC2DC\uD5D8\uAE30\uAC04\uC774 \uB9CC\uB8CC\uB429\uB2C8\uB2E4. \uC774 \uAE30\uB2A5\uC744 \uACC4\uC18D \uC0AC\uC6A9\uD558\uAE30 \uC704\uD574 <b><a href="premiumSettings.view?">\uC11C\uBE0C\uC18C\uB2C9 \uD504\uB9AC\uBBF8\uC5C4</a></b>\uC744 \uAD6C\uC785\uD569\uB2C8\uB2E4.
|
||||
common.trialnotexpired = \uC774 \uAE30\uB2A5\uC740 {0}\uC77C\uAE4C\uC9C0 \uAC00\uB2A5\uD569\uB2C8\uB2E4. \uADF8 \uC774\uD6C4\uC5D0\uB294 <b><a href="premiumSettings.view?">\uC11C\uBE0C\uC18C\uB2C9 \uD504\uB9AC\uBBF8\uC5C4</a></b>\uC744 \uAD6C\uC785\uD558\uC5EC\uC57C \uD569\uB2C8\uB2E4.
|
||||
|
||||
# login.jsp
|
||||
login.username = \uC0AC\uC6A9\uC790\uC774\uB984
|
||||
@@ -72,9 +70,6 @@ top.upgrade = <b>\uC54C\uB9BC!</b> \uC0C8\uB85C\uC6B4 \uBC84\uC804\uC744 \uC0AC\
|
||||
<a href="#" onclick="window.open(''http://libresonic.org/'')">\uC5EC\uAE30</a>.
|
||||
top.missing = \uC9C0\uC815\uB41C \uC74C\uC545 \uC800\uC7A5\uC18C\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4. \uC124\uC815\uC744 \uD655\uC778\uD574\uC8FC\uC138\uC694.
|
||||
top.logout = {0} \uB85C\uADF8\uC544\uC6C3
|
||||
top.getpremium = \uC11C\uBE0C\uC18C\uB2C9 \uD504\uB9AC\uBBF8\uC5C4 \uC5BB\uAE30
|
||||
top.gotpremium = \uC11C\uBE0C\uC18C\uB2C9 \uD504\uB9AC\uBBF8\uC5C4
|
||||
top.trialdaysleft = \uC2DC\uD5D8 \uAE30\uAC04\uC774 {0}\uC77C \uB0A8\uC558\uC2B5\uB2C8\uB2E4.
|
||||
|
||||
# left.jsp
|
||||
left.scanning = \uBBF8\uB514\uC5B4 \uD3F4\uB354\uB97C \uAC80\uC0C9 \uC911\uC785\uB2C8\uB2E4.
|
||||
@@ -264,10 +259,6 @@ upload.unzipped = \uC555\uCD95\uC744 \uD480\uC5C8\uC2B5\uB2C8\uB2E4. {0}
|
||||
help.title = About {0}
|
||||
help.upgrade = <b>\uC54C\uB9BC!</b> \uC0C8\uB85C\uC6B4 \uBC84\uC804\uC774 \uB098\uC654\uC2B5\uB2C8\uB2E4. \uB2E4\uC6B4\uB85C\uB4DC {0} {1} \
|
||||
<a href="#" onclick="window.open(''http://libresonic.org/'')">\uC5EC\uAE30</a>.
|
||||
help.premium.title = \uB77C\uC774\uC13C\uC2A4
|
||||
help.premium.expires = ({0} \uB9CC\uB8CC)
|
||||
help.premium.upgrade = <a href="premiumSettings.view">\uC11C\uBE0C\uC18C\uB2C9 \uD504\uB9AC\uBBF8\uC5C4</a> \uC73C\uB85C \uC5C5\uADF8\uB808\uC774\uB4DC\uD558\uC5EC \uB9CE\uC740 <a href="premiumSettings.view">\uD655\uC7A5 \uAE30\uB2A5\uB4E4</a> \uC744 \uC0AC\uC6A9\uD574\uBCF4\uC138\uC694!
|
||||
help.premium.expired = (\uB77C\uC774\uC13C\uC2A4 \uB9CC\uB8CC\uB428 {0})
|
||||
help.version.title = \uBC84\uC804
|
||||
help.builddate.title = \uBE4C\uB4DC \uB0A0\uC9DC
|
||||
help.server.title = \uC11C\uBC84
|
||||
@@ -574,7 +565,6 @@ main.sharealbum = Share
|
||||
main.more = More actions...
|
||||
main.more.selection = Selected songs
|
||||
main.more.share = Share
|
||||
main.premium = <a href="{0}" style="text-decoration:underline">Get Subsonic Premium</a><br>(and remove this ad)
|
||||
main.nowplaying = \uD604\uC7AC \uC7AC\uC0DD
|
||||
main.lyrics = \uAC00\uC0AC
|
||||
main.minutesago = \uBD84 \uC804
|
||||
@@ -641,33 +631,6 @@ share.disabled = \uBA3C\uC800 \uC790\uC2E0\uC758 <em>libresonic.org</em> \uC8FC\
|
||||
<a href="networkSettings.view"><b>\uC124\uC815 > \uB124\uD2B8\uC6CC\uD06C</b></a> \uB85C \uC774\uB3D9\uD558\uC2ED\uC2DC\uC624 (\uAD00\uB9AC\uC790 \uAD8C\uD55C\uC774 \uD544\uC694\uD569\uB2C8\uB2E4).
|
||||
share.manage = \uB0B4 \uACF5\uC720 \uBBF8\uB514\uC5B4 \uAD00\uB9AC
|
||||
|
||||
# premium.jsp
|
||||
premium.title = \uC11C\uBE0C\uC18C\uB2C9 \uD504\uB9AC\uBBF8\uC5C4
|
||||
premium.invalidlicense = \uC798\uBABB\uB41C \uB77C\uC774\uC13C\uC2A4 \uD0A4.
|
||||
premium.text = <p>\uC774\uB7EC\uD55C \uCD94\uAC00 \uAE30\uB2A5\uC744 \uC990\uAE38 \uC218 \uC788\uB294 \uC11C\uBE0C\uC18C\uB2C9 \uD504\uB9AC\uBBF8\uC5C4\uC73C\uB85C \uC5C5\uADF8\uB808\uC774\uB4DC:</p> \
|
||||
<ul> \
|
||||
<li><a href="http://libresonic.org/pages/apps.jsp" target="blank">\uC571\uC2A4</a> \uC548\uB4DC\uB85C\uC774\uB4DC, \uC544\uC774\uD3EC, \uC708\uB3C4\uC6B0 \uBAA8\uBC14\uC77C.</li> \
|
||||
<li><a href="http://libresonic.org/pages/apps.jsp" target="blank">\uC571\uC2A4</a> \uBE14\uB799\uBCA0\uB9AC, \uB85C\uCFE0, \uC708\uB3C4\uC6B0, \uD06C\uB86C \uB4F1.</li> \
|
||||
<li>\uBE44\uB514\uC624 \uC2A4\uD2B8\uB9AC\uBC0D.</li> \
|
||||
<li>\uD31F\uCE90\uC2A4\uD2B8 \uC218\uC2E0\uAE30.</li> \
|
||||
<li>\uAC1C\uC778 \uC11C\uBC84 \uC8FC\uC18C: <em>\uB2F9\uC2E0\uC758\uC774\uB984</em>.libresonic.org (see <a href="networkSettings.view">\uC124\uC815 > \uB124\uD2B8\uC6CC\uD06C</a>).</li> \
|
||||
<li>DLNA/UPnP \uD638\uD658 \uC7A5\uCE58\uC5D0\uC11C \uB2F9\uC2E0\uC758 \uBBF8\uB514\uC5B4\uB97C \uC7AC\uC0DD.</li> \
|
||||
<li>\uB2F9\uC2E0\uC758 \uBBF8\uB514\uC5B4\uB97C \uD398\uC774\uC2A4\uBD81, \uD2B8\uC704\uD130, \uAD6C\uAE00\uD50C\uB7EC\uC2A4\uC5D0 \uACF5\uC720.</li> \
|
||||
<li>\uC6F9 \uC778\uD130\uD398\uC774\uC2A4\uC758 \uAD11\uACE0\uC81C\uAC70.</li> \
|
||||
<li>\uCC28\uD6C4 \uCD94\uAC00\uB418\uB294 \uC5EC\uB7EC \uAE30\uB2A5\uB4E4.</li> \
|
||||
</ul> \
|
||||
<p style="font-size:9px;">* \uC77C\uBD80 \uC571\uC758 \uACBD\uC6B0 \uCD94\uAC00 \uACB0\uC81C\uB098 \uAD11\uACE0\uAC00 \uD3EC\uD568\uB429\uB2C8\uB2E4.</p>
|
||||
premium.getpremium = \uC11C\uBE0C\uC18C\uB2C9 \uD504\uB9AC\uBBF8\uC5C4\uC744 \uC5BB\uC73C\uC138\uC694.
|
||||
premium.licensed = \uB2F9\uC2E0\uC740 \uC720\uD6A8\uD55C \uC11C\uBE0C\uC18C\uB2C9 \uD504\uB9AC\uBBF8\uC5C4 \uB77C\uC774\uC13C\uC2A4\uB97C \uAC00\uC9C0\uACE0 \uC788\uC2B5\uB2C8\uB2E4.!
|
||||
premium.licensedexpires = \uB2F9\uC2E0\uC758 \uC11C\uBE0C\uC18C\uB2C9 \uD504\uB9AC\uBBF8\uC5C4 \uB77C\uC774\uC13C\uC2A4\uB294 {0} \uAE4C\uC9C0 \uC720\uD6A8\uD569\uB2C8\uB2E4.
|
||||
premium.licensedexpired = \uB2F9\uC2E0\uC758 \uC11C\uBE0C\uC18C\uB2C9 \uD504\uB9AC\uBBF8\uC5C4 \uB77C\uC774\uC13C\uC2A4\uB294 {0} \uC5D0 \uB9CC\uB8CC\uB429\uB2C8\uB2E4.
|
||||
premium.licensedto = \uB77C\uC774\uC13C\uC2A4\uAC00 {0} \uC5D0 \uB4F1\uB85D\uB418\uC5B4 \uC788\uC2B5\uB2C8\uB2E4.
|
||||
premium.forcechange = \uC774\uAC83\uC744 \uBCC0\uACBD\uD569\uB2C8\uB2E4.
|
||||
premium.register = \uC11C\uBE0C\uC18C\uB2C9 \uD504\uB9AC\uBBF8\uC5C4\uC73C\uB85C \uC5C5\uADF8\uB808\uC774\uB4DC\uD560 \uB54C \uC774\uBA54\uC77C\uB85C \uB77C\uC774\uC13C\uC2A4\uD0A4\uB97C \uBC1B\uC2B5\uB2C8\uB2E4. \uC544\uB798\uC5D0 \uB4F1\uB85D\uD558\uC138\uC694.
|
||||
premium.resend = \uB77C\uC774\uC13C\uC2A4\uD0A4\uB97C \uC78A\uC73C\uC168\uB098\uC694? <a href="http://libresonic.org/backend/requestLicense.view" target="_blank">\uB2E4\uC2DC \uBCF4\uB0B4\uAE30</a>.
|
||||
premium.register.email = \uC774\uBA54\uC77C
|
||||
premium.register.license = \uB77C\uC774\uC13C\uC2A4 \uD0A4
|
||||
|
||||
# podcastReceiver.jsp
|
||||
podcastreceiver.title = \uD31F\uCE90\uC2A4\uD2B8 \uC218\uC2E0\uAE30
|
||||
podcastreceiver.expandall = \uC5D0\uD53C\uC18C\uB4DC \uBCF4\uAE30
|
||||
|
||||
-36
@@ -30,8 +30,6 @@ common.confirm = Bevestig
|
||||
common.unknown = (Onbekend)
|
||||
common.default = (Standaard)
|
||||
common.settingssaved = Instellingen zijn opgeslagen.
|
||||
common.trialexpired = De testperiode is verlopen op {0}. Neem <b><a href="premiumSettings.view?">Subsonic Premium</a></b> om deze functie te gebruiken.
|
||||
common.trialnotexpired = Deze functie is beschikbaar tot {0}. Daarna heb je <b><a href="premiumSettings.view?">Subsonic Premium</a></b> nodig.
|
||||
|
||||
# login.jsp
|
||||
login.username = Gebruikersnaam
|
||||
@@ -79,9 +77,6 @@ top.upgrade = Er is een nieuwe versie beschikbaar. Download {0} {1} \
|
||||
<a href\="\#" onclick\="window.open(''http\://libresonic.org/'')">here</a>.
|
||||
top.missing = Geen mediamappen gevonden. Verander de Instellingen.
|
||||
top.logout = Uitloggen {0}
|
||||
top.getpremium = Schaf Subsonic Premium aan.
|
||||
top.gotpremium = Subsonic Premium
|
||||
top.trialdaysleft = resterende testperiode {0} dag(en)
|
||||
|
||||
# left.jsp
|
||||
left.scanning = Mediamappen worden gescanned.
|
||||
@@ -269,10 +264,6 @@ upload.unzipped = Uitgepakt {0}
|
||||
help.title = Over {0}
|
||||
help.upgrade = <b>Let op!</b> Er is een nieuwe versie beschikbaar. Download {0} {1} \
|
||||
<a href="#" onclick="window.open(''http://libresonic.org/'')">hier</a>.
|
||||
help.premium.title = Licentie
|
||||
help.premium.expires = (vervalt op {0})
|
||||
help.premium.upgrade = Upgrade naar <a href="premiumSettings.view">Subsonic Premium</a> om <a href="premiumSettings.view">extra functies te krijgen</a>!
|
||||
help.premium.expired = (Licentie vervallen op {0})
|
||||
help.version.title = Versie
|
||||
help.builddate.title = Compileer datum
|
||||
help.server.title = Server
|
||||
@@ -573,7 +564,6 @@ main.sharealbum = Delen
|
||||
main.more = Meer acties...
|
||||
main.more.selection = Geselecteerde songs...
|
||||
main.more.share = Deel
|
||||
main.premium = <a href="{0}" style="text-decoration:underline">Schaf Subsonic Premium aan</a><br>(en verwijder de advertentie)
|
||||
main.nowplaying = Speelt nu
|
||||
main.lyrics = Teksten
|
||||
main.minutesago = minuten geleden
|
||||
@@ -642,32 +632,6 @@ share.disabled = Om jouw muziek te kunnen delen moet je eerst je eigen <em>libre
|
||||
Ga naar <a href="networksettings.view"><b>Instellingen > Netwerk</b></a> (Administrator rechten vereist!).
|
||||
share.manage = Beheer gedeelde media.
|
||||
|
||||
# premium.jsp
|
||||
premium.title = Subsonic Premium
|
||||
premium.invalidlicense = Ongeldige licentie sleutel.
|
||||
premium.text = <p>Upgrade naar Subsonic Premium om van deze extra functies te kunnen genieten:</p> \
|
||||
<ul> \
|
||||
<li><a href="http://libresonic.org/pages/apps.jsp" target="blank">Apps</a> voor Android, iPhone and Windows Phone*.</li> \
|
||||
<li><a href="http://libresonic.org/pages/apps.jsp" target="blank">Apps</a> voor BlackBerry, Roku, Mac, Windows, Chrome and more*.</li> \
|
||||
<li>Video streaming.</li> \
|
||||
<li>Podcast ontvanger.</li> \
|
||||
<li>Je persoonlijk server adres: <em>Jouwnaam</em>.libresonic.org (Zie <a href="networkSettings.view">Instellingen > Netwerk</a>).</li> \
|
||||
<li>Deel jouw media op Facebook, Twitter, Google+.</li> \
|
||||
<li>Geen advertenties in de web interface.</li> \
|
||||
<li>Meer functies die later uitgebracht worden.</li> \
|
||||
</ul> \
|
||||
<p style="font-size:9px;">* Sommige apps moeten separaat aangekocht worden.</p>
|
||||
premium.getpremium = Schaf Subsonic Premium aan
|
||||
premium.licensed = Je hebt een geldige Subsonic Premium licentie!
|
||||
premium.licensedexpires = Jouw Subsonic Premium licentie is geldig tot {0}
|
||||
premium.licensedexpired = Jouw Subsonic Premium licentie is vervallen op {0}
|
||||
premium.licensedto = Deze licentie is geregistreerd voor {0}.
|
||||
premium.forcechange = Registreer met een andere licentie sleutel
|
||||
premium.register = Als je upgrade naar Subsonic Premium zul je per email een licentie sleutel ontvangen. Voer de licentiesleutel hier in:
|
||||
premium.resend = Licentiesleutel verloren? <a href="http://libresonic.org/backend/requestLicense.view" target="_blank">Stuur mij de sleutel opnieuw.</a>.
|
||||
premium.register.email = Email
|
||||
premium.register.license = Licentie sleutel
|
||||
|
||||
# podcastReceiver.jsp
|
||||
podcastreceiver.title = Podcast ontvanger
|
||||
podcastreceiver.expandall = Toon uitzendingen
|
||||
|
||||
-39
@@ -27,8 +27,6 @@ common.confirm = \u8ACB\u78BA\u8A8D
|
||||
common.unknown = (\u672A\u77E5)
|
||||
common.default = (\u9810\u8A2D\u503C)
|
||||
common.settingssaved = \u8A2D\u5B9A\u5DF2\u5132\u5B58\u3002
|
||||
common.trialexpired = \u8A66\u7528\u7248\u5C07\u65BC {0} \u5230\u671F\u3002\u53D6\u5F97<b><a href="premiumSettings.view?">Subsonic Premium</a></b>\u4F86\u4F7F\u7528\u9019\u500B\u529F\u80FD\u3002
|
||||
common.trialnotexpired = \u9019\u500B\u529F\u80FD\u5728 {0} \u4E4B\u524D\u90FD\u53EF\u4F7F\u7528\u3002\u4E4B\u5F8C\u60A8\u5FC5\u9808\u53D6\u5F97<b><a href="premiumSettings.view?">Subsonic Premium</a></b>\u624D\u80FD\u4F7F\u7528\u3002
|
||||
|
||||
# login.jsp
|
||||
login.username = \u5E33\u865F
|
||||
@@ -76,9 +74,6 @@ top.upgrade = \u6709\u65B0\u7248\u672C\u63D0\u4F9B. \u4E0B\u8F09 {0} {1} \
|
||||
<a href\="\#" onclick\="window.open(''http\://libresonic.org/'')">\u9019\u88E1</a>\u3002
|
||||
top.missing = \u627E\u4E0D\u5230\u97F3\u6A02\u8CC7\u6599\u593E\uFF0C\u8ACB\u91CD\u65B0\u8A2D\u5B9A\u3002
|
||||
top.logout =\u767B\u51FA{0}
|
||||
top.getpremium = \u53D6\u5F97 Subsonic Premium
|
||||
top.gotpremium = Subsonic Premium
|
||||
top.trialdaysleft = \u5269\u4E0B {0} \u5929\u9AD4\u9A57\u6642\u9593
|
||||
|
||||
# left.jsp
|
||||
left.scanning = \u6383\u63CF\u97F3\u6A02\u8CC7\u6599\u593E\u4E2D\u2026
|
||||
@@ -148,7 +143,6 @@ importPlaylist.error = Failed to import playlist. {0}
|
||||
|
||||
# videoPlayer.jsp
|
||||
videoPlayer.getflash = Please install Flash Player
|
||||
videoPlayer.getpremium = Get <b><a href='premiumSettings.view?' target='main'>Subsonic Premium</a></b> to play on Chromecast.
|
||||
|
||||
# status.jsp
|
||||
status.title = \u72C0\u614B
|
||||
@@ -276,10 +270,6 @@ upload.unzipped = \u89E3\u58D3\u7E2E {0}
|
||||
help.title = \u95DC\u65BC {0}
|
||||
help.upgrade = <b>\u6CE8\u610F\uFF01</b> \u6709\u65B0\u7248\u672C\u53EF\u7528\u3002\u4E0B\u8F09 {0} {1} \
|
||||
<a href="#" onclick="window.open(''http://libresonic.org/'')">\u8ACB\u9EDE\u9078\u9019\u88E1</a>\u3002
|
||||
help.premium.title = \u6388\u6B0A
|
||||
help.premium.expires = (\u904E\u671F {0})
|
||||
help.premium.upgrade = \u5347\u7D1A\u5230 <a href="premiumSettings.view">Subsonic Premium</a> \u4F86\u4F7F\u7528 <a href="premiumSettings.view">\u66F4\u591A\u529F\u80FD</a>\uFF01
|
||||
help.premium.expired = (\u6388\u6B0A\u904E\u671F\u65BC {0})
|
||||
help.version.title = \u7248\u672C
|
||||
help.builddate.title = \u65E5\u671F
|
||||
help.server.title = \u4F3A\u670D\u5668
|
||||
@@ -304,7 +294,6 @@ settingsheader.podcast = \u64AD\u5BA2
|
||||
settingsheader.player = \u64AD\u653E\u5668
|
||||
settingsheader.dlna = DLNA/UPnP
|
||||
settingsheader.sonos = Sonos
|
||||
settingsheader.premium = Subsonic Premium
|
||||
settingsheader.share = \u5206\u4EAB\u5A92\u9AD4
|
||||
settingsheader.network = \u7DB2\u8DEF
|
||||
settingsheader.transcoding = \u8F49\u6A94
|
||||
@@ -600,7 +589,6 @@ main.sharealbum = \u5206\u4EAB
|
||||
main.more = \u66F4\u591A\u52D5\u4F5C\u2026
|
||||
main.more.selection = \u9078\u64C7\u6B4C\u66F2\u2026
|
||||
main.more.share = \u5206\u4EAB
|
||||
main.premium = <a href="{0}" style="text-decoration:underline">\u53D6\u5F97 Subsonic Premium</a><br>(\u4E26\u522A\u9664\u6B64\u5EE3\u544A)
|
||||
main.nowplaying =\u76EE\u524D\u64A5\u653E
|
||||
main.lyrics = \u6B4C\u8A5E
|
||||
main.minutesago = \u5206\u9418\u524D
|
||||
@@ -676,33 +664,6 @@ share.disabled = To share your music with someone you must first register your o
|
||||
Please go to <a href="networkSettings.view"><b>Settings > Network</b></a> (administrative rights required).
|
||||
share.manage = Manage my shared media
|
||||
|
||||
# premium.jsp
|
||||
premium.title = Subsonic Premium
|
||||
premium.invalidlicense = Invalid license key.
|
||||
premium.text = <p>Upgrade to <a href="http://premium.libresonic.org/" target="_blank">Subsonic Premium</a> to enjoy these extra features:</p> \
|
||||
<ul> \
|
||||
<li><a href="http://libresonic.org/pages/apps.jsp" target="_blank">Apps</a> for Android, iPhone, Windows Phone, Mac, Chrome and more*.</li> \
|
||||
<li>Video streaming.</li> \
|
||||
<li>Stream to your Chromecast and Sonos devices.</li> \
|
||||
<li>Podcast receiver.</li> \
|
||||
<li>Your personal server address: <em>yourname</em>.libresonic.org (see <a href="networkSettings.view">Settings > Network</a>).</li> \
|
||||
<li>Play your media on compatible DLNA/UPnP devices.</li> \
|
||||
<li>Share your media on Facebook, Twitter, Google+.</li> \
|
||||
<li>No ads in the web interface.</li> \
|
||||
<li>Other features to be released later.</li> \
|
||||
</ul> \
|
||||
<p style="font-size:10px;">* Some apps must be purchased separately.</p>
|
||||
premium.getpremium = \u53D6\u5F97 Subsonic Premium
|
||||
premium.licensed = You have a valid Subsonic Premium license!
|
||||
premium.licensedexpires = Your Subsonic Premium license is valid until {0}
|
||||
premium.licensedexpired = Your Subsonic Premium license expired {0}
|
||||
premium.licensedto = The license is registered to {0}.
|
||||
premium.forcechange = Register a different license key
|
||||
premium.register = When upgrading to Subsonic Premium you receive a license key by email. Please register it below.
|
||||
premium.resend = Lost the license key? <a href="http://libresonic.org/backend/requestLicense.view" target="_blank">Send it again</a>.
|
||||
premium.register.email = Email
|
||||
premium.register.license = License key
|
||||
|
||||
# podcastReceiver.jsp
|
||||
podcastreceiver.title = \u64AD\u5BA2\u63A5\u6536\u5668
|
||||
podcastreceiver.empty = You haven't subscribed to any podcasts yet.
|
||||
|
||||
@@ -409,7 +409,6 @@
|
||||
<p>Your personal server address: <em>you</em>.libresonic.org</p>
|
||||
<p>Podcast receiver.</p>
|
||||
</div>
|
||||
<p class="forward" style="white-space: nowrap"><a href="http://libresonic.org/pages/premium.jsp" target="_blank">Get Subsonic Premium</a></p>
|
||||
</td>
|
||||
</c:if>
|
||||
</tr>
|
||||
|
||||
@@ -40,9 +40,6 @@
|
||||
</c:otherwise>
|
||||
</c:choose>
|
||||
|
||||
<c:set var="licenseInfo" value="${model.licenseInfo}"/>
|
||||
<%@ include file="licenseNotice.jsp" %>
|
||||
|
||||
<div style="padding-top:1em">
|
||||
<c:if test="${not empty model.dir}">
|
||||
<sub:url value="main.view" var="backUrl"><sub:param name="path" value="${model.dir.path}"/></sub:url>
|
||||
|
||||
@@ -53,9 +53,6 @@
|
||||
<fmt:message key="dlnasettings.servername.description"/>
|
||||
</p>
|
||||
|
||||
<c:set var="licenseInfo" value="${model.licenseInfo}"/>
|
||||
<%@ include file="licenseNotice.jsp" %>
|
||||
|
||||
<p>
|
||||
<input type="submit" value="<fmt:message key="common.save"/>" style="margin-right:0.3em">
|
||||
<input type="button" value="<fmt:message key="common.cancel"/>" onclick="location.href='nowPlaying.view'">
|
||||
|
||||
@@ -90,9 +90,6 @@
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<c:set var="licenseInfo" value="${command.licenseInfo}"/>
|
||||
<%@ include file="licenseNotice.jsp" %>
|
||||
|
||||
<p style="padding-top:1em">
|
||||
<input type="submit" value="<fmt:message key="common.save"/>" style="margin-right:0.3em">
|
||||
<input type="button" value="<fmt:message key="common.cancel"/>" onclick="location.href='nowPlaying.view'">
|
||||
|
||||
@@ -91,15 +91,8 @@
|
||||
* launch app and request session
|
||||
*/
|
||||
CastPlayer.prototype.launchCastApp = function () {
|
||||
<c:choose>
|
||||
<c:when test="${model.licenseInfo.licenseOrTrialValid}">
|
||||
this.log("launching app...");
|
||||
chrome.cast.requestSession(this.onRequestSessionSuccess.bind(this), this.onLaunchError.bind(this));
|
||||
</c:when>
|
||||
<c:otherwise>
|
||||
$().toastmessage('showNoticeToast', "<fmt:message key="videoPlayer.getpremium"/>");
|
||||
</c:otherwise>
|
||||
</c:choose>
|
||||
};
|
||||
|
||||
/**
|
||||
|
||||
@@ -110,8 +110,5 @@
|
||||
</form>
|
||||
</c:if>
|
||||
|
||||
<c:set var="licenseInfo" value="${model.licenseInfo}"/>
|
||||
<%@ include file="licenseNotice.jsp" %>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -1,93 +0,0 @@
|
||||
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="iso-8859-1" %>
|
||||
<%--@elvariable id="command" type="org.libresonic.player.command.PremiumSettingsCommand"--%>
|
||||
<html>
|
||||
<head>
|
||||
<%@ include file="head.jsp" %>
|
||||
<%@ include file="jquery.jsp" %>
|
||||
</head>
|
||||
<body class="mainframe bgcolor1">
|
||||
|
||||
<c:import url="settingsHeader.jsp">
|
||||
<c:param name="cat" value="premium"/>
|
||||
<c:param name="restricted" value="${not command.user.adminRole}"/>
|
||||
<c:param name="toast" value="${settings_toast}"/>
|
||||
</c:import>
|
||||
|
||||
<c:if test="${not empty command.path}">
|
||||
<sub:url value="main.view" var="backUrl">
|
||||
<sub:param name="path" value="${command.path}"/>
|
||||
</sub:url>
|
||||
<div class="back"><a href="${backUrl}">
|
||||
<fmt:message key="common.back"/>
|
||||
</a></div>
|
||||
<br/>
|
||||
</c:if>
|
||||
|
||||
<div style="width:50em; max-width:50em">
|
||||
|
||||
<fmt:message key="premium.text"/>
|
||||
<fmt:formatDate value="${command.licenseInfo.licenseExpires}" dateStyle="long" var="expirationDate"/>
|
||||
|
||||
<c:if test="${command.licenseInfo.licenseValid}">
|
||||
<c:choose>
|
||||
<c:when test="${empty command.licenseInfo.licenseExpires}">
|
||||
<p><b><fmt:message key="premium.licensed"/></b></p>
|
||||
</c:when>
|
||||
<c:otherwise>
|
||||
<p><b><fmt:message key="premium.licensedexpires"><fmt:param value="${expirationDate}"/></fmt:message></b></p>
|
||||
</c:otherwise>
|
||||
</c:choose>
|
||||
<c:if test="${not command.forceChange and not command.submissionError}">
|
||||
<p>
|
||||
<fmt:message key="premium.licensedto"><fmt:param value="${command.licenseInfo.licenseEmail}"/></fmt:message>
|
||||
</p>
|
||||
<c:if test="${command.user.adminRole}">
|
||||
<div class="forward"><a href="premiumSettings.view?change"><fmt:message key="premium.forcechange"/></a></div>
|
||||
</c:if>
|
||||
</c:if>
|
||||
</c:if>
|
||||
|
||||
<c:if test="${not command.licenseInfo.licenseValid}">
|
||||
<c:if test="${not empty command.licenseInfo.licenseExpires}">
|
||||
<p><b><fmt:message key="premium.licensedexpired"><fmt:param value="${expirationDate}"/></fmt:message></b></p>
|
||||
</c:if>
|
||||
<p class="forward" style="font-size:1.2em;margin-left: 1em"><b><a href="http://libresonic.org/pages/premium.jsp" target="_blank">
|
||||
<fmt:message key="premium.getpremium"/>
|
||||
<c:if test="${command.licenseInfo.trialDaysLeft gt 0}">
|
||||
– <fmt:message key="top.trialdaysleft"><fmt:param value="${command.licenseInfo.trialDaysLeft}"/></fmt:message>
|
||||
</c:if>
|
||||
</a></b></p>
|
||||
|
||||
<p><fmt:message key="premium.register"/></p>
|
||||
</c:if>
|
||||
|
||||
<c:if test="${not command.licenseInfo.licenseValid or command.forceChange or command.submissionError}">
|
||||
<form:form commandName="command" method="post" action="premiumSettings.view">
|
||||
<form:hidden path="path"/>
|
||||
<table>
|
||||
<tr>
|
||||
<td><fmt:message key="premium.register.email"/></td>
|
||||
<td>
|
||||
<form:input path="licenseInfo.licenseEmail" size="60"/>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><fmt:message key="premium.register.license"/></td>
|
||||
<td>
|
||||
<form:input path="licenseCode" size="60"/>
|
||||
</td>
|
||||
<td><input type="submit" value="<fmt:message key="common.ok"/>"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td/>
|
||||
<td class="warning"><form:errors path="licenseCode"/></td>
|
||||
</tr>
|
||||
</table>
|
||||
</form:form>
|
||||
|
||||
<p><fmt:message key="premium.resend"/></p>
|
||||
</c:if>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -153,17 +153,6 @@
|
||||
</head>
|
||||
<body class="bgcolor1 rightframe" style="padding-top:2em" onload="init()">
|
||||
|
||||
<c:if test="${not model.licenseInfo.licenseValid}">
|
||||
<div class="detail" style="text-align: center;padding-bottom: 1em">
|
||||
<a href="premiumSettings.view" target="main"><img src="<spring:theme code="donateSmallImage"/>" alt="">
|
||||
<fmt:message key="top.getpremium"/></a>
|
||||
<c:if test="${model.licenseInfo.trialDaysLeft gt 0}">
|
||||
<br>
|
||||
<a href="premiumSettings.view" target="main"><fmt:message key="top.trialdaysleft"><fmt:param value="${model.licenseInfo.trialDaysLeft}"/></fmt:message></a>
|
||||
</c:if>
|
||||
</div>
|
||||
</c:if>
|
||||
|
||||
<c:if test="${model.newVersionAvailable}">
|
||||
<div class="warning" style="padding-bottom: 1em">
|
||||
<fmt:message key="top.upgrade"><fmt:param value="${model.brand}"/><fmt:param value="${model.latestVersion}"/></fmt:message>
|
||||
|
||||
@@ -55,9 +55,6 @@
|
||||
|
||||
</table>
|
||||
|
||||
<c:set var="licenseInfo" value="${model.licenseInfo}"/>
|
||||
<%@ include file="licenseNotice.jsp" %>
|
||||
|
||||
<p style="padding-top:1em">
|
||||
<input type="submit" value="<fmt:message key="common.save"/>" style="margin-right:0.3em">
|
||||
<input type="button" value="<fmt:message key="common.cancel"/>" onclick="location.href='nowPlaying.view'" style="margin-right:2.0em">
|
||||
|
||||
@@ -53,9 +53,6 @@
|
||||
<fmt:message key="sonossettings.servicename.description"/>
|
||||
</p>
|
||||
|
||||
<c:set var="licenseInfo" value="${model.licenseInfo}"/>
|
||||
<%@ include file="licenseNotice.jsp" %>
|
||||
|
||||
<p>
|
||||
<input type="submit" value="<fmt:message key="common.save"/>" style="margin-right:0.3em">
|
||||
<input type="button" value="<fmt:message key="common.cancel"/>" onclick="location.href='nowPlaying.view'">
|
||||
|
||||
@@ -27,10 +27,6 @@
|
||||
|
||||
<body class="mainframe bgcolor1" style="padding-bottom:0.5em">
|
||||
|
||||
<c:set var="licenseInfo" value="${model.licenseInfo}"/>
|
||||
<%@ include file="licenseNotice.jsp" %>
|
||||
|
||||
<c:if test="${licenseInfo.licenseOrTrialValid}">
|
||||
<div>
|
||||
<div id="overlay">
|
||||
<div id="overlay_text">Playing on Chromecast</div>
|
||||
|
||||
-9
@@ -54,9 +54,6 @@ public class SettingsServiceTestCase extends TestCase {
|
||||
assertEquals("Wrong default index creation hour.", 3, settingsService.getIndexCreationHour());
|
||||
assertTrue("Wrong default playlist folder.", settingsService.getPlaylistFolder().endsWith("playlists"));
|
||||
assertEquals("Wrong default theme.", "default", settingsService.getThemeId());
|
||||
assertNull("Wrong default license email.", settingsService.getLicenseEmail());
|
||||
assertNull("Wrong default license code.", settingsService.getLicenseCode());
|
||||
assertNull("Wrong default license date.", settingsService.getLicenseDate());
|
||||
assertEquals("Wrong default Podcast episode retention count.", 10, settingsService.getPodcastEpisodeRetentionCount());
|
||||
assertEquals("Wrong default Podcast episode download count.", 1, settingsService.getPodcastEpisodeDownloadCount());
|
||||
assertTrue("Wrong default Podcast folder.", settingsService.getPodcastFolder().endsWith("Podcast"));
|
||||
@@ -83,9 +80,6 @@ public class SettingsServiceTestCase extends TestCase {
|
||||
settingsService.setThemeId("dark");
|
||||
settingsService.setIndexCreationInterval(4);
|
||||
settingsService.setIndexCreationHour(9);
|
||||
settingsService.setLicenseEmail("sindre@foo.bar.no");
|
||||
settingsService.setLicenseCode(null);
|
||||
settingsService.setLicenseDate(new Date(223423412351253L));
|
||||
settingsService.setPodcastEpisodeRetentionCount(5);
|
||||
settingsService.setPodcastEpisodeDownloadCount(-1);
|
||||
settingsService.setPodcastFolder("d:/podcasts");
|
||||
@@ -123,9 +117,6 @@ public class SettingsServiceTestCase extends TestCase {
|
||||
assertEquals("Wrong theme.", "dark", ss.getThemeId());
|
||||
assertEquals("Wrong index creation interval.", 4, ss.getIndexCreationInterval());
|
||||
assertEquals("Wrong index creation hour.", 9, ss.getIndexCreationHour());
|
||||
assertEquals("Wrong license email.", "sindre@foo.bar.no", ss.getLicenseEmail());
|
||||
assertEquals("Wrong license code.", null, ss.getLicenseCode());
|
||||
assertEquals("Wrong license date.", new Date(223423412351253L), ss.getLicenseDate());
|
||||
assertEquals("Wrong Podcast episode retention count.", 5, settingsService.getPodcastEpisodeRetentionCount());
|
||||
assertEquals("Wrong Podcast episode download count.", -1, settingsService.getPodcastEpisodeDownloadCount());
|
||||
assertEquals("Wrong Podcast folder.", "d:/podcasts", settingsService.getPodcastFolder());
|
||||
|
||||
@@ -27,7 +27,6 @@
|
||||
<xs:element name="playlist" type="sub:PlaylistWithSongs" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="jukeboxStatus" type="sub:JukeboxStatus" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="jukeboxPlaylist" type="sub:JukeboxPlaylist" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="license" type="sub:License" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="users" type="sub:Users" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="user" type="sub:User" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="chatMessages" type="sub:ChatMessages" minOccurs="1" maxOccurs="1"/>
|
||||
@@ -546,13 +545,6 @@
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="License">
|
||||
<xs:attribute name="valid" type="xs:boolean" use="required"/>
|
||||
<xs:attribute name="email" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="licenseExpires" type="xs:dateTime" use="optional"/>
|
||||
<xs:attribute name="trialExpires" type="xs:dateTime" use="optional"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Users">
|
||||
<xs:sequence>
|
||||
<xs:element name="user" type="sub:User" minOccurs="0" maxOccurs="unbounded"/>
|
||||
|
||||
Reference in New Issue
Block a user