diff --git a/materialious/src/lib/components/settings/Engine.svelte b/materialious/src/lib/components/settings/Engine.svelte index 2455f89e..05cd7419 100644 --- a/materialious/src/lib/components/settings/Engine.svelte +++ b/materialious/src/lib/components/settings/Engine.svelte @@ -1,21 +1,14 @@
@@ -138,23 +82,6 @@ /> - - {#if $invidiousAuthStore && $invidiousInstanceStore} -
{$_('layout.backendEngine.importExport')}
-
- - - -
- - - {/if} {:else}
{$_('layout.backendEngine.fallbacks')}
{#each engineFallbacks as fallback (fallback)} diff --git a/materialious/src/lib/components/settings/ExportImport.svelte b/materialious/src/lib/components/settings/ExportImport.svelte index 708d0e4e..c2d345de 100644 --- a/materialious/src/lib/components/settings/ExportImport.svelte +++ b/materialious/src/lib/components/settings/ExportImport.svelte @@ -2,10 +2,64 @@ import { _ } from '$lib/i18n'; import { exportSubscriptionsAsFile, importSubscriptionsFromFile } from '$lib/importExport'; import { addToast, toaster } from '../Toast.svelte'; + import { getSubscriptions } from '$lib/api'; + import { importSubscriptions } from '$lib/importExport'; + import { postSubscribeInvidious } from '$lib/api/invidious/subscribe'; + import { getSubscriptionsInvidious } from '$lib/api/invidious/feed'; + import { backendInUseStore, invidiousAuthStore, invidiousInstanceStore } from '$lib/store'; + + async function importInvidiousSubs() { + const importedSubs = await getSubscriptionsInvidious(); + + addToast({ + data: { + text: $_('layout.backendEngine.importingToMaterialious') + }, + id: 'import-to-materialious', + closeDelay: 0 + }); + + await importSubscriptions(importedSubs); + + toaster.removeToast('import-to-materialious'); + + addToast({ + data: { + text: $_('layout.backendEngine.importingToMaterialiousFinished') + } + }); + } + + async function exportMaterialiousSubs() { + const subs = await getSubscriptions(); + + addToast({ + data: { + text: $_('layout.backendEngine.exportingToInvidious') + }, + id: 'export-to-invidious', + closeDelay: 0 + }); + + const subPromises: Promise[] = []; + for (const sub of subs) { + subPromises.push(postSubscribeInvidious(sub.authorId)); + } + + await Promise.all(subPromises); + + toaster.removeToast('export-to-invidious'); + + addToast({ + data: { + text: $_('layout.backendEngine.exportingToInvidiousFinished') + } + }); + }
- @@ -40,7 +94,7 @@
- @@ -53,3 +107,21 @@
+ +{#if $invidiousAuthStore && $invidiousInstanceStore && $backendInUseStore === 'yt'} +
+
{$_('layout.backendEngine.importExport')}
+
+ + + +
+ + +{/if} diff --git a/materialious/src/lib/i18n/locales/en.json b/materialious/src/lib/i18n/locales/en.json index d0576b84..2d997c5a 100644 --- a/materialious/src/lib/i18n/locales/en.json +++ b/materialious/src/lib/i18n/locales/en.json @@ -210,7 +210,7 @@ "cooldown": "Re-fetch channel hour cooldown", "concurrent": "Max amount of channels to parse before feed return", "fallbacks": "Fallbacks", - "importExport": "Import/Export subscriptions", + "importExport": "Automatic export/import", "exportToInvidious": "Export to Invidious from Materialious", "importToMaterialious": "Import from Invidious to Materialious", "importingToMaterialious": "Importing to Materialious began",