source: Klonkt/src/views/pages/admin-migrate.ejs@ 98acb97

main
Last change on this file since 98acb97 was 9529d7b, checked in by Robin <roboburr@…>, 4 weeks ago

De teller zweeg over je muziek

Robin liet een schermafbeelding van sound-fabrics.com zien: 36 berichten, 39
mediabestanden, 14 ontbrekende verwijzingen, 4,5 MB groot. Op een site met 140
nummers en 11 playlists. Zijn reactie: dit klopt dan niet.

Dat klopte inderdaad niet, en het was niet alleen de oude formaatversie. Ook
ná v2 zou de pagina er zo uitzien, want ik had tracks, playlists en
audioMissing wel in de service gezet en nooit op het scherm. Je exporteert dan
je hele bibliotheek en ziet nergens of hij erin zit. Dat is precies het stille
verlies dat v2 zou opruimen, alleen dan in de interface.

Drie dingen rechtgezet:

MUZIEK TELT APART. Niet onder "media". Die ene regel was waarom een export van
140 nummers er als "39 mediabestanden" uit kon zien.

DE TELLER TELT WAT ER ECHT MEEGAAT. Eerst stond er het aantal rijen in de
database, dus "8 nummers" met daaronder "van 3 ontbreekt het bestand". Dat telt
niet op. Nu staat er 5, en de waarschuwing vertelt de andere 3.

DE VERSLAGEN OOK. Import en ophalen lieten hun muziek net zo min zien. Bij een
mislukt nummer staat er nu bij waarom er GEEN track is aangemaakt, want anders
leest "3 niet aangekomen" als een fout in plaats van als de bedoeling.

Gemeten met 8 nummers waarvan 3 zoek: de pagina zegt "5 nummers" plus "van 3
nummer(s) is het geluidsbestand niet te vinden", en het importverslag zegt "5
nummers, 1 playlists, 3 niet aangekomen". Alles telt op.

Changed files:
src/views/pages/admin-migrate.ejs

  • nummers en playlists in de exporttelling, en het aantal dat ECHT meegaat
  • eigen waarschuwing voor ontbrekende audio, los van media
  • import- en ophaalverslag tonen nummers, playlists en wat er niet kwam
  • dode tak eruit die nooit kon vuren (tracks 0 EN audioMissing 0 EN muziek)

src/routes/admin-migrate.js

  • ontbrekend telt alleen nog media; audioMissing komt apart mee

src/services/i18n.js

  • mig.c_tracks / c_playlists / audio_missing / r_tracks_missing in nl/en/de

remarks: sound-fabrics.com draait nog v1, dus daar blijft die schermafbeelding
kloppen tot de update erop staat. Die deploy is nog niet gedaan.

-robo
Co-Authored-By: Claude Opus 4.8 <noreply@…>

  • Property mode set to 100644
