ui: tab Diritti con tabella streaming + export CSV + settings Jamendo
- Nav item "⚖️ Diritti" nel gruppo Organizza (dopo Upgrade), feature=audio - View #view-royalty: hero amber, folder picker, checkbox recursive, progress bar, tabella streaming (file · artista · titolo · stato · match+licenza) con badge colorati - Hint esplicito: "Non trovato" NON implica SIAE - Modulo RoyaltyUI (pattern CatalogUI/DedupUI): streaming via royalty:progress / royalty:entry / royalty:done, link ai match aperti via open_external_url, export CSV client-side (Blob + download) - Settings: nuovo campo jamendo_client_id (opzionale) + hint link devportal.jamendo.com; save/load via save_settings - CSS: .royalty-scroll, .royalty-table, .royalty-badge-*, .royalty-row-rf/error, .progress-fill.amber, .percent.amber node --check webui/js/app.js OK · 184 test verdi. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
1 parent
ddacd050d8
commit
8266722654
3 files changed
+544
No files matched your search
@@ -76,6 +76,10 @@
|
||||
<span class="nav-icon">⚡</span>
|
||||
<span>Upgrade</span>
|
||||
</button>
|
||||
<button class="nav-item" data-view="royalty" data-feature="audio">
|
||||
<span class="nav-icon">⚖️</span>
|
||||
<span>Diritti</span>
|
||||
</button>
|
||||
|
||||
<div class="nav-section-label">Altro</div>
|
||||
<button class="nav-item" data-view="record" data-feature="record">
|
||||
@@ -591,6 +595,22 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h2 class="section-label">Jamendo (tab Diritti)</h2>
|
||||
<div class="card">
|
||||
<div class="field">
|
||||
<label class="field-label">Jamendo client_id (opzionale, per check royalty-free)</label>
|
||||
<input type="text" id="jamendoClientIdInput" class="input pill" placeholder="Es: 0e23c33a" />
|
||||
<div class="hint">
|
||||
<span class="hint-ico">ⓘ</span>
|
||||
<div>
|
||||
Registrati gratis su <code>devportal.jamendo.com</code> per avere una chiave e
|
||||
verificare contro il catalogo Jamendo (~500k brani Creative Commons).
|
||||
Senza chiave la tab Diritti usa solo ccMixter.
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h2 class="section-label">Download</h2>
|
||||
<div class="card">
|
||||
<div class="field">
|
||||
@@ -1709,6 +1729,96 @@
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- ===== VIEW: DIRITTI (royalty-free check) ===== -->
|
||||
<section class="view" id="view-royalty">
|
||||
<header class="hero hero-amber">
|
||||
<div class="hero-content">
|
||||
<div class="hero-eyebrow amber">DIRITTI</div>
|
||||
<h1 class="hero-title">Royalty-free o da verificare</h1>
|
||||
<p class="hero-subtitle">
|
||||
Confronta i brani locali con i cataloghi Creative Commons
|
||||
(ccMixter, Jamendo). Segnala solo i brani con match certo RF —
|
||||
gli altri richiedono verifica manuale.
|
||||
</p>
|
||||
</div>
|
||||
<div class="hero-deco">⚖️</div>
|
||||
</header>
|
||||
|
||||
<h2 class="section-label">Cartella da analizzare</h2>
|
||||
<div class="card">
|
||||
<div class="beatport-header">
|
||||
<button id="royalty-pick-folder" class="btn btn-primary pill">📁 Scegli cartella</button>
|
||||
<button id="royalty-start-btn" class="btn btn-amber pill" disabled>
|
||||
<span class="ico">▶</span> Avvia analisi
|
||||
</button>
|
||||
<button id="royalty-stop-btn" class="btn btn-danger pill" hidden>
|
||||
<span class="ico">◼</span> Interrompi
|
||||
</button>
|
||||
</div>
|
||||
<div class="beatport-header" style="margin-top:12px;">
|
||||
<span id="royalty-path-display" class="beatport-output-info" style="margin:0;">Nessuna cartella selezionata</span>
|
||||
</div>
|
||||
<div class="beatport-header" style="margin-top:12px;gap:16px;">
|
||||
<label style="display:flex;gap:6px;align-items:center;color:var(--text-2);font-size:13px;">
|
||||
<input type="checkbox" id="royalty-recursive" checked />
|
||||
<span>Ricerca ricorsiva (include sottocartelle)</span>
|
||||
</label>
|
||||
</div>
|
||||
<div class="hint" style="margin-top:10px;">
|
||||
<span class="hint-ico">ⓘ</span>
|
||||
<div>
|
||||
L'app verifica solo contro DB <strong>Creative Commons / royalty-free</strong>.
|
||||
"Non trovato" NON implica automaticamente SIAE: significa "da verificare manualmente".
|
||||
Per abilitare anche Jamendo registra una <code>client_id</code> gratuita su
|
||||
<code>devportal.jamendo.com</code> e inseriscila in Impostazioni.
|
||||
</div>
|
||||
</div>
|
||||
<div id="royalty-status" class="beatport-status"></div>
|
||||
</div>
|
||||
|
||||
<h2 class="section-label">Progresso</h2>
|
||||
<div class="card">
|
||||
<div class="progress">
|
||||
<div class="progress-bar"><div id="royaltyProgressFill" class="progress-fill amber"></div></div>
|
||||
<div class="progress-meta">
|
||||
<span id="royaltyPercent" class="percent amber">0%</span>
|
||||
<span id="royaltyCounter">In attesa</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h2 class="section-label">Risultati</h2>
|
||||
<div class="card" id="royalty-summary-card" hidden>
|
||||
<div class="catalog-summary" id="royalty-summary-line"></div>
|
||||
</div>
|
||||
<div id="royalty-table-wrap" class="royalty-scroll" hidden>
|
||||
<table class="catalog-table royalty-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="royalty-col-file">File</th>
|
||||
<th class="royalty-col-artist">Artista</th>
|
||||
<th class="royalty-col-title">Titolo</th>
|
||||
<th class="royalty-col-status">Stato</th>
|
||||
<th class="royalty-col-match">Match / Licenza</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="royalty-table-body"></tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<div class="catalog-footer-bar" id="royalty-footer-bar" hidden>
|
||||
<span class="counter" id="royalty-footer-count">0 file analizzati</span>
|
||||
<button id="royalty-export-csv" class="btn btn-ghost pill" disabled>
|
||||
<span class="ico">📄</span> Esporta CSV
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<h2 class="section-label">Log</h2>
|
||||
<div class="card log-card">
|
||||
<div class="log" id="royalty-log"></div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
</main>
|
||||
</div>
|
||||
|
||||
|
||||
Reference in new issue
Block a user