filebot/website/data/shell/banners.groovy

60 lines
1.8 KiB
Groovy

// filebot -script "http://filebot.sourceforge.net/data/shell/banners.groovy" -trust-script /path/to/media/
/*
* Fetch series and season banners for all tv shows
*/
import static net.sourceforge.filebot.WebServices.*
def fetchBanner(outputDir, outputName, series, bannerType, bannerType2, season = null) {
// select and fetch banner
def banner = TheTVDB.getBanner(series, bannerType, bannerType2, season, Locale.ENGLISH, 0)
if (banner == null) {
println "Banner not found: $outputName"
return null
}
println "Fetch $banner.url"
return banner.url.saveAs(new File(outputDir, outputName + ".jpg"))
}
def fetchSeriesBanners(dir, series, seasons) {
println "Fetch banners for $series / Season $seasons"
// fetch series banner, fanart, posters, etc
fetchBanner(dir, "folder", series, "poster", "680x1000")
fetchBanner(dir, "banner", series, "series", "graphical")
// fetch highest resolution fanart
["1920x1080", "1280x720"].findResult{ bannerType2 -> fetchBanner(dir, "fanart", series, "fanart", bannerType2) }
// fetch season banners
seasons.each { s ->
fetchBanner(dir, "folder-S${s.pad(2)}", series, "season", "season", s)
fetchBanner(dir, "banner-S${s.pad(2)}", series, "season", "seasonwide", s)
}
}
args.eachMediaFolder() { dir ->
println "Processing $dir"
def videoFiles = dir.listFiles{ it.isVideo() }
def seriesName = detectSeriesName(videoFiles)
def seasons = videoFiles.findResults { guessEpisodeNumber(it)?.season }.unique()
if (seriesName == null) {
println "Failed to detect series name from files -> Query by ${dir.name} instead"
seriesName = dir.name
}
def options = TheTVDB.search(seriesName)
if (options.isEmpty()) {
println "TV Series not found: $seriesName"
return;
}
fetchSeriesBanners(dir, options[0], seasons)
}