Conflicts: libresonic-main/pom.xml libresonic-main/src/main/java/org/libresonic/player/controller/ChangeCoverArtController.java libresonic-main/src/main/java/org/libresonic/player/controller/DLNASettingsController.java libresonic-main/src/main/java/org/libresonic/player/controller/InternetRadioSettingsController.java libresonic-main/src/main/java/org/libresonic/player/controller/PlayQueueController.java libresonic-main/src/main/java/org/libresonic/player/controller/RightController.java libresonic-main/src/main/java/org/libresonic/player/controller/ShareManagementController.java libresonic-main/src/main/java/org/libresonic/player/controller/ShareSettingsController.java libresonic-main/src/main/java/org/libresonic/player/controller/SonosSettingsController.java libresonic-main/src/main/java/org/libresonic/player/controller/TranscodingSettingsController.java libresonic-main/src/main/webapp/WEB-INF/libresonic-servlet.xml pom.xmlmaster
commit
e5dc517fa1
@ -0,0 +1,69 @@ |
|||||||
|
/* |
||||||
|
* 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; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author Sindre Mehus |
||||||
|
* @version $Id$ |
||||||
|
*/ |
||||||
|
public class AlbumNotes { |
||||||
|
|
||||||
|
private final String notes; |
||||||
|
private final String musicBrainzId; |
||||||
|
private final String lastFmUrl; |
||||||
|
private final String smallImageUrl; |
||||||
|
private final String mediumImageUrl; |
||||||
|
private final String largeImageUrl; |
||||||
|
|
||||||
|
public AlbumNotes(String notes, String musicBrainzId, String lastFmUrl, String smallImageUrl, |
||||||
|
String mediumImageUrl, String largeImageUrl) { |
||||||
|
this.notes = notes; |
||||||
|
this.musicBrainzId = musicBrainzId; |
||||||
|
this.lastFmUrl = lastFmUrl; |
||||||
|
this.smallImageUrl = smallImageUrl; |
||||||
|
this.mediumImageUrl = mediumImageUrl; |
||||||
|
this.largeImageUrl = largeImageUrl; |
||||||
|
} |
||||||
|
|
||||||
|
public String getNotes() { |
||||||
|
return notes; |
||||||
|
} |
||||||
|
|
||||||
|
public String getMusicBrainzId() { |
||||||
|
return musicBrainzId; |
||||||
|
} |
||||||
|
|
||||||
|
public String getLastFmUrl() { |
||||||
|
return lastFmUrl; |
||||||
|
} |
||||||
|
|
||||||
|
public String getSmallImageUrl() { |
||||||
|
return smallImageUrl; |
||||||
|
} |
||||||
|
|
||||||
|
public String getMediumImageUrl() { |
||||||
|
return mediumImageUrl; |
||||||
|
} |
||||||
|
|
||||||
|
public String getLargeImageUrl() { |
||||||
|
return largeImageUrl; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,50 @@ |
|||||||
|
/* |
||||||
|
* 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 2014 (C) Sindre Mehus |
||||||
|
*/ |
||||||
|
|
||||||
|
package org.libresonic.player.domain; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author Sindre Mehus |
||||||
|
* @version $Id$ |
||||||
|
*/ |
||||||
|
public class LastFmCoverArt { |
||||||
|
|
||||||
|
private final String imageUrl; |
||||||
|
private final String artist; |
||||||
|
private final String album; |
||||||
|
|
||||||
|
public LastFmCoverArt(String imageUrl, String artist, String album) { |
||||||
|
this.imageUrl = imageUrl; |
||||||
|
this.artist = artist; |
||||||
|
this.album = album; |
||||||
|
} |
||||||
|
|
||||||
|
public String getImageUrl() { |
||||||
|
return imageUrl; |
||||||
|
} |
||||||
|
|
||||||
|
public String getArtist() { |
||||||
|
return artist; |
||||||
|
} |
||||||
|
|
||||||
|
public String getAlbum() { |
||||||
|
return album; |
||||||
|
} |
||||||
|
} |
||||||
|
|
@ -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; |
|
||||||
} |
|
||||||
} |
|
@ -0,0 +1,49 @@ |
|||||||
|
/** |
||||||
|
* 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 2014 (C) Sindre Mehus |
||||||
|
*/ |
||||||
|
|
||||||
|
package org.libresonic.player.service; |
||||||
|
|
||||||
|
import java.util.LinkedHashMap; |
||||||
|
import java.util.Map; |
||||||
|
|
||||||
|
import de.umass.lastfm.cache.ExpirationPolicy; |
||||||
|
|
||||||
|
/** |
||||||
|
* Artist and album info is cached permanently. Everything else is cached one year. |
||||||
|
* |
||||||
|
* @author Sindre Mehus |
||||||
|
* @version $Id$ |
||||||
|
*/ |
||||||
|
public class LastFmExpirationPolicy implements ExpirationPolicy { |
||||||
|
|
||||||
|
private final static long ONE_YEAR = 12 * 30 * 24 * 3600 * 1000L; |
||||||
|
|
||||||
|
private final Map<String, Long> methodToExpirationTime = new LinkedHashMap<String, Long>() {{ |
||||||
|
put("artist.getInfo", Long.MAX_VALUE); // Cache forever
|
||||||
|
put("album.getInfo", Long.MAX_VALUE); // Cache forever
|
||||||
|
put("album.search", -1L); // Don't cache
|
||||||
|
}}; |
||||||
|
|
||||||
|
@Override |
||||||
|
public long getExpirationTime(String method, Map<String, String> params) { |
||||||
|
Long expirationTime = methodToExpirationTime.get(method); |
||||||
|
return expirationTime == null ? ONE_YEAR : expirationTime; |
||||||
|
} |
||||||
|
} |
||||||
|
|
@ -0,0 +1,26 @@ |
|||||||
|
package org.libresonic.player.spring; |
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest; |
||||||
|
import javax.servlet.http.HttpServletResponse; |
||||||
|
import org.libresonic.player.Logger; |
||||||
|
import org.springframework.core.Ordered; |
||||||
|
import org.springframework.web.servlet.HandlerExceptionResolver; |
||||||
|
import org.springframework.web.servlet.ModelAndView; |
||||||
|
|
||||||
|
public class LoggingExceptionResolver implements HandlerExceptionResolver, Ordered { |
||||||
|
|
||||||
|
private static final Logger logger = Logger.getLogger(LoggingExceptionResolver.class); |
||||||
|
|
||||||
|
@Override |
||||||
|
public ModelAndView resolveException( |
||||||
|
HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e |
||||||
|
) { |
||||||
|
logger.error("Exception occurred", e); |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public int getOrder() { |
||||||
|
return Integer.MIN_VALUE; |
||||||
|
} |
||||||
|
} |
@ -1,144 +1,143 @@ |
|||||||
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="iso-8859-1" %> |
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="iso-8859-1" %> |
||||||
<%@ include file="include.jsp" %> |
<%@ include file="include.jsp" %> |
||||||
|
|
||||||
<%-- |
<%-- |
||||||
PARAMETERS |
PARAMETERS |
||||||
albumId: ID of album. |
albumId: ID of album. |
||||||
playlistId: ID of playlist. |
playlistId: ID of playlist. |
||||||
podcastChannelId: ID of podcast channel |
podcastChannelId: ID of podcast channel |
||||||
coverArtSize: Height and width of cover art. |
coverArtSize: Height and width of cover art. |
||||||
caption1: Caption line 1 |
caption1: Caption line 1 |
||||||
caption2: Caption line 2 |
caption2: Caption line 2 |
||||||
caption3: Caption line 3 |
caption3: Caption line 3 |
||||||
captionCount: Number of caption lines to display (default 0) |
captionCount: Number of caption lines to display (default 0) |
||||||
showLink: Whether to make the cover art image link to the album page. |
showLink: Whether to make the cover art image link to the album page. |
||||||
showZoom: Whether to display a link for zooming the cover art. |
showZoom: Whether to display a link for zooming the cover art. |
||||||
showChange: Whether to display a link for changing the cover art. |
showChange: Whether to display a link for changing the cover art. |
||||||
appearAfter: Fade in after this many milliseconds, or nil if no fading in should happen. |
appearAfter: Fade in after this many milliseconds, or nil if no fading in should happen. |
||||||
hideOverflow: Hide cover art overflow when height is greater than width |
--%> |
||||||
--%> |
<c:choose> |
||||||
<c:choose> |
<c:when test="${empty param.coverArtSize}"> |
||||||
<c:when test="${empty param.coverArtSize}"> |
<c:set var="size" value="auto"/> |
||||||
<c:set var="size" value="auto"/> |
</c:when> |
||||||
</c:when> |
<c:otherwise> |
||||||
<c:otherwise> |
<c:set var="size" value="${param.coverArtSize}px"/> |
||||||
<c:set var="size" value="${param.coverArtSize}px"/> |
</c:otherwise> |
||||||
</c:otherwise> |
</c:choose> |
||||||
</c:choose> |
|
||||||
|
<c:set var="captionCount" value="${empty param.captionCount ? 0 : param.captionCount}"/> |
||||||
<c:set var="captionCount" value="${empty param.captionCount ? 0 : param.captionCount}"/> |
|
||||||
|
<str:randomString count="5" type="alphabet" var="divId"/> |
||||||
<str:randomString count="5" type="alphabet" var="divId"/> |
<str:randomString count="5" type="alphabet" var="imgId"/> |
||||||
<str:randomString count="5" type="alphabet" var="imgId"/> |
<str:randomString count="5" type="alphabet" var="playId"/> |
||||||
<str:randomString count="5" type="alphabet" var="playId"/> |
|
||||||
|
<div class="coverart dropshadow"> |
||||||
<div class="coverart dropshadow"> |
<div style="width:${size};max-width:${size};height:${size};max-height:${size};cursor:pointer" title="${param.caption1}" id="${divId}"> |
||||||
<div style="width:${size};max-width:${size};height:${size};max-height:${size};cursor:pointer;<c:if test="${param.hideOverflow}">overflow:hidden</c:if>;" title="${param.caption1}" id="${divId}"> |
|
||||||
|
<c:if test="${not empty param.albumId}"> |
||||||
<c:if test="${not empty param.albumId}"> |
<c:url value="main.view" var="targetUrl"> |
||||||
<c:url value="main.view" var="targetUrl"> |
<c:param name="id" value="${param.albumId}"/> |
||||||
<c:param name="id" value="${param.albumId}"/> |
</c:url> |
||||||
</c:url> |
</c:if> |
||||||
</c:if> |
<c:if test="${not empty param.playlistId}"> |
||||||
<c:if test="${not empty param.playlistId}"> |
<c:url value="playlist.view" var="targetUrl"> |
||||||
<c:url value="playlist.view" var="targetUrl"> |
<c:param name="id" value="${param.playlistId}"/> |
||||||
<c:param name="id" value="${param.playlistId}"/> |
</c:url> |
||||||
</c:url> |
</c:if> |
||||||
</c:if> |
<c:if test="${not empty param.podcastChannelId}"> |
||||||
<c:if test="${not empty param.podcastChannelId}"> |
<c:url value="podcastChannel.view" var="targetUrl"> |
||||||
<c:url value="podcastChannel.view" var="targetUrl"> |
<c:param name="id" value="${param.podcastChannelId}"/> |
||||||
<c:param name="id" value="${param.podcastChannelId}"/> |
</c:url> |
||||||
</c:url> |
</c:if> |
||||||
</c:if> |
|
||||||
|
<c:url value="/coverArt.view" var="coverArtUrl"> |
||||||
<c:url value="/coverArt.view" var="coverArtUrl"> |
<c:if test="${not empty param.coverArtSize}"> |
||||||
<c:if test="${not empty param.coverArtSize}"> |
<c:param name="size" value="${param.coverArtSize}"/> |
||||||
<c:param name="size" value="${param.coverArtSize}"/> |
</c:if> |
||||||
</c:if> |
<c:if test="${not empty param.albumId}"> |
||||||
<c:if test="${not empty param.albumId}"> |
<c:param name="id" value="${param.albumId}"/> |
||||||
<c:param name="id" value="${param.albumId}"/> |
</c:if> |
||||||
</c:if> |
<c:if test="${not empty param.podcastChannelId}"> |
||||||
<c:if test="${not empty param.podcastChannelId}"> |
<c:param name="id" value="pod-${param.podcastChannelId}"/> |
||||||
<c:param name="id" value="pod-${param.podcastChannelId}"/> |
</c:if> |
||||||
</c:if> |
<c:if test="${not empty param.playlistId}"> |
||||||
<c:if test="${not empty param.playlistId}"> |
<c:param name="id" value="pl-${param.playlistId}"/> |
||||||
<c:param name="id" value="pl-${param.playlistId}"/> |
</c:if> |
||||||
</c:if> |
</c:url> |
||||||
</c:url> |
|
||||||
|
<c:url value="/coverArt.view" var="zoomCoverArtUrl"> |
||||||
<c:url value="/coverArt.view" var="zoomCoverArtUrl"> |
<c:param name="id" value="${param.albumId}"/> |
||||||
<c:param name="id" value="${param.albumId}"/> |
</c:url> |
||||||
</c:url> |
|
||||||
|
<div style="position: relative; width: 0; height: 0"> |
||||||
<div style="position: relative; width: 0; height: 0"> |
<img src="<spring:theme code="playOverlayImage"/>" id="${playId}" |
||||||
<img src="<spring:theme code="playOverlayImage"/>" id="${playId}" |
style="position: relative; top: 8px; left: 8px; z-index: 2; display:none" > |
||||||
style="position: relative; top: 8px; left: 8px; z-index: 2; display:none" > |
</div> |
||||||
</div> |
<c:choose> |
||||||
<c:choose> |
<c:when test="${param.showLink}"><a href="${targetUrl}" title="${param.caption1}"></c:when> |
||||||
<c:when test="${param.showLink}"><a href="${targetUrl}" title="${param.caption1}"></c:when> |
<c:when test="${param.showZoom}"><a href="${zoomCoverArtUrl}" rel="zoom" title="${param.caption1}"></c:when> |
||||||
<c:when test="${param.showZoom}"><a href="${zoomCoverArtUrl}" rel="zoom" title="${param.caption1}"></c:when> |
</c:choose> |
||||||
</c:choose> |
<img src="${coverArtUrl}" id="${imgId}" alt="${param.caption1}" |
||||||
<img src="${coverArtUrl}" id="${imgId}" alt="${param.caption1}" |
style="display:none"> |
||||||
style="display:none"> |
<c:if test="${param.showLink or param.showZoom}"></a></c:if> |
||||||
<c:if test="${param.showLink or param.showZoom}"></a></c:if> |
</div> |
||||||
</div> |
|
||||||
|
<c:if test="${captionCount gt 0}"> |
||||||
<c:if test="${captionCount gt 0}"> |
<div class="caption1" style="width:${param.coverArtSize - 16}px"><a href="${targetUrl}" title="${param.caption1}">${param.caption1}</a></div> |
||||||
<div class="caption1" style="width:${param.coverArtSize - 16}px"><a href="${targetUrl}" title="${param.caption1}">${param.caption1}</a></div> |
</c:if> |
||||||
</c:if> |
<c:if test="${captionCount gt 1}"> |
||||||
<c:if test="${captionCount gt 1}"> |
<div class="caption2" style="width:${param.coverArtSize - 16}px">${param.caption2} </div> |
||||||
<div class="caption2" style="width:${param.coverArtSize - 16}px">${param.caption2} </div> |
</c:if> |
||||||
</c:if> |
<c:if test="${captionCount gt 2}"> |
||||||
<c:if test="${captionCount gt 2}"> |
<div class="caption3" style="width:${param.coverArtSize - 16}px">${param.caption3} </div> |
||||||
<div class="caption3" style="width:${param.coverArtSize - 16}px">${param.caption3} </div> |
</c:if> |
||||||
</c:if> |
</div> |
||||||
</div> |
|
||||||
|
<c:if test="${param.showChange or param.showZoom}"> |
||||||
<c:if test="${param.showChange or param.showZoom}"> |
<div style="padding-top:6px;text-align:right"> |
||||||
<div style="padding-top:6px;text-align:right"> |
<c:if test="${param.showChange}"> |
||||||
<c:if test="${param.showChange}"> |
<c:url value="/changeCoverArt.view" var="changeCoverArtUrl"> |
||||||
<c:url value="/changeCoverArt.view" var="changeCoverArtUrl"> |
<c:param name="id" value="${param.albumId}"/> |
||||||
<c:param name="id" value="${param.albumId}"/> |
</c:url> |
||||||
</c:url> |
<a class="detail" href="${changeCoverArtUrl}"><fmt:message key="coverart.change"/></a> |
||||||
<a class="detail" href="${changeCoverArtUrl}"><fmt:message key="coverart.change"/></a> |
</c:if> |
||||||
</c:if> |
|
||||||
|
<c:if test="${param.showZoom and param.showChange}"> |
||||||
<c:if test="${param.showZoom and param.showChange}"> |
| |
||||||
| |
</c:if> |
||||||
</c:if> |
|
||||||
|
<c:if test="${param.showZoom}"> |
||||||
<c:if test="${param.showZoom}"> |
<a class="detail" rel="zoom" title="${param.caption1}" href="${zoomCoverArtUrl}"><fmt:message key="coverart.zoom"/></a> |
||||||
<a class="detail" rel="zoom" title="${param.caption1}" href="${zoomCoverArtUrl}"><fmt:message key="coverart.zoom"/></a> |
</c:if> |
||||||
</c:if> |
</div> |
||||||
</div> |
</c:if> |
||||||
</c:if> |
|
||||||
|
<script type="text/javascript"> |
||||||
<script type="text/javascript"> |
$(document).ready(function () { |
||||||
$(document).ready(function () { |
setTimeout("$('#${imgId}').fadeIn(500)", ${empty param.appearAfter ? 0 : param.appearAfter}); |
||||||
setTimeout("$('#${imgId}').fadeIn(500)", ${empty param.appearAfter ? 0 : param.appearAfter}); |
}); |
||||||
}); |
|
||||||
|
$("#${divId}").mouseenter(function () { |
||||||
$("#${divId}").mouseenter(function () { |
$("#${playId}").show(); |
||||||
$("#${playId}").show(); |
$("#${imgId}").stop(); |
||||||
$("#${imgId}").stop(); |
$("#${imgId}").animate({opacity: 0.7}, 150); |
||||||
$("#${imgId}").animate({opacity: 0.7}, 150); |
}); |
||||||
}); |
$("#${divId}").mouseleave(function () { |
||||||
$("#${divId}").mouseleave(function () { |
$("#${playId}").hide(); |
||||||
$("#${playId}").hide(); |
$("#${imgId}").stop(); |
||||||
$("#${imgId}").stop(); |
$("#${imgId}").animate({opacity: 1.0}, 150); |
||||||
$("#${imgId}").animate({opacity: 1.0}, 150); |
}); |
||||||
}); |
$("#${playId}").click(function () { |
||||||
$("#${playId}").click(function () { |
<c:if test="${not empty param.albumId}"> |
||||||
<c:if test="${not empty param.albumId}"> |
top.playQueue.onPlay(${param.albumId}); |
||||||
top.playQueue.onPlay(${param.albumId}); |
</c:if> |
||||||
</c:if> |
<c:if test="${not empty param.playlistId}"> |
||||||
<c:if test="${not empty param.playlistId}"> |
top.playQueue.onPlayPlaylist(${param.playlistId}); |
||||||
top.playQueue.onPlayPlaylist(${param.playlistId}); |
</c:if> |
||||||
</c:if> |
<c:if test="${not empty param.podcastChannelId}"> |
||||||
<c:if test="${not empty param.podcastChannelId}"> |
top.playQueue.onPlayPodcastChannel(${param.podcastChannelId}); |
||||||
top.playQueue.onPlayPodcastChannel(${param.podcastChannelId}); |
</c:if> |
||||||
</c:if> |
}); |
||||||
}); |
|
||||||
|
</script> |
||||||
</script> |
|
||||||
|
|
||||||
|
@ -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="${command.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> |
|
After Width: | Height: | Size: 1.7 KiB |
Loading…
Reference in new issue