mirror of
https://github.com/rembo10/headphones.git
synced 2026-01-11 15:28:39 -05:00
Changed all Using href="#" to href="javascript:void(0)". Using "#" causes the browser to jump to the top of the page when the hyperlink is clicked (default empty # anchor position). Using "javascript:void(0)" will not change the browser's scroll position.
255 lines
11 KiB
HTML
255 lines
11 KiB
HTML
<%inherit file="base.html" />
|
|
<%!
|
|
import headphones
|
|
from headphones.helpers import checked
|
|
%>
|
|
<%def name="headerIncludes()">
|
|
<div id="subhead_container">
|
|
<div id="subhead_menu">
|
|
<a class="menu_link_edit" id="manage_albums" href="javascript:void(0)"><i class="fa fa-pencil"></i> Manage Albums</a>
|
|
<div id="dialog" title="Choose Album Filter" style="display:none" class="configtable">
|
|
<div class="links">
|
|
<a href="manageAlbums?Status=Downloaded"><i class="fa fa-check fa-fw"></i> Manage Downloaded Albums</a><br>
|
|
<a href="manageAlbums?Status=Skipped"><i class="fa fa-flag fa-fw"></i> Manage Skipped Albums</a><br>
|
|
<a href="manageAlbums?Status=Snatched"><i class="fa fa-cloud-download fa-fw"></i> </span>Manage Snatched Albums</a><br>
|
|
<a href="manageAlbums?Status=Upcoming"><i class="fa fa-calendar fa-fw"></i> Manage Upcoming Albums</a><br>
|
|
<a href="manageAlbums?Status=Wanted"><i class="fa fa-heart fa-fw"></i> </span>Manage Wanted Albums</a><br>
|
|
<a href="manageAlbums?Status=Ignored"><i class="fa fa-meh-o fa-fw"></i> </span>Manage Ignored Albums</a><br>
|
|
<br><br>
|
|
<a href="manageAlbums">Manage All Albums</a>
|
|
</div>
|
|
</div>
|
|
<a class="menu_link_edit" href="manageArtists"><i class="fa fa-pencil"></i> Manage Artists</a>
|
|
%if not headphones.CONFIG.AUTO_ADD_ARTISTS:
|
|
<a class="menu_link_edit" href="manageNew"><i class="fa fa-pencil"></i> Manage New Artists</a>
|
|
%endif
|
|
<a class="menu_link_edit" href="manageUnmatched"><i class="fa fa-pencil"></i> Manage Unmatched</a>
|
|
</div>
|
|
</div>
|
|
</%def>
|
|
|
|
<%def name="body()">
|
|
<div id="paddingheader">
|
|
<h1 class="clearfix"><i class="fa fa-music"></i> Manage</h1>
|
|
</div>
|
|
<div id="tabs">
|
|
<ul>
|
|
<li><a href="#tabs-1">Scan Music Library</a></li>
|
|
<li><a href="#tabs-2">Imports</a></li>
|
|
<li><a href="#tabs-3">Force Actions</a></li>
|
|
<li><a href="#tabs-4">Force Legacy</a></li>
|
|
</ul>
|
|
<div id="tabs-1" class="configtable">
|
|
<fieldset>
|
|
<form action="musicScan" method="GET" id="musicScan">
|
|
<legend>Scan Music Library</legend>
|
|
<p><strong>Where do you keep your music?</strong></p>
|
|
<p>You can put in any directory, and it will scan for audio files in that folder
|
|
(including all subdirectories). <br/><small>For example: '/Users/name/Music'</small></p>
|
|
<p>
|
|
It may take a while depending on how many files you have. You can navigate away from the page<br />
|
|
as soon as you click 'Save changes'
|
|
</p>
|
|
<br/>
|
|
<div class="row">
|
|
<label for="">Path to directory</label>
|
|
%if headphones.CONFIG.MUSIC_DIR:
|
|
<input type="text" value="${headphones.CONFIG.MUSIC_DIR}" name="path" size="70" />
|
|
%else:
|
|
<input type="text" value="Enter a Music Directory to scan" onfocus="if
|
|
(this.value==this.defaultValue) this.value='';" name="path" size="70" />
|
|
%endif
|
|
</div>
|
|
<div class="row checkbox">
|
|
<input type="checkbox" name="libraryscan" id="libraryscan" value="1" ${checked(headphones.CONFIG.LIBRARYSCAN)}><label>Automatically scan library</label>
|
|
</div>
|
|
<div class="row checkbox">
|
|
<input type="checkbox" name="autoadd" id="autoadd" value="1" ${checked(headphones.CONFIG.AUTO_ADD_ARTISTS)}><label>Auto-add new artists</label>
|
|
</div>
|
|
|
|
</fieldset>
|
|
<br>
|
|
<input type="button" value="Save Changes and Scan" onclick="addScanAction();doAjaxCall('musicScan',$(this),'tabs',true);return false;" data-success="Changes saved. Library will be scanned">
|
|
<input type="button" value="Save Changes without Scanning Library" onclick="doAjaxCall('musicScan',$(this),'tabs',true);return false;" data-success="Changes Saved Successfully">
|
|
</form>
|
|
</div>
|
|
|
|
<div id="tabs-2" class="configtable">
|
|
<form action="importLastFM" method="GET" id="importLastFM">
|
|
<fieldset>
|
|
<legend>Import Last.FM Artists</legend>
|
|
<p>Enter the username whose artists you want to import:</p>
|
|
<br/>
|
|
<div class="row">
|
|
<label for="">Username</label>
|
|
<%
|
|
if headphones.CONFIG.LASTFM_USERNAME:
|
|
lastfmvalue = headphones.CONFIG.LASTFM_USERNAME
|
|
else:
|
|
lastfmvalue = ''
|
|
%>
|
|
<input type="text" value="${lastfmvalue}" placeholder="Last.fm username" onfocus="if
|
|
(this.value==this.defaultValue) this.value='';" name="username" id="username" size="18" />
|
|
<a href="javascript:void(0)" onclick="doAjaxCall('importLastFM?username=',$(this),'tabs');return false;" data-success="Last.fm username has been reset"><i class="fa fa-reply"></i> Reset username</a>
|
|
</div>
|
|
</fieldset>
|
|
<input type="button" value="Save changes" onclick="doAjaxCall('importLastFM',$(this),'tabs',true);return false;" data-success="Last.fm artists will be imported" data-error="Fill in a last.fm username"/>
|
|
</form>
|
|
<br/>
|
|
<form action="importLastFMTag" method="GET" id="importLastFMTag">
|
|
<fieldset>
|
|
<legend>Import Last.FM Tag</legend>
|
|
<p>Enter tag from which you want import top artists:</p>
|
|
<br/>
|
|
<div class="row">
|
|
<label>Tag</label>
|
|
<input type="text" value="" onfocus="if
|
|
(this.value==this.defaultValue) this.value='';" name="tag" id="tag" size="18" />
|
|
<br/>
|
|
<label>Limit</label>
|
|
<input type="text" value="50" onfocus="if
|
|
(this.value==this.defaultValue) this.value='';" name="limit" id="limit" size="18" />
|
|
</div>
|
|
</fieldset>
|
|
<input type="submit" />
|
|
</form>
|
|
</div>
|
|
|
|
|
|
|
|
<div id="tabs-3" class="configtable">
|
|
<fieldset>
|
|
<legend>Force Search</legend>
|
|
<div class="links">
|
|
<a href="javascript:void(0)" onclick="doAjaxCall('forceSearch',$(this))" data-success="Checking for wanted albums successful" data-error="Error checking wanted albums"><i class="fa fa-search fa-fw"></i> Force Check for Wanted Albums</a>
|
|
<a href="javascript:void(0)" onclick="doAjaxCall('forceUpdate',$(this))" data-success="Update active artists successful" data-error="Error forcing update artists"><i class="fa fa-heart fa-fw"></i> Force Update Active Artists [Fast]</a>
|
|
<a href="javascript:void(0)" onclick="doAjaxCall('checkGithub',$(this))" data-success="Checking for update successful" data-error="Error checking for update"><i class="fa fa-refresh fa-fw"></i> Check for Headphones Updates</a>
|
|
<a href="javascript:void(0)" id="delete_empty_artists"><i class="fa fa-trash-o fa-fw"></i> Delete empty Artists</a>
|
|
<div id="emptyartistdialog" title="Confirm Artist Deletion" style="display:none" class="configtable">
|
|
%if emptyArtists:
|
|
<h3>The following artists will be deleted:</h3>
|
|
|
|
%for emptyArtist in emptyArtists:
|
|
<p>${emptyArtist['ArtistName']}</p>
|
|
%endfor
|
|
<input type="button" value="Delete Empty Artists" onclick="doAjaxCall('deleteEmptyArtists',$(this))" data-success="Empty Artists deleted" data-error="Error deleting empty artists">
|
|
%else:
|
|
No empty artists found.
|
|
%endif
|
|
</div>
|
|
<div id="post_process">
|
|
<a href="javascript:void(0)" class="btnOpenDialog"><i class="fa fa-wrench fa-fw"></i> Force Post-Process Albums in Download Folder</a>
|
|
</div>
|
|
</div>
|
|
</fieldset>
|
|
<fieldset>
|
|
<div class="row" id="post_process_alternate">
|
|
<label>Force Post-Process Albums in Alternate Folder</label>
|
|
<input type="text" value="" name="dir" id="dir" size="50" />
|
|
<input type="button" class="btnOpenDialog" value="Submit" />
|
|
</div>
|
|
</fieldset>
|
|
|
|
<fieldset>
|
|
<div class="row" id="post_process_single">
|
|
<label>Post-Process Single Folder</label>
|
|
<input type="text" value="" name="album_dir" id="album_dir" size="50" />
|
|
<input type="button" class="btnOpenDialog" value="Submit" />
|
|
</div>
|
|
</fieldset>
|
|
|
|
</div>
|
|
|
|
|
|
<div id="tabs-4" class="configtable">
|
|
<fieldset>
|
|
<legend>Force Legacy</legend>
|
|
<p>Please note that these functions will take a significant amount of time to complete.</p>
|
|
<div class="links">
|
|
<a href="javascript:void(0)" onclick="doAjaxCall('forceFullUpdate',$(this))" data-success="Update active artists successful" data-error="Error forcing update artists"><i class="fa fa-heart fa-fw"></i> Force Update Active Artists [Comprehensive]</a>
|
|
<BR>
|
|
<a href="javascript:void(0)" onclick="doAjaxCall('forceScan',$(this))" data-success="Library scan successful" data-error="Error forcing library scan"><i class="fa fa-refresh fa-fw"></i> Force Re-scan Library [Comprehensive]</a>
|
|
<BR>
|
|
<small>*Warning: If you choose [Force Re-scan Library], any manually ignored/matched artists/albums will be reset to "unmatched".</small>
|
|
|
|
</div>
|
|
</fieldset>
|
|
|
|
</div>
|
|
<div id="dialog-confirm"></div>
|
|
|
|
</div>
|
|
</%def>
|
|
<%def name="javascriptIncludes()">
|
|
<script>
|
|
function addScanAction() {
|
|
$('#autoadd').append('<input type="hidden" name="scan" value=1 />');
|
|
};
|
|
|
|
function fnOpenNormalDialog(id) {
|
|
if (id === "post_process"){
|
|
var url = "forcePostProcess?"
|
|
}
|
|
if (id === "post_process_alternate"){
|
|
var dir = $('#dir').val();
|
|
var url = "forcePostProcess?dir=" + dir + "&"
|
|
}
|
|
if (id === "post_process_single"){
|
|
var dir = $('#album_dir').val();
|
|
var url = "forcePostProcess?album_dir=" + dir + "&"
|
|
}
|
|
var t = $('<a data-success="Post-Processor is being loaded" data-error="Error during Post-Processing">');
|
|
$("#dialog-confirm").html("Do you want to keep the original folder(s) after post-processing? If you click no, the folders still might be kept depending on your global settings");
|
|
|
|
// Define the Dialog and its properties.
|
|
$("#dialog-confirm").dialog({
|
|
resizable: false,
|
|
modal: true,
|
|
title: "Keep original folder(s)?",
|
|
height: 170,
|
|
width: 400,
|
|
buttons: {
|
|
"Yes": function () {
|
|
$(this).dialog('close');
|
|
doAjaxCall(url + "keep_original_folder=True", t);
|
|
},
|
|
"No": function () {
|
|
$(this).dialog('close');
|
|
doAjaxCall(url + "keep_original_folder=False", t);
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
$('.btnOpenDialog').click(function(e){
|
|
e.preventDefault();
|
|
var parentId = $(this).closest('div').prop('id');
|
|
fnOpenNormalDialog(parentId);
|
|
});
|
|
|
|
function callback(value) {
|
|
if (value) {
|
|
alert("Confirmed");
|
|
} else {
|
|
alert("Rejected");
|
|
}
|
|
}
|
|
|
|
function initThisPage() {
|
|
$('#manage_albums').click(function() {
|
|
$('#dialog').dialog();
|
|
return false;
|
|
});
|
|
$('#delete_empty_artists').click(function() {
|
|
$('#emptyartistdialog').dialog();
|
|
return false;
|
|
});
|
|
jQuery( "#tabs" ).tabs();
|
|
initActions();
|
|
};
|
|
$(document).ready(function() {
|
|
initThisPage();
|
|
});
|
|
</script>
|
|
</%def>
|