{$_('layout.backendEngine.warning')}
+diff --git a/materialious/src/lib/components/settings/Filters.svelte b/materialious/src/lib/components/settings/Filters.svelte
index 78904f1e..d7761e8c 100644
--- a/materialious/src/lib/components/settings/Filters.svelte
+++ b/materialious/src/lib/components/settings/Filters.svelte
@@ -3,10 +3,16 @@
import { ChannelSchema, VideoSchema, type SchemaStructure } from '$lib/filtering/schemas';
import { _ } from '$lib/i18n';
import { titleCase, camelCaseToHuman } from '$lib/letterCasing';
- import { filterContentListStore } from '$lib/store';
+ import {
+ filterContentListStore,
+ filterContentUrlAutoUpdateStore,
+ filterContentUrlStore
+ } from '$lib/store';
import type z from 'zod';
+ import { addToast } from '../Toast.svelte';
+ import { Clipboard } from '@capacitor/clipboard';
- let remoteFilterListUrl: string = $state('');
+ let remoteFilterListUrl: string = $state($filterContentUrlStore ?? '');
let remoteError: string = $state('');
type FilterType = 'channel' | 'video';
@@ -33,11 +39,33 @@
try {
contentFilters = await loadContentFilterFromURL(remoteFilterListUrl);
filterContentListStore.set(contentFilters);
+ filterContentUrlStore.set(remoteFilterListUrl);
+ filterContentUrlAutoUpdateStore.set(false);
} catch (errorMsg) {
remoteError = (errorMsg as Error).message;
}
}
+ async function exportAsJSON() {
+ await Clipboard.write({
+ string: JSON.stringify(
+ {
+ version: 'v1',
+ createdFor: 'materialious',
+ filterBy: contentFilters
+ },
+ null,
+ 2
+ )
+ });
+
+ addToast({
+ data: {
+ text: $_('player.share.copiedSuccess')
+ }
+ });
+ }
+
function addFilter(type: FilterType) {
if (!contentFilters) contentFilters = [];
@@ -58,6 +86,10 @@
}
+ {$_('layout.backendEngine.warning')}