initial commit
This commit is contained in:
8
anime_episode.go
Normal file
8
anime_episode.go
Normal file
@ -0,0 +1,8 @@
|
||||
package model
|
||||
|
||||
import "git.tordarus.net/tordarus/anilist"
|
||||
|
||||
type AnimeEpisode struct {
|
||||
Anime *anilist.Media
|
||||
Episode int
|
||||
}
|
3
file_parser.go
Normal file
3
file_parser.go
Normal file
@ -0,0 +1,3 @@
|
||||
package model
|
||||
|
||||
type FileParserFunc func(parser *Parser, str string) (file *ParsedFile, ok bool)
|
5
go.mod
Normal file
5
go.mod
Normal file
@ -0,0 +1,5 @@
|
||||
module git.tordarus.net/nyaanime/model
|
||||
|
||||
go 1.18
|
||||
|
||||
require git.tordarus.net/tordarus/anilist v1.5.2
|
2
go.sum
Normal file
2
go.sum
Normal file
@ -0,0 +1,2 @@
|
||||
git.tordarus.net/tordarus/anilist v1.5.2 h1:SxlovS+e3lgL2SowQQwj8dQrIZzRFPomcGCw3V+My0Q=
|
||||
git.tordarus.net/tordarus/anilist v1.5.2/go.mod h1:Mrhx/9+8HJVj5ebQ5fJuXqL220tEJhgQIqFK2WKPXgA=
|
6
pair.go
Normal file
6
pair.go
Normal file
@ -0,0 +1,6 @@
|
||||
package model
|
||||
|
||||
type Pair[A, B any] struct {
|
||||
First A
|
||||
Second B
|
||||
}
|
38
parsed_file.go
Normal file
38
parsed_file.go
Normal file
@ -0,0 +1,38 @@
|
||||
package model
|
||||
|
||||
import "git.tordarus.net/tordarus/anilist"
|
||||
|
||||
type ParsedFile struct {
|
||||
// parsed data
|
||||
Anime *anilist.Media
|
||||
OriginalAnimeTitle string
|
||||
Episode int
|
||||
Languages []string
|
||||
Subtitles []string
|
||||
Resolution Resolution
|
||||
|
||||
// meta data
|
||||
File string
|
||||
Parser *Parser
|
||||
}
|
||||
|
||||
var _ PropertyHolder = &ParsedFile{}
|
||||
|
||||
func (f *ParsedFile) GetLanguages() []string {
|
||||
return f.Languages
|
||||
}
|
||||
|
||||
func (f *ParsedFile) GetSubtitles() []string {
|
||||
return f.Subtitles
|
||||
}
|
||||
|
||||
func (f *ParsedFile) GetResolution() Resolution {
|
||||
return f.Resolution
|
||||
}
|
||||
|
||||
func (f *ParsedFile) AnimeEpisode() AnimeEpisode {
|
||||
return AnimeEpisode{
|
||||
Anime: f.Anime,
|
||||
Episode: f.Episode,
|
||||
}
|
||||
}
|
47
parsed_torrent.go
Normal file
47
parsed_torrent.go
Normal file
@ -0,0 +1,47 @@
|
||||
package model
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"git.tordarus.net/tordarus/anilist"
|
||||
)
|
||||
|
||||
type ParsedTorrent struct {
|
||||
// parsed data
|
||||
Anime *anilist.Media
|
||||
OriginalAnimeTitle string
|
||||
Episode int
|
||||
Languages []string
|
||||
Subtitles []string
|
||||
Resolution Resolution
|
||||
|
||||
// meta data
|
||||
Torrent *Torrent
|
||||
Parser *Parser
|
||||
}
|
||||
|
||||
var _ PropertyHolder = &ParsedTorrent{}
|
||||
|
||||
func (t ParsedTorrent) String() string {
|
||||
return fmt.Sprintf("title: %s | episode: %d | resolution: %s | languages: %s | subtitles: %s | %s",
|
||||
t.Anime.Title.Native,
|
||||
t.Episode,
|
||||
t.Resolution,
|
||||
strings.Join(t.Languages, ", "),
|
||||
strings.Join(t.Subtitles, ", "),
|
||||
t.Torrent.StringWithoutTitle(),
|
||||
)
|
||||
}
|
||||
|
||||
func (t *ParsedTorrent) GetLanguages() []string {
|
||||
return t.Languages
|
||||
}
|
||||
|
||||
func (t *ParsedTorrent) GetSubtitles() []string {
|
||||
return t.Subtitles
|
||||
}
|
||||
|
||||
func (t *ParsedTorrent) GetResolution() Resolution {
|
||||
return t.Resolution
|
||||
}
|
14
parser.go
Normal file
14
parser.go
Normal file
@ -0,0 +1,14 @@
|
||||
package model
|
||||
|
||||
type Parser struct {
|
||||
Identity string
|
||||
|
||||
TorrentParser TorrentParserFunc
|
||||
FileParser FileParserFunc
|
||||
|
||||
FileEncoding string
|
||||
}
|
||||
|
||||
func (p Parser) String() string {
|
||||
return p.Identity
|
||||
}
|
7
property_holder.go
Normal file
7
property_holder.go
Normal file
@ -0,0 +1,7 @@
|
||||
package model
|
||||
|
||||
type PropertyHolder interface {
|
||||
GetLanguages() []string
|
||||
GetSubtitles() []string
|
||||
GetResolution() Resolution
|
||||
}
|
42
resolution.go
Normal file
42
resolution.go
Normal file
@ -0,0 +1,42 @@
|
||||
package model
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strconv"
|
||||
"strings"
|
||||
)
|
||||
|
||||
type Resolution int
|
||||
|
||||
const (
|
||||
Resolution4K Resolution = 2160
|
||||
ResolutionQuadHD Resolution = 1440
|
||||
ResolutionFullHD Resolution = 1080
|
||||
ResolutionHD Resolution = 720
|
||||
ResolutionSD Resolution = 480
|
||||
|
||||
ResolutionUnknown Resolution = 0
|
||||
)
|
||||
|
||||
func ParseResolution(str string) (Resolution, error) {
|
||||
switch strings.TrimSpace(str) {
|
||||
case "4K":
|
||||
return Resolution4K, nil
|
||||
case "HD":
|
||||
return ResolutionHD, nil
|
||||
case "SD":
|
||||
return ResolutionSD, nil
|
||||
default:
|
||||
v, err := strconv.Atoi(strings.TrimSuffix(str, "p"))
|
||||
return Resolution(v), err
|
||||
}
|
||||
}
|
||||
|
||||
func (r Resolution) String() string {
|
||||
switch r {
|
||||
case Resolution4K:
|
||||
return "4K"
|
||||
default:
|
||||
return fmt.Sprintf("%dp", r)
|
||||
}
|
||||
}
|
48
title_language.go
Normal file
48
title_language.go
Normal file
@ -0,0 +1,48 @@
|
||||
package model
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"strings"
|
||||
|
||||
"git.tordarus.net/tordarus/anilist"
|
||||
)
|
||||
|
||||
type AnimeTitleLang string
|
||||
|
||||
const (
|
||||
AnimeTitleLangEnglish AnimeTitleLang = "english"
|
||||
AnimeTitleLangNative AnimeTitleLang = "native"
|
||||
AnimeTitleLangRomaji AnimeTitleLang = "romaji"
|
||||
AnimeTitleUserPreferred AnimeTitleLang = "user-preferred"
|
||||
)
|
||||
|
||||
func ParseAnimeTitleLang(str string) (AnimeTitleLang, error) {
|
||||
lang := AnimeTitleLang(strings.TrimSpace(str))
|
||||
switch lang {
|
||||
case AnimeTitleLangEnglish:
|
||||
return lang, nil
|
||||
case AnimeTitleUserPreferred:
|
||||
return lang, nil
|
||||
case AnimeTitleLangNative:
|
||||
return lang, nil
|
||||
case AnimeTitleLangRomaji:
|
||||
return lang, nil
|
||||
default:
|
||||
return "", errors.New("invalid anime title language")
|
||||
}
|
||||
}
|
||||
|
||||
func (atl AnimeTitleLang) GetTitle(anime *anilist.Media) string {
|
||||
switch atl {
|
||||
case AnimeTitleLangEnglish:
|
||||
return anime.Title.English
|
||||
case AnimeTitleUserPreferred:
|
||||
return anime.Title.UserPreferred
|
||||
case AnimeTitleLangNative:
|
||||
return anime.Title.Native
|
||||
case AnimeTitleLangRomaji:
|
||||
return anime.Title.Romaji
|
||||
default:
|
||||
panic("invalid anime title language")
|
||||
}
|
||||
}
|
42
torrent.go
Normal file
42
torrent.go
Normal file
@ -0,0 +1,42 @@
|
||||
package model
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"time"
|
||||
)
|
||||
|
||||
type Torrent struct {
|
||||
ID TorrentID
|
||||
Title string
|
||||
Link string
|
||||
Time time.Time
|
||||
Seeders int
|
||||
Leechers int
|
||||
Downloads int
|
||||
Trusted bool
|
||||
}
|
||||
|
||||
type TorrentID string
|
||||
|
||||
func (t Torrent) String() string {
|
||||
return fmt.Sprintf("id: %s | title: %s | seeders: %d | leechers: %d | downloads: %d | trusted: %t | upload time: %s",
|
||||
t.ID,
|
||||
t.Title,
|
||||
t.Seeders,
|
||||
t.Leechers,
|
||||
t.Downloads,
|
||||
t.Trusted,
|
||||
t.Time.Format("2006-01-02 15:04:05"),
|
||||
)
|
||||
}
|
||||
|
||||
func (t Torrent) StringWithoutTitle() string {
|
||||
return fmt.Sprintf("id: %s | seeders: %d | leechers: %d | downloads: %d | trusted: %t | upload time: %s",
|
||||
t.ID,
|
||||
t.Seeders,
|
||||
t.Leechers,
|
||||
t.Downloads,
|
||||
t.Trusted,
|
||||
t.Time.Format("2006-01-02 15:04:05"),
|
||||
)
|
||||
}
|
3
torrent_parser.go
Normal file
3
torrent_parser.go
Normal file
@ -0,0 +1,3 @@
|
||||
package model
|
||||
|
||||
type TorrentParserFunc func(parser *Parser, torrent *Torrent) (parsedTorrent *ParsedTorrent, ok bool)
|
Reference in New Issue
Block a user