gosuki/gosuki.go

122 lines
2.6 KiB
Go

// # Gosuki documentation
package main
import (
"os"
"git.blob42.xyz/gomark/gosuki/config"
"git.blob42.xyz/gomark/gosuki/logging"
"git.blob42.xyz/gomark/gosuki/modules"
"git.blob42.xyz/gomark/gosuki/cmd"
"github.com/urfave/cli/v2"
// Load firefox browser modules
_ "git.blob42.xyz/gomark/gosuki/firefox"
// Load chrome browser module
_ "git.blob42.xyz/gomark/gosuki/chrome"
)
func main() {
app := cli.NewApp()
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"},
EnvVars: []string{logging.EnvGosukiDebug},
Action: func (c *cli.Context, val int) error {
logging.SetMode(val)
return nil
},
},
}
flags = append(flags, config.SetupGlobalFlags()...)
app.Flags = append(app.Flags, flags...)
app.Before = func(c *cli.Context) error {
// 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
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 ???
config.RunConfHooks(c)
initConfig()
return nil
}
// Browser modules can register commands through cmd.RegisterModCommand.
// registered commands will be appended here
app.Commands = []*cli.Command{
// main entry point
startDaemonCmd,
cmd.ConfigCmds,
cmd.ProfileCmds,
cmd.ModuleCmds,
}
// Add global flags from registered modules
// we use GetModules to handle all types of modules
modules := modules.GetModules()
log.Debugf("loading %d modules", len(modules))
for _, mod := range modules {
modID := string(mod.ModInfo().ID)
log.Debugf("loading module <%s>", modID)
// for each registered module, register own flag management
modFlags := cmd.GlobalFlags(modID)
if len(modFlags) != 0 {
app.Flags = append(app.Flags, modFlags...)
}
// Add all browser module registered commands
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)
}