153 lines
3.5 KiB
Go
153 lines
3.5 KiB
Go
package extension_repo
|
|
|
|
import (
|
|
"context"
|
|
"seanime/internal/extension"
|
|
hibiketorrent "seanime/internal/extension/hibike/torrent"
|
|
"seanime/internal/goja/goja_runtime"
|
|
"seanime/internal/util"
|
|
|
|
"github.com/rs/zerolog"
|
|
)
|
|
|
|
type GojaAnimeTorrentProvider struct {
|
|
*gojaProviderBase
|
|
}
|
|
|
|
func NewGojaAnimeTorrentProvider(ext *extension.Extension, language extension.Language, logger *zerolog.Logger, runtimeManager *goja_runtime.Manager) (hibiketorrent.AnimeProvider, *GojaAnimeTorrentProvider, error) {
|
|
base, err := initializeProviderBase(ext, language, logger, runtimeManager)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
|
|
provider := &GojaAnimeTorrentProvider{
|
|
gojaProviderBase: base,
|
|
}
|
|
return provider, provider, nil
|
|
}
|
|
|
|
func (g *GojaAnimeTorrentProvider) Search(opts hibiketorrent.AnimeSearchOptions) (ret []*hibiketorrent.AnimeTorrent, err error) {
|
|
defer util.HandlePanicInModuleWithError(g.ext.ID+".Search", &err)
|
|
|
|
method, err := g.callClassMethod(context.Background(), "search", structToMap(opts))
|
|
|
|
promiseRes, err := g.waitForPromise(method)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
err = g.unmarshalValue(promiseRes, &ret)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
for i := range ret {
|
|
ret[i].Provider = g.ext.ID
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
func (g *GojaAnimeTorrentProvider) SmartSearch(opts hibiketorrent.AnimeSmartSearchOptions) (ret []*hibiketorrent.AnimeTorrent, err error) {
|
|
defer util.HandlePanicInModuleWithError(g.ext.ID+".SmartSearch", &err)
|
|
|
|
method, err := g.callClassMethod(context.Background(), "smartSearch", structToMap(opts))
|
|
|
|
promiseRes, err := g.waitForPromise(method)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
err = g.unmarshalValue(promiseRes, &ret)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
for i := range ret {
|
|
ret[i].Provider = g.ext.ID
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
func (g *GojaAnimeTorrentProvider) GetTorrentInfoHash(torrent *hibiketorrent.AnimeTorrent) (ret string, err error) {
|
|
defer util.HandlePanicInModuleWithError(g.ext.ID+".GetTorrentInfoHash", &err)
|
|
|
|
res, err := g.callClassMethod(context.Background(), "getTorrentInfoHash", structToMap(torrent))
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
promiseRes, err := g.waitForPromise(res)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
err = g.unmarshalValue(promiseRes, &ret)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
func (g *GojaAnimeTorrentProvider) GetTorrentMagnetLink(torrent *hibiketorrent.AnimeTorrent) (ret string, err error) {
|
|
defer util.HandlePanicInModuleWithError(g.ext.ID+".GetTorrentMagnetLink", &err)
|
|
|
|
res, err := g.callClassMethod(context.Background(), "getTorrentMagnetLink", structToMap(torrent))
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
promiseRes, err := g.waitForPromise(res)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
err = g.unmarshalValue(promiseRes, &ret)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
func (g *GojaAnimeTorrentProvider) GetLatest() (ret []*hibiketorrent.AnimeTorrent, err error) {
|
|
defer util.HandlePanicInModuleWithError(g.ext.ID+".GetLatest", &err)
|
|
|
|
method, err := g.callClassMethod(context.Background(), "getLatest")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
promiseRes, err := g.waitForPromise(method)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
err = g.unmarshalValue(promiseRes, &ret)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
func (g *GojaAnimeTorrentProvider) GetSettings() (ret hibiketorrent.AnimeProviderSettings) {
|
|
defer util.HandlePanicInModuleThen(g.ext.ID+".GetSettings", func() {
|
|
ret = hibiketorrent.AnimeProviderSettings{}
|
|
})
|
|
|
|
res, err := g.callClassMethod(context.Background(), "getSettings")
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
err = g.unmarshalValue(res, &ret)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
return
|
|
}
|