polishing
This commit is contained in:
parent
bffab8e3fd
commit
9110cf4076
@ -44,26 +44,30 @@ func checkTorrents() {
|
|||||||
|
|
||||||
for animeEp, torrentPrio := range preferredTorrents {
|
for animeEp, torrentPrio := range preferredTorrents {
|
||||||
if IsCurrentlyDownloading(animeEp) {
|
if IsCurrentlyDownloading(animeEp) {
|
||||||
downloadingEpisodes[animeEp] = struct{}{}
|
downloadingEpisodes[animeEp] = struct{}{} // debug output
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
props, inCollection := GetAnimeEpProps(animeEp)
|
props, inCollection := GetAnimeEpProps(animeEp)
|
||||||
lowerPrio := props.Priority > torrentPrio.Priority
|
|
||||||
|
|
||||||
inCollectionEpisodes[animeEp] = inCollection
|
inCollectionEpisodes[animeEp] = inCollection // debug output
|
||||||
lowerPrioTorrents[torrentPrio.ParsedTorrent] = lowerPrio
|
if inCollection {
|
||||||
if inCollection && lowerPrio {
|
lowerPrio := props.Priority > torrentPrio.Priority
|
||||||
continue
|
lowerPrioTorrents[torrentPrio.ParsedTorrent] = lowerPrio // debug output
|
||||||
|
if lowerPrio {
|
||||||
|
continue
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := DownloadTorrent(animeEp, torrentPrio.ParsedTorrent); err != nil {
|
if err := DownloadTorrent(animeEp, torrentPrio.ParsedTorrent); err != nil {
|
||||||
fmt.Println(fmt.Sprintf("could not download torrent %s", torrentPrio.ParsedTorrent.Torrent.ID), err)
|
fmt.Println(fmt.Sprintf("could not download torrent %s", torrentPrio.ParsedTorrent.Torrent.ID), err)
|
||||||
}
|
}
|
||||||
|
|
||||||
downloadedTorrents[animeEp] = torrentPrio
|
downloadedTorrents[animeEp] = torrentPrio // debug output
|
||||||
}
|
}
|
||||||
|
|
||||||
|
duration := time.Since(start)
|
||||||
|
|
||||||
ShowDebugInfo(
|
ShowDebugInfo(
|
||||||
parsedTorrentsByAnimeEp,
|
parsedTorrentsByAnimeEp,
|
||||||
animeListTorrents,
|
animeListTorrents,
|
||||||
@ -75,6 +79,5 @@ func checkTorrents() {
|
|||||||
downloadedTorrents,
|
downloadedTorrents,
|
||||||
)
|
)
|
||||||
|
|
||||||
duration := time.Since(start)
|
|
||||||
fmt.Printf("check took %s. sleeping for %s\n", duration.Truncate(time.Millisecond), (PollRate - duration).Truncate(time.Millisecond))
|
fmt.Printf("check took %s. sleeping for %s\n", duration.Truncate(time.Millisecond), (PollRate - duration).Truncate(time.Millisecond))
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
|
||||||
"io"
|
"io"
|
||||||
"net/http"
|
"net/http"
|
||||||
"os"
|
"os"
|
||||||
@ -18,7 +17,7 @@ func DownloadTorrent(animeEp model.AnimeEpisode, torrent *model.ParsedTorrent) e
|
|||||||
|
|
||||||
torrentFilePath := filepath.Join(TorrentPath, path.Base(torrent.Torrent.Link))
|
torrentFilePath := filepath.Join(TorrentPath, path.Base(torrent.Torrent.Link))
|
||||||
|
|
||||||
fmt.Printf("download: %s -> %s\n", torrent.Torrent.Link, torrentFilePath)
|
//fmt.Printf("download: %s -> %s\n", torrent.Torrent.Link, torrentFilePath)
|
||||||
|
|
||||||
resp, err := http.Get(torrent.Torrent.Link)
|
resp, err := http.Get(torrent.Torrent.Link)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
11
envvars.go
11
envvars.go
@ -11,6 +11,9 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
Uid = envvars.Int("UID", 1000)
|
||||||
|
Gid = envvars.Int("GID", 1000)
|
||||||
|
|
||||||
PollRate = envvars.Object("POLL_RATE", 30*time.Minute, time.ParseDuration)
|
PollRate = envvars.Object("POLL_RATE", 30*time.Minute, time.ParseDuration)
|
||||||
|
|
||||||
AnilistUsername = envvars.String("ANILIST_USERNAME", "username")
|
AnilistUsername = envvars.String("ANILIST_USERNAME", "username")
|
||||||
@ -29,11 +32,19 @@ var (
|
|||||||
template.New("anime-episode-filepath-pattern").Parse,
|
template.New("anime-episode-filepath-pattern").Parse,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
DebugAnimeEpisodePattern = envvars.Object(
|
||||||
|
"DEBUG_ANIME_LANGUAGE_PATTERN",
|
||||||
|
template.Must(template.New("anime-episode-filepath-pattern").Parse(`{{.Title.UserPreferred}} episode {{.Episode}}`)),
|
||||||
|
template.New("anime-episode-pattern").Parse,
|
||||||
|
)
|
||||||
|
|
||||||
AnimeStatus = envvars.ObjectSlice("ANIME_STATUS", ",", []anilist.MediaListStatus{
|
AnimeStatus = envvars.ObjectSlice("ANIME_STATUS", ",", []anilist.MediaListStatus{
|
||||||
anilist.MediaListStatusCurrent,
|
anilist.MediaListStatusCurrent,
|
||||||
anilist.MediaListStatusPlanning,
|
anilist.MediaListStatusPlanning,
|
||||||
}, ParseMediaListStatus)
|
}, ParseMediaListStatus)
|
||||||
|
|
||||||
|
DownloadAll = envvars.Bool("DOWNLOAD_ALL_ANIMES", false)
|
||||||
|
|
||||||
// essential torrent properties
|
// essential torrent properties
|
||||||
|
|
||||||
MaxResolution = envvars.Object("MAX_RESOLUTION", model.Resolution4K, model.ParseResolution)
|
MaxResolution = envvars.Object("MAX_RESOLUTION", model.Resolution4K, model.ParseResolution)
|
||||||
|
8
go.mod
8
go.mod
@ -9,18 +9,20 @@ require (
|
|||||||
git.milar.in/milarin/envvars/v2 v2.0.0
|
git.milar.in/milarin/envvars/v2 v2.0.0
|
||||||
git.milar.in/milarin/gmath v0.0.2
|
git.milar.in/milarin/gmath v0.0.2
|
||||||
git.milar.in/milarin/slices v0.0.3
|
git.milar.in/milarin/slices v0.0.3
|
||||||
git.milar.in/nyaanime/model v0.0.0-20220822093541-87208e95e7ac
|
git.milar.in/nyaanime/model v0.0.0-20220825203652-2504dcc85f73
|
||||||
git.milar.in/nyaanime/parsers v0.0.0-20220822100125-2813a7868f6a
|
git.milar.in/nyaanime/parsers v0.0.0-20220825163541-c840c68b761d
|
||||||
github.com/PuerkitoBio/goquery v1.8.0
|
github.com/PuerkitoBio/goquery v1.8.0
|
||||||
github.com/fatih/color v1.13.0
|
github.com/fatih/color v1.13.0
|
||||||
gopkg.in/vansante/go-ffprobe.v2 v2.1.0
|
gopkg.in/vansante/go-ffprobe.v2 v2.1.0
|
||||||
)
|
)
|
||||||
|
|
||||||
require (
|
require (
|
||||||
git.milar.in/milarin/tprint v0.0.6 // indirect
|
git.milar.in/milarin/tprint v0.0.7 // indirect
|
||||||
github.com/andybalholm/cascadia v1.3.1 // indirect
|
github.com/andybalholm/cascadia v1.3.1 // indirect
|
||||||
github.com/mattn/go-colorable v0.1.13 // indirect
|
github.com/mattn/go-colorable v0.1.13 // indirect
|
||||||
github.com/mattn/go-isatty v0.0.16 // indirect
|
github.com/mattn/go-isatty v0.0.16 // indirect
|
||||||
|
github.com/mattn/go-runewidth v0.0.13 // indirect
|
||||||
|
github.com/rivo/uniseg v0.3.4 // indirect
|
||||||
golang.org/x/net v0.0.0-20220812174116-3211cb980234 // indirect
|
golang.org/x/net v0.0.0-20220812174116-3211cb980234 // indirect
|
||||||
golang.org/x/sys v0.0.0-20220823224334-20c2bfdbfe24 // indirect
|
golang.org/x/sys v0.0.0-20220823224334-20c2bfdbfe24 // indirect
|
||||||
)
|
)
|
||||||
|
17
go.sum
17
go.sum
@ -24,10 +24,22 @@ git.milar.in/milarin/tprint v0.0.5 h1:T4gszcFME+hW9bwTS/gCelFOwq7aZOX6qTngPiZor7
|
|||||||
git.milar.in/milarin/tprint v0.0.5/go.mod h1:KVwwKRggS88ZePLssFXMdisOzJr1SU8hVEUQDzrVtAA=
|
git.milar.in/milarin/tprint v0.0.5/go.mod h1:KVwwKRggS88ZePLssFXMdisOzJr1SU8hVEUQDzrVtAA=
|
||||||
git.milar.in/milarin/tprint v0.0.6 h1:OSiboAnZaeXxx/utZU4nUPSSqamdHYlh89TD02WVOwQ=
|
git.milar.in/milarin/tprint v0.0.6 h1:OSiboAnZaeXxx/utZU4nUPSSqamdHYlh89TD02WVOwQ=
|
||||||
git.milar.in/milarin/tprint v0.0.6/go.mod h1:KVwwKRggS88ZePLssFXMdisOzJr1SU8hVEUQDzrVtAA=
|
git.milar.in/milarin/tprint v0.0.6/go.mod h1:KVwwKRggS88ZePLssFXMdisOzJr1SU8hVEUQDzrVtAA=
|
||||||
|
git.milar.in/milarin/tprint v0.0.7 h1:dvm4l4BhXOie4vtnRMZii0WTLTz2wju8wyUPB/lNeVo=
|
||||||
|
git.milar.in/milarin/tprint v0.0.7/go.mod h1:UwW/B+0cTCbN5hi0bQBE9rIRgLkq+x4V751rrS2KVoI=
|
||||||
git.milar.in/nyaanime/model v0.0.0-20220822093541-87208e95e7ac h1:rM5Mpo4/OJuZaBNZdylag+gi8giWVwDbqsoPjhDP9+g=
|
git.milar.in/nyaanime/model v0.0.0-20220822093541-87208e95e7ac h1:rM5Mpo4/OJuZaBNZdylag+gi8giWVwDbqsoPjhDP9+g=
|
||||||
git.milar.in/nyaanime/model v0.0.0-20220822093541-87208e95e7ac/go.mod h1:OzhQgj0b/Hf9fg8VXYxYt8ONQOvHm8xC44TmS9kQ150=
|
git.milar.in/nyaanime/model v0.0.0-20220822093541-87208e95e7ac/go.mod h1:OzhQgj0b/Hf9fg8VXYxYt8ONQOvHm8xC44TmS9kQ150=
|
||||||
|
git.milar.in/nyaanime/model v0.0.0-20220823115053-441386b0def9 h1:5VhVM6S9NfUmjb7qbmv10RK3YE2cM5FdrfVZy2OHTXQ=
|
||||||
|
git.milar.in/nyaanime/model v0.0.0-20220823115053-441386b0def9/go.mod h1:DqRaTKOh6JRSTVLmoTQ6jrnDvGZvWrfKj3nimr6yuKs=
|
||||||
|
git.milar.in/nyaanime/model v0.0.0-20220825203105-caabe20b311b h1:u5uv/DGUaboua/GCs3zpEWZI9sI7gNg7apZNgyy0eaw=
|
||||||
|
git.milar.in/nyaanime/model v0.0.0-20220825203105-caabe20b311b/go.mod h1:DqRaTKOh6JRSTVLmoTQ6jrnDvGZvWrfKj3nimr6yuKs=
|
||||||
|
git.milar.in/nyaanime/model v0.0.0-20220825203652-2504dcc85f73 h1:fnHpasTZiZyVrXH6Yt0pARibWUveO8pLO+3upK1tboc=
|
||||||
|
git.milar.in/nyaanime/model v0.0.0-20220825203652-2504dcc85f73/go.mod h1:DqRaTKOh6JRSTVLmoTQ6jrnDvGZvWrfKj3nimr6yuKs=
|
||||||
git.milar.in/nyaanime/parsers v0.0.0-20220822100125-2813a7868f6a h1:7vrKOL/vpqJ8YFZ9tmq9iPLoBuLnZgptHWaScyFOFFo=
|
git.milar.in/nyaanime/parsers v0.0.0-20220822100125-2813a7868f6a h1:7vrKOL/vpqJ8YFZ9tmq9iPLoBuLnZgptHWaScyFOFFo=
|
||||||
git.milar.in/nyaanime/parsers v0.0.0-20220822100125-2813a7868f6a/go.mod h1:qm6fIFBFs90uz7IJ8RKgDir0K8Fa8isixGLgrtC6kgU=
|
git.milar.in/nyaanime/parsers v0.0.0-20220822100125-2813a7868f6a/go.mod h1:qm6fIFBFs90uz7IJ8RKgDir0K8Fa8isixGLgrtC6kgU=
|
||||||
|
git.milar.in/nyaanime/parsers v0.0.0-20220825162145-d343540b0f88 h1:jaNVi6srnsozxSjGzQwlf+ouZr0RLOEvrGPrXCttWV0=
|
||||||
|
git.milar.in/nyaanime/parsers v0.0.0-20220825162145-d343540b0f88/go.mod h1:qm6fIFBFs90uz7IJ8RKgDir0K8Fa8isixGLgrtC6kgU=
|
||||||
|
git.milar.in/nyaanime/parsers v0.0.0-20220825163541-c840c68b761d h1:LskYoxsMQ3UgPF/6P7p7qm5xYCoe7GrYH1MZnwMTdEI=
|
||||||
|
git.milar.in/nyaanime/parsers v0.0.0-20220825163541-c840c68b761d/go.mod h1:qm6fIFBFs90uz7IJ8RKgDir0K8Fa8isixGLgrtC6kgU=
|
||||||
github.com/PuerkitoBio/goquery v1.8.0 h1:PJTF7AmFCFKk1N6V6jmKfrNH9tV5pNE6lZMkG0gta/U=
|
github.com/PuerkitoBio/goquery v1.8.0 h1:PJTF7AmFCFKk1N6V6jmKfrNH9tV5pNE6lZMkG0gta/U=
|
||||||
github.com/PuerkitoBio/goquery v1.8.0/go.mod h1:ypIiRMtY7COPGk+I/YbZLbxsxn9g5ejnI2HSMtkjZvI=
|
github.com/PuerkitoBio/goquery v1.8.0/go.mod h1:ypIiRMtY7COPGk+I/YbZLbxsxn9g5ejnI2HSMtkjZvI=
|
||||||
github.com/andybalholm/cascadia v1.3.1 h1:nhxRkql1kdYCc8Snf7D5/D3spOX+dBgjA6u8x004T2c=
|
github.com/andybalholm/cascadia v1.3.1 h1:nhxRkql1kdYCc8Snf7D5/D3spOX+dBgjA6u8x004T2c=
|
||||||
@ -43,6 +55,11 @@ github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9
|
|||||||
github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
|
github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
|
||||||
github.com/mattn/go-isatty v0.0.16 h1:bq3VjFmv/sOjHtdEhmkEV4x1AJtvUvOJ2PFAZ5+peKQ=
|
github.com/mattn/go-isatty v0.0.16 h1:bq3VjFmv/sOjHtdEhmkEV4x1AJtvUvOJ2PFAZ5+peKQ=
|
||||||
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
|
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
|
||||||
|
github.com/mattn/go-runewidth v0.0.13 h1:lTGmDsbAYt5DmK6OnoV7EuIF1wEIFAcxld6ypU4OSgU=
|
||||||
|
github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
|
||||||
|
github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
|
||||||
|
github.com/rivo/uniseg v0.3.4 h1:3Z3Eu6FGHZWSfNKJTOUiPatWwfc7DzJRU04jFUqJODw=
|
||||||
|
github.com/rivo/uniseg v0.3.4/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88=
|
||||||
golang.org/x/net v0.0.0-20210916014120-12bc252f5db8/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
golang.org/x/net v0.0.0-20210916014120-12bc252f5db8/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||||
golang.org/x/net v0.0.0-20220812174116-3211cb980234 h1:RDqmgfe7SvlMWoqC3xwQ2blLO3fcWcxMa3eBLRdRW7E=
|
golang.org/x/net v0.0.0-20220812174116-3211cb980234 h1:RDqmgfe7SvlMWoqC3xwQ2blLO3fcWcxMa3eBLRdRW7E=
|
||||||
golang.org/x/net v0.0.0-20220812174116-3211cb980234/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk=
|
golang.org/x/net v0.0.0-20220812174116-3211cb980234/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk=
|
||||||
|
@ -78,6 +78,12 @@ func IsCurrentlyDownloading(animeEp model.AnimeEpisode) bool {
|
|||||||
|
|
||||||
func SetCurrentlyDownloading(animeEp model.AnimeEpisode) error {
|
func SetCurrentlyDownloading(animeEp model.AnimeEpisode) error {
|
||||||
animeEpPath := GetAnimeEpFilepath(animeEp, "lock")
|
animeEpPath := GetAnimeEpFilepath(animeEp, "lock")
|
||||||
|
|
||||||
|
dir := filepath.Dir(animeEpPath)
|
||||||
|
if err := os.MkdirAll(dir, 0755); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
file, err := os.Create(animeEpPath)
|
file, err := os.Create(animeEpPath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
defer file.Close()
|
defer file.Close()
|
||||||
|
@ -24,7 +24,7 @@ func ShowDebugInfo(
|
|||||||
downloadedTorrents map[model.AnimeEpisode]*TorrentPriority) {
|
downloadedTorrents map[model.AnimeEpisode]*TorrentPriority) {
|
||||||
|
|
||||||
for animeEp, parsedTorrents := range parsedTorrentsByAnimeEp {
|
for animeEp, parsedTorrents := range parsedTorrentsByAnimeEp {
|
||||||
table := tprint.NewTable("id", "resolution", "languages", "subtitles", "seeders", "leechers", "downloads", "trusted", "evaluation")
|
table := tprint.NewTable("id", "resolution", "languages", "subtitles", "seeders", "leechers", "downloads", "trusted", "group", "evaluation")
|
||||||
|
|
||||||
for _, torrent := range parsedTorrents {
|
for _, torrent := range parsedTorrents {
|
||||||
eval := getEvaluation(
|
eval := getEvaluation(
|
||||||
@ -43,6 +43,7 @@ func ShowDebugInfo(
|
|||||||
torrent.Torrent.Leechers,
|
torrent.Torrent.Leechers,
|
||||||
torrent.Torrent.Downloads,
|
torrent.Torrent.Downloads,
|
||||||
torrent.Torrent.Trusted,
|
torrent.Torrent.Trusted,
|
||||||
|
torrent.Parser.Identity,
|
||||||
eval,
|
eval,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@ -61,13 +62,9 @@ func ShowDebugInfo(
|
|||||||
epState = color.RedString("NOT ON LIST")
|
epState = color.RedString("NOT ON LIST")
|
||||||
}
|
}
|
||||||
|
|
||||||
header := BoldText.Sprintf(
|
b := new(strings.Builder)
|
||||||
"%s episode %s (found: %d) (%s)",
|
DebugAnimeEpisodePattern.Execute(b, AnimePathPatternData{Title: animeEp.Anime.Title, Episode: animeEp.Episode})
|
||||||
color.MagentaString(animeEp.Anime.Title.Romaji),
|
header := BoldText.Sprintf("%s (%s)", color.MagentaString(b.String()), epState)
|
||||||
color.MagentaString("%d", animeEp.Episode),
|
|
||||||
len(parsedTorrents), epState,
|
|
||||||
)
|
|
||||||
|
|
||||||
fmt.Println(tprint.FormatHeaderTable(header, table))
|
fmt.Println(tprint.FormatHeaderTable(header, table))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,6 +7,10 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func FilterTorrentsByAnimeList(allTorrents map[model.AnimeEpisode][]*model.ParsedTorrent, animeList map[anilist.MediaID]*anilist.MediaList) map[model.AnimeEpisode][]*model.ParsedTorrent {
|
func FilterTorrentsByAnimeList(allTorrents map[model.AnimeEpisode][]*model.ParsedTorrent, animeList map[anilist.MediaID]*anilist.MediaList) map[model.AnimeEpisode][]*model.ParsedTorrent {
|
||||||
|
if DownloadAll {
|
||||||
|
return allTorrents
|
||||||
|
}
|
||||||
|
|
||||||
filtered := map[model.AnimeEpisode][]*model.ParsedTorrent{}
|
filtered := map[model.AnimeEpisode][]*model.ParsedTorrent{}
|
||||||
for animeEp, torrents := range allTorrents {
|
for animeEp, torrents := range allTorrents {
|
||||||
if _, ok := animeList[animeEp.Anime.ID]; ok {
|
if _, ok := animeList[animeEp.Anime.ID]; ok {
|
||||||
|
2
utils.go
2
utils.go
@ -19,7 +19,7 @@ var AllMediaListStatuses = []anilist.MediaListStatus{
|
|||||||
}
|
}
|
||||||
|
|
||||||
func ParseMediaListStatus(str string) (anilist.MediaListStatus, error) {
|
func ParseMediaListStatus(str string) (anilist.MediaListStatus, error) {
|
||||||
s := anilist.MediaListStatus(str)
|
s := anilist.MediaListStatus(strings.ToUpper(str))
|
||||||
|
|
||||||
allStatusesStr := slices.Map(AllMediaListStatuses, func(status anilist.MediaListStatus) string {
|
allStatusesStr := slices.Map(AllMediaListStatuses, func(status anilist.MediaListStatus) string {
|
||||||
return string(status)
|
return string(status)
|
||||||
|
Loading…
Reference in New Issue
Block a user