aboutsummaryrefslogtreecommitdiffstats
path: root/main.go
diff options
context:
space:
mode:
authorAdam Mathes <adam@adammathes.com>2026-02-14 08:58:38 -0800
committerAdam Mathes <adam@adammathes.com>2026-02-14 08:58:38 -0800
commite3c379d069ffa9661561d25cdbf2f5894a2f8ee8 (patch)
tree24d0e9f5610dd9c8f873c5b78e6bc1c88d32840a /main.go
parent4b06155fbde91a1bef6361ef36efb28789861928 (diff)
downloadneko-e3c379d069ffa9661561d25cdbf2f5894a2f8ee8.tar.gz
neko-e3c379d069ffa9661561d25cdbf2f5894a2f8ee8.tar.bz2
neko-e3c379d069ffa9661561d25cdbf2f5894a2f8ee8.zip
Refactor: project structure, implement dependency injection, and align v2 UI with v1
Diffstat (limited to 'main.go')
-rw-r--r--main.go152
1 files changed, 0 insertions, 152 deletions
diff --git a/main.go b/main.go
deleted file mode 100644
index 3dfe7ec..0000000
--- a/main.go
+++ /dev/null
@@ -1,152 +0,0 @@
-package main
-
-import (
- "fmt"
- "os"
- "time"
-
- "adammathes.com/neko/config"
- "adammathes.com/neko/crawler"
- "adammathes.com/neko/exporter"
- "adammathes.com/neko/models"
- "adammathes.com/neko/models/feed"
-
- "flag"
-
- "adammathes.com/neko/vlog"
- "adammathes.com/neko/web"
-)
-
-var Version, Build string
-
-func main() {
- if err := Run(os.Args[1:]); err != nil {
- fmt.Fprintf(os.Stderr, "%v\n", err)
- os.Exit(1)
- }
-}
-
-func Run(args []string) error {
- var help, update, verbose, proxyImages bool
- var configFile, dbfile, newFeed, export, password string
- var port, minutes int
-
- f := flag.NewFlagSet("neko", flag.ContinueOnError)
-
- // config file
- f.StringVar(&configFile, "config", "", "read configuration from file")
- f.StringVar(&configFile, "c", "", "read configuration from file (short)")
-
- // commands
- f.BoolVar(&help, "help", false, "display help")
- f.BoolVar(&help, "h", false, "display help (short)")
-
- f.BoolVar(&update, "update", false, "fetch feeds and store new items")
- f.BoolVar(&update, "u", false, "fetch feeds and store new items (short)")
-
- f.StringVar(&newFeed, "add", "", "add the feed at URL")
- f.StringVar(&newFeed, "a", "", "add the feed at URL (short)")
-
- f.StringVar(&export, "export", "", "export feed: text, opml, html, json")
- f.StringVar(&export, "x", "", "export feed (short)")
-
- // options
- f.StringVar(&dbfile, "database", "", "sqlite database file")
- f.StringVar(&dbfile, "d", "", "sqlite database file (short)")
-
- f.IntVar(&port, "http", 0, "HTTP port to serve on")
- f.IntVar(&port, "s", 0, "HTTP port to serve on (short)")
-
- f.IntVar(&minutes, "minutes", 0, "minutes between crawling feeds")
- f.IntVar(&minutes, "m", 0, "minutes between crawling feeds (short)")
-
- f.BoolVar(&proxyImages, "imageproxy", false, "rewrite and proxy all image requests")
- f.BoolVar(&proxyImages, "i", false, "rewrite and proxy all image requests (short)")
-
- f.BoolVar(&verbose, "verbose", false, "verbose output")
- f.BoolVar(&verbose, "v", false, "verbose output (short)")
-
- f.StringVar(&password, "password", "", "password for web interface")
- f.StringVar(&password, "p", "", "password for web interface (short)")
-
- f.Usage = func() {
- fmt.Fprintf(os.Stderr, "Usage of %s:\n", os.Args[0])
- f.PrintDefaults()
- }
-
- if err := f.Parse(args); err != nil {
- return err
- }
-
- if help {
- fmt.Printf("neko v%s | build %s\n", Version, Build)
- f.Usage()
- return nil
- }
- // reads config if present and sets defaults
- if err := config.Init(configFile); err != nil {
- return fmt.Errorf("config error: %v", err)
- }
-
- // override config file with flags if present
- vlog.VERBOSE = verbose
- if dbfile != "" {
- config.Config.DBFile = dbfile
- }
-
- if port != 0 {
- config.Config.Port = port
- }
-
- if password != "" {
- config.Config.DigestPassword = password
- }
-
- if minutes != 0 {
- config.Config.CrawlMinutes = minutes
- }
-
- if proxyImages != false {
- config.Config.ProxyImages = proxyImages
- }
-
- models.InitDB()
-
- if update {
- vlog.Printf("starting crawl\n")
- crawler.Crawl()
- return nil
- }
- if newFeed != "" {
- vlog.Printf("creating new feed\n")
- feed.NewFeed(newFeed)
- return nil
- }
- if export != "" {
- vlog.Printf("exporting feeds in format %s\n", export)
- fmt.Printf("%s", exporter.ExportFeeds(export))
- return nil
- }
-
- // For testing, we might want to avoid starting a web server
- if config.Config.Port == -1 {
- return nil
- }
-
- go backgroundCrawl(config.Config.CrawlMinutes)
- vlog.Printf("starting web server at 127.0.0.1:%d\n",
- config.Config.Port)
- web.Serve()
- return nil
-}
-
-func backgroundCrawl(minutes int) {
- if minutes < 1 {
- return
- }
- vlog.Printf("starting background crawl every %d minutes\n", minutes)
- for {
- time.Sleep(time.Minute * time.Duration(minutes))
- crawler.Crawl()
- }
-}