node build fixed
This commit is contained in:
127
seanime-2.9.10/internal/plugin/anime.go
Normal file
127
seanime-2.9.10/internal/plugin/anime.go
Normal file
@@ -0,0 +1,127 @@
|
||||
package plugin
|
||||
|
||||
import (
|
||||
"context"
|
||||
"seanime/internal/database/db_bridge"
|
||||
"seanime/internal/extension"
|
||||
"seanime/internal/goja/goja_bindings"
|
||||
"seanime/internal/hook"
|
||||
"seanime/internal/library/anime"
|
||||
goja_util "seanime/internal/util/goja"
|
||||
|
||||
"github.com/dop251/goja"
|
||||
"github.com/rs/zerolog"
|
||||
)
|
||||
|
||||
type Anime struct {
|
||||
ctx *AppContextImpl
|
||||
vm *goja.Runtime
|
||||
logger *zerolog.Logger
|
||||
ext *extension.Extension
|
||||
scheduler *goja_util.Scheduler
|
||||
}
|
||||
|
||||
func (a *AppContextImpl) BindAnimeToContextObj(vm *goja.Runtime, obj *goja.Object, logger *zerolog.Logger, ext *extension.Extension, scheduler *goja_util.Scheduler) {
|
||||
m := &Anime{
|
||||
ctx: a,
|
||||
vm: vm,
|
||||
logger: logger,
|
||||
ext: ext,
|
||||
scheduler: scheduler,
|
||||
}
|
||||
|
||||
animeObj := vm.NewObject()
|
||||
|
||||
// Get downloaded chapter containers
|
||||
_ = animeObj.Set("getAnimeEntry", m.getAnimeEntry)
|
||||
_ = obj.Set("anime", animeObj)
|
||||
}
|
||||
|
||||
func (m *Anime) getAnimeEntry(call goja.FunctionCall) goja.Value {
|
||||
promise, resolve, reject := m.vm.NewPromise()
|
||||
|
||||
mediaId := call.Argument(0).ToInteger()
|
||||
|
||||
if mediaId == 0 {
|
||||
_ = reject(goja_bindings.NewErrorString(m.vm, "anilist platform not found"))
|
||||
return m.vm.ToValue(promise)
|
||||
}
|
||||
|
||||
database, ok := m.ctx.database.Get()
|
||||
if !ok {
|
||||
_ = reject(goja_bindings.NewErrorString(m.vm, "database not found"))
|
||||
return m.vm.ToValue(promise)
|
||||
}
|
||||
|
||||
anilistPlatform, ok := m.ctx.anilistPlatform.Get()
|
||||
if !ok {
|
||||
_ = reject(goja_bindings.NewErrorString(m.vm, "anilist platform not found"))
|
||||
return m.vm.ToValue(promise)
|
||||
}
|
||||
|
||||
metadataProvider, ok := m.ctx.metadataProvider.Get()
|
||||
if !ok {
|
||||
_ = reject(goja_bindings.NewErrorString(m.vm, "metadata provider not found"))
|
||||
return m.vm.ToValue(promise)
|
||||
}
|
||||
|
||||
fillerManager, ok := m.ctx.fillerManager.Get()
|
||||
if !ok {
|
||||
_ = reject(goja_bindings.NewErrorString(m.vm, "filler manager not found"))
|
||||
return m.vm.ToValue(promise)
|
||||
}
|
||||
|
||||
go func() {
|
||||
// Get all the local files
|
||||
lfs, _, err := db_bridge.GetLocalFiles(database)
|
||||
if err != nil {
|
||||
_ = reject(m.vm.ToValue(err.Error()))
|
||||
return
|
||||
}
|
||||
|
||||
// Get the user's anilist collection
|
||||
animeCollection, err := anilistPlatform.GetAnimeCollection(context.Background(), false)
|
||||
if err != nil {
|
||||
_ = reject(m.vm.ToValue(err.Error()))
|
||||
return
|
||||
}
|
||||
|
||||
if animeCollection == nil {
|
||||
_ = reject(goja_bindings.NewErrorString(m.vm, "anilist collection not found"))
|
||||
return
|
||||
}
|
||||
|
||||
// Create a new media entry
|
||||
entry, err := anime.NewEntry(context.Background(), &anime.NewEntryOptions{
|
||||
MediaId: int(mediaId),
|
||||
LocalFiles: lfs,
|
||||
AnimeCollection: animeCollection,
|
||||
Platform: anilistPlatform,
|
||||
MetadataProvider: metadataProvider,
|
||||
})
|
||||
if err != nil {
|
||||
_ = reject(goja_bindings.NewError(m.vm, err))
|
||||
return
|
||||
}
|
||||
|
||||
fillerEvent := new(anime.AnimeEntryFillerHydrationEvent)
|
||||
fillerEvent.Entry = entry
|
||||
err = hook.GlobalHookManager.OnAnimeEntryFillerHydration().Trigger(fillerEvent)
|
||||
if err != nil {
|
||||
_ = reject(goja_bindings.NewError(m.vm, err))
|
||||
return
|
||||
}
|
||||
entry = fillerEvent.Entry
|
||||
|
||||
if !fillerEvent.DefaultPrevented {
|
||||
fillerManager.HydrateFillerData(fillerEvent.Entry)
|
||||
}
|
||||
|
||||
m.scheduler.ScheduleAsync(func() error {
|
||||
_ = resolve(m.vm.ToValue(entry))
|
||||
return nil
|
||||
})
|
||||
}()
|
||||
|
||||
return m.vm.ToValue(promise)
|
||||
}
|
||||
Reference in New Issue
Block a user