mirror of
https://github.com/garraflavatra/rolens.git
synced 2025-01-18 13:07:58 +00:00
menu mess
This commit is contained in:
parent
ab1891be27
commit
f18eea7915
16
frontend/src/lib/stores/sharedstate.js
Normal file
16
frontend/src/lib/stores/sharedstate.js
Normal file
@ -0,0 +1,16 @@
|
||||
import { ReportSharedStateVariable } from '$wails/go/app/App';
|
||||
import { writable } from 'svelte/store';
|
||||
|
||||
function sharedStateStore(name) {
|
||||
const { set, subscribe } = writable();
|
||||
subscribe(newValue => ReportSharedStateVariable(name, newValue));
|
||||
return { set, subscribe };
|
||||
}
|
||||
|
||||
const sharedState = {
|
||||
currentHost: sharedStateStore('currenthost'),
|
||||
currentDb: sharedStateStore('currentdb'),
|
||||
currentColl: sharedStateStore('currentcoll'),
|
||||
};
|
||||
|
||||
export default sharedState;
|
@ -9,6 +9,7 @@
|
||||
import DumpInfo from './dump.svelte';
|
||||
import HostDetail from './hostdetail.svelte';
|
||||
import HostTree from './hosttree.svelte';
|
||||
import sharedState from '$lib/stores/sharedstate';
|
||||
|
||||
export let hosts = {};
|
||||
export let activeHostKey = '';
|
||||
@ -20,6 +21,10 @@
|
||||
let hostDetailKey = '';
|
||||
let exportInfo;
|
||||
|
||||
$: sharedState.currentHost.set(activeHostKey);
|
||||
$: sharedState.currentDb.set(activeDbKey);
|
||||
$: sharedState.currentColl.set(activeCollKey);
|
||||
|
||||
async function getHosts() {
|
||||
hosts = await Hosts();
|
||||
}
|
||||
|
2
frontend/wailsjs/go/app/App.d.ts
generated
vendored
2
frontend/wailsjs/go/app/App.d.ts
generated
vendored
@ -55,6 +55,8 @@ export function RemoveView(arg1:string):Promise<void>;
|
||||
|
||||
export function RenameCollection(arg1:string,arg2:string,arg3:string,arg4:string):Promise<boolean>;
|
||||
|
||||
export function ReportSharedStateVariable(arg1:string,arg2:string):Promise<void>;
|
||||
|
||||
export function SaveQuery(arg1:string):Promise<string>;
|
||||
|
||||
export function SavedQueries():Promise<map[string]app.SavedQuery>;
|
||||
|
4
frontend/wailsjs/go/app/App.js
generated
4
frontend/wailsjs/go/app/App.js
generated
@ -98,6 +98,10 @@ export function RenameCollection(arg1, arg2, arg3, arg4) {
|
||||
return window['go']['app']['App']['RenameCollection'](arg1, arg2, arg3, arg4);
|
||||
}
|
||||
|
||||
export function ReportSharedStateVariable(arg1, arg2) {
|
||||
return window['go']['app']['App']['ReportSharedStateVariable'](arg1, arg2);
|
||||
}
|
||||
|
||||
export function SaveQuery(arg1) {
|
||||
return window['go']['app']['App']['SaveQuery'](arg1);
|
||||
}
|
||||
|
@ -3,6 +3,7 @@ package app
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
"os"
|
||||
"os/exec"
|
||||
"path/filepath"
|
||||
@ -10,8 +11,6 @@ import (
|
||||
|
||||
"github.com/garraflavatra/rolens/internal/ui"
|
||||
"github.com/ncruces/zenity"
|
||||
"github.com/wailsapp/wails/v2/pkg/menu"
|
||||
"github.com/wailsapp/wails/v2/pkg/menu/keys"
|
||||
wailsRuntime "github.com/wailsapp/wails/v2/pkg/runtime"
|
||||
)
|
||||
|
||||
@ -29,13 +28,16 @@ type EnvironmentInfo struct {
|
||||
}
|
||||
|
||||
type App struct {
|
||||
Env EnvironmentInfo
|
||||
State map[string]string
|
||||
ctx context.Context
|
||||
ui *ui.UI
|
||||
Env EnvironmentInfo
|
||||
}
|
||||
|
||||
func NewApp() *App {
|
||||
a := &App{}
|
||||
a := &App{
|
||||
State: make(map[string]string),
|
||||
}
|
||||
|
||||
_, err := exec.LookPath("mongodump")
|
||||
a.Env.HasMongoDump = err == nil
|
||||
@ -71,7 +73,7 @@ func NewApp() *App {
|
||||
func (a *App) Startup(ctx context.Context, ui *ui.UI) {
|
||||
a.ctx = ctx
|
||||
a.ui = ui
|
||||
wailsRuntime.LogInfo(a.ctx, "Startup")
|
||||
wailsRuntime.LogInfo(a.ctx, "Runcycle: Startup")
|
||||
|
||||
wailsEnv := wailsRuntime.Environment(a.ctx)
|
||||
a.Env.Arch = wailsEnv.Arch
|
||||
@ -80,7 +82,7 @@ func (a *App) Startup(ctx context.Context, ui *ui.UI) {
|
||||
}
|
||||
|
||||
func (a *App) Shutdown(ctx context.Context) {
|
||||
wailsRuntime.LogInfo(a.ctx, "Shutdown")
|
||||
wailsRuntime.LogInfo(a.ctx, "Runcycle: Shutdown")
|
||||
}
|
||||
|
||||
func (a *App) Environment() EnvironmentInfo {
|
||||
@ -101,47 +103,7 @@ func (a *App) PurgeLogDirectory() {
|
||||
}
|
||||
}
|
||||
|
||||
func menuEventEmitter(a *App, eventName string, data ...interface{}) func(cd *menu.CallbackData) {
|
||||
return func(cd *menu.CallbackData) {
|
||||
wailsRuntime.EventsEmit(a.ctx, eventName, data...)
|
||||
}
|
||||
}
|
||||
|
||||
func (a *App) Menu() *menu.Menu {
|
||||
appMenu := menu.NewMenu()
|
||||
|
||||
aboutMenu := appMenu.AddSubmenu("About")
|
||||
aboutMenu.AddText("About…", nil, menuEventEmitter(a, "OpenAboutModal"))
|
||||
aboutMenu.AddText("Prefrences…", keys.CmdOrCtrl(","), menuEventEmitter(a, "OpenPrefrences"))
|
||||
aboutMenu.AddText("Open data directory…", nil, func(cd *menu.CallbackData) { a.ui.Reveal(a.Env.DataDirectory) })
|
||||
aboutMenu.AddSeparator()
|
||||
aboutMenu.AddText("Open log directory…", nil, func(cd *menu.CallbackData) { a.ui.Reveal(a.Env.LogDirectory) })
|
||||
aboutMenu.AddText("Purge logs", nil, func(cd *menu.CallbackData) { a.PurgeLogDirectory() })
|
||||
aboutMenu.AddSeparator()
|
||||
aboutMenu.AddText("Quit", keys.CmdOrCtrl("q"), func(cd *menu.CallbackData) { wailsRuntime.Quit(a.ctx) })
|
||||
|
||||
if runtime.GOOS == "darwin" {
|
||||
appMenu.Append(menu.EditMenu())
|
||||
}
|
||||
|
||||
hostMenu := appMenu.AddSubmenu("Host")
|
||||
hostMenu.AddText("New host", keys.CmdOrCtrl("y"), menuEventEmitter(a, "CreateHost"))
|
||||
|
||||
databaseMenu := appMenu.AddSubmenu("Database")
|
||||
databaseMenu.AddText("New database", keys.CmdOrCtrl("u"), menuEventEmitter(a, "CreateDatabase"))
|
||||
|
||||
collectionMenu := appMenu.AddSubmenu("Collection")
|
||||
collectionMenu.AddText("New collection", keys.CmdOrCtrl("i"), menuEventEmitter(a, "CreateCollection"))
|
||||
collectionMenu.AddSeparator()
|
||||
collectionMenu.AddText("Stats", keys.Combo("h", keys.CmdOrCtrlKey, keys.OptionOrAltKey), menuEventEmitter(a, "OpenCollectionTab", "stats"))
|
||||
collectionMenu.AddText("Find", keys.Combo("f", keys.CmdOrCtrlKey, keys.OptionOrAltKey), menuEventEmitter(a, "OpenCollectionTab", "find"))
|
||||
collectionMenu.AddText("Insert", keys.Combo("i", keys.CmdOrCtrlKey, keys.OptionOrAltKey), menuEventEmitter(a, "OpenCollectionTab", "insert"))
|
||||
collectionMenu.AddText("Update", keys.Combo("u", keys.CmdOrCtrlKey, keys.OptionOrAltKey), menuEventEmitter(a, "OpenCollectionTab", "update"))
|
||||
collectionMenu.AddText("Remove", keys.Combo("r", keys.CmdOrCtrlKey, keys.OptionOrAltKey), menuEventEmitter(a, "OpenCollectionTab", "remove"))
|
||||
collectionMenu.AddText("Indexes", keys.Combo("x", keys.CmdOrCtrlKey, keys.OptionOrAltKey), menuEventEmitter(a, "OpenCollectionTab", "indexes"))
|
||||
|
||||
helpMenu := appMenu.AddSubmenu("Help")
|
||||
helpMenu.AddText("User guide", nil, func(cd *menu.CallbackData) { wailsRuntime.BrowserOpenURL(a.ctx, "") })
|
||||
|
||||
return appMenu
|
||||
func (a *App) ReportSharedStateVariable(key, value string) {
|
||||
a.State[key] = value
|
||||
wailsRuntime.LogDebug(a.ctx, fmt.Sprintf("State has been reported: %s=\"%s\"", key, value))
|
||||
}
|
||||
|
60
internal/app/app_menu.go
Normal file
60
internal/app/app_menu.go
Normal file
@ -0,0 +1,60 @@
|
||||
package app
|
||||
|
||||
import (
|
||||
"runtime"
|
||||
|
||||
"github.com/wailsapp/wails/v2/pkg/menu"
|
||||
"github.com/wailsapp/wails/v2/pkg/menu/keys"
|
||||
wailsRuntime "github.com/wailsapp/wails/v2/pkg/runtime"
|
||||
)
|
||||
|
||||
func menuEventEmitter(a *App, eventName string, data ...interface{}) func(cd *menu.CallbackData) {
|
||||
return func(cd *menu.CallbackData) {
|
||||
wailsRuntime.EventsEmit(a.ctx, eventName, data...)
|
||||
}
|
||||
}
|
||||
|
||||
func (a *App) Menu() *menu.Menu {
|
||||
appMenu := menu.NewMenu()
|
||||
|
||||
aboutMenu := appMenu.AddSubmenu("File")
|
||||
aboutMenu.AddText("About Rolens", nil, menuEventEmitter(a, "OpenAboutModal"))
|
||||
aboutMenu.AddSeparator()
|
||||
aboutMenu.AddText("Prefrences…", keys.CmdOrCtrl(","), menuEventEmitter(a, "OpenPrefrences"))
|
||||
aboutMenu.AddSeparator()
|
||||
aboutMenu.AddText("Open data directory…", nil, func(cd *menu.CallbackData) { a.ui.Reveal(a.Env.DataDirectory) })
|
||||
aboutMenu.AddText("Open log directory…", nil, func(cd *menu.CallbackData) { a.ui.Reveal(a.Env.LogDirectory) })
|
||||
aboutMenu.AddText("Purge logs", nil, func(cd *menu.CallbackData) { a.PurgeLogDirectory() })
|
||||
aboutMenu.AddSeparator()
|
||||
aboutMenu.AddText("Quit Rolens", keys.CmdOrCtrl("q"), func(cd *menu.CallbackData) { wailsRuntime.Quit(a.ctx) })
|
||||
|
||||
if runtime.GOOS == "darwin" {
|
||||
appMenu.Append(menu.EditMenu())
|
||||
}
|
||||
|
||||
hostMenu := appMenu.AddSubmenu("Host")
|
||||
hostMenu.AddText("New host…", keys.CmdOrCtrl("y"), menuEventEmitter(a, "CreateHost"))
|
||||
|
||||
databaseMenu := appMenu.AddSubmenu("Database")
|
||||
databaseMenu.Append(&menu.MenuItem{
|
||||
Label: "New database…",
|
||||
Accelerator: keys.CmdOrCtrl("u"),
|
||||
Click: menuEventEmitter(a, "CreateDatabase"),
|
||||
Disabled: a.State["currenthost"] == "",
|
||||
})
|
||||
|
||||
collectionMenu := appMenu.AddSubmenu("Collection")
|
||||
collectionMenu.AddText("New collection…", keys.CmdOrCtrl("i"), menuEventEmitter(a, "CreateCollection"))
|
||||
collectionMenu.AddSeparator()
|
||||
collectionMenu.AddText("Stats", keys.Combo("h", keys.CmdOrCtrlKey, keys.OptionOrAltKey), menuEventEmitter(a, "OpenCollectionTab", "stats"))
|
||||
collectionMenu.AddText("Find", keys.Combo("f", keys.CmdOrCtrlKey, keys.OptionOrAltKey), menuEventEmitter(a, "OpenCollectionTab", "find"))
|
||||
collectionMenu.AddText("Insert", keys.Combo("i", keys.CmdOrCtrlKey, keys.OptionOrAltKey), menuEventEmitter(a, "OpenCollectionTab", "insert"))
|
||||
collectionMenu.AddText("Update", keys.Combo("u", keys.CmdOrCtrlKey, keys.OptionOrAltKey), menuEventEmitter(a, "OpenCollectionTab", "update"))
|
||||
collectionMenu.AddText("Remove", keys.Combo("r", keys.CmdOrCtrlKey, keys.OptionOrAltKey), menuEventEmitter(a, "OpenCollectionTab", "remove"))
|
||||
collectionMenu.AddText("Indexes", keys.Combo("x", keys.CmdOrCtrlKey, keys.OptionOrAltKey), menuEventEmitter(a, "OpenCollectionTab", "indexes"))
|
||||
|
||||
helpMenu := appMenu.AddSubmenu("Help")
|
||||
helpMenu.AddText("User guide", nil, func(cd *menu.CallbackData) { wailsRuntime.BrowserOpenURL(a.ctx, "") })
|
||||
|
||||
return appMenu
|
||||
}
|
11
main.go
11
main.go
@ -7,11 +7,13 @@ import (
|
||||
|
||||
"github.com/garraflavatra/rolens/internal/app"
|
||||
uictrl "github.com/garraflavatra/rolens/internal/ui"
|
||||
"github.com/ncruces/zenity"
|
||||
"github.com/wailsapp/wails/v2"
|
||||
"github.com/wailsapp/wails/v2/pkg/logger"
|
||||
"github.com/wailsapp/wails/v2/pkg/options"
|
||||
"github.com/wailsapp/wails/v2/pkg/options/assetserver"
|
||||
"github.com/wailsapp/wails/v2/pkg/options/mac"
|
||||
"github.com/wailsapp/wails/v2/pkg/runtime"
|
||||
)
|
||||
|
||||
var (
|
||||
@ -40,8 +42,15 @@ func main() {
|
||||
AssetServer: &assetserver.Options{Assets: assets},
|
||||
|
||||
OnStartup: func(ctx context.Context) {
|
||||
app.Startup(ctx, ui)
|
||||
defer func() {
|
||||
if p := recover(); p != nil {
|
||||
runtime.LogFatalf(ctx, "Application panicked: %v", p)
|
||||
zenity.Error("A fatal error occured.")
|
||||
}
|
||||
}()
|
||||
|
||||
ui.Startup(ctx)
|
||||
app.Startup(ctx, ui)
|
||||
},
|
||||
OnShutdown: app.Shutdown,
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user