83 lines
2.0 KiB
Go
83 lines
2.0 KiB
Go
package db_bridge
|
|
|
|
import (
|
|
"github.com/goccy/go-json"
|
|
"seanime/internal/database/db"
|
|
"seanime/internal/database/models"
|
|
"seanime/internal/library/anime"
|
|
)
|
|
|
|
func GetPlaylists(db *db.Database) ([]*anime.Playlist, error) {
|
|
var res []*models.PlaylistEntry
|
|
err := db.Gorm().Find(&res).Error
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
playlists := make([]*anime.Playlist, 0)
|
|
for _, p := range res {
|
|
var localFiles []*anime.LocalFile
|
|
if err := json.Unmarshal(p.Value, &localFiles); err == nil {
|
|
playlist := anime.NewPlaylist(p.Name)
|
|
playlist.SetLocalFiles(localFiles)
|
|
playlist.DbId = p.ID
|
|
playlists = append(playlists, playlist)
|
|
}
|
|
}
|
|
return playlists, nil
|
|
}
|
|
|
|
func SavePlaylist(db *db.Database, playlist *anime.Playlist) error {
|
|
data, err := json.Marshal(playlist.LocalFiles)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
playlistEntry := &models.PlaylistEntry{
|
|
Name: playlist.Name,
|
|
Value: data,
|
|
}
|
|
|
|
return db.Gorm().Save(playlistEntry).Error
|
|
}
|
|
|
|
func DeletePlaylist(db *db.Database, id uint) error {
|
|
return db.Gorm().Where("id = ?", id).Delete(&models.PlaylistEntry{}).Error
|
|
}
|
|
|
|
func UpdatePlaylist(db *db.Database, playlist *anime.Playlist) error {
|
|
data, err := json.Marshal(playlist.LocalFiles)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
// Get the playlist entry
|
|
playlistEntry := &models.PlaylistEntry{}
|
|
if err := db.Gorm().Where("id = ?", playlist.DbId).First(playlistEntry).Error; err != nil {
|
|
return err
|
|
}
|
|
|
|
// Update the playlist entry
|
|
playlistEntry.Name = playlist.Name
|
|
playlistEntry.Value = data
|
|
|
|
return db.Gorm().Save(playlistEntry).Error
|
|
}
|
|
|
|
func GetPlaylist(db *db.Database, id uint) (*anime.Playlist, error) {
|
|
playlistEntry := &models.PlaylistEntry{}
|
|
if err := db.Gorm().Where("id = ?", id).First(playlistEntry).Error; err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
var localFiles []*anime.LocalFile
|
|
if err := json.Unmarshal(playlistEntry.Value, &localFiles); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
playlist := anime.NewPlaylist(playlistEntry.Name)
|
|
playlist.SetLocalFiles(localFiles)
|
|
playlist.DbId = playlistEntry.ID
|
|
|
|
return playlist, nil
|
|
}
|