From 439d98003f25e512a378fee4e23aea8a0f36b971 Mon Sep 17 00:00:00 2001 From: Nazar Kanaev Date: Tue, 15 Sep 2020 20:17:57 +0100 Subject: [PATCH] gui-less mode for linux --- main.go | 26 +++----------------------- platform/gui.go | 33 +++++++++++++++++++++++++++++++++ platform/guiless.go | 11 +++++++++++ server/server.go | 8 +++++--- 4 files changed, 52 insertions(+), 26 deletions(-) create mode 100644 platform/gui.go create mode 100644 platform/guiless.go diff --git a/main.go b/main.go index 9f84314..52cff27 100644 --- a/main.go +++ b/main.go @@ -2,10 +2,9 @@ package main import ( "flag" - "github.com/getlantern/systray" "github.com/nkanaev/yarr/server" "github.com/nkanaev/yarr/storage" - "github.com/skratchdot/open-golang/open" + "github.com/nkanaev/yarr/platform" "log" "os" "path/filepath" @@ -34,25 +33,6 @@ func main() { flag.StringVar(&addr, "addr", "127.0.0.1:7070", "address to run server on") flag.Parse() - systrayOnReady := func() { - systray.SetIcon(server.Icon) - - menuOpen := systray.AddMenuItem("Open", "") - systray.AddSeparator() - menuQuit := systray.AddMenuItem("Quit", "") - - go func() { - for { - select { - case <-menuOpen.ClickedCh: - open.Run("http://" + addr) - case <-menuQuit.ClickedCh: - systray.Quit() - } - } - }() - srv := server.New(db, logger) - srv.Start(addr) - } - systray.Run(systrayOnReady, nil) + srv := server.New(db, logger, addr) + platform.Start(srv) } diff --git a/platform/gui.go b/platform/gui.go new file mode 100644 index 0000000..6e23f73 --- /dev/null +++ b/platform/gui.go @@ -0,0 +1,33 @@ +// +build macos windows + +package platform + +import ( + "github.com/getlantern/systray" + "github.com/nkanaev/yarr/server" + "github.com/skratchdot/open-golang/open" +) + +func Start(s *server.Handler) { + systrayOnReady := func() { + systray.SetIcon(server.Icon) + + menuOpen := systray.AddMenuItem("Open", "") + systray.AddSeparator() + menuQuit := systray.AddMenuItem("Quit", "") + + go func() { + for { + select { + case <-menuOpen.ClickedCh: + open.Run("http://" + s.Addr) + case <-menuQuit.ClickedCh: + systray.Quit() + } + } + }() + + s.Start() + } + systray.Run(systrayOnReady, nil) +} diff --git a/platform/guiless.go b/platform/guiless.go new file mode 100644 index 0000000..7fd57bd --- /dev/null +++ b/platform/guiless.go @@ -0,0 +1,11 @@ +// +build !windows,!macos + +package platform + +import ( + "github.com/nkanaev/yarr/server" +) + +func Start(s *server.Handler) { + s.Start() +} diff --git a/server/server.go b/server/server.go index aff5010..dd337a5 100644 --- a/server/server.go +++ b/server/server.go @@ -11,25 +11,27 @@ import ( ) type Handler struct { + Addr string db *storage.Storage log *log.Logger feedQueue chan storage.Feed queueSize *int32 } -func New(db *storage.Storage, logger *log.Logger) *Handler { +func New(db *storage.Storage, logger *log.Logger, addr string) *Handler { queueSize := int32(0) return &Handler{ db: db, log: logger, feedQueue: make(chan storage.Feed, 3000), queueSize: &queueSize, + Addr: addr, } } -func (h *Handler) Start(addr string) { +func (h *Handler) Start() { h.startJobs() - s := &http.Server{Addr: addr, Handler: h} + s := &http.Server{Addr: h.Addr, Handler: h} s.ListenAndServe() }