Files
newsboat-yt/database/database.go
Michael Lehmann ceefd07930 Intial Commit.
2024-08-06 22:56:35 +02:00

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
}