client: support editing multiple tags at once
This commit is contained in:
parent
cc8f0abea4
commit
2b3aff220f
2 changed files with 140 additions and 38 deletions
|
|
@ -1552,9 +1552,6 @@ function setUpGenericUi(){
|
|||
selection.type = null;
|
||||
refreshSelection();
|
||||
});
|
||||
$editTagsDialog.find("input").on("keydown", function(event) {
|
||||
event.stopPropagation();
|
||||
});
|
||||
$document.on('keydown', function(event){
|
||||
var handler = keyboardHandlers[event.which];
|
||||
if (handler == null) return true;
|
||||
|
|
@ -1693,44 +1690,121 @@ function onDeleteContextMenu() {
|
|||
handleDeletePressed(true);
|
||||
return false;
|
||||
}
|
||||
var editTagsTrackKeys = null;
|
||||
function onEditTagsContextMenu() {
|
||||
if (!permissions.admin) return false;
|
||||
removeContextMenu();
|
||||
showEditTags(selection.toTrackKeys());
|
||||
editTagsTrackKeys = selection.toTrackKeys();
|
||||
showEditTags();
|
||||
return false;
|
||||
}
|
||||
function showEditTags(trackKeys) {
|
||||
var EDITABLE_PROPS = {
|
||||
name: 'string',
|
||||
artistName: 'string',
|
||||
albumArtistName: 'string',
|
||||
albumName: 'string',
|
||||
compilation: 'boolean',
|
||||
track: 'integer',
|
||||
trackCount: 'integer',
|
||||
disc: 'integer',
|
||||
discCount: 'integer',
|
||||
year: 'integer',
|
||||
genre: 'string',
|
||||
composerName: 'string',
|
||||
performerName: 'string',
|
||||
};
|
||||
var EDIT_TAG_TYPES = {
|
||||
'string': {
|
||||
get: function(domItem) {
|
||||
return domItem.value;
|
||||
},
|
||||
set: function(domItem, value) {
|
||||
domItem.value = value || "";
|
||||
},
|
||||
},
|
||||
'integer': {
|
||||
get: function(domItem) {
|
||||
var n = parseInt(domItem.value, 10);
|
||||
if (isNaN(n)) return null;
|
||||
return n;
|
||||
},
|
||||
set: function(domItem, value) {
|
||||
domItem.value = value == null ? "" : value;
|
||||
},
|
||||
},
|
||||
'boolean': {
|
||||
get: function(domItem) {
|
||||
return domItem.checked;
|
||||
},
|
||||
set: function(domItem, value) {
|
||||
domItem.checked = !!value;
|
||||
},
|
||||
},
|
||||
};
|
||||
function showEditTags() {
|
||||
$editTagsDialog.dialog({
|
||||
modal: true,
|
||||
title: "Edit Tags",
|
||||
minWidth: 800,
|
||||
height: $document.height() - 40,
|
||||
close: function() {
|
||||
$editTagsDialog.remove();
|
||||
});
|
||||
for (var propName in EDITABLE_PROPS) {
|
||||
var type = EDITABLE_PROPS[propName];
|
||||
var setter = EDIT_TAG_TYPES[type].set;
|
||||
var domItem = document.getElementById('edit-tag-' + propName);
|
||||
var multiCheckBoxDom = document.getElementById('edit-tag-multi-' + propName);
|
||||
var commonValue = null;
|
||||
var consistent = true;
|
||||
for (var i = 0; i < editTagsTrackKeys.length; i += 1) {
|
||||
var key = editTagsTrackKeys[i];
|
||||
var track = player.library.trackTable[key];
|
||||
var value = track[propName];
|
||||
if (propName === 'genre') {
|
||||
console.log("genre", JSON.stringify(value));
|
||||
}
|
||||
if (commonValue == null) {
|
||||
commonValue = value;
|
||||
} else if (commonValue !== value) {
|
||||
consistent = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
multiCheckBoxDom.checked = consistent;
|
||||
setter(domItem, consistent ? commonValue : null);
|
||||
}
|
||||
}
|
||||
|
||||
function setUpEditTagsUi() {
|
||||
$editTagsDialog.find("input").on("keydown", function(event) {
|
||||
event.stopPropagation();
|
||||
if (event.which === 27) {
|
||||
$editTagsDialog.dialog('close');
|
||||
} else if (event.which === 13) {
|
||||
onTagsOk();
|
||||
}
|
||||
});
|
||||
var track = player.library.trackTable[trackKeys[0]];
|
||||
EDITABLE_PROPS.forEach(function(prop) {
|
||||
$("#edit-tag-" + prop).val(track[prop]);
|
||||
});
|
||||
$("#edit-tags-ok").on('click', function() {
|
||||
$("#edit-tags-ok").on('click', onTagsOk);
|
||||
|
||||
function onTagsOk() {
|
||||
var cmd = {};
|
||||
var props = cmd[track.key] = {};
|
||||
EDITABLE_PROPS.forEach(function(prop) {
|
||||
props[prop] = $("#edit-tag-" + prop).val();
|
||||
});
|
||||
for (var i = 0; i < editTagsTrackKeys.length; i += 1) {
|
||||
var key = editTagsTrackKeys[i];
|
||||
var track = player.library.trackTable[key];
|
||||
var props = cmd[track.key] = {};
|
||||
for (var propName in EDITABLE_PROPS) {
|
||||
var type = EDITABLE_PROPS[propName];
|
||||
var getter = EDIT_TAG_TYPES[type].get;
|
||||
var domItem = document.getElementById('edit-tag-' + propName);
|
||||
var multiCheckBoxDom = document.getElementById('edit-tag-multi-' + propName);
|
||||
if (multiCheckBoxDom.checked) {
|
||||
props[propName] = getter(domItem);
|
||||
}
|
||||
}
|
||||
}
|
||||
player.sendCommand('updateTags', cmd);
|
||||
$editTagsDialog.remove();
|
||||
});
|
||||
$editTagsDialog.dialog('close');
|
||||
}
|
||||
}
|
||||
var EDITABLE_PROPS = [
|
||||
'name', 'artistName', 'albumArtistName',
|
||||
'albumName', 'compilation', 'track', 'trackCount',
|
||||
'disc', 'discCount', 'year', 'genre',
|
||||
'composerName', 'performerName'
|
||||
];
|
||||
|
||||
|
||||
|
||||
function updateSliderUi(value){
|
||||
var percent = value * 100;
|
||||
|
|
@ -2262,6 +2336,7 @@ function setUpUi(){
|
|||
setUpTabsUi();
|
||||
setUpUploadUi();
|
||||
setUpSettingsUi();
|
||||
setUpEditTagsUi();
|
||||
}
|
||||
|
||||
function toAlbumId(s) {
|
||||
|
|
|
|||
|
|
@ -290,21 +290,48 @@
|
|||
</dl>
|
||||
</div>
|
||||
<div id="edit-tags" style="display: none">
|
||||
<label>Title: <input id="edit-tag-name" style="width: 300px"></label><br>
|
||||
<label>Track Number: <input id="edit-tag-track" style="width: 30px"></label><br>
|
||||
<input type="checkbox" id="edit-tag-multi-name">
|
||||
<label>Title: <input id="edit-tag-name"></label><br>
|
||||
|
||||
<input type="checkbox" id="edit-tag-multi-track">
|
||||
<label>Track Number: <input id="edit-tag-track"></label><br>
|
||||
<hr>
|
||||
<label>Artist: <input id="edit-tag-artistName" style="width: 300px"></label><br>
|
||||
<label>Composer: <input id="edit-tag-composerName" style="width: 300px"></label><br>
|
||||
<label>Performer: <input id="edit-tag-performerName" style="width: 300px"></label><br>
|
||||
<label>Genre: <input id="edit-tag-genre" style="width: 300px"></label><br>
|
||||
|
||||
<input type="checkbox" id="edit-tag-multi-artistName">
|
||||
<label>Artist: <input id="edit-tag-artistName"></label><br>
|
||||
|
||||
<input type="checkbox" id="edit-tag-multi-composerName">
|
||||
<label>Composer: <input id="edit-tag-composerName"></label><br>
|
||||
|
||||
<input type="checkbox" id="edit-tag-multi-performerName">
|
||||
<label>Performer: <input id="edit-tag-performerName"></label><br>
|
||||
|
||||
<input type="checkbox" id="edit-tag-multi-genre">
|
||||
<label>Genre: <input id="edit-tag-genre"></label><br>
|
||||
<hr>
|
||||
<label>Album: <input id="edit-tag-albumName" style="width: 400px"></label><br>
|
||||
<label>Album Artist: <input id="edit-tag-albumArtistName" style="width: 300px"></label><br>
|
||||
<label>Track Count: <input id="edit-tag-trackCount" style="width: 30px"></label><br>
|
||||
<label>Year: <input id="edit-tag-year" style="width: 60px"></label><br>
|
||||
<label>Disc Number: <input id="edit-tag-year" style="width: 30px"></label><br>
|
||||
<label>Disc Count: <input id="edit-tag-year" style="width: 30px"></label><br>
|
||||
|
||||
<input type="checkbox" id="edit-tag-multi-albumName">
|
||||
<label>Album: <input id="edit-tag-albumName"></label><br>
|
||||
|
||||
<input type="checkbox" id="edit-tag-multi-albumArtistName">
|
||||
<label>Album Artist: <input id="edit-tag-albumArtistName"></label><br>
|
||||
|
||||
<input type="checkbox" id="edit-tag-multi-trackCount">
|
||||
<label>Track Count: <input id="edit-tag-trackCount"</label><br>
|
||||
|
||||
<input type="checkbox" id="edit-tag-multi-year">
|
||||
<label>Year: <input id="edit-tag-year"</label><br>
|
||||
|
||||
<input type="checkbox" id="edit-tag-multi-disc">
|
||||
<label>Disc Number: <input id="edit-tag-disc"</label><br>
|
||||
|
||||
<input type="checkbox" id="edit-tag-multi-discCount">
|
||||
<label>Disc Count: <input id="edit-tag-discCount"</label><br>
|
||||
|
||||
<input type="checkbox" id="edit-tag-multi-compilation">
|
||||
<label>Compilation: <input type="checkbox" id="edit-tag-compilation"></label><br>
|
||||
<hr>
|
||||
|
||||
<input id="edit-tags-ok" type="button" value="OK">
|
||||
</div>
|
||||
<ul id="menu-playlist" style="display: none">
|
||||
|
|
|
|||
Loading…
Reference in a new issue