mirror of
https://github.com/ultrasn0w/huso.git
synced 2025-12-13 15:39:53 +01:00
105 lines
2.0 KiB
Go
105 lines
2.0 KiB
Go
package main
|
|
|
|
import (
|
|
"encoding/binary"
|
|
"encoding/json"
|
|
"errors"
|
|
"fmt"
|
|
|
|
"github.com/xujiajun/nutsdb"
|
|
)
|
|
|
|
func ReadUser(username string) (*UserData, error) {
|
|
data, err := DbRead(bucketUsers, username)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
var user UserData
|
|
err = json.Unmarshal(data, &user)
|
|
return &user, err
|
|
}
|
|
|
|
func SaveUser(user *UserData) error {
|
|
data, err := json.Marshal(user)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if user.Username == "" {
|
|
return errors.New("user empty")
|
|
}
|
|
err = DbSave(bucketUsers, user.Username, data)
|
|
return err
|
|
}
|
|
|
|
func ReadAnimes() ([]Anime, error) {
|
|
var animes []Anime
|
|
err := db.View(
|
|
func(tx *nutsdb.Tx) error {
|
|
entries, err := tx.GetAll(bucketAnime)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
animes = make([]Anime, len(entries))
|
|
// iterate entries
|
|
for _, entry := range entries {
|
|
// decode anime list
|
|
malId, c := binary.Varint(entry.Key)
|
|
if c <= 0 {
|
|
return fmt.Errorf("int64 decode error: %s %s", entry.Key, entry.Value)
|
|
}
|
|
// parse user list
|
|
var users []WatchUser
|
|
err = json.Unmarshal(entry.Value, &users)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
anime := Anime{
|
|
Anime: malId,
|
|
Users: users,
|
|
}
|
|
animes = append(animes, anime)
|
|
}
|
|
return nil
|
|
})
|
|
return animes, err
|
|
}
|
|
|
|
func DbClean() error {
|
|
return db.Update(
|
|
func(tx *nutsdb.Tx) error {
|
|
return db.Merge()
|
|
})
|
|
}
|
|
|
|
func DbSave(bucket, key string, val []byte) error {
|
|
return db.Update(
|
|
func(tx *nutsdb.Tx) error {
|
|
keyBytes := []byte(key)
|
|
return tx.Put(bucket, keyBytes, val, nutsdb.Persistent)
|
|
})
|
|
}
|
|
|
|
func DbRead(bucket, key string) ([]byte, error) {
|
|
var val []byte
|
|
err := db.View(
|
|
func(tx *nutsdb.Tx) error {
|
|
keyBytes := []byte(key)
|
|
e, err := tx.Get(bucket, keyBytes)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
val = make([]byte, len(e.Value))
|
|
copy(val, e.Value)
|
|
return err
|
|
})
|
|
return val, err
|
|
}
|
|
|
|
func DbDelete(bucket, key string, val []byte) error {
|
|
return db.Update(
|
|
func(tx *nutsdb.Tx) error {
|
|
keyBytes := []byte(key)
|
|
return tx.Delete(bucket, keyBytes)
|
|
})
|
|
}
|