diff --git a/frontend/src/organisms/connection/shell.svelte b/frontend/src/organisms/connection/shell.svelte index 403d16c..ecdb501 100644 --- a/frontend/src/organisms/connection/shell.svelte +++ b/frontend/src/organisms/connection/shell.svelte @@ -3,7 +3,7 @@ import CodeEditor from '$components/editors/codeeditor.svelte'; import Icon from '$components/icon.svelte'; import environment from '$lib/stores/environment.js'; - import { OpenShellScript, SaveShellScript } from '$wails/go/app/App.js'; + import { OpenShellScript, SaveShellScript, SaveShellOuput } from '$wails/go/app/App.js'; import { BrowserOpenURL } from '$wails/runtime/runtime.js'; import { javascript } from '@codemirror/lang-javascript'; import { onDestroy, onMount } from 'svelte'; @@ -73,6 +73,10 @@ ); } + async function saveOutput() { + await SaveShellOuput(result.output + '\n' + result.stderr); + } + async function copyErrorDescription() { await navigator.clipboard.writeText(result.errorDescription); copySucceeded = true; @@ -155,6 +159,10 @@ + + diff --git a/frontend/wailsjs/go/app/App.d.ts b/frontend/wailsjs/go/app/App.d.ts index 4d5ac85..20aea35 100755 --- a/frontend/wailsjs/go/app/App.d.ts +++ b/frontend/wailsjs/go/app/App.d.ts @@ -72,6 +72,8 @@ export function ReportSharedStateVariable(arg1:string,arg2:string):Promise export function SaveQuery(arg1:string):Promise; +export function SaveShellOuput(arg1:string):Promise; + export function SaveShellScript(arg1:string,arg2:string,arg3:string,arg4:string,arg5:boolean):Promise; export function SavedQueries():Promise; diff --git a/frontend/wailsjs/go/app/App.js b/frontend/wailsjs/go/app/App.js index cf50f30..44c0fa9 100755 --- a/frontend/wailsjs/go/app/App.js +++ b/frontend/wailsjs/go/app/App.js @@ -134,6 +134,10 @@ export function SaveQuery(arg1) { return window['go']['app']['App']['SaveQuery'](arg1); } +export function SaveShellOuput(arg1) { + return window['go']['app']['App']['SaveShellOuput'](arg1); +} + export function SaveShellScript(arg1, arg2, arg3, arg4, arg5) { return window['go']['app']['App']['SaveShellScript'](arg1, arg2, arg3, arg4, arg5); } diff --git a/internal/app/host_shell.go b/internal/app/host_shell.go index 5675e60..ae271e0 100644 --- a/internal/app/host_shell.go +++ b/internal/app/host_shell.go @@ -182,3 +182,30 @@ func (a *App) OpenShellScript() string { return string(script) } + +func (a *App) SaveShellOuput(output string) { + fname, err := runtime.SaveFileDialog(a.ctx, runtime.SaveDialogOptions{ + DefaultFilename: "mongosh-output.txt", + DefaultDirectory: a.Env.DownloadDirectory, + Title: "Save mongosh output", + CanCreateDirectories: true, + }) + + if err != nil { + runtime.LogWarningf(a.ctx, "Shell: error exporting output to %s: %s", fname, err.Error()) + runtime.MessageDialog(a.ctx, runtime.MessageDialogOptions{ + Title: "Error exporting output", + Message: err.Error(), + Type: runtime.ErrorDialog, + }) + } + + if err := os.WriteFile(fname, []byte(output), os.ModePerm); err != nil { + runtime.LogWarningf(a.ctx, "Shell: error writing shell output to %s: %s", fname, err.Error()) + runtime.MessageDialog(a.ctx, runtime.MessageDialogOptions{ + Title: "Error writing shell output", + Message: err.Error(), + Type: runtime.ErrorDialog, + }) + } +}