mangoprovider

package module
v0.14.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 14, 2024 License: Unlicense Imports: 17 Imported by: 2

README

a logo depicting mango

ManGO Provider

Go Reference

Warning

The API is not stable and may change at any time.

Provider for libmangal written in go.

Most of the code/functionality is based heavily on implementations from Belphemur/mangal (which in turn comes from metafates/mangal) adapted to work with libmangal's mangal.

Credits

Mango logo: Mango icons created by max.icons - Flaticon

Documentation

Index

Constants

View Source
const (
	ChapterNumberIDName     = "chap_num"
	ChapterPartNumberIDName = "part_num"
	ChapterNameIDName       = "title"
	MangaQueryIDName        = "id"
)
View Source
const BundleID = "mango"

Variables

View Source
var (
	MangaQueryIDRegex       = regexp.MustCompile(`(?mi)\s*(m((anga)?[-_]?)?id)\s*:\s*(?P<id>.*\S)\s*$`)
	ChapterNumberRegex      = regexp.MustCompile(chNumRe)
	ChapterNameRegex        = regexp.MustCompile(`(?mi)^([a-z]*\.?)\s*#?\s*(?P<chap_num>` + chNumRe + `)\s*([:\-_.,]?\s*part\s*(?P<part_num>` + chNumRe + `))?\s*[:\-_.,]?\s+(?P<title>\S.*\S)\s*$`) // https://regex101.com/r/ADDouB
	ChapterNameExcludeRegex = regexp.MustCompile(`(?mi)^part\s*#?\s*` + chNumRe + `$`)
	NewlineCharactersRegex  = regexp.MustCompile(`\r?\n`)
	ImageExtensionRegex     = regexp.MustCompile(`^\.[a-zA-Z0-9][a-zA-Z0-9.]*[a-zA-Z0-9]$`)
)

Functions

func CleanString added in v0.9.0

func CleanString(s string) string

Get the string with all whitespace standardized.

func FloatIsInt added in v0.10.3

func FloatIsInt(number float32) bool

FloatIsInt is a helper function to see if the float value is actually an integer.

func FormattedFloat added in v0.12.0

func FormattedFloat(n float32) string

Get the float number with all of the insignificant digits removed.

For example, "001.500" becomes "1.5".

func GenericGetPageImage added in v0.9.0

func GenericGetPageImage(
	ctx context.Context,
	client *http.Client,
	page Page,
) ([]byte, error)

func Log added in v0.5.3

func Log(format string, a ...any)

Log calls (*lm.Logger).Log(msg) when set, else it appends the message to the backlog. Once the logger is set, it logs all backlog on the next log.

It is the logger created by libmangal and used internally. Mangal also plugs into the logger (via (*lm.Client).Logger()) and uses it for info display.

func ReNamedGroups added in v0.10.0

func ReNamedGroups(pattern *regexp.Regexp, str string) map[string]string

Translate regex named groups to a map.

https://stackoverflow.com/a/53587770

Types

type Chapter added in v0.5.0

type Chapter struct {
	Title           string        `json:"title"`
	ID              string        `json:"id"`
	URL             string        `json:"url"`
	Number          float32       `json:"number"`
	Date            metadata.Date `json:"date"`
	ScanlationGroup string        `json:"scanlation_group"`

	// AtHome is only required for mangadex
	AtHome  *mangodex.AtHomeServer `json:"-"`
	Volume_ *Volume                `json:"-"`
}

func (*Chapter) Info added in v0.5.0

func (c *Chapter) Info() mangadata.ChapterInfo

func (*Chapter) MarshalJSON added in v0.5.0

func (c *Chapter) MarshalJSON() ([]byte, error)

func (*Chapter) String added in v0.5.0

func (c *Chapter) String() string

func (*Chapter) Volume added in v0.5.0

func (c *Chapter) Volume() mangadata.Volume

type FilterOptions added in v0.13.0

type FilterOptions struct {
	NSFW                    bool
	Language                string
	TitleChapterNumber      bool
	AvoidDuplicateChapters  bool
	ShowUnavailableChapters bool
}

func DefaultFilterOptions added in v0.13.0

func DefaultFilterOptions() FilterOptions

func (*FilterOptions) String added in v0.13.0

func (f *FilterOptions) String() string

type Functions added in v0.5.3

type Functions struct {
	SearchMangas   func(context.Context, Store, string) ([]mangadata.Manga, error)
	MangaVolumes   func(context.Context, Store, Manga) ([]mangadata.Volume, error)
	VolumeChapters func(context.Context, Store, Volume) ([]mangadata.Chapter, error)
	ChapterPages   func(context.Context, Store, Chapter) ([]mangadata.Page, error)
	GetPageImage   func(context.Context, *http.Client, Page) ([]byte, error)
}

type HeadlessOptions added in v0.13.0

type HeadlessOptions struct {
	UseFlaresolverr bool
	FlaresolverrURL string
}

func DefaultHeadlessOptions added in v0.13.0

func DefaultHeadlessOptions() HeadlessOptions

type Loader added in v0.5.3

type Loader struct {
	libmangal.ProviderInfo
	Options Options
	F       func() Functions // So that the scrapers are loaded on ProviderLoader.Load(ctx)
}

func (*Loader) Info added in v0.5.3

func (l *Loader) Info() libmangal.ProviderInfo

func (*Loader) Load added in v0.5.3

func (l *Loader) Load(ctx context.Context) (libmangal.Provider, error)

func (*Loader) String added in v0.5.3

func (l *Loader) String() string

type Manga added in v0.5.0

type Manga struct {
	Title         string `json:"title"`
	AnilistSearch string `json:"anilist_search"`
	URL           string `json:"url"`
	ID            string `json:"id"`
	Cover         string `json:"cover"`
	Banner        string `json:"banner"`

	Metadata_ *metadata.Metadata `json:"-"`
}

