|
@@ -265,18 +265,13 @@
|
|
|
<div class="type-section" id="music-fields">
|
|
<div class="type-section" id="music-fields">
|
|
|
<hr>
|
|
<hr>
|
|
|
<div class="field">
|
|
<div class="field">
|
|
|
- <label>Artist <span style="color:var(--muted);font-weight:400">(Jellyfin artist folder)</span></label>
|
|
|
|
|
- <div class="folder-row">
|
|
|
|
|
- <select id="artist-folder-select" onchange="onArtistFolderSelect()">
|
|
|
|
|
- <option value="">— choose existing —</option>
|
|
|
|
|
- </select>
|
|
|
|
|
- <input type="text" id="artist" placeholder="or type a new artist name" oninput="updatePathPreview()">
|
|
|
|
|
- </div>
|
|
|
|
|
|
|
+ <label>Artist <span style="color:var(--muted);font-weight:400">(embedded tag; used for the Singles folder when no album)</span></label>
|
|
|
|
|
+ <input type="text" id="artist" placeholder="e.g. Nujabes" oninput="updatePathPreview()">
|
|
|
</div>
|
|
</div>
|
|
|
<div class="row-2">
|
|
<div class="row-2">
|
|
|
<div class="field">
|
|
<div class="field">
|
|
|
- <label>Album <span style="color:var(--muted);font-weight:400">(optional)</span></label>
|
|
|
|
|
- <input type="text" id="album" placeholder="Leave blank for flat artist folder" oninput="updatePathPreview()">
|
|
|
|
|
|
|
+ <label>Album <span style="color:var(--muted);font-weight:400">(folder name in Music/)</span></label>
|
|
|
|
|
+ <input type="text" id="album" placeholder="Blank → <Artist> - Singles" oninput="updatePathPreview()">
|
|
|
</div>
|
|
</div>
|
|
|
<div class="field">
|
|
<div class="field">
|
|
|
<label>Track number <span style="color:var(--muted);font-weight:400">(optional)</span></label>
|
|
<label>Track number <span style="color:var(--muted);font-weight:400">(optional)</span></label>
|
|
@@ -397,7 +392,6 @@ async function loadBrowseData() {
|
|
|
|
|
|
|
|
function populateFolderSelects() {
|
|
function populateFolderSelects() {
|
|
|
populateSelect('series-folder-select', browseData.Shows || [], '— choose existing —');
|
|
populateSelect('series-folder-select', browseData.Shows || [], '— choose existing —');
|
|
|
- populateSelect('artist-folder-select', browseData.Music || [], '— choose existing —');
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
function populateSelect(id, items, placeholder) {
|
|
function populateSelect(id, items, placeholder) {
|
|
@@ -414,12 +408,6 @@ function onSeriesFolderSelect() {
|
|
|
updatePathPreview();
|
|
updatePathPreview();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-function onArtistFolderSelect() {
|
|
|
|
|
- const val = document.getElementById('artist-folder-select').value;
|
|
|
|
|
- document.getElementById('artist').value = val;
|
|
|
|
|
- updatePathPreview();
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
// ── Audio format selector ─────────────────────────────────────────────────────
|
|
// ── Audio format selector ─────────────────────────────────────────────────────
|
|
|
const FORMAT_HINTS = {
|
|
const FORMAT_HINTS = {
|
|
|
m4a: '(M4A/AAC — universal Jellyfin direct-play)',
|
|
m4a: '(M4A/AAC — universal Jellyfin direct-play)',
|
|
@@ -581,9 +569,7 @@ function getSeriesName() {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
function getArtistName() {
|
|
function getArtistName() {
|
|
|
- return document.getElementById('artist-folder-select').value ||
|
|
|
|
|
- document.getElementById('artist').value.trim() ||
|
|
|
|
|
- 'Artist Name';
|
|
|
|
|
|
|
+ return document.getElementById('artist').value.trim() || 'Artist Name';
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
function updatePathPreview() {
|
|
function updatePathPreview() {
|
|
@@ -708,8 +694,6 @@ function clearForm() {
|
|
|
document.getElementById('episode').value = '1';
|
|
document.getElementById('episode').value = '1';
|
|
|
const seriesSelect = document.getElementById('series-folder-select');
|
|
const seriesSelect = document.getElementById('series-folder-select');
|
|
|
if (seriesSelect) seriesSelect.value = '';
|
|
if (seriesSelect) seriesSelect.value = '';
|
|
|
- const artistSelect = document.getElementById('artist-folder-select');
|
|
|
|
|
- if (artistSelect) artistSelect.value = '';
|
|
|
|
|
const formatSel = document.getElementById('format');
|
|
const formatSel = document.getElementById('format');
|
|
|
if (formatSel) {
|
|
if (formatSel) {
|
|
|
formatSel.value = 'm4a';
|
|
formatSel.value = 'm4a';
|