Update main func

This commit is contained in:
Cenk Altı
2025-12-10 22:50:37 -05:00
parent ea7e20341a
commit f590c62b64
3 changed files with 109 additions and 77 deletions
+12 -77
View File
@@ -1,10 +1,8 @@
package boltbrowser
import (
"errors"
"fmt"
"os"
"strings"
"time"
"github.com/nsf/termbox-go"
@@ -14,6 +12,7 @@ import (
var ProgramName = "boltbrowser"
var VersionNum = 2.0
var AppArgs Args
var databaseFiles []string
var db *bbolt.DB
var memBolt *BoltDB
@@ -22,91 +21,26 @@ var currentFilename string
const DefaultDBOpenTimeout = time.Second
var AppArgs struct {
type Args struct {
DBOpenTimeout time.Duration
ReadOnly bool
NoValue bool
}
func init() {
AppArgs.DBOpenTimeout = DefaultDBOpenTimeout
AppArgs.ReadOnly = false
func DefaultArgs() Args {
return Args{
DBOpenTimeout: DefaultDBOpenTimeout,
}
}
func parseArgs() {
func Main(args Args, files []string) error {
// Set the global args. This is done to convert main package into a library with minimal changes.
AppArgs, databaseFiles = args, files
var err error
if len(os.Args) == 1 {
printUsage(nil)
}
parms := os.Args[1:]
for i := range parms {
// All 'option' arguments start with "-"
if !strings.HasPrefix(parms[i], "-") {
databaseFiles = append(databaseFiles, parms[i])
continue
}
if strings.Contains(parms[i], "=") {
// Key/Value pair Arguments
pts := strings.Split(parms[i], "=")
key, val := pts[0], pts[1]
switch key {
case "-timeout":
AppArgs.DBOpenTimeout, err = time.ParseDuration(val)
if err != nil {
// See if we can successfully parse by adding a 's'
AppArgs.DBOpenTimeout, err = time.ParseDuration(val + "s")
}
// If err is still not nil, print usage
if err != nil {
printUsage(err)
}
case "-readonly", "-ro":
if val == "true" {
AppArgs.ReadOnly = true
}
case "-no-value":
if val == "true" {
AppArgs.NoValue = true
}
case "-help":
printUsage(nil)
default:
printUsage(errors.New("Invalid option"))
}
} else {
// Single-word arguments
switch parms[i] {
case "-readonly", "-ro":
AppArgs.ReadOnly = true
case "-no-value":
AppArgs.NoValue = true
case "-help":
printUsage(nil)
default:
printUsage(errors.New("Invalid option"))
}
}
}
}
func printUsage(err error) {
if err != nil {
fmt.Fprintf(os.Stderr, err.Error())
}
fmt.Fprintf(os.Stderr, "Usage: %s [OPTIONS] <filename(s)>\nOptions:\n", ProgramName)
fmt.Fprintf(os.Stderr, " -timeout=duration\n DB file open timeout (default 1s)\n")
fmt.Fprintf(os.Stderr, " -ro, -readonly \n Open the DB in read-only mode\n")
fmt.Fprintf(os.Stderr, " -no-value \n Do not display a value in left pane\n")
}
func main() {
var err error
parseArgs()
err = termbox.Init()
if err != nil {
panic(err)
return err
}
defer termbox.Close()
style := defaultStyle()
@@ -141,4 +75,5 @@ func main() {
mainLoop(memBolt, style)
defer db.Close()
}
return nil
}
+88
View File
@@ -0,0 +1,88 @@
package main
import (
"errors"
"fmt"
"os"
"strings"
"time"
"github.com/br0xen/boltbrowser/pkg/boltbrowser"
)
func main() {
args := boltbrowser.DefaultArgs()
files := parseArgs(&args)
err := boltbrowser.Main(args, files)
if err != nil {
fmt.Fprintf(os.Stderr, err.Error())
os.Exit(1)
}
}
func parseArgs(args *boltbrowser.Args) (databaseFiles []string) {
var err error
if len(os.Args) == 1 {
printUsage(nil)
}
parms := os.Args[1:]
for i := range parms {
// All 'option' arguments start with "-"
if !strings.HasPrefix(parms[i], "-") {
databaseFiles = append(databaseFiles, parms[i])
continue
}
if strings.Contains(parms[i], "=") {
// Key/Value pair Arguments
pts := strings.Split(parms[i], "=")
key, val := pts[0], pts[1]
switch key {
case "-timeout":
args.DBOpenTimeout, err = time.ParseDuration(val)
if err != nil {
// See if we can successfully parse by adding a 's'
args.DBOpenTimeout, err = time.ParseDuration(val + "s")
}
// If err is still not nil, print usage
if err != nil {
printUsage(err)
}
case "-readonly", "-ro":
if val == "true" {
args.ReadOnly = true
}
case "-no-value":
if val == "true" {
args.NoValue = true
}
case "-help":
printUsage(nil)
default:
printUsage(errors.New("Invalid option"))
}
} else {
// Single-word arguments
switch parms[i] {
case "-readonly", "-ro":
args.ReadOnly = true
case "-no-value":
args.NoValue = true
case "-help":
printUsage(nil)
default:
printUsage(errors.New("Invalid option"))
}
}
}
return
}
func printUsage(err error) {
if err != nil {
fmt.Fprintf(os.Stderr, err.Error())
}
fmt.Fprintf(os.Stderr, "Usage: boltbrowser [OPTIONS] <filename(s)>\nOptions:\n")
fmt.Fprintf(os.Stderr, " -timeout=duration\n DB file open timeout (default 1s)\n")
fmt.Fprintf(os.Stderr, " -ro, -readonly \n Open the DB in read-only mode\n")
fmt.Fprintf(os.Stderr, " -no-value \n Do not display a value in left pane\n")
}
+9
View File
@@ -0,0 +1,9 @@
package boltbrowser
import internal "github.com/br0xen/boltbrowser/internal/boltbrowser"
type Args = internal.Args
var DefaultArgs = internal.DefaultArgs
var Main = internal.Main