Merge: promote dev to prod
This commit is contained in:
commit
2a1ce896c6
6 changed files with 41 additions and 20 deletions
2
VERSION
2
VERSION
|
|
@ -1 +1 @@
|
||||||
0.34.1
|
0.34.2
|
||||||
|
|
@ -461,6 +461,10 @@ function PlexWatchSync() {
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const busy = toggle.isPending || reimport.isPending;
|
||||||
|
// Reflect the toggle's target immediately (optimistic) so the switch responds on click rather than
|
||||||
|
// only flipping once the multi-second import returns — otherwise it reads as "nothing happened".
|
||||||
|
const shown = toggle.isPending ? Boolean(toggle.variables) : enabled;
|
||||||
const last = link.data?.last_watch_sync_at
|
const last = link.data?.last_watch_sync_at
|
||||||
? new Date(link.data.last_watch_sync_at).toLocaleString(i18n.language)
|
? new Date(link.data.last_watch_sync_at).toLocaleString(i18n.language)
|
||||||
: null;
|
: null;
|
||||||
|
|
@ -470,25 +474,31 @@ function PlexWatchSync() {
|
||||||
<p className="text-xs text-muted leading-relaxed mb-2">{t("settings.plexSync.intro")}</p>
|
<p className="text-xs text-muted leading-relaxed mb-2">{t("settings.plexSync.intro")}</p>
|
||||||
<SettingRow label={t("settings.plexSync.toggle")} hint={t("settings.plexSync.toggleHint")}>
|
<SettingRow label={t("settings.plexSync.toggle")} hint={t("settings.plexSync.toggleHint")}>
|
||||||
<Switch
|
<Switch
|
||||||
checked={enabled}
|
checked={shown}
|
||||||
disabled={toggle.isPending || reimport.isPending}
|
disabled={busy}
|
||||||
onChange={(v) => !toggle.isPending && toggle.mutate(v)}
|
onChange={(v) => !busy && toggle.mutate(v)}
|
||||||
/>
|
/>
|
||||||
</SettingRow>
|
</SettingRow>
|
||||||
{enabled && (
|
{busy ? (
|
||||||
<div className="mt-2 flex items-center justify-between gap-3">
|
<div className="mt-2 flex items-center gap-2 text-xs text-muted">
|
||||||
<p className="text-xs text-muted">
|
<RefreshCw className="w-3.5 h-3.5 animate-spin" />
|
||||||
{last ? t("settings.plexSync.lastSync", { when: last }) : t("settings.plexSync.never")}
|
{t("settings.plexSync.importing")}
|
||||||
</p>
|
|
||||||
<button
|
|
||||||
onClick={() => reimport.mutate()}
|
|
||||||
disabled={reimport.isPending}
|
|
||||||
className="inline-flex items-center gap-1.5 px-3 py-2 rounded-xl text-sm border border-border hover:bg-card/60 disabled:opacity-50 transition shrink-0"
|
|
||||||
>
|
|
||||||
<RefreshCw className={`w-4 h-4 ${reimport.isPending ? "animate-spin" : ""}`} />
|
|
||||||
{t("settings.plexSync.importNow")}
|
|
||||||
</button>
|
|
||||||
</div>
|
</div>
|
||||||
|
) : (
|
||||||
|
enabled && (
|
||||||
|
<div className="mt-2 flex items-center justify-between gap-3">
|
||||||
|
<p className="text-xs text-muted">
|
||||||
|
{last ? t("settings.plexSync.lastSync", { when: last }) : t("settings.plexSync.never")}
|
||||||
|
</p>
|
||||||
|
<button
|
||||||
|
onClick={() => reimport.mutate()}
|
||||||
|
className="inline-flex items-center gap-1.5 px-3 py-2 rounded-xl text-sm border border-border hover:bg-card/60 transition shrink-0"
|
||||||
|
>
|
||||||
|
<RefreshCw className="w-4 h-4" />
|
||||||
|
{t("settings.plexSync.importNow")}
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
)
|
||||||
)}
|
)}
|
||||||
</Section>
|
</Section>
|
||||||
);
|
);
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,8 @@
|
||||||
"importNow": "Jetzt aus Plex importieren",
|
"importNow": "Jetzt aus Plex importieren",
|
||||||
"imported": "Aus Plex importiert: {{watched}} gesehen, {{in_progress}} laufend.",
|
"imported": "Aus Plex importiert: {{watched}} gesehen, {{in_progress}} laufend.",
|
||||||
"lastSync": "Letzter Import: {{when}}",
|
"lastSync": "Letzter Import: {{when}}",
|
||||||
"never": "Noch nicht importiert"
|
"never": "Noch nicht importiert",
|
||||||
|
"importing": "Plex-Wiedergabeverlauf wird importiert…"
|
||||||
},
|
},
|
||||||
"save": {
|
"save": {
|
||||||
"unsaved": "Nicht gespeicherte Änderungen",
|
"unsaved": "Nicht gespeicherte Änderungen",
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,8 @@
|
||||||
"importNow": "Import from Plex now",
|
"importNow": "Import from Plex now",
|
||||||
"imported": "Imported from Plex: {{watched}} watched, {{in_progress}} in progress.",
|
"imported": "Imported from Plex: {{watched}} watched, {{in_progress}} in progress.",
|
||||||
"lastSync": "Last import: {{when}}",
|
"lastSync": "Last import: {{when}}",
|
||||||
"never": "Not imported yet"
|
"never": "Not imported yet",
|
||||||
|
"importing": "Importing your Plex watch history…"
|
||||||
},
|
},
|
||||||
"save": {
|
"save": {
|
||||||
"unsaved": "Unsaved changes",
|
"unsaved": "Unsaved changes",
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,8 @@
|
||||||
"importNow": "Importálás a Plexből most",
|
"importNow": "Importálás a Plexből most",
|
||||||
"imported": "Importálva a Plexből: {{watched}} megnézve, {{in_progress}} folyamatban.",
|
"imported": "Importálva a Plexből: {{watched}} megnézve, {{in_progress}} folyamatban.",
|
||||||
"lastSync": "Utolsó import: {{when}}",
|
"lastSync": "Utolsó import: {{when}}",
|
||||||
"never": "Még nincs importálva"
|
"never": "Még nincs importálva",
|
||||||
|
"importing": "Plex-előzmény importálása…"
|
||||||
},
|
},
|
||||||
"save": {
|
"save": {
|
||||||
"unsaved": "Nem mentett változások",
|
"unsaved": "Nem mentett változások",
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,14 @@ export interface ReleaseEntry {
|
||||||
}
|
}
|
||||||
|
|
||||||
export const RELEASE_NOTES: ReleaseEntry[] = [
|
export const RELEASE_NOTES: ReleaseEntry[] = [
|
||||||
|
{
|
||||||
|
version: "0.34.2",
|
||||||
|
date: "2026-07-09",
|
||||||
|
summary: "Polish: the Plex watch-sync switch now responds instantly.",
|
||||||
|
fixes: [
|
||||||
|
"The Plex watch-sync switch now flips the moment you click it and shows an \"Importing…\" indicator while it works, instead of appearing to do nothing until the import finished.",
|
||||||
|
],
|
||||||
|
},
|
||||||
{
|
{
|
||||||
version: "0.34.1",
|
version: "0.34.1",
|
||||||
date: "2026-07-09",
|
date: "2026-07-09",
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue