From 9b04353c4a4e8e5a05aff0e784811fcc232e008c Mon Sep 17 00:00:00 2001 From: Nazar Kanaev Date: Sat, 25 Jul 2020 13:17:26 +0100 Subject: [PATCH] refactoring --- go.mod | 1 + go.sum | 2 ++ main.go | 24 ++++++++++++++++++++++-- server/server.go | 31 ++++++++++++++++++------------- storage/item.go | 4 +++- storage/storage.go | 23 ++++++++++++++++------- 6 files changed, 62 insertions(+), 23 deletions(-) diff --git a/go.mod b/go.mod index 6f728bf..61b6512 100644 --- a/go.mod +++ b/go.mod @@ -6,5 +6,6 @@ require ( github.com/PuerkitoBio/goquery v1.5.1 github.com/mattn/go-sqlite3 v1.14.0 github.com/mmcdole/gofeed v1.0.0 + github.com/shibukawa/configdir v0.0.0-20170330084843-e180dbdc8da0 // indirect golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e ) diff --git a/go.sum b/go.sum index def448a..5db70af 100644 --- a/go.sum +++ b/go.sum @@ -13,6 +13,8 @@ github.com/mmcdole/gofeed v1.0.0/go.mod h1:tkVcyzS3qVMlQrQxJoEH1hkTiuo9a8emDzkMi github.com/mmcdole/goxpp v0.0.0-20181012175147-0068e33feabf h1:sWGE2v+hO0Nd4yFU/S/mDBM5plIU8v/Qhfz41hkDIAI= github.com/mmcdole/goxpp v0.0.0-20181012175147-0068e33feabf/go.mod h1:pasqhqstspkosTneA62Nc+2p9SOBBYAPbnmRRWPQ0V8= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/shibukawa/configdir v0.0.0-20170330084843-e180dbdc8da0 h1:Xuk8ma/ibJ1fOy4Ee11vHhUFHQNpHhrBneOCNHVXS5w= +github.com/shibukawa/configdir v0.0.0-20170330084843-e180dbdc8da0/go.mod h1:7AwjWCpdPhkSmNAgUv5C7EJ4AbmjEB3r047r3DXWu3Y= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/net v0.0.0-20180218175443-cbe0f9307d01/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= diff --git a/main.go b/main.go index 74abe02..c1e3db0 100644 --- a/main.go +++ b/main.go @@ -2,9 +2,29 @@ package main import ( "github.com/nkanaev/yarr/server" + "github.com/nkanaev/yarr/storage" + "github.com/shibukawa/configdir" + "log" + "os" + "path/filepath" ) func main() { - srv := server.New() - srv.ListenAndServe() + logger := log.New(os.Stdout, "", log.Ldate|log.Ltime|log.Lshortfile) + + configDirs := configdir.New("", "yarr") + storageDir := configDirs.QueryFolders(configdir.Global)[0].Path + storageFile := filepath.Join(storageDir, "storage.db") + + if err := os.MkdirAll(storageDir, 0755); err != nil { + logger.Fatal(err) + } + + db, err := storage.New(storageFile, logger) + if err != nil { + logger.Fatal(err) + } + + srv := server.New(db, logger) + srv.Start("127.0.0.1:8000") } diff --git a/server/server.go b/server/server.go index 1f91e4a..59fb6c8 100644 --- a/server/server.go +++ b/server/server.go @@ -17,12 +17,30 @@ type Route struct { type Handler struct { db *storage.Storage + log *log.Logger fetchRunning bool feedQueue chan storage.Feed counter chan int queueSize int } +func New(db *storage.Storage, logger *log.Logger) *Handler { + db.DeleteOldItems() + h := Handler{ + db: db, + log: logger, + feedQueue: make(chan storage.Feed), + counter: make(chan int), + } + return &h +} + +func (h *Handler) Start(addr string) { + h.startJobs() + s := &http.Server{Addr: addr, Handler: h} + s.ListenAndServe() +} + func (h *Handler) startJobs() { go func() { for { @@ -138,16 +156,3 @@ func writeJSON(rw http.ResponseWriter, data interface{}) { rw.Write(reply) rw.Write([]byte("\n")) } - -func New() *http.Server { - db, _ := storage.New() - db.DeleteOldItems() - h := Handler{ - db: db, - feedQueue: make(chan storage.Feed), - counter: make(chan int), - } - s := &http.Server{Addr: "127.0.0.1:8000", Handler: h} - //h.startJobs() - return s -} diff --git a/storage/item.go b/storage/item.go index 5d520a2..16883c7 100644 --- a/storage/item.go +++ b/storage/item.go @@ -324,5 +324,7 @@ func (s *Storage) DeleteOldItems() { s.log.Print(err) return } - s.log.Printf("Deleted %d items\n", num) + if num > 0 { + s.log.Printf("Deleted %d old items\n", num) + } } diff --git a/storage/storage.go b/storage/storage.go index b788532..2dc9410 100644 --- a/storage/storage.go +++ b/storage/storage.go @@ -55,7 +55,7 @@ create table if not exists settings ( val blob ); -create virtual table if not exists search using fts5(title, description, content); +create virtual table if not exists search using fts4(title, description, content); create trigger if not exists del_item_search after delete on items begin delete from search where rowid = old.search_rowid; @@ -67,17 +67,26 @@ type Storage struct { log *log.Logger } -func New() (*Storage, error) { - path := "./storage.db" +func New(path string, logger *log.Logger) (*Storage, error) { + initialize := false + if _, err := os.Stat(path); err != nil { + if os.IsNotExist(err) { + initialize = true + } else { + return nil, err + } + } + db, err := sql.Open("sqlite3", path) if err != nil { return nil, err } - _, err = db.Exec(initQuery) - if err != nil { - return nil, err + + if initialize { + if _, err := db.Exec(initQuery); err != nil { + return nil, err + } } - logger := log.New(os.Stdout, "storage: ", log.Ldate|log.Ltime|log.Lshortfile) return &Storage{db: db, log: logger}, nil }