2022-08-15 15:55:27 +02:00
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
|
|
|
"errors"
|
|
|
|
"fmt"
|
|
|
|
|
|
|
|
"git.milar.in/milarin/adverr"
|
2023-01-13 13:38:51 +01:00
|
|
|
"git.milar.in/nyaanime/logic"
|
2022-08-15 16:45:52 +02:00
|
|
|
"git.milar.in/nyaanime/model"
|
|
|
|
"git.milar.in/nyaanime/parsers"
|
2022-08-15 15:55:27 +02:00
|
|
|
)
|
|
|
|
|
|
|
|
func ParseTorrent(torrent *model.Torrent) (*model.ParsedTorrent, error) {
|
|
|
|
for _, parser := range parsers.Parsers {
|
|
|
|
parsedTorrent, ok := parser.TorrentParser(&parser, torrent)
|
|
|
|
if ok {
|
2023-01-13 13:38:51 +01:00
|
|
|
anime, err := logic.SearchAnimeByTitle(parsedTorrent.OriginalAnimeTitle)
|
2022-08-15 15:55:27 +02:00
|
|
|
if err != nil {
|
|
|
|
return parsedTorrent, ErrTorrentParseFailed.Wrap(err, torrent.ID, parser.String())
|
|
|
|
}
|
|
|
|
|
|
|
|
parsedTorrent.Anime = anime
|
|
|
|
return parsedTorrent, nil
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return nil, ErrNoSuitableParser.New(torrent.ID)
|
|
|
|
}
|
|
|
|
|
|
|
|
func ParseTorrentsByAnimeEp(torrents []model.Torrent) map[model.AnimeEpisode][]*model.ParsedTorrent {
|
|
|
|
torrentsByAnimeEp := map[model.AnimeEpisode][]*model.ParsedTorrent{}
|
|
|
|
|
|
|
|
for _, torrent := range torrents {
|
|
|
|
torrent := torrent
|
|
|
|
parsedTorrent, err := ParseTorrent(&torrent)
|
|
|
|
if err != nil {
|
|
|
|
if errors.Is(err, ErrAnimeNotFound) {
|
|
|
|
fmt.Printf("anime not found: \"%s\" (torrent ID: %s)\n", parsedTorrent.OriginalAnimeTitle, torrent.ID)
|
|
|
|
} else if !errors.Is(err, ErrNoSuitableParser) {
|
|
|
|
adverr.Println(err)
|
|
|
|
}
|
|
|
|
continue
|
|
|
|
}
|
|
|
|
|
|
|
|
animeEpisode := model.AnimeEpisode{
|
2022-08-22 00:13:50 +02:00
|
|
|
Anime: parsedTorrent.Anime,
|
2022-08-15 15:55:27 +02:00
|
|
|
Episode: parsedTorrent.Episode,
|
|
|
|
}
|
|
|
|
|
|
|
|
torrentsByAnimeEp[animeEpisode] = append(torrentsByAnimeEp[animeEpisode], parsedTorrent)
|
|
|
|
}
|
|
|
|
|
|
|
|
return torrentsByAnimeEp
|
|
|
|
}
|