diff --git a/src/app/core/log.ts b/src/app/core/log.ts index c5ec679355..584bd6db23 100644 --- a/src/app/core/log.ts +++ b/src/app/core/log.ts @@ -271,4 +271,10 @@ export const IssueLog = Log.withContext('issue'); export const DroidLog = Log.withContext('droid'); export const TaskLog = Log.withContext('task'); -export const downloadLogs = (): void => download('SP-logs', Log.exportLogHistory()); +export const downloadLogs = async (): Promise => { + try { + await download('SP-logs.json', Log.exportLogHistory()); + } catch (error) { + Log.err('Failed to download logs:', error); + } +}; diff --git a/src/app/pages/config-page/config-page.component.html b/src/app/pages/config-page/config-page.component.html index 1800e1fc23..3db7a12e2e 100644 --- a/src/app/pages/config-page/config-page.component.html +++ b/src/app/pages/config-page/config-page.component.html @@ -101,7 +101,7 @@ > – Logs diff --git a/src/app/pages/config-page/config-page.component.ts b/src/app/pages/config-page/config-page.component.ts index ca4d11885e..f9080ecdd6 100644 --- a/src/app/pages/config-page/config-page.component.ts +++ b/src/app/pages/config-page/config-page.component.ts @@ -44,6 +44,7 @@ import { PluginService } from '../../plugins/plugin.service'; import { PluginShortcutCfg } from '../../plugins/plugin-api.model'; import { ThemeSelectorComponent } from '../../core/theme/theme-selector/theme-selector.component'; import { downloadLogs, Log } from '../../core/log'; +import { SnackService } from '../../core/snack/snack.service'; @Component({ selector: 'config-page', @@ -68,6 +69,7 @@ export class ConfigPageComponent implements OnInit, OnDestroy { readonly globalThemeService = inject(GlobalThemeService); private readonly _pluginBridgeService = inject(PluginBridgeService); private readonly _pluginService = inject(PluginService); + private readonly _snackService = inject(SnackService); T: typeof T = T; globalConfigFormCfg: ConfigFormConfig; @@ -229,5 +231,12 @@ export class ConfigPageComponent implements OnInit, OnDestroy { return (this.globalCfg as any)[sectionKey]; } - protected readonly downloadLogs = downloadLogs; + async downloadLogs(): Promise { + try { + await downloadLogs(); + this._snackService.open('Logs downloaded to android documents folder'); + } catch (error) { + this._snackService.open('Failed to download logs'); + } + } } diff --git a/src/app/util/download.ts b/src/app/util/download.ts index 2cf1d728c6..b5433609d8 100644 --- a/src/app/util/download.ts +++ b/src/app/util/download.ts @@ -3,10 +3,10 @@ import { Directory, Encoding, Filesystem, WriteFileResult } from '@capacitor/fil import { IS_ANDROID_WEB_VIEW } from './is-android-web-view'; import { Log } from '../core/log'; -export const download = (filename: string, stringData: string): void => { +export const download = async (filename: string, stringData: string): Promise => { const blob = new Blob([stringData], { type: 'text/plain;charset=utf-8' }); if (IS_ANDROID_WEB_VIEW) { - saveStringAsFile(filename, stringData); + await saveStringAsFile(filename, stringData); } else { saveAs(blob, filename); }