From a14e58297a989e45ff1f978273ad0fdfecc1b0f7 Mon Sep 17 00:00:00 2001 From: mappu Date: Fri, 28 Jun 2024 11:33:43 +1200 Subject: [PATCH] bolt: support open as readonly --- db_bolt.go | 10 ++++++++-- main.go | 13 ++++++++++++- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/db_bolt.go b/db_bolt.go index fb35a8e..408cb2b 100644 --- a/db_bolt.go +++ b/db_bolt.go @@ -107,9 +107,15 @@ var _ loadedDatabase = &boltLoadedDatabase{} // interface assertion // -func (f *TMainForm) boltAddDatabaseFromFile(path string) { +func (f *TMainForm) boltAddDatabaseFromFile(path string, readonly bool) { // TODO load in background thread to stop blocking the UI - db, err := bbolt.Open(path, 0644, &bbolt.Options{Timeout: 1 * time.Second}) + + opts := bbolt.Options{ + Timeout: 1 * time.Second, + ReadOnly: readonly, + } + + db, err := bbolt.Open(path, 0644, &opts) if err != nil { vcl.ShowMessage(fmt.Sprintf("Failed to load database '%s': %s", path, err.Error())) return diff --git a/main.go b/main.go index e9f222c..4ac7ebc 100644 --- a/main.go +++ b/main.go @@ -65,6 +65,7 @@ func (f *TMainForm) OnFormCreate(sender vcl.IObject) { mnuFile.Add(mnuFileBolt) vcl_menuitem(mnuFileBolt, "Open database...", imgDatabaseAdd, f.OnMnuFileBoltOpenClick) + vcl_menuitem(mnuFileBolt, "Open database (read-only)...", imgDatabaseAdd, f.OnMnuFileBoltOpenReadonlyClick) // @@ -251,7 +252,17 @@ func (f *TMainForm) OnMnuFileBoltOpenClick(sender vcl.IObject) { dlg.SetFilter("Bolt database|*.db|All files|*.*") ret := dlg.Execute() // Fake blocking if ret { - f.boltAddDatabaseFromFile(dlg.FileName()) + f.boltAddDatabaseFromFile(dlg.FileName(), false) + } +} + +func (f *TMainForm) OnMnuFileBoltOpenReadonlyClick(sender vcl.IObject) { + dlg := vcl.NewOpenDialog(f) + dlg.SetTitle("Select a database file...") + dlg.SetFilter("Bolt database|*.db|All files|*.*") + ret := dlg.Execute() // Fake blocking + if ret { + f.boltAddDatabaseFromFile(dlg.FileName(), true) } }