131 lines
2.1 KiB
Go
131 lines
2.1 KiB
Go
package database
|
|
|
|
import (
|
|
"database/sql"
|
|
"fmt"
|
|
"kattudden/newsboat-yt/config"
|
|
|
|
"github.com/google/uuid"
|
|
_"github.com/mattn/go-sqlite3"
|
|
)
|
|
|
|
var conf, _ = config.New()
|
|
|
|
func getDatabase() (*sql.DB, error){
|
|
db, err := sql.Open("sqlite3", conf.DatabasePath)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
return db, nil
|
|
}
|
|
|
|
|
|
func createTable(db *sql.DB) {
|
|
sqlStatement := "CREATE TABLE IF NOT EXISTS queue (id TEXT not null primary key, link TEXT not null, downloaded BOOLEAN)"
|
|
_, err := db.Exec(sqlStatement)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
}
|
|
|
|
|
|
func InsertUrl(url string) error {
|
|
db, err := getDatabase()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
createTable(db)
|
|
|
|
uuid := uuid.NewString()
|
|
sqlStatement := fmt.Sprintf("INSERT INTO queue (id, link, downloaded) VALUES (?, ?, ?)")
|
|
|
|
tx, err := db.Begin()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
stmt, err := tx.Prepare(sqlStatement)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
defer stmt.Close()
|
|
|
|
_, err = stmt.Exec(uuid, url, false)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
tx.Commit()
|
|
db.Close()
|
|
|
|
return nil
|
|
}
|
|
|
|
|
|
type Url struct {
|
|
ID string
|
|
Link string
|
|
}
|
|
|
|
|
|
func GetUrls() ([]Url){
|
|
db, _ := getDatabase()
|
|
|
|
queryStatement := "SELECT id, link from queue WHERE downloaded = 0"
|
|
rows, _ := db.Query(queryStatement)
|
|
|
|
var urls []Url
|
|
|
|
for rows.Next() {
|
|
var id string
|
|
var link string
|
|
|
|
rows.Scan(&id, &link)
|
|
|
|
entry := Url{
|
|
ID: id,
|
|
Link: link,
|
|
}
|
|
|
|
urls = append(urls, entry)
|
|
}
|
|
|
|
db.Close()
|
|
|
|
return urls
|
|
}
|
|
|
|
|
|
func MarkUrlDownloaded(id string) error {
|
|
db, err := getDatabase()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
sqlStatement := `UPDATE queue SET downloaded = true WHERE id = ?`
|
|
|
|
tx, err := db.Begin()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
stmt, err := tx.Prepare(sqlStatement)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
defer stmt.Close()
|
|
|
|
_, err = stmt.Exec(id)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
tx.Commit()
|
|
db.Close()
|
|
|
|
return nil
|
|
}
|