From 94d9b5f48147ee9cc6ca57177e00f8679224603d Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Sat, 11 Jan 2025 00:45:02 +0200 Subject: add gosc binary --- internal/main.go | 73 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 internal/main.go (limited to 'internal/main.go') diff --git a/internal/main.go b/internal/main.go new file mode 100644 index 0000000..c3d6b19 --- /dev/null +++ b/internal/main.go @@ -0,0 +1,73 @@ +package internal + +import ( + "context" + "flag" + "log" + "os" + "path/filepath" + "strings" + "time" + + "codeberg.org/snonux/gos/internal/config" +) + +func Main(composeEntryDefault bool) { + dry := flag.Bool("dry", false, "Dry run") + version := flag.Bool("version", false, "Display version") + gosDir := flag.String("gosDir", filepath.Join(os.Getenv("HOME"), ".gosdir"), "Gos' queue and DB directory") + cacheDir := flag.String("cacheDir", filepath.Join(*gosDir, "cache"), "Go's cache dir") + browser := flag.String("browser", "firefox", "OAuth2 browser") + secretsConfigPath := filepath.Join(os.Getenv("HOME"), ".config/gos/gosec.json") + secretsConfigPath = *flag.String("secretsConfig", secretsConfigPath, "Gos' secret config") + platforms := flag.String("platforms", "Mastodon:500,LinkedIn:1000", "Platforms enabled plus their post size limits") + target := flag.Int("target", 2, "How many posts per week are the target?") + minQueued := flag.Int("minQueued", 4, "Minimum of queued items until printing a warn message!") + maxDaysQueued := flag.Int("maxDaysQueued", 365, "Maximum days worth of queued posts until target++ and pauseDays--") + pauseDays := flag.Int("pauseDays", 3, "How many days until next post can be posted?") + lookback := flag.Int("lookback", 30, "How many days look back in time for posting history") + summaryFor := flag.String("summaryFor", "", "Generate a summary in Gemtext format, format is coma separated string of months, e.g. 202410,202411") + gemtexterEnable := flag.Bool("gemtexterEnable", true, "Add special Gemtexter tags to the Gemtext summary") + composeEntry := flag.Bool("compose", composeEntryDefault, "Compose a new entry") + flag.Parse() + + secrets, err := config.NewSecrets(secretsConfigPath) + if err != nil { + log.Fatal(err) + } + + args := config.Args{ + DryRun: *dry, + GosDir: *gosDir, + Target: *target, + MinQueued: *minQueued, + MaxDaysQueued: *maxDaysQueued, + PauseDays: *pauseDays, + Lookback: time.Duration(*lookback) * time.Hour * 24, + SecretsConfigPath: secretsConfigPath, + CacheDir: *cacheDir, + Secrets: secrets, + OAuth2Browser: *browser, + GemtexterEnable: *gemtexterEnable, + ComposeEntry: *composeEntry, + } + if *summaryFor != "" { + args.SummaryFor = strings.Split(*summaryFor, ",") + } + + if err := args.ParsePlatforms(*platforms); err != nil { + log.Fatal(err) + } + + if *version { + printVersion() + return + } + + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + if err := run(ctx, args); err != nil { + log.Fatal(err) + } +} -- cgit v1.2.3