1
0
mirror of https://github.com/varbhat/exatorrent.git synced 2021-09-19 22:57:02 +03:00
Files
exatorrent-seedbox-server-cli/internal/db/sqlite3filestatedb.go
2021-08-26 02:23:47 +05:30

74 lines
1.6 KiB
Go

package db
import (
"sync"
"crawshaw.io/sqlite"
"crawshaw.io/sqlite/sqlitex"
"github.com/anacrolix/torrent/metainfo"
)
type SqliteFSDb struct {
Db *sqlite.Conn
mu sync.Mutex
}
func (db *SqliteFSDb) Open(fp string) {
var err error
db.Db, err = sqlite.OpenConn(fp, 0)
if err != nil {
DbL.Fatalln(err)
}
err = sqlitex.ExecScript(db.Db, `create table if not exists filestatedb (filepath text,infohash text, unique(filepath, infohash));`)
if err != nil {
DbL.Fatalln(err)
}
}
func (db *SqliteFSDb) Close() {
db.mu.Lock()
defer db.mu.Unlock()
err := db.Db.Close()
if err != nil {
DbL.Fatalln(err)
}
}
func (db *SqliteFSDb) Add(fp string, ih metainfo.Hash) (err error) {
db.mu.Lock()
defer db.mu.Unlock()
err = sqlitex.Exec(db.Db, `insert into filestatedb (filepath,infohash) values (?,?) on conflict (filepath,infohash) do nothing;`, nil, fp, ih.HexString())
return
}
func (db *SqliteFSDb) Get(ih metainfo.Hash) (ret []string) {
ret = make([]string, 0)
db.mu.Lock()
defer db.mu.Unlock()
_ = sqlitex.Exec(
db.Db, `select filepath from filestatedb where infohash=?;`,
func(stmt *sqlite.Stmt) error {
ret = append(ret, stmt.GetText("filepath"))
return nil
}, ih.HexString())
return
}
func (db *SqliteFSDb) Delete(ih metainfo.Hash) (err error) {
db.mu.Lock()
defer db.mu.Unlock()
err = sqlitex.Exec(db.Db, `delete from filestatedb where infohash=?;`, nil, ih.HexString())
return
}
func (db *SqliteFSDb) Deletefile(fp string, ih metainfo.Hash) (err error) {
db.mu.Lock()
defer db.mu.Unlock()
err = sqlitex.Exec(db.Db, `delete from filestatedb where filepath=? and infohash=?;`, nil, fp, ih.HexString())
return err
}