File size: 11.3 KB
Line 
1<div class="container mig-wrap">
2 <h1><%= t('mig.title') %></h1>
3 <p class="mig-lead"><%= t('mig.lead') %></p>
4
5 <% if (typeof success !== 'undefined' && success) { %><div class="alert alert-success"><%= success %></div><% } %>
6 <% if (typeof error !== 'undefined' && error) { %><div class="alert alert-error"><%= error %></div><% } %>
7
8 <%# ── Exporteren ─────────────────────────────────────────────── %>
9 <section class="mig-card">
10 <h2><%= t('mig.export_title') %></h2>
11 <p class="form-hint"><%= t('mig.export_hint') %></p>
12
13 <% if (telling) { %>
14 <ul class="mig-counts">
15 <li><strong><%= telling.posts %></strong> <%= t('mig.c_posts') %></li>
16 <li><strong><%= telling.replies %></strong> <%= t('mig.c_replies') %></li>
17 <li><strong><%= telling.media %></strong> <%= t('mig.c_media') %></li>
18 <%# Muziek APART tellen, niet onder "media". Dit ontbrak, en juist daardoor
19 kon een export van 140 nummers er als 4,5 MB uitzien zonder dat iemand
20 het merkte: de teller zei "39 mediabestanden" en zweeg over de rest. %>
21 <% if (telling.tracks) { %>
22 <%# Wat er ECHT meegaat, niet hoeveel rijen er in de database staan.
23 "8 nummers" met daaronder "van 3 ontbreekt het bestand" telt niet
24 op; 5 plus die waarschuwing wel. %>
25 <li><strong><%= telling.tracks - (telling.audioMissing || 0) %></strong> <%= t('mig.c_tracks') %></li>
26 <% } %>
27 <% if (telling.playlists) { %>
28 <li><strong><%= telling.playlists %></strong> <%= t('mig.c_playlists') %></li>
29 <% } %>
30 <% if (typeof telling.following === 'number') { %>
31 <li><strong><%= telling.following %></strong> <%= t('mig.c_following') %></li>
32 <% } %>
33 <li><strong><%= mb(telling.bytes) %></strong> <%= t('mig.c_size') %></li>
34 </ul>
35
36 <% if (telling.ontbrekend) { %>
37 <%# Niets stils: media die op schijf ontbreekt wordt geteld en gemeld, want
38 een archief dat stilzwijgend minder bevat is erger dan een waarschuwing. %>
39 <p class="alert alert-error"><%= t('mig.missing', { n: telling.ontbrekend }) %></p>
40 <% } %>
41
42 <% if (telling.audioMissing) { %>
43 <%# Een eigen zin voor muziek. "N mediaverwijzingen" zei niets over de
44 vraag die er toe doet: gaat mijn bibliotheek mee. %>
45 <p class="alert alert-error"><%= t('mig.audio_missing', { n: telling.audioMissing }) %></p>
46 <% } %>
47
48
49 <% if (telling.groot) { %>
50 <p class="alert alert-error"><%= t('mig.too_big') %></p>
51 <% } else { %>
52 <p><a class="btn btn-primary" href="/admin/migrate/export"><%= t('mig.export_btn') %></a></p>
53 <% } %>
54 <% } else { %>
55 <p class="form-hint"><%= t('mig.export_none') %></p>
56 <% } %>
57 </section>
58
59 <%# ── Rechtstreeks ophalen (FEP-1580) ────────────────────────── %>
60 <section class="mig-card">
61 <h2><%= t('mig.pull_title') %></h2>
62 <p class="form-hint"><%= t('mig.pull_hint') %></p>
63
64 <% if (haalVerslag) { %>
65 <div class="mig-report<%= haalVerslag.error ? '' : ' is-done' %>">
66 <% if (haalVerslag.error) { %>
67 <h3><%= t('mig.pull_failed') %></h3>
68 <%# Elke weigering krijgt een eigen zin. "Er ging iets mis" laat je
69 raden welke van de twee kanten van de afspraak ontbreekt, en dat
70 is precies wat je moet weten om het op te lossen. %>
71 <p><%= t('mig.e_' + haalVerslag.error) !== 'mig.e_' + haalVerslag.error
72 ? t('mig.e_' + haalVerslag.error) : (haalVerslag.melding || haalVerslag.error) %></p>
73 <% if (haalVerslag.error === 'not_moved_here' && haalVerslag.movedTo) { %>
74 <p class="form-hint"><%= t('mig.e_points_at') %> <code><%= haalVerslag.movedTo %></code></p>
75 <% } %>
76 <% } else { %>
77 <h3><%= t('mig.pull_done') %></h3>
78 <ul class="mig-counts">
79 <li><strong><%= haalVerslag.posts %></strong> <%= t('mig.r_imported') %></li>
80 <% if (haalVerslag.overgeslagen) { %><li><strong><%= haalVerslag.overgeslagen %></strong> <%= t('mig.r_skipped') %></li><% } %>
81 <% if (haalVerslag.media) { %><li><strong><%= haalVerslag.media %></strong> <%= t('mig.r_media') %></li><% } %>
82 <% if (haalVerslag.blocks) { %><li><strong><%= haalVerslag.blocks %></strong> <%= t('mig.r_blocks') %></li><% } %>
83 <% if (haalVerslag.tracksBinnen) { %><li><strong><%= haalVerslag.tracksBinnen %></strong> <%= t('mig.c_tracks') %></li><% } %>
84 </ul>
85 <% if (haalVerslag.tracksMislukt) { %>
86 <p class="alert alert-error"><%= t('mig.r_tracks_missing', { n: haalVerslag.tracksMislukt }) %></p>
87 <% } %>
88 <% } %>
89 <% if (haalVerslag.waarschuwingen && haalVerslag.waarschuwingen.length) { %>
90 <ul class="mig-warnlist">
91 <% haalVerslag.waarschuwingen.slice(0, 6).forEach(function (w) { %><li><%= w %></li><% }); %>
92 </ul>
93 <% } %>
94 </div>
95 <% } %>
96
97 <form method="post" action="/admin/migrate/pull">
98 <label for="mig-bron"><%= t('mig.pull_source') %></label>
99 <input type="url" id="mig-bron" name="bron" value="<%= bron || '' %>"
100 placeholder="https://oude-klonkt.nl/ap/users/jij" class="mig-input">
101 <p class="form-hint"><%= t('mig.pull_source_hint') %></p>
102 <button type="submit" class="btn"><%= t('mig.pull_btn') %></button>
103 </form>
104
105 <% if (mig && (mig.total || mig.moves)) { %>
106 <p class="form-hint mig-state">
107 <%= t('mig.state', { n: mig.total }) %>
108 <%= mig.complete ? t('mig.state_done') : t('mig.state_busy') %>
109 </p>
110 <% } %>
111 </section>
112
113 <%# ── Importeren ─────────────────────────────────────────────── %>
114 <section class="mig-card">
115 <h2><%= t('mig.import_title') %></h2>
116 <p class="form-hint"><%= t('mig.import_hint') %></p>
117
118 <% if (verslag) { %>
119 <div class="mig-report<%= verslag.echt ? ' is-done' : '' %>">
120 <h3><%= verslag.echt ? t('mig.r_done') : t('mig.r_dry') %></h3>
121 <p class="form-hint"><%= verslag.bestand %> &middot; <%= mb(verslag.bytes) %></p>
122 <ul class="mig-counts">
123 <li><strong><%= verslag.posts %></strong> <%= verslag.echt ? t('mig.r_imported') : t('mig.r_would') %></li>
124 <li><strong><%= verslag.overgeslagen %></strong> <%= t('mig.r_skipped') %></li>
125 <% if (verslag.overschreven) { %><li><strong><%= verslag.overschreven %></strong> <%= t('mig.r_overwritten') %></li><% } %>
126 <% if (verslag.mediaMissing) { %><li><strong><%= verslag.mediaMissing %></strong> <%= t('mig.r_media_missing') %></li><% } %>
127 <% if (verslag.media) { %><li><strong><%= verslag.media %></strong> <%= t('mig.r_media') %></li><% } %>
128 <%# Ook hier: muziek apart. Zonder deze twee regels zie je aan de
129 ontvangende kant net zo min of je bibliotheek is aangekomen. %>
130 <% if (verslag.tracks) { %><li><strong><%= verslag.tracks %></strong> <%= t('mig.c_tracks') %></li><% } %>
131 <% if (verslag.playlists) { %><li><strong><%= verslag.playlists %></strong> <%= t('mig.c_playlists') %></li><% } %>
132 </ul>
133 <% if (verslag.tracksMissing) { %>
134 <p class="alert alert-error"><%= t('mig.r_tracks_missing', { n: verslag.tracksMissing }) %></p>
135 <% } %>
136 <% if (verslag.waarschuwingen && verslag.waarschuwingen.length) { %>
137 <ul class="mig-warnlist">
138 <% verslag.waarschuwingen.slice(0, 6).forEach(function (w) { %><li><%= w %></li><% }); %>
139 </ul>
140 <% } %>
141 <% if (verslag.idsBehouden === false) { %>
142 <%# Dit is de belangrijkste regel van het hele verslag: komt het archief
143 van een ANDER adres, dan krijgen de posts nieuwe id's en zijn het
144 nieuwe objecten voor de fediverse. %>
145 <p class="alert alert-error"><%= t('mig.r_new_ids') %></p>
146 <% } %>
147
148 <% if (!verslag.echt && verslag.posts > 0) { %>
149 <form method="post" action="/admin/migrate/import" enctype="multipart/form-data" class="mig-confirm">
150 <p class="form-hint"><%= t('mig.r_confirm_hint') %></p>
151 <label for="mig-file2"><%= t('mig.file_label') %></label>
152 <input type="file" id="mig-file2" name="archief" accept=".zip,application/zip" required>
153 <input type="hidden" name="echt" value="1">
154 <% if (verslag.overschrijf) { %><input type="hidden" name="overschrijf" value="1"><% } %>
155 <button type="submit" class="btn btn-primary"><%= t('mig.r_confirm_btn') %></button>
156 </form>
157 <% } %>
158 </div>
159 <% } %>
160
161 <form method="post" action="/admin/migrate/import" enctype="multipart/form-data">
162 <label for="mig-file"><%= t('mig.file_label') %></label>
163 <input type="file" id="mig-file" name="archief" accept=".zip,application/zip" required>
164
165 <label class="mig-check">
166 <input type="checkbox" name="overschrijf" value="1">
167 <%= t('mig.overwrite_label') %>
168 </label>
169 <p class="form-hint mig-warn"><%= t('mig.overwrite_hint') %></p>
170
171 <button type="submit" class="btn"><%= t('mig.check_btn') %></button>
172 <p class="form-hint"><%= t('mig.check_hint') %></p>
173 </form>
174 </section>
175
176 <%# ── Wie je volgt ────────────────────────────────────────────── %>
177 <section class="mig-card">
178 <h2><%= t('mig.follows_title') %></h2>
179 <p class="form-hint"><%= t('mig.follows_hint') %></p>
180 <p><a class="btn" href="/connect"><%= t('mig.follows_btn') %></a></p>
181 </section>
182</div>
183
184<style>
185 .mig-wrap { max-width: 46rem; }
186 .mig-lead { color: var(--sub); margin-bottom: 1.5rem; }
187 .mig-card { border: 1px solid var(--rule); border-radius: 12px; padding: 1.25rem 1.4rem; margin-bottom: 1.25rem; }
188 .mig-card h2 { margin: 0 0 .35rem; font-size: 1.1rem; }
189 .mig-counts { list-style: none; padding: 0; margin: .9rem 0; display: flex; flex-wrap: wrap; gap: .4rem 1.4rem; }
190 .mig-counts li { color: var(--sub); font-size: .94rem; }
191 .mig-counts strong { color: var(--ink); font-size: 1.05rem; }
192 .mig-card label { display: block; margin: .9rem 0 .35rem; font-weight: 600; font-size: .92rem; }
193 .mig-card input[type="file"] { display: block; margin-bottom: .6rem; }
194 .mig-check { display: flex; align-items: center; gap: .5rem; font-weight: 400 !important; }
195 .mig-input { width: 100%; max-width: 34rem; padding: .5rem .6rem; border: 1px solid var(--rule);
196 border-radius: 8px; background: transparent; color: var(--ink); font-size: .95rem; }
197 .mig-state { margin-top: .9rem; }
198 .mig-report code { word-break: break-all; font-size: .88rem; }
199 .mig-warn { color: var(--accent); }
200 .mig-report { border-left: 3px solid var(--accent); padding: .8rem 1rem; margin-bottom: 1.2rem;
201 background: color-mix(in srgb, var(--ink, #000) 4%, transparent); border-radius: 0 8px 8px 0; }
202 .mig-report.is-done { border-left-color: #3fa843; }
203 .mig-report h3 { margin: 0 0 .3rem; font-size: 1rem; }
204 .mig-warnlist { margin: .5rem 0; padding-left: 1.2rem; color: var(--accent); font-size: .9rem; }
205 .mig-confirm { margin-top: .9rem; padding-top: .9rem; border-top: 1px solid var(--rule); }
206</style>
Note: See TracBrowser for help on using the repository browser.