Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // HIT ENTER TO KILL SCRIPT
- Thread.startDaemon {
- System.in.read()
- System.exit(0)
- }
- def input = args.getFiles{ it.isVideo() || it.isSubtitle() }
- // ignore clutter files
- input = input.findAll{ !(it.path =~ /\b(?i:sample|trailer|extras|deleted.scenes|music.video|scrapbook)\b/) }
- def isEpisodeFile(f) {
- parseEpisodeNumber(f.name) || parseDate(f.name) || f.name =~ /\b\d+(?i:of)\d+\b/ || (parseEpisodeNumber(f.name, false) && f.name =~ /\b\p{XDigit}{8}\b/)
- }
- def groups = input.groupBy{ f ->
- def match = [movie:null, series:null, anime:null]
- // try as movie
- def movie = isEpisodeFile(f) ? null : detectMovie(f, false, Locale.ENGLISH, null, TheMovieDB)
- if (movie) {
- match.movie = movie
- }
- // try as tv series
- def seriesName = detectSeriesName(f) ?: detectSeriesName(f.dir.listFiles{ it.isVideo() })
- if (seriesName) {
- def resultSet = TheTVDB.search(seriesName, Locale.ENGLISH)
- if (resultSet.size() > 0) {
- match.series = resultSet
- }
- }
- // try as anime
- def animeName = detectSeriesName(f) ?: detectSeriesName(f.dir.listFiles{ it.isVideo() })
- if (animeName) {
- def resultSet = AniDB.search(animeName, Locale.ENGLISH)
- if (resultSet.size() > 0) {
- match.anime = resultSet
- }
- }
- println "$f.name => $match"
- return match
- }
- groups.each{ match, files ->
- def score = [movie:0, series:0, anime:0]
- files.each{ f ->
- if (parseEpisodeNumber(f.name, true) || parseDate(f.name) || f.name =~ /\b\d+(?i:of)\d+\b/)
- score.series+=1
- if (parseEpisodeNumber(f.name, false) || f.name =~ /\b\p{XDigit}{8}\b/)
- score.anime+=1
- if (f =~ /\b(?:19|20)\\d{2}\b/)
- score.movie+=1
- // boost best match based on filename similarity
- score.entrySet().sort{ match[it.key] ? [[f.name, f.parentFile.name], match[it.key] as List].combinations().collect{ similarity(it[0], it[1]) }.max() : 0 }.last().value+=1
- }
- println "$match => $score"
- // select best match
- def m = match.entrySet().sort{ score[it.key] }.last()
- switch (m.key) {
- case 'movie' : return rename(file:files, format:'Movies/{n} ({y})/{n} ({y}){" CD$pi"}', db:'TheMovieDB')
- case 'series': return rename(file:files, format:'TV Shows/{n}/{episode.special ? "Special" : "Season "+s}/{n} - {episode.special ? "S00E"+special.pad(2) : s00e00} - {t}', db:'TheTVDB')
- case 'anime' : return rename(file:files, format:'Anime/{n}/{n} - {sxe} - {t}', db:'AniDB')
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement