gosuki/gosuki.go

122 lines
2.6 KiB
Go
Raw Normal View History

2023-02-18 23:13:23 +00:00
// # Gosuki documentation
package main
import (
"os"
2023-02-18 23:13:23 +00:00
"git.blob42.xyz/gomark/gosuki/config"
"git.blob42.xyz/gomark/gosuki/logging"
2023-09-05 17:45:21 +00:00
"git.blob42.xyz/gomark/gosuki/modules"
2023-02-18 23:13:23 +00:00
"git.blob42.xyz/gomark/gosuki/cmd"
"github.com/urfave/cli/v2"
// Load firefox browser modules
2023-02-18 23:13:23 +00:00
_ "git.blob42.xyz/gomark/gosuki/firefox"
// Load chrome browser module
2023-02-18 23:13:23 +00:00
_ "git.blob42.xyz/gomark/gosuki/chrome"
)
func main() {
2023-09-05 17:45:21 +00:00
app := cli.NewApp()
2023-09-05 17:45:21 +00:00
2023-02-18 23:13:23 +00:00
app.Name = "gosuki"
app.Version = version()
flags := []cli.Flag{
&cli.StringFlag{
Name: "config-file",
Value: config.ConfigFile,
Usage: "TOML config `FILE` path",
},
&cli.IntFlag{
Name: "debug",
Aliases: []string{"d"},
2023-02-18 23:13:23 +00:00
EnvVars: []string{logging.EnvGosukiDebug},
Action: func (c *cli.Context, val int) error {
logging.SetMode(val)
return nil
},
},
}
2023-09-05 17:45:21 +00:00
flags = append(flags, config.SetupGlobalFlags()...)
app.Flags = append(app.Flags, flags...)
app.Before = func(c *cli.Context) error {
2023-09-05 17:45:21 +00:00
// get all registered browser modules
modules := modules.GetModules()
for _, mod := range modules {
// Run module's hooks that should run before context is ready
// for example setup flags management
2023-09-05 20:59:15 +00:00
modinfo := mod.ModInfo()
hook := cmd.BeforeHook(string(modinfo.ID))
if hook != nil {
if err := cmd.BeforeHook(string(modinfo.ID))(c); err != nil {
return err
}
}
}
// Execute config hooks
//TODO: better doc for what are Conf hooks ???
2023-09-05 17:45:21 +00:00
config.RunConfHooks(c)
initConfig()
return nil
}
2022-11-07 21:40:13 +00:00
// Browser modules can register commands through cmd.RegisterModCommand.
// registered commands will be appended here
app.Commands = []*cli.Command{
2023-09-05 17:45:21 +00:00
// main entry point
startDaemonCmd,
cmd.ConfigCmds,
cmd.ProfileCmds,
2023-09-05 19:35:04 +00:00
cmd.ModuleCmds,
}
// Add global flags from registered modules
// we use GetModules to handle all types of modules
modules := modules.GetModules()
2023-02-07 16:10:44 +00:00
log.Debugf("loading %d modules", len(modules))
for _, mod := range modules {
2023-09-05 20:59:15 +00:00
modID := string(mod.ModInfo().ID)
log.Debugf("loading module <%s>", modID)
// for each registered module, register own flag management
2023-09-05 20:59:15 +00:00
modFlags := cmd.GlobalFlags(modID)
if len(modFlags) != 0 {
app.Flags = append(app.Flags, modFlags...)
}
// Add all browser module registered commands
2023-09-05 20:59:15 +00:00
cmds := cmd.RegisteredModCommands(modID)
for _, cmd := range cmds {
app.Commands = append(app.Commands, cmd)
}
}
if err := app.Run(os.Args); err != nil {
log.Fatal(err)
}
}
func init() {
//TODO: watch all profiles (handled at browser level for now)
// config.RegisterGlobalOption("all-profiles", false)
}