Move automatic youtube backend import/export to export/import tab

This commit is contained in:
WardPearce
2026-03-07 00:20:11 +13:00
parent 546443cb62
commit 0cb9675cdd
3 changed files with 75 additions and 76 deletions
@@ -1,21 +1,14 @@
<script lang="ts">
import { _ } from '$lib/i18n';
import {
invidiousAuthStore,
engineCooldownYTStore,
engineCullYTStore,
engineFallbacksStore,
engineMaxConcurrentChannelsStore,
invidiousInstanceStore,
backendInUseStore
} from '$lib/store';
import { useEngineFallback, type EngineFallback } from '$lib/api/misc';
import { get } from 'svelte/store';
import { getSubscriptions } from '$lib/api';
import { addToast, toaster } from '../Toast.svelte';
import { importSubscriptions } from '$lib/importExport';
import { postSubscribeInvidious } from '$lib/api/invidious/subscribe';
import { getSubscriptionsInvidious } from '$lib/api/invidious/feed';
const engineFallbacks: EngineFallback[] = [
'Channel',
@@ -45,55 +38,6 @@
engineFallbacksStore.set(enabledFallbacks);
}
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<void>[] = [];
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')
}
});
}
</script>
<article class="error-container">
@@ -138,23 +82,6 @@
/>
<label for="concurrent">{$_('layout.backendEngine.concurrent')}</label>
</div>
{#if $invidiousAuthStore && $invidiousInstanceStore}
<h6>{$_('layout.backendEngine.importExport')}</h6>
<div class="space"></div>
<button onclick={exportMaterialiousSubs} class="surface-container-highest">
<i>upload</i>
<div>{$_('layout.backendEngine.exportToInvidious')}</div>
</button>
<div class="space"></div>
<button onclick={importInvidiousSubs} class="surface-container-highest">
<i>download</i>
<div>{$_('layout.backendEngine.importToMaterialious')}</div>
</button>
{/if}
{:else}
<h6>{$_('layout.backendEngine.fallbacks')}</h6>
{#each engineFallbacks as fallback (fallback)}
@@ -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<void>[] = [];
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')
}
});
}
</script>
<div>
<button>
<button class="surface-container-highest">
<i>attach_file</i>
<span>{$_('layout.export.importSub')}</span>
</button>
@@ -40,7 +94,7 @@
<div class="space"></div>
<div>
<button>
<button class="surface-container-highest">
<i>file_export</i>
<span>{$_('layout.export.exportSub')}</span>
</button>
@@ -53,3 +107,21 @@
</li>
</menu>
</div>
{#if $invidiousAuthStore && $invidiousInstanceStore && $backendInUseStore === 'yt'}
<div class="space"></div>
<h6>{$_('layout.backendEngine.importExport')}</h6>
<div class="space"></div>
<button onclick={exportMaterialiousSubs} class="surface-container-highest">
<i>upload</i>
<div>{$_('layout.backendEngine.exportToInvidious')}</div>
</button>
<div class="space"></div>
<button onclick={importInvidiousSubs} class="surface-container-highest">
<i>download</i>
<div>{$_('layout.backendEngine.importToMaterialious')}</div>
</button>
{/if}
+1 -1
View File
@@ -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",