diff --git a/src/components/left/settings/SettingsAyuLike.tsx b/src/components/left/settings/SettingsAyuLike.tsx index 46e55c3dc..30f02d873 100644 --- a/src/components/left/settings/SettingsAyuLike.tsx +++ b/src/components/left/settings/SettingsAyuLike.tsx @@ -33,7 +33,7 @@ const SettingsAyuLike = ({ messageFilters, onReset, }: OwnProps & StateProps) => { - const { setSharedSettingOption } = getActions(); + const { setSharedSettingOption, showNotification } = getActions(); const fileInputRef = useRef(); const [isClearConfirmOpen, openClearConfirm, closeClearConfirm] = useFlag(false); @@ -59,11 +59,16 @@ const SettingsAyuLike = ({ reader.onload = () => { try { const imported = importFromAyuGram(JSON.parse(reader.result as string)); - setSharedSettingOption({ - ayuLike: { hideSponsoredMessages, messageFilters: imported }, - }); + if (imported.length === 0) { + showNotification({ message: 'No valid filter rules found in file' }); + } else { + setSharedSettingOption({ + ayuLike: { hideSponsoredMessages, messageFilters: imported }, + }); + showNotification({ message: `Imported ${imported.length} filter rules` }); + } } catch { - // Silently ignore malformed files — user will see no change + showNotification({ message: 'Invalid file: not a valid AyuGram filter export' }); } // Reset so the same file can be re-imported e.target.value = ''; diff --git a/src/util/ayuLike/messageFilters.ts b/src/util/ayuLike/messageFilters.ts index dbeff25ec..ba177b426 100644 --- a/src/util/ayuLike/messageFilters.ts +++ b/src/util/ayuLike/messageFilters.ts @@ -47,16 +47,23 @@ interface AyuGramExport { export function importFromAyuGram(json: unknown): MessageFilterRule[] { const data = json as AyuGramExport; - if (!Array.isArray(data?.filters)) throw new Error('Invalid AyuGram export format'); + if (!data || typeof data !== 'object' || !Array.isArray(data.filters)) { + throw new Error('Invalid AyuGram export format'); + } - return data.filters.map((f) => ({ - id: f.id, - enabled: Boolean(f.enabled), - reversed: Boolean(f.reversed), - caseInsensitive: Boolean(f.caseInsensitive), - regex: f.text, - chatIds: f.dialogId ? [String(f.dialogId)] : undefined, - })); + return data.filters.flatMap((f) => { + if (!f || typeof f !== 'object') return []; + if (typeof f.id !== 'string' || !f.id) return []; + if (typeof f.text !== 'string' || !f.text) return []; + return [{ + id: f.id, + enabled: Boolean(f.enabled), + reversed: Boolean(f.reversed), + caseInsensitive: Boolean(f.caseInsensitive), + regex: f.text, + chatIds: f.dialogId ? [String(f.dialogId)] : undefined, + }]; + }); } export function exportToAyuGram(rules: MessageFilterRule[]): string {