110 lines
3.6 KiB
Go
110 lines
3.6 KiB
Go
package core
|
|
|
|
import (
|
|
"context"
|
|
"seanime/internal/api/anilist"
|
|
"seanime/internal/events"
|
|
"seanime/internal/platforms/platform"
|
|
"seanime/internal/user"
|
|
)
|
|
|
|
// GetUser returns the currently logged-in user or a simulated one.
|
|
func (a *App) GetUser() *user.User {
|
|
if a.user == nil {
|
|
return user.NewSimulatedUser()
|
|
}
|
|
return a.user
|
|
}
|
|
|
|
func (a *App) GetUserAnilistToken() string {
|
|
if a.user == nil || a.user.Token == user.SimulatedUserToken {
|
|
return ""
|
|
}
|
|
|
|
return a.user.Token
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
// UpdatePlatform changes the current platform to the provided one.
|
|
func (a *App) UpdatePlatform(platform platform.Platform) {
|
|
a.AnilistPlatform = platform
|
|
}
|
|
|
|
// UpdateAnilistClientToken will update the Anilist Client Wrapper token.
|
|
// This function should be called when a user logs in
|
|
func (a *App) UpdateAnilistClientToken(token string) {
|
|
a.AnilistClient = anilist.NewAnilistClient(token)
|
|
a.AnilistPlatform.SetAnilistClient(a.AnilistClient) // Update Anilist Client Wrapper in Platform
|
|
}
|
|
|
|
// GetAnimeCollection returns the user's Anilist collection if it in the cache, otherwise it queries Anilist for the user's collection.
|
|
// When bypassCache is true, it will always query Anilist for the user's collection
|
|
func (a *App) GetAnimeCollection(bypassCache bool) (*anilist.AnimeCollection, error) {
|
|
return a.AnilistPlatform.GetAnimeCollection(context.Background(), bypassCache)
|
|
}
|
|
|
|
// GetRawAnimeCollection is the same as GetAnimeCollection but returns the raw collection that includes custom lists
|
|
func (a *App) GetRawAnimeCollection(bypassCache bool) (*anilist.AnimeCollection, error) {
|
|
return a.AnilistPlatform.GetRawAnimeCollection(context.Background(), bypassCache)
|
|
}
|
|
|
|
// RefreshAnimeCollection queries Anilist for the user's collection
|
|
func (a *App) RefreshAnimeCollection() (*anilist.AnimeCollection, error) {
|
|
go func() {
|
|
a.OnRefreshAnilistCollectionFuncs.Range(func(key string, f func()) bool {
|
|
go f()
|
|
return true
|
|
})
|
|
}()
|
|
|
|
ret, err := a.AnilistPlatform.RefreshAnimeCollection(context.Background())
|
|
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
// Save the collection to PlaybackManager
|
|
a.PlaybackManager.SetAnimeCollection(ret)
|
|
|
|
// Save the collection to AutoDownloader
|
|
a.AutoDownloader.SetAnimeCollection(ret)
|
|
|
|
// Save the collection to LocalManager
|
|
a.LocalManager.SetAnimeCollection(ret)
|
|
|
|
// Save the collection to DirectStreamManager
|
|
a.DirectStreamManager.SetAnimeCollection(ret)
|
|
|
|
a.WSEventManager.SendEvent(events.RefreshedAnilistAnimeCollection, nil)
|
|
|
|
return ret, nil
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
// GetMangaCollection is the same as GetAnimeCollection but for manga
|
|
func (a *App) GetMangaCollection(bypassCache bool) (*anilist.MangaCollection, error) {
|
|
return a.AnilistPlatform.GetMangaCollection(context.Background(), bypassCache)
|
|
}
|
|
|
|
// GetRawMangaCollection does not exclude custom lists
|
|
func (a *App) GetRawMangaCollection(bypassCache bool) (*anilist.MangaCollection, error) {
|
|
return a.AnilistPlatform.GetRawMangaCollection(context.Background(), bypassCache)
|
|
}
|
|
|
|
// RefreshMangaCollection queries Anilist for the user's manga collection
|
|
func (a *App) RefreshMangaCollection() (*anilist.MangaCollection, error) {
|
|
mc, err := a.AnilistPlatform.RefreshMangaCollection(context.Background())
|
|
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
a.LocalManager.SetMangaCollection(mc)
|
|
|
|
a.WSEventManager.SendEvent(events.RefreshedAnilistMangaCollection, nil)
|
|
|
|
return mc, nil
|
|
}
|