243 lines
7.0 KiB
Go
243 lines
7.0 KiB
Go
package local
|
|
|
|
import (
|
|
"seanime/internal/api/anilist"
|
|
|
|
"github.com/goccy/go-json"
|
|
)
|
|
|
|
var CurrSettings *Settings
|
|
|
|
func (ldb *Database) SaveSettings(s *Settings) error {
|
|
s.BaseModel.ID = 1
|
|
CurrSettings = nil
|
|
return ldb.gormdb.Save(s).Error
|
|
}
|
|
|
|
func (ldb *Database) GetSettings() *Settings {
|
|
if CurrSettings != nil {
|
|
return CurrSettings
|
|
}
|
|
var s Settings
|
|
err := ldb.gormdb.First(&s).Error
|
|
if err != nil {
|
|
_ = ldb.SaveSettings(&Settings{
|
|
BaseModel: BaseModel{
|
|
ID: 1,
|
|
},
|
|
Updated: false,
|
|
})
|
|
return &Settings{
|
|
BaseModel: BaseModel{
|
|
ID: 1,
|
|
},
|
|
Updated: false,
|
|
}
|
|
}
|
|
return &s
|
|
}
|
|
|
|
func (ldb *Database) SetTrackedMedia(sm *TrackedMedia) error {
|
|
return ldb.gormdb.Save(sm).Error
|
|
}
|
|
|
|
// GetTrackedMedia returns the tracked media with the given mediaId and kind.
|
|
// This should only be used when adding/removing tracked media.
|
|
func (ldb *Database) GetTrackedMedia(mediaId int, kind string) (*TrackedMedia, bool) {
|
|
var sm TrackedMedia
|
|
err := ldb.gormdb.Where("media_id = ? AND type = ?", mediaId, kind).First(&sm).Error
|
|
return &sm, err == nil
|
|
}
|
|
|
|
func (ldb *Database) GetAllTrackedMediaByType(kind string) ([]*TrackedMedia, bool) {
|
|
var sm []*TrackedMedia
|
|
err := ldb.gormdb.Where("type = ?", kind).Find(&sm).Error
|
|
return sm, err == nil
|
|
}
|
|
|
|
func (ldb *Database) GetAllTrackedMedia() ([]*TrackedMedia, bool) {
|
|
var sm []*TrackedMedia
|
|
err := ldb.gormdb.Find(&sm).Error
|
|
return sm, err == nil
|
|
}
|
|
|
|
func (ldb *Database) RemoveTrackedMedia(mediaId int, kind string) error {
|
|
return ldb.gormdb.Where("media_id = ? AND type = ?", mediaId, kind).Delete(&TrackedMedia{}).Error
|
|
}
|
|
|
|
//----------------------------------------------------------------------------------------------------------------------------------------------------
|
|
//----------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
func (ldb *Database) SaveAnimeSnapshot(as *AnimeSnapshot) error {
|
|
return ldb.gormdb.Save(as).Error
|
|
}
|
|
|
|
func (ldb *Database) GetAnimeSnapshot(mediaId int) (*AnimeSnapshot, bool) {
|
|
var as AnimeSnapshot
|
|
err := ldb.gormdb.Where("media_id = ?", mediaId).First(&as).Error
|
|
return &as, err == nil
|
|
}
|
|
|
|
func (ldb *Database) RemoveAnimeSnapshot(mediaId int) error {
|
|
return ldb.gormdb.Where("media_id = ?", mediaId).Delete(&AnimeSnapshot{}).Error
|
|
}
|
|
|
|
//----------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
func (ldb *Database) SaveMangaSnapshot(ms *MangaSnapshot) error {
|
|
return ldb.gormdb.Save(ms).Error
|
|
}
|
|
|
|
func (ldb *Database) GetMangaSnapshot(mediaId int) (*MangaSnapshot, bool) {
|
|
var ms MangaSnapshot
|
|
err := ldb.gormdb.Where("media_id = ?", mediaId).First(&ms).Error
|
|
return &ms, err == nil
|
|
}
|
|
|
|
func (ldb *Database) RemoveMangaSnapshot(mediaId int) error {
|
|
return ldb.gormdb.Where("media_id = ?", mediaId).Delete(&MangaSnapshot{}).Error
|
|
}
|
|
|
|
//----------------------------------------------------------------------------------------------------------------------------------------------------
|
|
//----------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
func (ldb *Database) GetAnimeSnapshots() ([]*AnimeSnapshot, bool) {
|
|
var as []*AnimeSnapshot
|
|
err := ldb.gormdb.Find(&as).Error
|
|
return as, err == nil
|
|
}
|
|
|
|
func (ldb *Database) GetMangaSnapshots() ([]*MangaSnapshot, bool) {
|
|
var ms []*MangaSnapshot
|
|
err := ldb.gormdb.Find(&ms).Error
|
|
return ms, err == nil
|
|
}
|
|
|
|
//----------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
func (ldb *Database) SaveAnimeCollection(ac *anilist.AnimeCollection) error {
|
|
return ldb._saveLocalCollection(AnimeType, ac)
|
|
}
|
|
|
|
func (ldb *Database) SaveMangaCollection(mc *anilist.MangaCollection) error {
|
|
return ldb._saveLocalCollection(MangaType, mc)
|
|
}
|
|
|
|
func (ldb *Database) GetLocalAnimeCollection() (*anilist.AnimeCollection, bool) {
|
|
lc, ok := ldb._getLocalCollection(AnimeType)
|
|
if !ok {
|
|
return nil, false
|
|
}
|
|
|
|
var ac anilist.AnimeCollection
|
|
err := json.Unmarshal(lc.Value, &ac)
|
|
|
|
return &ac, err == nil
|
|
}
|
|
|
|
func (ldb *Database) GetLocalMangaCollection() (*anilist.MangaCollection, bool) {
|
|
lc, ok := ldb._getLocalCollection(MangaType)
|
|
if !ok {
|
|
return nil, false
|
|
}
|
|
|
|
var mc anilist.MangaCollection
|
|
err := json.Unmarshal(lc.Value, &mc)
|
|
|
|
return &mc, err == nil
|
|
}
|
|
|
|
//----------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
func (ldb *Database) _getLocalCollection(collectionType string) (*LocalCollection, bool) {
|
|
var lc LocalCollection
|
|
err := ldb.gormdb.Where("type = ?", collectionType).First(&lc).Error
|
|
return &lc, err == nil
|
|
}
|
|
|
|
func (ldb *Database) _saveLocalCollection(collectionType string, value interface{}) error {
|
|
|
|
marshalledValue, err := json.Marshal(value)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
// Check if collection already exists
|
|
lc, ok := ldb._getLocalCollection(collectionType)
|
|
if ok {
|
|
lc.Value = marshalledValue
|
|
return ldb.gormdb.Save(&lc).Error
|
|
}
|
|
|
|
lcN := LocalCollection{
|
|
Type: collectionType,
|
|
Value: marshalledValue,
|
|
}
|
|
|
|
return ldb.gormdb.Save(&lcN).Error
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// Simulated collections
|
|
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
func (ldb *Database) _getSimulatedCollection(collectionType string) (*SimulatedCollection, bool) {
|
|
var lc SimulatedCollection
|
|
err := ldb.gormdb.Where("type = ?", collectionType).First(&lc).Error
|
|
return &lc, err == nil
|
|
}
|
|
|
|
func (ldb *Database) _saveSimulatedCollection(collectionType string, value interface{}) error {
|
|
|
|
marshalledValue, err := json.Marshal(value)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
// Check if collection already exists
|
|
lc, ok := ldb._getSimulatedCollection(collectionType)
|
|
if ok {
|
|
lc.Value = marshalledValue
|
|
return ldb.gormdb.Save(&lc).Error
|
|
}
|
|
|
|
lcN := SimulatedCollection{
|
|
Type: collectionType,
|
|
Value: marshalledValue,
|
|
}
|
|
|
|
return ldb.gormdb.Save(&lcN).Error
|
|
}
|
|
|
|
func (ldb *Database) SaveSimulatedAnimeCollection(ac *anilist.AnimeCollection) error {
|
|
return ldb._saveSimulatedCollection(AnimeType, ac)
|
|
}
|
|
|
|
func (ldb *Database) SaveSimulatedMangaCollection(mc *anilist.MangaCollection) error {
|
|
return ldb._saveSimulatedCollection(MangaType, mc)
|
|
}
|
|
|
|
func (ldb *Database) GetSimulatedAnimeCollection() (*anilist.AnimeCollection, bool) {
|
|
lc, ok := ldb._getSimulatedCollection(AnimeType)
|
|
if !ok {
|
|
return nil, false
|
|
}
|
|
|
|
var ac anilist.AnimeCollection
|
|
err := json.Unmarshal(lc.Value, &ac)
|
|
|
|
return &ac, err == nil
|
|
}
|
|
|
|
func (ldb *Database) GetSimulatedMangaCollection() (*anilist.MangaCollection, bool) {
|
|
lc, ok := ldb._getSimulatedCollection(MangaType)
|
|
if !ok {
|
|
return nil, false
|
|
}
|
|
|
|
var mc anilist.MangaCollection
|
|
err := json.Unmarshal(lc.Value, &mc)
|
|
|
|
return &mc, err == nil
|
|
}
|