refactoring

This commit is contained in:
Nazar Kanaev 2020-07-25 13:17:26 +01:00
parent b223233318
commit 9b04353c4a
6 changed files with 62 additions and 23 deletions

1
go.mod
View File

@ -6,5 +6,6 @@ require (
github.com/PuerkitoBio/goquery v1.5.1 github.com/PuerkitoBio/goquery v1.5.1
github.com/mattn/go-sqlite3 v1.14.0 github.com/mattn/go-sqlite3 v1.14.0
github.com/mmcdole/gofeed v1.0.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 golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e
) )

2
go.sum
View File

@ -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 h1:sWGE2v+hO0Nd4yFU/S/mDBM5plIU8v/Qhfz41hkDIAI=
github.com/mmcdole/goxpp v0.0.0-20181012175147-0068e33feabf/go.mod h1:pasqhqstspkosTneA62Nc+2p9SOBBYAPbnmRRWPQ0V8= 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/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= 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/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= golang.org/x/net v0.0.0-20180218175443-cbe0f9307d01/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=

24
main.go
View File

@ -2,9 +2,29 @@ package main
import ( import (
"github.com/nkanaev/yarr/server" "github.com/nkanaev/yarr/server"
"github.com/nkanaev/yarr/storage"
"github.com/shibukawa/configdir"
"log"
"os"
"path/filepath"
) )
func main() { func main() {
srv := server.New() logger := log.New(os.Stdout, "", log.Ldate|log.Ltime|log.Lshortfile)
srv.ListenAndServe()
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")
} }

View File

@ -17,12 +17,30 @@ type Route struct {
type Handler struct { type Handler struct {
db *storage.Storage db *storage.Storage
log *log.Logger
fetchRunning bool fetchRunning bool
feedQueue chan storage.Feed feedQueue chan storage.Feed
counter chan int counter chan int
queueSize 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() { func (h *Handler) startJobs() {
go func() { go func() {
for { for {
@ -138,16 +156,3 @@ func writeJSON(rw http.ResponseWriter, data interface{}) {
rw.Write(reply) rw.Write(reply)
rw.Write([]byte("\n")) 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
}

View File

@ -324,5 +324,7 @@ func (s *Storage) DeleteOldItems() {
s.log.Print(err) s.log.Print(err)
return return
} }
s.log.Printf("Deleted %d items\n", num) if num > 0 {
s.log.Printf("Deleted %d old items\n", num)
}
} }

View File

@ -55,7 +55,7 @@ create table if not exists settings (
val blob 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 create trigger if not exists del_item_search after delete on items begin
delete from search where rowid = old.search_rowid; delete from search where rowid = old.search_rowid;
@ -67,17 +67,26 @@ type Storage struct {
log *log.Logger log *log.Logger
} }
func New() (*Storage, error) { func New(path string, logger *log.Logger) (*Storage, error) {
path := "./storage.db" 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) db, err := sql.Open("sqlite3", path)
if err != nil { if err != nil {
return nil, err return nil, err
} }
_, err = db.Exec(initQuery)
if err != nil { if initialize {
return nil, err 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 return &Storage{db: db, log: logger}, nil
} }