mirror of
https://github.com/rembo10/headphones.git
synced 2026-05-20 10:35:32 +01:00
Fixed some merge conflicts with the songkick merge from maiis
This commit is contained in:
@@ -33,7 +33,7 @@ table { border-collapse: collapse; border-spacing: 0; }
|
||||
hr { display: block; height: 1px; border: 0; border-top: 1px solid #ccc; margin: 1em 0; padding: 0; }
|
||||
input, select { vertical-align: middle; }
|
||||
|
||||
body { font:13px/1.231 sans-serif; *font-size:small; }
|
||||
body { font:13px/1.231 sans-serif; *font-size:small; }
|
||||
select, input, textarea, button { font:99% sans-serif; }
|
||||
pre, code, kbd, samp { font-family: monospace, sans-serif; }
|
||||
|
||||
@@ -52,7 +52,7 @@ sub { bottom: -0.25em; }
|
||||
|
||||
pre { white-space: pre; white-space: pre-wrap; word-wrap: break-word; padding: 15px; }
|
||||
textarea { overflow: auto; }
|
||||
.ie6 legend, .ie7 legend { margin-left: -7px; }
|
||||
.ie6 legend, .ie7 legend { margin-left: -7px; }
|
||||
input[type="radio"] { vertical-align: text-bottom; }
|
||||
input[type="checkbox"] { vertical-align: bottom; }
|
||||
.ie7 input[type="checkbox"] { vertical-align: baseline; }
|
||||
@@ -81,20 +81,20 @@ h1, h2, h3, h4, h5, h6 { font-weight: bold; }
|
||||
*/
|
||||
|
||||
a:link {
|
||||
color: #5E2612;
|
||||
text-decoration: none;
|
||||
color: #5E2612;
|
||||
text-decoration: none;
|
||||
}
|
||||
a:visited {
|
||||
color: #5E2612;
|
||||
text-decoration: none;
|
||||
color: #5E2612;
|
||||
text-decoration: none;
|
||||
}
|
||||
a:hover { /*this effect is not shown in NN4.xx*/
|
||||
color: #999999;
|
||||
color: #999999;
|
||||
text-decoration: underline;
|
||||
}
|
||||
a:active {/*colour in NN4.xx is red*/
|
||||
color: #5E2612;
|
||||
text-decoration: underline;
|
||||
a:active {/*colour in NN4.xx is red*/
|
||||
color: #5E2612;
|
||||
text-decoration: underline;
|
||||
}
|
||||
a.blue {
|
||||
color: blue;
|
||||
@@ -274,8 +274,6 @@ div#shutdown{ text-align: center; vertical-align: middle; }
|
||||
#cloud { margin: 0; }
|
||||
#cloud li { display: inline; }
|
||||
|
||||
|
||||
|
||||
.ir { display: block; text-indent: -999em; overflow: hidden; background-repeat: no-repeat; text-align: left; direction: ltr; }
|
||||
.hidden { display: none; visibility: hidden; }
|
||||
.visuallyhidden { border: 0; clip: rect(0 0 0 0); height: 1px; margin: -1px; overflow: hidden; padding: 0; position: absolute; width: 1px; }
|
||||
@@ -303,11 +301,11 @@ div#shutdown{ text-align: center; vertical-align: middle; }
|
||||
|
||||
@media print {
|
||||
* { background: transparent !important; color: black !important; text-shadow: none !important; filter:none !important;
|
||||
-ms-filter: none !important; }
|
||||
-ms-filter: none !important; }
|
||||
a, a:visited { color: #444 !important; text-decoration: underline; }
|
||||
a[href]:after { content: " (" attr(href) ")"; }
|
||||
abbr[title]:after { content: " (" attr(title) ")"; }
|
||||
.ir a:after, a[href^="javascript:"]:after, a[href^="#"]:after { content: ""; }
|
||||
.ir a:after, a[href^="javascript:"]:after, a[href^="#"]:after { content: ""; }
|
||||
pre, blockquote { border: 1px solid #999; page-break-inside: avoid; }
|
||||
thead { display: table-header-group; }
|
||||
tr, img { page-break-inside: avoid; }
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<a href="home" class="back">« Back to overview</a>
|
||||
</%def>
|
||||
|
||||
@@ -49,13 +49,14 @@
|
||||
<a href="http://musicbrainz.org/artist/${artist['ArtistID']}">${artist['ArtistName']}</a>
|
||||
%if artist['Status'] == 'Loading':
|
||||
<h3><i>(Album information for this artist is currently being loaded)</i></h3>
|
||||
%endif
|
||||
%endif
|
||||
</h1>
|
||||
<div id="artistBio"></div>
|
||||
<div id="artistBio"></div>
|
||||
</div>
|
||||
<ul id="artistCalendar" style="display:none;"></ul>
|
||||
<form action="markAlbums" method="get" id="markAlbums">
|
||||
<input type="hidden" name="ArtistID" value=${artist['ArtistID']}>
|
||||
<div id="markalbum">Mark selected albums as
|
||||
<div id="markalbum">Mark selected albums as
|
||||
<select name="action" onChange="doAjaxCall('markAlbums',$(this),'table',true);" data-error="You didn't select any albums">
|
||||
<option disabled="disabled" selected="selected">Choose...</option>
|
||||
<option value="Wanted">Wanted</option>
|
||||
@@ -91,10 +92,10 @@
|
||||
else:
|
||||
grade = 'A'
|
||||
|
||||
myDB = db.DBConnection()
|
||||
myDB = db.DBConnection()
|
||||
totaltracks = len(myDB.select('SELECT TrackTitle from tracks WHERE AlbumID=?', [album['AlbumID']]))
|
||||
havetracks = len(myDB.select('SELECT TrackTitle from tracks WHERE AlbumID=? AND Location IS NOT NULL', [album['AlbumID']])) + len(myDB.select('SELECT TrackTitle from have WHERE ArtistName like ? AND AlbumTitle LIKE ? AND Matched = "Failed"', [album['ArtistName'], album['AlbumTitle']]))
|
||||
|
||||
|
||||
try:
|
||||
percent = (havetracks*100.0)/totaltracks
|
||||
if percent > 100:
|
||||
@@ -102,7 +103,7 @@
|
||||
except (ZeroDivisionError, TypeError):
|
||||
percent = 0
|
||||
totaltracks = '?'
|
||||
|
||||
|
||||
avgbitrate = myDB.action("SELECT AVG(BitRate) FROM tracks WHERE AlbumID=?", [album['AlbumID']]).fetchone()[0]
|
||||
if avgbitrate:
|
||||
bitrate = str(int(avgbitrate)/1000) + ' kbps'
|
||||
@@ -143,7 +144,7 @@
|
||||
<td id="have"><span title="${percent}"><span><div class="progress-container"><div style="width:${percent}%"><div class="havetracks">${havetracks}/${totaltracks}</div></div></div></td>
|
||||
<td id="bitrate">${bitrate}</td>
|
||||
<td id="albumformat">${albumformat}</td>
|
||||
</tr>
|
||||
</tr>
|
||||
%endfor
|
||||
</tbody>
|
||||
</table>
|
||||
@@ -159,7 +160,7 @@
|
||||
|
||||
<%def name="javascriptIncludes()">
|
||||
<script src="js/libs/jquery.dataTables.min.js"></script>
|
||||
|
||||
|
||||
<script>
|
||||
function getArtistBio() {
|
||||
var id = "${artist['ArtistID']}";
|
||||
@@ -167,7 +168,40 @@
|
||||
getInfo(elem,id,'artist');
|
||||
}
|
||||
|
||||
|
||||
|
||||
function getArtistsCalendar() {
|
||||
var template, calendarDomNode;
|
||||
|
||||
calendarDomNode = $("#artistCalendar");
|
||||
|
||||
template = '<li><a target="_blank" href="URI"><span class="sk-name">NAME</span><span class="sk-location">LOC</span></a></li>';
|
||||
|
||||
$.getJSON("http://api.songkick.com/api/3.0/artists/mbid:${artist['ArtistID']}/calendar.json?apikey=${headphones.SONGKICK_APIKEY}&jsoncallback=?",
|
||||
function(data){
|
||||
if (data['resultsPage'].totalEntries >= 1) {
|
||||
var tourDate;
|
||||
|
||||
calendarDomNode.show();
|
||||
$("#artistImg").addClass('on-tour');
|
||||
|
||||
jQuery.each( data['resultsPage'].results.event, function( i, event ) {
|
||||
tourDate = template;
|
||||
tourDate = tourDate.replace('URI',event.uri);
|
||||
tourDate = tourDate.replace('NAME',event.displayName);
|
||||
tourDate = tourDate.replace('LOC',event.location.city);
|
||||
|
||||
calendarDomNode.append(tourDate);
|
||||
});
|
||||
|
||||
calendarDomNode.append('<li><img src="interfaces/default/images/songkick.png" alt="concerts by songkick" class="sk-logo" /></li>');
|
||||
|
||||
}
|
||||
console.warn(data);
|
||||
console.warn(data['resultsPage'].totalEntries);
|
||||
// data is JSON response object
|
||||
});
|
||||
}
|
||||
|
||||
function initThisPage() {
|
||||
$('#menu_link_getextra').click(function() {
|
||||
$('#dialog').dialog();
|
||||
@@ -176,7 +210,7 @@
|
||||
$('#menu_link_modifyextra').click(function() {
|
||||
$('#dialog').dialog();
|
||||
});
|
||||
|
||||
|
||||
%if artist['Status'] == 'Loading':
|
||||
showMsg("Getting artist information",true);
|
||||
%endif
|
||||
@@ -195,7 +229,7 @@
|
||||
],
|
||||
"aoColumnDefs": [
|
||||
{ 'bSortable': false, 'aTargets': [ 0,1 ] }
|
||||
],
|
||||
],
|
||||
"oLanguage": {
|
||||
"sLengthMenu":"Show _MENU_ albums per page",
|
||||
"sEmptyTable": "No album information available",
|
||||
@@ -206,17 +240,18 @@
|
||||
"bPaginate": false,
|
||||
"aaSorting": [[4, 'asc'],[3,'desc']]
|
||||
|
||||
});
|
||||
});
|
||||
resetFilters("albums");
|
||||
setTimeout(function(){
|
||||
initFancybox();
|
||||
},1500)
|
||||
}
|
||||
|
||||
$(document).ready(function() {
|
||||
|
||||
$(document).ready(function() {
|
||||
initActions();
|
||||
initThisPage();
|
||||
getArtistBio();
|
||||
getArtistsCalendar();
|
||||
});
|
||||
|
||||
</script>
|
||||
|
||||
277
data/interfaces/default/artist.html.orig
Normal file
277
data/interfaces/default/artist.html.orig
Normal file
@@ -0,0 +1,277 @@
|
||||
<%inherit file="base.html"/>
|
||||
<%!
|
||||
from headphones import db
|
||||
import headphones
|
||||
import string
|
||||
%>
|
||||
|
||||
<%def name="headerIncludes()">
|
||||
<div id="subhead_container">
|
||||
<<<<<<< HEAD
|
||||
<div id="subhead_menu">
|
||||
<a id="menu_link_refresh" onclick="doAjaxCall('refreshArtist?ArtistID=${artist['ArtistID']}', $(this)),'table'" href="#" data-success="'${artist['ArtistName']}' is being refreshed">Refresh Artist</a>
|
||||
<a id="menu_link_delete" href="deleteArtist?ArtistID=${artist['ArtistID']}">Delete Artist</a>
|
||||
=======
|
||||
<div id="subhead_menu">
|
||||
<a id="menu_link_refresh" onclick="doAjaxCall('refreshArtist?ArtistID=${artist['ArtistID']}', $(this)),'table'" href="#" data-success="'${artist['ArtistName']}' is being refreshed"><i class="fa fa-refresh"></i> Refresh Artist</a>
|
||||
<a id="menu_link_delete" href="deleteArtist?ArtistID=${artist['ArtistID']}"><i class="fa fa-trash-o"></i> Delete Artist</a>
|
||||
>>>>>>> 1c9f323... convert all icons to font-awesome vector based / retina compatible icons
|
||||
%if artist['Status'] == 'Paused':
|
||||
<a id="menu_link_resume" href="#" onclick="doAjaxCall('resumeArtist?ArtistID=${artist['ArtistID']}',$(this),true)" data-success="${artist['ArtistName']} resumed"><i class="fa fa-play"></i> Resume Artist</a>
|
||||
%else:
|
||||
<a id="menu_link_pauze" href="#" onclick="doAjaxCall('pauseArtist?ArtistID=${artist['ArtistID']}',$(this),true)" data-success="${artist['ArtistName']} paused"><i class="fa fa-pause"></i> Pause Artist</a>
|
||||
%endif
|
||||
%if artist['IncludeExtras']:
|
||||
<<<<<<< HEAD
|
||||
<a id="menu_link_removeextra" href="#" onclick="doAjaxCall('removeExtras?ArtistID=${artist['ArtistID']}',$(this),true)" data-success="Extras removed for ${artist['ArtistName']}">Remove Extras</a>
|
||||
<a class="menu_link_edit" id="menu_link_modifyextra" href="#">Modify Extras</a>
|
||||
%else:
|
||||
<a id="menu_link_getextra" href="#">Get Extras</a>
|
||||
=======
|
||||
<a id="menu_link_removeextra" href="#" onclick="doAjaxCall('removeExtras?ArtistID=${artist['ArtistID']}',$(this),true)" data-success="Extras removed for ${artist['ArtistName']}"><i class="fa fa-minus"></i> Remove Extras</a>
|
||||
<a class="menu_link_edit" id="menu_link_modifyextra" href="#"><i class="fa fa-pencil"></i> Modify Extras</a>
|
||||
%else:
|
||||
<a id="menu_link_getextra" href="#"><i class="fa fa-plus"></i> Get Extras</a>
|
||||
>>>>>>> 1c9f323... convert all icons to font-awesome vector based / retina compatible icons
|
||||
%endif
|
||||
<div id="dialog" title="Choose Which Extras to Fetch" style="display:none" class="configtable">
|
||||
<form action="getExtras" method="get" class="form">
|
||||
<input type="hidden" name="ArtistID" value="${artist['ArtistID']}">
|
||||
<input type="hidden" name="newstyle" value="true">
|
||||
%for extra in extras:
|
||||
<input type="checkbox" id="${extra}" name="${extra}" value="1" ${extras[extra]} />${string.capwords(extra)}<br>
|
||||
%endfor
|
||||
<br>
|
||||
<input id="submit" type="submit" value="Fetch Extras">
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<a href="home" class="back">« Back to overview</a>
|
||||
</%def>
|
||||
|
||||
<%def name="body()">
|
||||
<div id="artistheader" class="clearfix">
|
||||
<div id="artistImg">
|
||||
<img id="artistImage" class="albumArt" alt="" src="artwork/artist/${artist['ArtistID']}"/>
|
||||
</div>
|
||||
<<<<<<< HEAD
|
||||
<h1>
|
||||
%if artist['Status'] == 'Loading':
|
||||
<img src="interfaces/default/images/loader_black.gif" alt="loading" style="float:left; margin-right: 5px;"/>
|
||||
=======
|
||||
<h1>
|
||||
%if artist['Status'] == 'Loading':
|
||||
<i class="fa fa-refresh fa-spin"></i>
|
||||
>>>>>>> 1c9f323... convert all icons to font-awesome vector based / retina compatible icons
|
||||
%endif
|
||||
<a href="http://musicbrainz.org/artist/${artist['ArtistID']}">${artist['ArtistName']}</a>
|
||||
%if artist['Status'] == 'Loading':
|
||||
<h3><i>(Album information for this artist is currently being loaded)</i></h3>
|
||||
%endif
|
||||
</h1>
|
||||
<div id="artistBio"></div>
|
||||
</div>
|
||||
<ul id="artistCalendar" style="display:none;"></ul>
|
||||
<form action="markAlbums" method="get" id="markAlbums">
|
||||
<input type="hidden" name="ArtistID" value=${artist['ArtistID']}>
|
||||
<div id="markalbum">Mark selected albums as
|
||||
<select name="action" onChange="doAjaxCall('markAlbums',$(this),'table',true);" data-error="You didn't select any albums">
|
||||
<option disabled="disabled" selected="selected">Choose...</option>
|
||||
<option value="Wanted">Wanted</option>
|
||||
<option value="WantedNew">Wanted (new only)</option>
|
||||
<option value="Skipped">Skipped</option>
|
||||
<option value="Downloaded">Downloaded</option>
|
||||
</select>
|
||||
<input type="hidden" value="Go">
|
||||
</div>
|
||||
<table class="display" id="album_table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th id="select"><input type="checkbox" onClick="toggle(this)" /></th>
|
||||
<th id="albumart"></th>
|
||||
<th id="albumname">Name</th>
|
||||
<th id="reldate">Date</th>
|
||||
<th id="type">Type</th>
|
||||
<th id="status">Status</th>
|
||||
<th id="have">Have</th>
|
||||
<th id="bitrate">Bitrate</th>
|
||||
<th id="albumformat">Format</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
%for album in albums:
|
||||
<%
|
||||
if album['Status'] == 'Skipped':
|
||||
grade = 'Z'
|
||||
elif album['Status'] == 'Wanted':
|
||||
grade = 'X'
|
||||
elif album['Status'] == 'Snatched':
|
||||
grade = 'C'
|
||||
else:
|
||||
grade = 'A'
|
||||
|
||||
myDB = db.DBConnection()
|
||||
totaltracks = len(myDB.select('SELECT TrackTitle from tracks WHERE AlbumID=?', [album['AlbumID']]))
|
||||
havetracks = len(myDB.select('SELECT TrackTitle from tracks WHERE AlbumID=? AND Location IS NOT NULL', [album['AlbumID']])) + len(myDB.select('SELECT TrackTitle from have WHERE ArtistName like ? AND AlbumTitle LIKE ? AND Matched = "Failed"', [album['ArtistName'], album['AlbumTitle']]))
|
||||
|
||||
try:
|
||||
percent = (havetracks*100.0)/totaltracks
|
||||
if percent > 100:
|
||||
percent = 100
|
||||
except (ZeroDivisionError, TypeError):
|
||||
percent = 0
|
||||
totaltracks = '?'
|
||||
|
||||
avgbitrate = myDB.action("SELECT AVG(BitRate) FROM tracks WHERE AlbumID=?", [album['AlbumID']]).fetchone()[0]
|
||||
if avgbitrate:
|
||||
bitrate = str(int(avgbitrate)/1000) + ' kbps'
|
||||
else:
|
||||
bitrate = ''
|
||||
|
||||
albumformatcount = myDB.action("SELECT COUNT(DISTINCT Format) FROM tracks WHERE AlbumID=?", [album['AlbumID']]).fetchone()[0]
|
||||
if albumformatcount == 1:
|
||||
albumformat = myDB.action("SELECT DISTINCT Format FROM tracks WHERE AlbumID=?", [album['AlbumID']]).fetchone()[0]
|
||||
elif albumformatcount > 1:
|
||||
albumformat = 'Mixed'
|
||||
else:
|
||||
albumformat = ''
|
||||
|
||||
lossy_formats = [str.upper(fmt) for fmt in headphones.LOSSY_MEDIA_FORMATS]
|
||||
|
||||
%>
|
||||
<tr class="grade${grade}">
|
||||
<td id="select"><input type="checkbox" name="${album['AlbumID']}" class="checkbox" /></td>
|
||||
<td id="albumart"><img class="albumArt" id="${album['AlbumID']}" src="artwork/thumbs/album/${album['AlbumID']}" height="64" width="64"></td>
|
||||
<td id="albumname"><a href="albumPage?AlbumID=${album['AlbumID']}">${album['AlbumTitle']}</a></td>
|
||||
<td id="reldate">${album['ReleaseDate']}</td>
|
||||
<td id="type">${album['Type']}</td>
|
||||
<td id="status">${album['Status']}
|
||||
%if album['Status'] == 'Skipped':
|
||||
[<a href="#" onclick="doAjaxCall('queueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}',$(this),'table')" data-success="'${album['AlbumTitle']}' added to Wanted list">want</a>]
|
||||
%elif (album['Status'] == 'Wanted' or album['Status'] == 'Wanted Lossless'):
|
||||
[<a href="#" onclick="doAjaxCall('unqueueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}',$(this),'table')" data-success="'${album['AlbumTitle']}' skipped">skip</a>]
|
||||
%else:
|
||||
[<a href="#" onclick="doAjaxCall('queueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}', $(this),'table')" data-success="Retrying the same version of '${album['AlbumTitle']}'" title="Retry the same download again">retry</a>][<a href="#" onclick="doAjaxCall('queueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}&new=True', $(this),'table')" title="Try a new download, skipping all previously tried nzbs" data-success="Downloading new version for '${album['AlbumTitle']}'" data-success="Looking for a new version of '${album['AlbumTitle']}'">new</a>]
|
||||
%endif
|
||||
%if albumformat in lossy_formats and album['Status'] == 'Skipped':
|
||||
[<a id="wantlossless" href="#" onclick="doAjaxCall('queueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}&lossless=True', $(this),'table')" data-success="Lossless version of '${album['AlbumTitle']}' added to queue">want lossless</a>]
|
||||
%elif albumformat in lossy_formats and (album['Status'] == 'Snatched' or album['Status'] == 'Downloaded'):
|
||||
[<a id="wantlossless" href="#" onclick="doAjaxCall('queueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}&lossless=True', $(this),'table')" data-success="Retrying the same lossless version of '${album['AlbumTitle']}'">retry lossless</a>]
|
||||
%endif
|
||||
</td>
|
||||
<td id="have"><span title="${percent}"><span><div class="progress-container"><div style="width:${percent}%"><div class="havetracks">${havetracks}/${totaltracks}</div></div></div></td>
|
||||
<td id="bitrate">${bitrate}</td>
|
||||
<td id="albumformat">${albumformat}</td>
|
||||
</tr>
|
||||
%endfor
|
||||
</tbody>
|
||||
</table>
|
||||
</form>
|
||||
</%def>
|
||||
|
||||
<%def name="headIncludes()">
|
||||
<link rel="stylesheet" href="interfaces/default/css/data_table.css">
|
||||
%if artist['Status'] == 'Loading':
|
||||
<meta http-equiv="refresh" content="5">
|
||||
%endif
|
||||
</%def>
|
||||
|
||||
<%def name="javascriptIncludes()">
|
||||
<script src="js/libs/jquery.dataTables.min.js"></script>
|
||||
|
||||
<script>
|
||||
function getArtistBio() {
|
||||
var id = "${artist['ArtistID']}";
|
||||
var elem = $("#artistBio");
|
||||
getInfo(elem,id,'artist');
|
||||
}
|
||||
|
||||
|
||||
function getArtistsCalendar() {
|
||||
var template, calendarDomNode;
|
||||
|
||||
calendarDomNode = $("#artistCalendar");
|
||||
|
||||
template = '<li><a target="_blank" href="URI"><span class="sk-name">NAME</span><span class="sk-location">LOC</span></a></li>';
|
||||
|
||||
$.getJSON("http://api.songkick.com/api/3.0/artists/mbid:${artist['ArtistID']}/calendar.json?apikey=${headphones.SONGKICK_APIKEY}&jsoncallback=?",
|
||||
function(data){
|
||||
if (data['resultsPage'].totalEntries >= 1) {
|
||||
var tourDate;
|
||||
|
||||
calendarDomNode.show();
|
||||
$("#artistImg").addClass('on-tour');
|
||||
|
||||
jQuery.each( data['resultsPage'].results.event, function( i, event ) {
|
||||
tourDate = template;
|
||||
tourDate = tourDate.replace('URI',event.uri);
|
||||
tourDate = tourDate.replace('NAME',event.displayName);
|
||||
tourDate = tourDate.replace('LOC',event.location.city);
|
||||
|
||||
calendarDomNode.append(tourDate);
|
||||
});
|
||||
|
||||
calendarDomNode.append('<li><img src="interfaces/default/images/songkick.png" alt="concerts by songkick" class="sk-logo" /></li>');
|
||||
|
||||
}
|
||||
console.warn(data);
|
||||
console.warn(data['resultsPage'].totalEntries);
|
||||
// data is JSON response object
|
||||
});
|
||||
}
|
||||
|
||||
function initThisPage() {
|
||||
$('#menu_link_getextra').click(function() {
|
||||
$('#dialog').dialog();
|
||||
return false;
|
||||
});
|
||||
$('#menu_link_modifyextra').click(function() {
|
||||
$('#dialog').dialog();
|
||||
});
|
||||
|
||||
%if artist['Status'] == 'Loading':
|
||||
showMsg("Getting artist information",true);
|
||||
%endif
|
||||
$('#album_table').dataTable({
|
||||
"bDestroy": true,
|
||||
"aoColumns": [
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
{ "sType": "date" },
|
||||
null,
|
||||
null,
|
||||
{ "sType": "title-numeric"},
|
||||
null,
|
||||
null
|
||||
],
|
||||
"aoColumnDefs": [
|
||||
{ 'bSortable': false, 'aTargets': [ 0,1 ] }
|
||||
],
|
||||
"oLanguage": {
|
||||
"sLengthMenu":"Show _MENU_ albums per page",
|
||||
"sEmptyTable": "No album information available",
|
||||
"sInfo":"Showing _TOTAL_ albums",
|
||||
"sInfoEmpty":"Showing 0 to 0 of 0 albums",
|
||||
"sInfoFiltered":"(filtered from _MAX_ total albums)",
|
||||
"sSearch": ""},
|
||||
"bPaginate": false,
|
||||
"aaSorting": [[4, 'asc'],[3,'desc']]
|
||||
|
||||
});
|
||||
resetFilters("albums");
|
||||
setTimeout(function(){
|
||||
initFancybox();
|
||||
},1500)
|
||||
}
|
||||
|
||||
$(document).ready(function() {
|
||||
initActions();
|
||||
initThisPage();
|
||||
getArtistBio();
|
||||
getArtistsCalendar();
|
||||
});
|
||||
|
||||
</script>
|
||||
</%def>
|
||||
@@ -674,7 +674,7 @@
|
||||
</div>
|
||||
</fieldset>
|
||||
</div>
|
||||
|
||||
|
||||
<div id="xldproperties">
|
||||
<div class="row">
|
||||
<label>XLD Profile</label>
|
||||
@@ -758,7 +758,7 @@
|
||||
<input type="text" name="cache_dir" value="${config['cache_dir']}" size="50">
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
|
||||
<h2>Notifications</h2>
|
||||
<fieldset>
|
||||
<h3>Prowl</h3>
|
||||
@@ -858,7 +858,7 @@
|
||||
nma_priority_selected = 'selected'
|
||||
else:
|
||||
nma_priority_selected = ''
|
||||
|
||||
|
||||
if x == -2:
|
||||
nma_priority_value = 'Very Low'
|
||||
elif x == -1:
|
||||
@@ -978,6 +978,14 @@
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
<fieldset>
|
||||
<legend>Songkick</legend>
|
||||
<div class="row">
|
||||
<label>API Key:</label>
|
||||
<input type="text" name="songkick_apikey" value="${config['songkick_apikey']}" size="50">
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
/* Variables *//* Mixins */
|
||||
/* Variables */
|
||||
/* Mixins */
|
||||
html,
|
||||
body,
|
||||
div,
|
||||
@@ -158,7 +159,7 @@ img.albumArt {
|
||||
float: left;
|
||||
min-height: 100%;
|
||||
min-width: 100%;
|
||||
max-width: 300px;
|
||||
max-width: 250px;
|
||||
max-height: 300px;
|
||||
position: relative;
|
||||
}
|
||||
@@ -179,8 +180,8 @@ table th {
|
||||
background-image: linear-gradient(#fafafa, #eaeaea) !important;
|
||||
background-image: -webkit-linear-gradient(#fafafa, #eaeaea) !important;
|
||||
background-image: -o-linear-gradient(#fafafa, #eaeaea) !important;
|
||||
filter: progid:dximagetransform.microsoft.gradient(startColorstr=#fafafa, endColorstr=#eaeaea) !important;
|
||||
-ms-filter: progid:dximagetransform.microsoft.gradient(startColorstr=#fafafa, endColorstr=#eaeaea) !important;
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#fafafa, endColorstr=#eaeaea) !important;
|
||||
-ms-filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#fafafa, endColorstr=#eaeaea) !important;
|
||||
border-left: 1px solid #E0E0E0;
|
||||
-moz-box-shadow: 1px 0 0 #fafafa;
|
||||
-webkit-box-shadow: 1px 0 0 #fafafa;
|
||||
@@ -204,8 +205,8 @@ table th.sorting_asc {
|
||||
background-image: linear-gradient(#fafbfd, #dce6ef) !important;
|
||||
background-image: -webkit-linear-gradient(#fafbfd, #dce6ef) !important;
|
||||
background-image: -o-linear-gradient(#fafbfd, #dce6ef) !important;
|
||||
filter: progid:dximagetransform.microsoft.gradient(startColorstr=#fafafa, endColorstr=#eaeaea) !important;
|
||||
-ms-filter: progid:dximagetransform.microsoft.gradient(startColorstr=#fafafa, endColorstr=#eaeaea) !important;
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#fafbfd, endColorstr=#dce6ef) !important;
|
||||
-ms-filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#fafbfd, endColorstr=#dce6ef) !important;
|
||||
color: #4183c4;
|
||||
}
|
||||
table td {
|
||||
@@ -296,23 +297,6 @@ input[type=button] {
|
||||
text-decoration: none;
|
||||
text-shadow: 0 -1px 1px rgba(0, 0, 0, 0.25);
|
||||
}
|
||||
.configsubmit {
|
||||
-moz-border-radius: 5px;
|
||||
-webkit-border-radius: 5px;
|
||||
border-radius: 5px;
|
||||
background: #222222 url("../images/button.png") repeat-x;
|
||||
border: 0;
|
||||
border-bottom: 1px solid rgba(0, 0, 0, 0.25);
|
||||
color: #fff;
|
||||
cursor: pointer;
|
||||
margin-left: 75%;
|
||||
margin-top: 5px;
|
||||
text-align: center;
|
||||
width: 200px;
|
||||
padding: 4px 10px;
|
||||
text-decoration: none;
|
||||
text-shadow: 0 -1px 1px rgba(0, 0, 0, 0.25);
|
||||
}
|
||||
form legend,
|
||||
form h2 {
|
||||
font-size: 16px;
|
||||
@@ -365,7 +349,7 @@ form .row input[type=password] {
|
||||
line-height: normal;
|
||||
max-width: 230px;
|
||||
margin-right: 5px;
|
||||
padding: 2px 5px;
|
||||
padding: 3px 5px;
|
||||
}
|
||||
form .row small {
|
||||
color: #999;
|
||||
@@ -378,28 +362,24 @@ form .row small {
|
||||
form .left label {
|
||||
float: none;
|
||||
line-height: normal;
|
||||
margin-bottom: 5px;
|
||||
padding-top: 2px;
|
||||
margin-bottom: 10px;
|
||||
padding-top: 1px;
|
||||
width: auto;
|
||||
}
|
||||
form .left input {
|
||||
float: left;
|
||||
margin-bottom: 5px;
|
||||
clear: left;
|
||||
display: block;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
form .radio label {
|
||||
float: none;
|
||||
line-height: normal;
|
||||
margin-bottom: 5px;
|
||||
padding-top: 0px;
|
||||
margin-bottom: 10px;
|
||||
padding-top: 1px;
|
||||
width: auto;
|
||||
}
|
||||
form .radio input {
|
||||
float: left;
|
||||
margin-bottom: 5px;
|
||||
clear: left;
|
||||
display: block;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
form .radio small {
|
||||
display: inline !important;
|
||||
@@ -413,15 +393,6 @@ form .checkbox small {
|
||||
margin: 0 !important;
|
||||
width: auto;
|
||||
}
|
||||
.override-float {
|
||||
float: none !important;
|
||||
margin-bottom: 0px !important;
|
||||
clear: none !important;
|
||||
display: inline !important;
|
||||
font-size: 10px;
|
||||
line-height: 10px;
|
||||
height: 10px;
|
||||
}
|
||||
ul,
|
||||
ol {
|
||||
margin-left: 2em;
|
||||
@@ -468,8 +439,8 @@ ul#nav li a:hover {
|
||||
background-image: linear-gradient(#f1f1f1, #e0e0e0) !important;
|
||||
background-image: -webkit-linear-gradient(#f1f1f1, #e0e0e0) !important;
|
||||
background-image: -o-linear-gradient(#f1f1f1, #e0e0e0) !important;
|
||||
filter: progid:dximagetransform.microsoft.gradient(startColorstr=#fafafa, endColorstr=#eaeaea) !important;
|
||||
-ms-filter: progid:dximagetransform.microsoft.gradient(startColorstr=#fafafa, endColorstr=#eaeaea) !important;
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#f1f1f1, endColorstr=#e0e0e0) !important;
|
||||
-ms-filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#f1f1f1, endColorstr=#e0e0e0) !important;
|
||||
border: 1px solid #DDDDDD;
|
||||
-moz-border-radius: 3px;
|
||||
-webkit-border-radius: 3px;
|
||||
@@ -505,8 +476,8 @@ header {
|
||||
background-image: linear-gradient(#fafafa, #eaeaea) !important;
|
||||
background-image: -webkit-linear-gradient(#fafafa, #eaeaea) !important;
|
||||
background-image: -o-linear-gradient(#fafafa, #eaeaea) !important;
|
||||
filter: progid:dximagetransform.microsoft.gradient(startColorstr=#fafafa, endColorstr=#eaeaea) !important;
|
||||
-ms-filter: progid:dximagetransform.microsoft.gradient(startColorstr=#fafafa, endColorstr=#eaeaea) !important;
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#fafafa, endColorstr=#eaeaea) !important;
|
||||
-ms-filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#fafafa, endColorstr=#eaeaea) !important;
|
||||
border-bottom: 1px solid #CACACA;
|
||||
-moz-box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
|
||||
-webkit-box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
|
||||
@@ -532,7 +503,7 @@ header #logo {
|
||||
}
|
||||
footer {
|
||||
display: table;
|
||||
margin: 40px auto 50px auto;
|
||||
margin: 60px auto 50px auto;
|
||||
width: 960px;
|
||||
padding-top: 10px;
|
||||
border-top: 1px solid #EEE;
|
||||
@@ -551,8 +522,8 @@ footer {
|
||||
background-image: linear-gradient(#fcf5c2, #fff6a9) !important;
|
||||
background-image: -webkit-linear-gradient(#fcf5c2, #fff6a9) !important;
|
||||
background-image: -o-linear-gradient(#fcf5c2, #fff6a9) !important;
|
||||
filter: progid:dximagetransform.microsoft.gradient(startColorstr=#fafafa, endColorstr=#eaeaea) !important;
|
||||
-ms-filter: progid:dximagetransform.microsoft.gradient(startColorstr=#fafafa, endColorstr=#eaeaea) !important;
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#fcf5c2, endColorstr=#fff6a9) !important;
|
||||
-ms-filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#fcf5c2, endColorstr=#fff6a9) !important;
|
||||
display: inline-block;
|
||||
padding: 5px 10px;
|
||||
margin-top: 10px;
|
||||
@@ -563,37 +534,14 @@ footer {
|
||||
position: relative;
|
||||
top: 4px;
|
||||
}
|
||||
.configmessage {
|
||||
-moz-border-radius: 10px;
|
||||
-webkit-border-radius: 10px;
|
||||
border-radius: 10px;
|
||||
background-image: -moz-linear-gradient(#fcf5c2, #fff6a9) !important;
|
||||
background-image: linear-gradient(#fcf5c2, #fff6a9) !important;
|
||||
background-image: -webkit-linear-gradient(#fcf5c2, #fff6a9) !important;
|
||||
background-image: -o-linear-gradient(#fcf5c2, #fff6a9) !important;
|
||||
filter: progid:dximagetransform.microsoft.gradient(startColorstr=#fafafa, endColorstr=#eaeaea) !important;
|
||||
-ms-filter: progid:dximagetransform.microsoft.gradient(startColorstr=#fafafa, endColorstr=#eaeaea) !important;
|
||||
text-align: center;
|
||||
padding: 3px 5px;
|
||||
width: 400px;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
.configmessage .ui-icon {
|
||||
float: left;
|
||||
margin-right: 5px;
|
||||
position: relative;
|
||||
top: 4px;
|
||||
}
|
||||
#ajaxMsg {
|
||||
border: 1px solid #cccccc;
|
||||
background-image: -moz-linear-gradient(#ffffff, #eeeeee) !important;
|
||||
background-image: linear-gradient(#ffffff, #eeeeee) !important;
|
||||
background-image: -webkit-linear-gradient(#ffffff, #eeeeee) !important;
|
||||
background-image: -o-linear-gradient(#ffffff, #eeeeee) !important;
|
||||
filter: progid:dximagetransform.microsoft.gradient(startColorstr=#fafafa, endColorstr=#eaeaea) !important;
|
||||
-ms-filter: progid:dximagetransform.microsoft.gradient(startColorstr=#fafafa, endColorstr=#eaeaea) !important;
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff, endColorstr=#eeeeee) !important;
|
||||
-ms-filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff, endColorstr=#eeeeee) !important;
|
||||
-moz-border-radius: 7px;
|
||||
-webkit-border-radius: 7px;
|
||||
border-radius: 7px;
|
||||
@@ -631,8 +579,8 @@ footer {
|
||||
background-image: linear-gradient(#d3ffd7, #c2edc6) !important;
|
||||
background-image: -webkit-linear-gradient(#d3ffd7, #c2edc6) !important;
|
||||
background-image: -o-linear-gradient(#d3ffd7, #c2edc6) !important;
|
||||
filter: progid:dximagetransform.microsoft.gradient(startColorstr=#fafafa, endColorstr=#eaeaea) !important;
|
||||
-ms-filter: progid:dximagetransform.microsoft.gradient(startColorstr=#fafafa, endColorstr=#eaeaea) !important;
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#d3ffd7, endColorstr=#c2edc6) !important;
|
||||
-ms-filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#d3ffd7, endColorstr=#c2edc6) !important;
|
||||
padding: 15px 10px;
|
||||
text-align: left;
|
||||
}
|
||||
@@ -641,8 +589,8 @@ footer {
|
||||
background-image: linear-gradient(#ffd3d3, #edc4c4) !important;
|
||||
background-image: -webkit-linear-gradient(#ffd3d3, #edc4c4) !important;
|
||||
background-image: -o-linear-gradient(#ffd3d3, #edc4c4) !important;
|
||||
filter: progid:dximagetransform.microsoft.gradient(startColorstr=#fafafa, endColorstr=#eaeaea) !important;
|
||||
-ms-filter: progid:dximagetransform.microsoft.gradient(startColorstr=#fafafa, endColorstr=#eaeaea) !important;
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffd3d3, endColorstr=#edc4c4) !important;
|
||||
-ms-filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffd3d3, endColorstr=#edc4c4) !important;
|
||||
padding: 15px 10px;
|
||||
text-align: left;
|
||||
}
|
||||
@@ -659,8 +607,8 @@ footer {
|
||||
background-image: linear-gradient(#ffffff, #eeeeee) !important;
|
||||
background-image: -webkit-linear-gradient(#ffffff, #eeeeee) !important;
|
||||
background-image: -o-linear-gradient(#ffffff, #eeeeee) !important;
|
||||
filter: progid:dximagetransform.microsoft.gradient(startColorstr=#fafafa, endColorstr=#eaeaea) !important;
|
||||
-ms-filter: progid:dximagetransform.microsoft.gradient(startColorstr=#fafafa, endColorstr=#eaeaea) !important;
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff, endColorstr=#eeeeee) !important;
|
||||
-ms-filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff, endColorstr=#eeeeee) !important;
|
||||
-moz-border-radius: 7px;
|
||||
-webkit-border-radius: 7px;
|
||||
border-radius: 7px;
|
||||
@@ -688,8 +636,8 @@ footer {
|
||||
background-image: linear-gradient(#fcf5c2, #fff6a9) !important;
|
||||
background-image: -webkit-linear-gradient(#fcf5c2, #fff6a9) !important;
|
||||
background-image: -o-linear-gradient(#fcf5c2, #fff6a9) !important;
|
||||
filter: progid:dximagetransform.microsoft.gradient(startColorstr=#fafafa, endColorstr=#eaeaea) !important;
|
||||
-ms-filter: progid:dximagetransform.microsoft.gradient(startColorstr=#fafafa, endColorstr=#eaeaea) !important;
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#fcf5c2, endColorstr=#fff6a9) !important;
|
||||
-ms-filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#fcf5c2, endColorstr=#fff6a9) !important;
|
||||
}
|
||||
#updatebar .msg {
|
||||
font-family: "Trebuchet MS", Helvetica, Arial, sans-serif;
|
||||
@@ -705,8 +653,8 @@ footer {
|
||||
background-image: linear-gradient(#d3ffd7, #c2edc6) !important;
|
||||
background-image: -webkit-linear-gradient(#d3ffd7, #c2edc6) !important;
|
||||
background-image: -o-linear-gradient(#d3ffd7, #c2edc6) !important;
|
||||
filter: progid:dximagetransform.microsoft.gradient(startColorstr=#fafafa, endColorstr=#eaeaea) !important;
|
||||
-ms-filter: progid:dximagetransform.microsoft.gradient(startColorstr=#fafafa, endColorstr=#eaeaea) !important;
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#d3ffd7, endColorstr=#c2edc6) !important;
|
||||
-ms-filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#d3ffd7, endColorstr=#c2edc6) !important;
|
||||
padding: 15px 10px;
|
||||
text-align: left;
|
||||
}
|
||||
@@ -715,8 +663,8 @@ footer {
|
||||
background-image: linear-gradient(#ffd3d3, #edc4c4) !important;
|
||||
background-image: -webkit-linear-gradient(#ffd3d3, #edc4c4) !important;
|
||||
background-image: -o-linear-gradient(#ffd3d3, #edc4c4) !important;
|
||||
filter: progid:dximagetransform.microsoft.gradient(startColorstr=#fafafa, endColorstr=#eaeaea) !important;
|
||||
-ms-filter: progid:dximagetransform.microsoft.gradient(startColorstr=#fafafa, endColorstr=#eaeaea) !important;
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffd3d3, endColorstr=#edc4c4) !important;
|
||||
-ms-filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffd3d3, endColorstr=#edc4c4) !important;
|
||||
padding: 15px 10px;
|
||||
text-align: left;
|
||||
}
|
||||
@@ -727,13 +675,6 @@ footer {
|
||||
position: relative;
|
||||
margin-right: 3px;
|
||||
}
|
||||
#dialog {
|
||||
padding: 40px;
|
||||
}
|
||||
#dialog input#submit {
|
||||
margin-left: 50px;
|
||||
margin-right: auto;
|
||||
}
|
||||
#subhead .back {
|
||||
float: left;
|
||||
margin-top: -25px;
|
||||
@@ -756,8 +697,8 @@ footer {
|
||||
background-image: linear-gradient(#f4f4f4, #e7e7e7) !important;
|
||||
background-image: -webkit-linear-gradient(#f4f4f4, #e7e7e7) !important;
|
||||
background-image: -o-linear-gradient(#f4f4f4, #e7e7e7) !important;
|
||||
filter: progid:dximagetransform.microsoft.gradient(startColorstr=#fafafa, endColorstr=#eaeaea) !important;
|
||||
-ms-filter: progid:dximagetransform.microsoft.gradient(startColorstr=#fafafa, endColorstr=#eaeaea) !important;
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#f4f4f4, endColorstr=#e7e7e7) !important;
|
||||
-ms-filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#f4f4f4, endColorstr=#e7e7e7) !important;
|
||||
font-family: "Helvetica Neue", Helvetica, Arial, Geneva, sans-serif;
|
||||
font-size: 12px;
|
||||
font-weight: normal;
|
||||
@@ -767,8 +708,8 @@ footer {
|
||||
background-image: linear-gradient(#599bdc, #3072b3) !important;
|
||||
background-image: -webkit-linear-gradient(#599bdc, #3072b3) !important;
|
||||
background-image: -o-linear-gradient(#599bdc, #3072b3) !important;
|
||||
filter: progid:dximagetransform.microsoft.gradient(startColorstr=#fafafa, endColorstr=#eaeaea) !important;
|
||||
-ms-filter: progid:dximagetransform.microsoft.gradient(startColorstr=#fafafa, endColorstr=#eaeaea) !important;
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#599bdc, endColorstr=#3072b3) !important;
|
||||
-ms-filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#599bdc, endColorstr=#3072b3) !important;
|
||||
color: #FFF;
|
||||
border-color: #518CC6 #518CC6 #2A65A0;
|
||||
}
|
||||
@@ -878,6 +819,18 @@ div#artistheader #artistImg {
|
||||
overflow: hidden;
|
||||
text-indent: -3000px;
|
||||
width: 200px;
|
||||
position: relative;
|
||||
}
|
||||
div#artistheader #artistImg.on-tour:before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: -2px;
|
||||
width: 100px;
|
||||
height: 100px;
|
||||
z-index: 2;
|
||||
background-image: url('../images/songkick_ribon.png');
|
||||
background-repeat: no-repeat;
|
||||
}
|
||||
div#artistheader #artistBio {
|
||||
font-size: 16px;
|
||||
@@ -894,6 +847,22 @@ div#artistheader h2 a {
|
||||
font-weight: bold;
|
||||
font-family: "Trebuchet MS", Helvetica, Arial, sans-serif;
|
||||
}
|
||||
#artistCalendar {
|
||||
list-style-type: none;
|
||||
margin: 0px;
|
||||
display: block;
|
||||
background: #FEF2EB;
|
||||
padding: 10px;
|
||||
font-size: 16px;
|
||||
}
|
||||
#artistCalendar .sk-location {
|
||||
display: inline-block;
|
||||
padding-left: 6px;
|
||||
}
|
||||
#artistCalendar .sk-logo {
|
||||
width: 100px;
|
||||
padding-top: 16px;
|
||||
}
|
||||
#artist_table {
|
||||
background-color: #FFF;
|
||||
padding: 20px;
|
||||
@@ -918,24 +887,16 @@ div#artistheader h2 a {
|
||||
#artist_table th#name {
|
||||
min-width: 200px;
|
||||
text-align: left;
|
||||
width:200px;
|
||||
}
|
||||
#artist_table th#album {
|
||||
min-width: 300px;
|
||||
text-align: left;
|
||||
}
|
||||
#artist_table th#albumart,
|
||||
#artist_table th#status{
|
||||
width:50px;
|
||||
}
|
||||
|
||||
#artist_table th#status,
|
||||
#artist_table th#albumart,
|
||||
#artist_table th#lastupdated {
|
||||
#artist_table th#albumart {
|
||||
min-width: 50px;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
#artist_table th#have {
|
||||
text-align: center;
|
||||
}
|
||||
@@ -944,13 +905,11 @@ div#artistheader h2 a {
|
||||
text-align: left;
|
||||
vertical-align: middle;
|
||||
}
|
||||
#artist_table td#status,
|
||||
#artist_table td#lastupdated {
|
||||
#artist_table td#status {
|
||||
min-width: 50px;
|
||||
text-align: left;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
#artist_table td#album {
|
||||
min-width: 300px;
|
||||
text-align: left;
|
||||
@@ -1183,8 +1142,8 @@ div#artistheader h2 a {
|
||||
background-image: linear-gradient(#a3e532, #90cc2a) !important;
|
||||
background-image: -webkit-linear-gradient(#a3e532, #90cc2a) !important;
|
||||
background-image: -o-linear-gradient(#a3e532, #90cc2a) !important;
|
||||
filter: progid:dximagetransform.microsoft.gradient(startColorstr=#fafafa, endColorstr=#eaeaea) !important;
|
||||
-ms-filter: progid:dximagetransform.microsoft.gradient(startColorstr=#fafafa, endColorstr=#eaeaea) !important;
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#a3e532, endColorstr=#90cc2a) !important;
|
||||
-ms-filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#a3e532, endColorstr=#90cc2a) !important;
|
||||
}
|
||||
.progress-container {
|
||||
background: #FFF;
|
||||
@@ -1195,13 +1154,13 @@ div#artistheader h2 a {
|
||||
padding: 1px;
|
||||
width: 100px;
|
||||
}
|
||||
.progress-container > div {
|
||||
.progress-container > div {
|
||||
background-image: -moz-linear-gradient(#a3e532, #90cc2a) !important;
|
||||
background-image: linear-gradient(#a3e532, #90cc2a) !important;
|
||||
background-image: -webkit-linear-gradient(#a3e532, #90cc2a) !important;
|
||||
background-image: -o-linear-gradient(#a3e532, #90cc2a) !important;
|
||||
filter: progid:dximagetransform.microsoft.gradient(startColorstr=#fafafa, endColorstr=#eaeaea) !important;
|
||||
-ms-filter: progid:dximagetransform.microsoft.gradient(startColorstr=#fafafa, endColorstr=#eaeaea) !important;
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#a3e532, endColorstr=#90cc2a) !important;
|
||||
-ms-filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#a3e532, endColorstr=#90cc2a) !important;
|
||||
height: 14px;
|
||||
}
|
||||
.havetracks {
|
||||
@@ -1363,7 +1322,6 @@ div#artistheader h2 a {
|
||||
clear: both;
|
||||
}
|
||||
#album_table th#albumname,
|
||||
#album_table th#artistname,
|
||||
#upcoming_table th#artistname,
|
||||
#wanted_table th#artistname {
|
||||
min-width: 150px;
|
||||
@@ -1386,7 +1344,6 @@ div#artistheader h2 a {
|
||||
vertical-align: middle;
|
||||
}
|
||||
#album_table td#albumname,
|
||||
#album_table td#artistname,
|
||||
#album_table td#reldate,
|
||||
#album_table td#type,
|
||||
#track_table td#duration,
|
||||
@@ -1493,6 +1450,3 @@ table tr td#status a {
|
||||
.ie7 legend {
|
||||
margin-left: -7px;
|
||||
}
|
||||
#preferred_bitrate_options {
|
||||
margin-left: 20px;
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Config
|
||||
// Config
|
||||
@import "config.less";
|
||||
|
||||
html,body,div,span,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,abbr,address,cite,code,del,dfn,em,img,ins,kbd,q,samp,small,strong,sub,sup,var,b,i,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,figcaption,figure,footer,header,hgroup,menu,nav,section,summary,time,mark,audio,video {
|
||||
@@ -26,7 +26,7 @@ body {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
// Links
|
||||
// Links
|
||||
a {
|
||||
color: @link-color;
|
||||
text-decoration: none;
|
||||
@@ -37,11 +37,11 @@ a {
|
||||
&.blue {
|
||||
color: blue;
|
||||
}
|
||||
.ui-icon {
|
||||
.ui-icon {
|
||||
display:inline-block;
|
||||
position: relative;
|
||||
top: 2px;
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
.links {
|
||||
@@ -204,7 +204,7 @@ form {
|
||||
line-height: normal;
|
||||
max-width: 230px;
|
||||
margin-right: 5px;
|
||||
padding: 3px 5px;
|
||||
padding: 3px 5px;
|
||||
}
|
||||
small {
|
||||
color: #999;
|
||||
@@ -295,10 +295,10 @@ ul#nav {
|
||||
.rounded(3px);
|
||||
.shadow(0 1px 0 #FAFAFA);
|
||||
.shadow(0 1px 0 #FAFAFA inset);
|
||||
-webkit-transition:color .2s ease-in;
|
||||
-moz-transition:color .2s ease-in;
|
||||
-o-transition:color .2s ease-in;
|
||||
transition:color .2s ease-in;
|
||||
-webkit-transition:color .2s ease-in;
|
||||
-moz-transition:color .2s ease-in;
|
||||
-o-transition:color .2s ease-in;
|
||||
transition:color .2s ease-in;
|
||||
}
|
||||
&.config {
|
||||
height: 28px;
|
||||
@@ -412,7 +412,7 @@ footer {
|
||||
}
|
||||
|
||||
#updatebar {
|
||||
#ajaxMsg;
|
||||
#ajaxMsg;
|
||||
display: block;
|
||||
.gradient(#FCF5C2,@msg-bg);
|
||||
}
|
||||
@@ -442,7 +442,7 @@ footer {
|
||||
&:hover {
|
||||
.gradient(#599BDC, #3072B3);
|
||||
color: #FFF;
|
||||
border-color: #518CC6 #518CC6 #2A65A0;
|
||||
border-color: #518CC6 #518CC6 #2A65A0;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -502,7 +502,7 @@ div#searchbar {
|
||||
}
|
||||
}
|
||||
|
||||
// TABLES
|
||||
// TABLES
|
||||
|
||||
// wrappers
|
||||
.table_wrapper {
|
||||
@@ -531,8 +531,8 @@ div#searchbar {
|
||||
h1 {
|
||||
line-height: 33px;
|
||||
width: 450px;
|
||||
img {
|
||||
float:left;
|
||||
img {
|
||||
float:left;
|
||||
margin-right: 5px;
|
||||
}
|
||||
}
|
||||
@@ -543,7 +543,7 @@ div#nopaddingheader {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
// Artist
|
||||
// Artist
|
||||
div#artistheader {
|
||||
margin-top: 50px;
|
||||
min-height: 200px;
|
||||
@@ -558,12 +558,26 @@ div#artistheader {
|
||||
overflow: hidden;
|
||||
text-indent: -3000px;
|
||||
width: 200px;
|
||||
position: relative;
|
||||
|
||||
&.on-tour:before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: -2px;
|
||||
width: 100px;
|
||||
height: 100px;
|
||||
z-index: 2;
|
||||
background-image: url('../images/songkick_ribon.png');
|
||||
background-repeat: no-repeat;
|
||||
}
|
||||
}
|
||||
#artistBio {
|
||||
font-size: 16px;
|
||||
line-height: 24px;
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
h1 {
|
||||
a {
|
||||
font-size: 32px;
|
||||
@@ -580,6 +594,25 @@ div#artistheader {
|
||||
}
|
||||
}
|
||||
|
||||
#artistCalendar {
|
||||
list-style-type: none;
|
||||
margin: 0px;
|
||||
display: block;
|
||||
background: #FEF2EB;
|
||||
padding: 10px;
|
||||
font-size: 16px;
|
||||
|
||||
.sk-location {
|
||||
display: inline-block;
|
||||
padding-left: 6px;
|
||||
}
|
||||
|
||||
.sk-logo {
|
||||
width: 100px;
|
||||
padding-top: 16px;
|
||||
}
|
||||
}
|
||||
|
||||
#artist_table {
|
||||
background-color: #FFF;
|
||||
padding: 20px;
|
||||
@@ -623,7 +656,7 @@ div#artistheader {
|
||||
text-align: left;
|
||||
vertical-align: middle;
|
||||
}
|
||||
td#album {
|
||||
td#album {
|
||||
min-width: 300px;
|
||||
text-align: left;
|
||||
vertical-align: middle;
|
||||
@@ -636,7 +669,7 @@ div#artistheader {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
// Album
|
||||
// Album
|
||||
#albumheader {
|
||||
margin-top: 50px;
|
||||
min-height: 200px;
|
||||
@@ -731,7 +764,7 @@ div#artistheader {
|
||||
}
|
||||
}
|
||||
|
||||
// Manage
|
||||
// Manage
|
||||
#manageheader {
|
||||
margin-top: 45px;
|
||||
margin-bottom: 0;
|
||||
@@ -775,7 +808,7 @@ div#artistheader {
|
||||
}
|
||||
}
|
||||
|
||||
// History
|
||||
// History
|
||||
#history_table {
|
||||
background-color: #FFF;
|
||||
font-size: 13px;
|
||||
@@ -800,7 +833,7 @@ div#artistheader {
|
||||
}
|
||||
}
|
||||
|
||||
// Logs
|
||||
// Logs
|
||||
#log_table {
|
||||
background-color: #FFF;
|
||||
th#timestamp {
|
||||
@@ -865,7 +898,7 @@ div#artistheader {
|
||||
font-size: 11px;
|
||||
vertical-align: middle;
|
||||
line-height: normal;
|
||||
.gradient(#A3E532,#90CC2A);
|
||||
.gradient(#A3E532,#90CC2A);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -986,7 +1019,7 @@ div#artistheader {
|
||||
font-weight: 900;
|
||||
}
|
||||
}
|
||||
li {
|
||||
li {
|
||||
display: inline-block;
|
||||
margin: 5px 10px;
|
||||
}
|
||||
@@ -1039,7 +1072,7 @@ div#artistheader {
|
||||
&:after { clear: both; }
|
||||
}
|
||||
|
||||
// Table width
|
||||
// Table width
|
||||
#album_table th#albumname, #upcoming_table th#artistname, #wanted_table th#artistname {
|
||||
min-width: 150px;
|
||||
text-align: center;
|
||||
|
||||
BIN
data/interfaces/default/images/songkick.png
Normal file
BIN
data/interfaces/default/images/songkick.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 4.0 KiB |
BIN
data/interfaces/default/images/songkick_ribon.png
Normal file
BIN
data/interfaces/default/images/songkick_ribon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 3.2 KiB |
@@ -261,6 +261,7 @@ CUSTOMPORT = None
|
||||
CUSTOMSLEEP = None
|
||||
HPUSER = None
|
||||
HPPASS = None
|
||||
SONGKICK_APIKEY = "nd1We7dFW2RqxPw8"
|
||||
|
||||
CACHE_SIZEMB = 32
|
||||
JOURNAL_MODE = None
|
||||
@@ -473,11 +474,11 @@ def initialize():
|
||||
NZBGET_HOST = check_setting_str(CFG, 'NZBget', 'nzbget_host', '')
|
||||
|
||||
HEADPHONES_INDEXER = bool(check_setting_int(CFG, 'Headphones', 'headphones_indexer', 0))
|
||||
|
||||
|
||||
TRANSMISSION_HOST = check_setting_str(CFG, 'Transmission', 'transmission_host', '')
|
||||
TRANSMISSION_USERNAME = check_setting_str(CFG, 'Transmission', 'transmission_username', '')
|
||||
TRANSMISSION_PASSWORD = check_setting_str(CFG, 'Transmission', 'transmission_password', '')
|
||||
|
||||
|
||||
UTORRENT_HOST = check_setting_str(CFG, 'uTorrent', 'utorrent_host', '')
|
||||
UTORRENT_USERNAME = check_setting_str(CFG, 'uTorrent', 'utorrent_username', '')
|
||||
UTORRENT_PASSWORD = check_setting_str(CFG, 'uTorrent', 'utorrent_password', '')
|
||||
@@ -634,7 +635,7 @@ def initialize():
|
||||
if BLACKHOLE:
|
||||
NZB_DOWNLOADER = 2
|
||||
CONFIG_VERSION = '4'
|
||||
|
||||
|
||||
# Enable Headphones Indexer if they have a VIP account
|
||||
if CONFIG_VERSION == '4':
|
||||
if HPUSER and HPPASS:
|
||||
@@ -748,7 +749,7 @@ def launch_browser(host, port, root):
|
||||
|
||||
if host == '0.0.0.0':
|
||||
host = 'localhost'
|
||||
|
||||
|
||||
if ENABLE_HTTPS:
|
||||
protocol = 'https'
|
||||
else:
|
||||
@@ -872,7 +873,7 @@ def config_write():
|
||||
new_config['Transmission']['transmission_host'] = TRANSMISSION_HOST
|
||||
new_config['Transmission']['transmission_username'] = TRANSMISSION_USERNAME
|
||||
new_config['Transmission']['transmission_password'] = TRANSMISSION_PASSWORD
|
||||
|
||||
|
||||
new_config['uTorrent'] = {}
|
||||
new_config['uTorrent']['utorrent_host'] = UTORRENT_HOST
|
||||
new_config['uTorrent']['utorrent_username'] = UTORRENT_USERNAME
|
||||
|
||||
@@ -365,12 +365,12 @@ class WebInterface(object):
|
||||
# else:
|
||||
# original_clean = None
|
||||
if original_clean == albums['CleanName']:
|
||||
have_dict = { 'ArtistName' : albums['ArtistName'], 'AlbumTitle' : albums['AlbumTitle'] }
|
||||
have_dict = { 'ArtistName' : albums['ArtistName'], 'AlbumTitle' : albums['AlbumTitle'] }
|
||||
have_album_dictionary.append(have_dict)
|
||||
headphones_albums = myDB.select('SELECT ArtistName, AlbumTitle from albums ORDER BY ArtistName')
|
||||
for albums in headphones_albums:
|
||||
headphones_dict = { 'ArtistName' : albums['ArtistName'], 'AlbumTitle' : albums['AlbumTitle'] }
|
||||
headphones_album_dictionary.append(headphones_dict)
|
||||
headphones_dict = { 'ArtistName' : albums['ArtistName'], 'AlbumTitle' : albums['AlbumTitle'] }
|
||||
headphones_album_dictionary.append(headphones_dict)
|
||||
#unmatchedalbums = [f for f in have_album_dictionary if f not in [x for x in headphones_album_dictionary]]
|
||||
|
||||
check = set([(cleanName(d['ArtistName']).lower(), cleanName(d['AlbumTitle']).lower()) for d in headphones_album_dictionary])
|
||||
@@ -382,16 +382,16 @@ class WebInterface(object):
|
||||
|
||||
def markUnmatched(self, action=None, existing_artist=None, existing_album=None, new_artist=None, new_album=None):
|
||||
myDB = db.DBConnection()
|
||||
|
||||
|
||||
if action == "ignoreArtist":
|
||||
artist = existing_artist
|
||||
myDB.action('UPDATE have SET Matched="Ignored" WHERE ArtistName=? AND Matched = "Failed"', [artist])
|
||||
|
||||
|
||||
elif action == "ignoreAlbum":
|
||||
artist = existing_artist
|
||||
album = existing_album
|
||||
myDB.action('UPDATE have SET Matched="Ignored" WHERE ArtistName=? AND AlbumTitle=? AND Matched = "Failed"', (artist, album))
|
||||
|
||||
|
||||
elif action == "matchArtist":
|
||||
existing_artist_clean = helpers.cleanName(existing_artist).lower()
|
||||
new_artist_clean = helpers.cleanName(new_artist).lower()
|
||||
@@ -464,7 +464,7 @@ class WebInterface(object):
|
||||
librarysync.update_album_status(album_id)
|
||||
else:
|
||||
logger.info("Artist %s / Album %s already named appropriately; nothing to modify" % (existing_artist, existing_album))
|
||||
|
||||
|
||||
markUnmatched.exposed = True
|
||||
|
||||
def manageManual(self):
|
||||
@@ -480,7 +480,7 @@ class WebInterface(object):
|
||||
elif albums['Matched'] == "Manual" or albums['CleanName'] != original_clean:
|
||||
album_status = "Matched"
|
||||
manual_dict = { 'ArtistName' : albums['ArtistName'], 'AlbumTitle' : albums['AlbumTitle'], 'AlbumStatus' : album_status }
|
||||
if manual_dict not in manual_albums:
|
||||
if manual_dict not in manual_albums:
|
||||
manual_albums.append(manual_dict)
|
||||
manual_albums_sorted = sorted(manual_albums, key=itemgetter('ArtistName', 'AlbumTitle'))
|
||||
|
||||
@@ -755,7 +755,7 @@ class WebInterface(object):
|
||||
album_json[counter] = album['AlbumTitle']
|
||||
counter+=1
|
||||
json_albums = json.dumps(album_json)
|
||||
|
||||
|
||||
cherrypy.response.headers['Content-type'] = 'application/json'
|
||||
return json_albums
|
||||
getAlbumsByArtist_json.exposed=True
|
||||
@@ -961,6 +961,7 @@ class WebInterface(object):
|
||||
"customsleep": headphones.CUSTOMSLEEP,
|
||||
"hpuser": headphones.HPUSER,
|
||||
"hppass": headphones.HPPASS,
|
||||
"songkick_apikey": headphones.SONGKICK_APIKEY,
|
||||
"cache_sizemb": headphones.CACHE_SIZEMB,
|
||||
"file_permissions": headphones.FILE_PERMISSIONS,
|
||||
"folder_permissions": headphones.FOLDER_PERMISSIONS,
|
||||
@@ -986,9 +987,9 @@ class WebInterface(object):
|
||||
|
||||
def configUpdate(self, http_host='0.0.0.0', http_username=None, http_port=8181, http_password=None, launch_browser=0, api_enabled=0, api_key=None,
|
||||
download_scan_interval=None, update_db_interval=None, mb_ignore_age=None, nzb_search_interval=None, libraryscan_interval=None, sab_host=None, sab_username=None, sab_apikey=None, sab_password=None,
|
||||
sab_category=None, nzbget_host=None, nzbget_username=None, nzbget_password=None, nzbget_category=None, transmission_host=None, transmission_username=None, transmission_password=None,
|
||||
utorrent_host=None, utorrent_username=None, utorrent_password=None, nzb_downloader=0, torrent_downloader=0, download_dir=None, blackhole_dir=None, usenet_retention=None,
|
||||
use_headphones_indexer=0, newznab=0, newznab_host=None, newznab_apikey=None, newznab_enabled=0, nzbsorg=0, nzbsorg_uid=None, nzbsorg_hash=None, nzbsrus=0, nzbsrus_uid=None, nzbsrus_apikey=None, omgwtfnzbs=0, omgwtfnzbs_uid=None, omgwtfnzbs_apikey=None,
|
||||
sab_category=None, nzbget_host=None, nzbget_username=None, nzbget_password=None, nzbget_category=None, transmission_host=None, transmission_username=None, transmission_password=None,
|
||||
utorrent_host=None, utorrent_username=None, utorrent_password=None, nzb_downloader=0, torrent_downloader=0, download_dir=None, blackhole_dir=None, usenet_retention=None,
|
||||
use_headphones_indexer=0, newznab=0, newznab_host=None, newznab_apikey=None, newznab_enabled=0, nzbsorg=0, nzbsorg_uid=None, nzbsorg_hash=None, nzbsrus=0, nzbsrus_uid=None, nzbsrus_apikey=None, omgwtfnzbs=0, omgwtfnzbs_uid=None, omgwtfnzbs_apikey=None,
|
||||
preferred_words=None, required_words=None, ignored_words=None, preferred_quality=0, preferred_bitrate=None, detect_bitrate=0, move_files=0, torrentblackhole_dir=None, download_torrent_dir=None,
|
||||
numberofseeders=None, use_piratebay=0, piratebay_proxy_url=None, use_isohunt=0, use_kat=0, use_mininova=0, waffles=0, waffles_uid=None, waffles_passkey=None, whatcd=0, whatcd_username=None, whatcd_password=None,
|
||||
rutracker=0, rutracker_user=None, rutracker_password=None, rename_files=0, correct_metadata=0, cleanup_files=0, add_album_art=0, album_art_format=None, embed_album_art=0, embed_lyrics=0,
|
||||
@@ -1000,7 +1001,7 @@ class WebInterface(object):
|
||||
pushover_enabled=0, pushover_onsnatch=0, pushover_keys=None, pushover_priority=0, twitter_enabled=0, twitter_onsnatch=0, mirror=None, customhost=None, customport=None,
|
||||
customsleep=None, hpuser=None, hppass=None, preferred_bitrate_high_buffer=None, preferred_bitrate_low_buffer=None, preferred_bitrate_allow_lossless=0, cache_sizemb=None,
|
||||
enable_https=0, https_cert=None, https_key=None, file_permissions=None, folder_permissions=None, plex_enabled=0, plex_server_host=None, plex_client_host=None, plex_username=None,
|
||||
plex_password=None, plex_update=0, plex_notify=0, post_processing_dir=None, **kwargs):
|
||||
plex_password=None, plex_update=0, plex_notify=0, post_processing_dir=None, songkick_apikey=None, **kwargs):
|
||||
|
||||
headphones.HTTP_HOST = http_host
|
||||
headphones.HTTP_PORT = http_port
|
||||
@@ -1146,10 +1147,11 @@ class WebInterface(object):
|
||||
headphones.CUSTOMSLEEP = customsleep
|
||||
headphones.HPUSER = hpuser
|
||||
headphones.HPPASS = hppass
|
||||
headphones.SONGKICK_APIKEY = songkick_apikey
|
||||
headphones.CACHE_SIZEMB = int(cache_sizemb)
|
||||
headphones.FILE_PERMISSIONS = file_permissions
|
||||
headphones.FOLDER_PERMISSIONS = folder_permissions
|
||||
headphones.POST_PROCESSING_DIR = post_processing_dir
|
||||
headphones.POST_PROCESSING_DIR = post_processing_dir
|
||||
|
||||
# Handle the variable config options. Note - keys with False values aren't getting passed
|
||||
|
||||
|
||||
Reference in New Issue
Block a user