diff --git a/frontend/src/components/Playlists.tsx b/frontend/src/components/Playlists.tsx index 1228904..14c84d5 100644 --- a/frontend/src/components/Playlists.tsx +++ b/frontend/src/components/Playlists.tsx @@ -20,6 +20,7 @@ import { ArrowDown, ArrowUp, Check, + ExternalLink, GripVertical, ListPlus, Pencil, @@ -320,9 +321,8 @@ export default function Playlists({ canWrite }: { canWrite: boolean }) { }, [sortedPlaylists]); const builtin = detail?.kind === "watch_later"; - // YouTube-mirrored playlists can be edited locally and synced back (the read-sync skips - // a dirty mirror so it won't clobber unpushed edits); the chip just marks their origin. - const mirrored = detail?.source === "youtube"; + // YouTube-mirrored playlists can be edited locally and synced back (the read-sync skips a + // dirty mirror so it won't clobber unpushed edits); the YT-link button marks their origin. const editable = !builtin; const linked = editable && !!detail?.yt_playlist_id; const [syncing, setSyncing] = useState(false); @@ -651,7 +651,7 @@ export default function Playlists({ canWrite }: { canWrite: boolean }) { className="text-lg font-semibold bg-card border border-border rounded-md px-2 py-0.5 outline-none focus:border-accent" /> ) : ( -
+

{plName(detail)}

{editable && ( )} + {detail.yt_playlist_id && ( + + + + )}
)}
{t("playlists.itemCount", { count: items.length })}
-
+
+ )} + {linked && detail.dirty && ( + )} {editable && ( )} {linked && detail.dirty && ( - <> - - - {t("playlists.unsynced")} - - - )} - {mirrored && ( - - {t("playlists.ytReadonly")} + + + {t("playlists.unsynced")} )}
diff --git a/frontend/src/i18n/locales/de/playlists.json b/frontend/src/i18n/locales/de/playlists.json index 4494e93..e23f006 100644 --- a/frontend/src/i18n/locales/de/playlists.json +++ b/frontend/src/i18n/locales/de/playlists.json @@ -19,7 +19,9 @@ "addToPlaylist": "Zur Wiedergabeliste hinzufügen", "exportToYoutube": "Zu YouTube exportieren", "pushToYoutube": "Mit YouTube synchronisieren", - "unsynced": "Nicht synchronisierte Änderungen", + "unsynced": "Nicht synchronisiert", + "unsyncedHint": "Du hast lokale Änderungen, die noch nicht mit YouTube synchronisiert sind.", + "openOnYoutube": "Auf YouTube öffnen", "revert": "Von YouTube zurücksetzen", "revertTitle": "Lokale Änderungen verwerfen?", "revertMsg": "Dies lädt die Wiedergabeliste von YouTube neu und verwirft deine nicht synchronisierten lokalen Änderungen (Reihenfolge, Hinzufügungen, Entfernungen, Umbenennung). Fortfahren?", diff --git a/frontend/src/i18n/locales/en/playlists.json b/frontend/src/i18n/locales/en/playlists.json index 8e5eb44..ca48e4c 100644 --- a/frontend/src/i18n/locales/en/playlists.json +++ b/frontend/src/i18n/locales/en/playlists.json @@ -19,7 +19,9 @@ "addToPlaylist": "Add to playlist", "exportToYoutube": "Export to YouTube", "pushToYoutube": "Sync to YouTube", - "unsynced": "Unsynced changes", + "unsynced": "Unsynced", + "unsyncedHint": "You have local changes not yet synced to YouTube.", + "openOnYoutube": "Open on YouTube", "revert": "Reset to YouTube", "revertTitle": "Discard local changes?", "revertMsg": "This reloads the playlist from YouTube and discards your unsynced local changes (order, additions, removals, rename). Continue?", diff --git a/frontend/src/i18n/locales/hu/playlists.json b/frontend/src/i18n/locales/hu/playlists.json index 29240e9..b9f6835 100644 --- a/frontend/src/i18n/locales/hu/playlists.json +++ b/frontend/src/i18n/locales/hu/playlists.json @@ -19,7 +19,9 @@ "addToPlaylist": "Hozzáadás listához", "exportToYoutube": "Exportálás YouTube-ra", "pushToYoutube": "Szinkron YouTube-ra", - "unsynced": "Nem szinkronizált változások", + "unsynced": "Nincs szinkronizálva", + "unsyncedHint": "Vannak helyi módosításaid, amelyek még nincsenek a YouTube-ra szinkronizálva.", + "openOnYoutube": "Megnyitás YouTube-on", "revert": "Visszaállítás YouTube-ról", "revertTitle": "Eldobod a helyi módosításokat?", "revertMsg": "Ez újratölti a listát a YouTube-ról, és eldobja a nem szinkronizált helyi módosításaidat (sorrend, hozzáadás, eltávolítás, átnevezés). Folytatod?",