func (*Manga) Info added in v0.5.0

func (m *Manga) Info() mangadata.MangaInfo

func (*Manga) MarshalJSON added in v0.5.0

func (m *Manga) MarshalJSON() ([]byte, error)

func (*Manga) Metadata added in v0.12.0

func (m *Manga) Metadata() metadata.Metadata

func (*Manga) SetMetadata added in v0.12.0

func (m *Manga) SetMetadata(metadata metadata.Metadata)

func (*Manga) String added in v0.5.0

func (m *Manga) String() string

type MangaDexOptions added in v0.13.0

type MangaDexOptions struct {
	mangodex.Options
	DataSaver bool
}

func DefaultMangaDexOptions added in v0.13.0

func DefaultMangaDexOptions() MangaDexOptions

type MangaPlusCreatorsOptions added in v0.13.0

type MangaPlusCreatorsOptions struct {
	creators.Options
}

func DefaultMangaPlusCreatorsOptions added in v0.13.0

func DefaultMangaPlusCreatorsOptions() MangaPlusCreatorsOptions

type MangaPlusOptions added in v0.10.2

type MangaPlusOptions struct {
	mangoplus.Options
	Quality string
}

func DefaultMangaPlusOptions added in v0.13.0

func DefaultMangaPlusOptions() MangaPlusOptions

type Options added in v0.5.0

type Options struct {
	HTTPClient        *http.Client
	UserAgent         string
	HTTPStore         func(providerID string) (gokv.Store, error)
	Parallelism       uint8
	Filter            FilterOptions
	Headless          HeadlessOptions
	MangaDex          MangaDexOptions
	MangaPlus         MangaPlusOptions
	MangaPlusCreators MangaPlusCreatorsOptions
}

func DefaultOptions added in v0.13.0

func DefaultOptions() Options

type Page added in v0.5.0

type Page struct {
	Ext     string            `json:"-"`
	URL     string            `json:"url"`
	Headers map[string]string `json:"-"`
	Cookies map[string]string `json:"-"`

	Chapter_ *Chapter `json:"-"`
}

func (*Page) Chapter added in v0.5.0

func (p *Page) Chapter() mangadata.Chapter

func (*Page) Extension added in v0.5.0

func (p *Page) Extension() string

func (*Page) String added in v0.5.0

func (p *Page) String() string

type Provider added in v0.5.0

type Provider struct {
	libmangal.ProviderInfo
	Options Options
	F       Functions
	// contains filtered or unexported fields
}

func (*Provider) ChapterPages added in v0.5.0

func (p *Provider) ChapterPages(
	ctx context.Context,
	chapter mangadata.Chapter,
) ([]mangadata.Page, error)

func (*Provider) Close added in v0.5.0

func (p *Provider) Close() error

func (*Provider) GetPageImage added in v0.5.0

func (p *Provider) GetPageImage(
	ctx context.Context,
	page mangadata.Page,
) ([]byte, error)

func (*Provider) Info added in v0.5.0

func (p *Provider) Info() libmangal.ProviderInfo

func (*Provider) MangaVolumes added in v0.5.0

func (p *Provider) MangaVolumes(
	ctx context.Context,
	manga mangadata.Manga,
) ([]mangadata.Volume, error)

func (*Provider) SearchMangas added in v0.5.0

func (p *Provider) SearchMangas(
	ctx context.Context,
	query string,
) ([]mangadata.Manga, error)

func (*Provider) SetLogger added in v0.5.0

func (p *Provider) SetLogger(newLogger *logger.Logger)

func (*Provider) String added in v0.5.0

func (p *Provider) String() string

func (*Provider) VolumeChapters added in v0.5.0

func (p *Provider) VolumeChapters(
	ctx context.Context,
	volume mangadata.Volume,
) ([]mangadata.Chapter, error)

type Store added in v0.13.5

type Store struct {
	// contains filtered or unexported fields
}

Store is a gokv.Store wrapper with special handling of search volumes/chapters as the manga needs to be re-setted when loading from the store, as the pointer of the manga will be different for all chapters and thus the SetMetadata method will not work.

func (Store) Close added in v0.13.5

func (s Store) Close() error

func (Store) GetChapters added in v0.13.5

func (s Store) GetChapters(cacheID string, volume Volume, chapters *[]mangadata.Chapter) (bool, error)

func (Store) GetMangas added in v0.13.5

func (s Store) GetMangas(cacheID string, query string, mangas *[]mangadata.Manga) (bool, error)

func (Store) GetVolumes added in v0.13.5

func (s Store) GetVolumes(cacheID string, manga Manga, volumes *[]mangadata.Volume) (bool, error)

func (Store) SetChapters added in v0.13.5

func (s Store) SetChapters(cacheID string, chapters []mangadata.Chapter) error

func (Store) SetMangas added in v0.13.5

func (s Store) SetMangas(cacheID string, mangas []mangadata.Manga) error

func (Store) SetVolumes added in v0.13.5

func (s Store) SetVolumes(cacheID string, volumes []mangadata.Volume) error

type Volume added in v0.5.0

type Volume struct {
	Number float32 `json:"number"`

	None   bool   `json:"-"`
	Manga_ *Manga `json:"-"`
}

func (*Volume) Info added in v0.5.0

func (v *Volume) Info() mangadata.VolumeInfo

func (*Volume) Manga added in v0.5.0

func (v *Volume) Manga() mangadata.Manga

func (*Volume) MarshalJSON added in v0.5.0

func (v *Volume) MarshalJSON() ([]byte, error)

func (*Volume) String added in v0.5.0

func (v *Volume) String() string

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL