|
|
|
|
@ -2,20 +2,18 @@ package db
@@ -2,20 +2,18 @@ package db
|
|
|
|
|
|
|
|
|
|
import ( |
|
|
|
|
"encoding/json" |
|
|
|
|
"fmt" |
|
|
|
|
"log" |
|
|
|
|
"os" |
|
|
|
|
"ssender/internal/models" |
|
|
|
|
|
|
|
|
|
"github.com/boltdb/bolt" |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
func InitDb(rss models.Rss2, dbpath string) error { |
|
|
|
|
db, err := openDB(dbpath) |
|
|
|
|
log.Println("Initialize DB") |
|
|
|
|
db, err := bolt.Open(dbpath, 0600, nil) |
|
|
|
|
if err != nil { |
|
|
|
|
return err |
|
|
|
|
log.Fatal(err) |
|
|
|
|
} |
|
|
|
|
log.Println("Initialize DB") |
|
|
|
|
defer db.Close() |
|
|
|
|
|
|
|
|
|
err = db.Update(func(tx *bolt.Tx) error { |
|
|
|
|
@ -43,48 +41,42 @@ func InitDb(rss models.Rss2, dbpath string) error {
@@ -43,48 +41,42 @@ func InitDb(rss models.Rss2, dbpath string) error {
|
|
|
|
|
|
|
|
|
|
func FindItems(rss models.Rss2, dbpath string) (*models.SendItems, error) { |
|
|
|
|
var sendItems models.SendItems |
|
|
|
|
|
|
|
|
|
// Check if DB file exists
|
|
|
|
|
if _, err := os.Stat(dbpath); os.IsNotExist(err) { |
|
|
|
|
return nil, fmt.Errorf("database file does not exist: %s", dbpath) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Open database
|
|
|
|
|
db, err := openDB(dbpath) |
|
|
|
|
db, err := bolt.Open(dbpath, 0600, nil) |
|
|
|
|
if err != nil { |
|
|
|
|
return nil, err |
|
|
|
|
} |
|
|
|
|
defer db.Close() |
|
|
|
|
|
|
|
|
|
log.Println("Finding new items in DB") |
|
|
|
|
|
|
|
|
|
for _, v := range rss.ItemList { |
|
|
|
|
err = db.View(func(tx *bolt.Tx) error { |
|
|
|
|
// Assume bucket exists and has keys
|
|
|
|
|
b := tx.Bucket([]byte("rss")) |
|
|
|
|
if b == nil { |
|
|
|
|
return fmt.Errorf("bucket 'rss' not found in database") |
|
|
|
|
c := b.Cursor() |
|
|
|
|
flag := false |
|
|
|
|
for key, _ := c.First(); key != nil; key, _ = c.Next() { |
|
|
|
|
if v.Link == string(key) { |
|
|
|
|
flag = true |
|
|
|
|
break |
|
|
|
|
} |
|
|
|
|
for _, v := range rss.ItemList { |
|
|
|
|
if b.Get([]byte(v.Link)) != nil { |
|
|
|
|
sendItems.ItemList = append(sendItems.ItemList, v) |
|
|
|
|
} |
|
|
|
|
if flag { |
|
|
|
|
sendItems.ItemList = append(sendItems.ItemList, v) |
|
|
|
|
} |
|
|
|
|
return nil |
|
|
|
|
}) |
|
|
|
|
if err != nil { |
|
|
|
|
return nil, err |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
log.Printf("Found %d new items", len(sendItems.ItemList)) |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
return &sendItems, nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func UpdateDb(dbpath string, senditems *models.SendItems) error { |
|
|
|
|
db, err := openDB(dbpath) |
|
|
|
|
log.Println("Update DB") |
|
|
|
|
db, err := bolt.Open(dbpath, 0600, nil) |
|
|
|
|
if err != nil { |
|
|
|
|
return err |
|
|
|
|
log.Fatal(err) |
|
|
|
|
} |
|
|
|
|
log.Println("Update DB") |
|
|
|
|
defer db.Close() |
|
|
|
|
|
|
|
|
|
err = db.Update(func(tx *bolt.Tx) error { |
|
|
|
|
@ -106,7 +98,3 @@ func UpdateDb(dbpath string, senditems *models.SendItems) error {
@@ -106,7 +98,3 @@ func UpdateDb(dbpath string, senditems *models.SendItems) error {
|
|
|
|
|
} |
|
|
|
|
return nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func openDB(dbpath string) (*bolt.DB, error) { |
|
|
|
|
return bolt.Open(dbpath, 0600, nil) |
|
|
|
|
} |
|
|
|
|
|