Index: src/services/i18n.js
===================================================================
--- src/services/i18n.js	(revision 86cfa1a2d9b65efe6ad3db8bd0411bedd61b0f82)
+++ src/services/i18n.js	(revision ca260d13a940f7563a540fad1f1945ef28e9160c)
@@ -400,5 +400,5 @@
     'aaud.delete': 'Verwijderen',
     'aaud.delete_confirm': 'Track verwijderen?',
-    'aaud.dl_on': 'Download-voor-email staat AAN — klik om uit te zetten',
+    'aaud.fedi_open_btn': 'Openbaar delen op de fediverse', 'aaud.fedi_open_on': 'Openbaar gedeeld op de fediverse. Dat is permanent.', 'aaud.fedi_open_confirm': 'Deze track openbaar delen op de fediverse? Hij wordt speelbaar in apps en het bestand is te downloaden. Posts met deze track gaan opnieuw naar je volgers. Dit is permanent en niet terug te draaien.', 'aaud.fedi_opened': 'Openbaar gedeeld op de fediverse. Posts opnieuw verstuurd: {n}.', 'aaud.fedi_no_file': 'Deze track heeft geen eigen bestand, alleen een link. Er valt niets te openen.', 'aaud.dl_on': 'Download-voor-email staat AAN — klik om uit te zetten',
     'aaud.dl_off': 'Download-voor-email staat uit — klik om aan te zetten',
     'aaud.fedi_on': 'Op de fediverse gedeeld (speelt overal inline, bestand downloadbaar) — klik om uit te zetten',
@@ -1410,5 +1410,5 @@
     'aaud.delete': 'Delete',
     'aaud.delete_confirm': 'Delete track?',
-    'aaud.dl_on': 'Download-for-email is ON — click to turn off',
+    'aaud.fedi_open_btn': 'Share openly on the fediverse', 'aaud.fedi_open_on': 'Shared openly on the fediverse. This is permanent.', 'aaud.fedi_open_confirm': 'Share this track openly on the fediverse? It becomes playable in apps and the file can be downloaded. Posts with this track are sent to your followers again. This is permanent and cannot be undone.', 'aaud.fedi_opened': 'Shared openly on the fediverse. Posts sent again: {n}.', 'aaud.fedi_no_file': 'This track has no file of its own, only a link. There is nothing to open.', 'aaud.dl_on': 'Download-for-email is ON — click to turn off',
     'aaud.dl_off': 'Download-for-email is off — click to turn on',
     'aaud.fedi_on': 'Shared on the fediverse (plays inline everywhere, file downloadable) — click to turn off',
@@ -2419,5 +2419,5 @@
     'aaud.delete': 'Löschen',
     'aaud.delete_confirm': 'Track löschen?',
-    'aaud.dl_on': 'Download-für-E-Mail ist AN — zum Ausschalten klicken',
+    'aaud.fedi_open_btn': 'Offen im Fediverse teilen', 'aaud.fedi_open_on': 'Offen im Fediverse geteilt. Das ist dauerhaft.', 'aaud.fedi_open_confirm': 'Diesen Track offen im Fediverse teilen? Er wird in Apps abspielbar und die Datei kann heruntergeladen werden. Beiträge mit diesem Track werden erneut an deine Follower gesendet. Das ist dauerhaft und kann nicht rückgängig gemacht werden.', 'aaud.fedi_opened': 'Offen im Fediverse geteilt. Erneut gesendete Beiträge: {n}.', 'aaud.fedi_no_file': 'Dieser Track hat keine eigene Datei, nur einen Link. Es gibt nichts zu öffnen.', 'aaud.dl_on': 'Download-für-E-Mail ist AN — zum Ausschalten klicken',
     'aaud.dl_off': 'Download-für-E-Mail ist aus — zum Einschalten klicken',
     'aaud.fedi_on': 'Im Fediverse geteilt (spielt überall inline, Datei herunterladbar) — zum Ausschalten klicken',
Index: src/services/music/index.js
===================================================================
--- src/services/music/index.js	(revision 86cfa1a2d9b65efe6ad3db8bd0411bedd61b0f82)
+++ src/services/music/index.js	(revision ca260d13a940f7563a540fad1f1945ef28e9160c)
@@ -134,4 +134,38 @@
   for (const r of rijen) if (!uit.has(r.tid)) uit.set(r.tid, { id: r.post_id, slug: r.post_slug });
   return uit;
+}
+
+/**
+ * Elke GEPUBLICEERDE post waar deze track in staat, op welke manier ook:
+ * rechtstreeks ([[track:id]]), via een playlist of via zijn albumnaam.
+ *
+ * Voor iets anders dan trackHostPosts, dat per track EEN post kiest voor de
+ * bibliotheek. Opent de mediamanager een track (shaer, 30-9), dan moeten ALLE
+ * posts met die track opnieuw de deur uit, anders krijgt een volger de speler
+ * pas bij de volgende bewerking van die post.
+ *
+ * Alleen posts van deze site: playlists.id is een globale sleutel, en het
+ * filter hoort op de post en de track, niet op de playlist (zie de
+ * tenancy-toets bij setAudioFediOpen).
+ */
+export function postsEmbeddingTrack(siteId, trackId) {
+  const t = db.prepare('SELECT id, album FROM audio_tracks WHERE id = ? AND site_id = ?').get(trackId, siteId);
+  if (!t) return [];
+  const rows = db.prepare(`
+    SELECT p.id FROM posts p
+     WHERE p.site_id = ? AND p.status = 'published'
+       AND p.content LIKE '%[[track:' || ? || ']]%'
+    UNION
+    SELECT p.id FROM playlist_tracks pt
+      JOIN posts p ON p.site_id = ? AND p.status = 'published'
+                  AND p.content LIKE '%[[playlist:' || pt.playlist_id || ']]%'
+     WHERE pt.track_id = ?
+    UNION
+    SELECT p.id FROM posts p
+     WHERE p.site_id = ? AND p.status = 'published'
+       AND ? IS NOT NULL AND ? <> ''
+       AND p.content LIKE '%[[album:' || ? || ']]%'
+  `).all(siteId, t.id, siteId, t.id, siteId, t.album, t.album, t.album);
+  return rows.map((r) => r.id);
 }
 
