1
0
Fork 0
filebot-presets/MaNGranA_Pelis_Organizer.gr...

267 lines
9.2 KiB
Groovy
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//by @xeviff
/** RUTAS **/
def ubuntu_desktop=true
def root = ubuntu_desktop ? '/mnt/mangrana_pelis/' : '/pelis/'
def rutaOK = root+"Pelis/plain/"
def ruta = rutaOK
def ruta_docu = root+"Documentales/plain/"
def ruta_anime = root+"Pelis_anime/plain/"
def ruta_animacion = root+"Pelis_animacion/"
def ruta_infantil = root+"Pelis_infantiles/"
def ruta_familiar = root+"Pelis_familiar/"
def ruta_esp = root+"Pelis_esp/plain/"
def ruta_retro = root+"Pelis_retro/plain/"
def ruta_estrenos = root+"Pelis_estrenos/plain/"
def ruta_classic = root+"Pelis_classic/"
def ruta_asiaticas = root+"Pelis_asiaticas/"
def rutaKO = root+"error/"
/**********/
/* HARDCODED */
def skipAudioCheck = true
/* otras funciones */
/**/
def getInicial () {
def nomIngles = localize.English.n
if (nomIngles.startsWith("The ") || nomIngles.startsWith("A "))
nomIngles = nomIngles.replaceFirst("The ",'').replaceFirst("A ",'')
def ini0 = nomIngles[0].toUpperCase()
def iniClear = nomIngles.size()>1 ? ini0.replaceAll(/[¡¿'#*\(]/,nomIngles[1].toUpperCase()) : ini0
def inicial = iniClear.replaceAll(/[0-9]/,'#')+'/'
return inicial
}
def sanityCheck() {
def clearCurrentName = fn.replaceAll(/\s|-|:||\./,'')
def clearPlexName = plex.name.replaceAll(/\s|-|:||\./,'')
if (clearCurrentName.substring(0, clearCurrentName.size()-6)!=clearPlexName.substring(0, clearPlexName.size()-6))
return false
def yearOldName = clearCurrentName.substring(clearCurrentName.size()-5, clearCurrentName.size()-1) as int
def yearNewName = clearPlexName.substring(clearPlexName.size()-5, clearPlexName.size()-1) as int
return Math.abs(yearOldName - yearNewName) < 2
}
//*****************************************************************************************/
//*****************************************************************************************/
//*****************************************************************************************/
try { //empieza el script
//sanity check
if (!sanityCheck()) return '@@@@@@ Names Sanity Check KO @@@@@@@ --> New name: '+plex.name
try {
video
} catch (e) {
throw new Exception("[video_roto]")
}
try {
genres
} catch (err) {
throw new Exception("[genero_no_especificado]")
}
/********************************/
/** Audio (ejecución) **/
def catalanAudios=[]
def spanishAudios=[]
def englishAudios=[]
def otherAudios=[]
def audioDeclUndefined=false
for (item in audio) {
def idioma
try {
idioma = item.Language_String
if (idioma==null) otherAudios.add("audio_no_def")
if ("Catalan"==idioma) catalanAudios.add(item)
else if (idioma=~/(?i)(Spanish|Espa.ol)/) spanishAudios.add(item)
else if ("English"==idioma) englishAudios.add(item)
else if ("Undefined"==idioma) audioDeclUndefined=true
else otherAudios.add(item)
} catch (err) {
if (idioma==null) {
try { //si tampoco tiene item.Title
def audioTitle=item.Title
if (audioTitle!=null) {
if (any{audioTitle}{0} =~ /(?i)\bcat\b/)
catalanAudios.add(item)
else if (any{audioTitle}{0} =~ /(?i)\bcast\b|\bspa\b/)
spanishAudios.add(item)
else if (any{audioTitle}{0} =~ /(?i)\bingl.es\b|\beng\b/)
englishAudios.add(item)
else otherAudios.add(item)
}
} catch (ex) {}
} else if (!skipAudioCheck) throw err
}
}
if (audioDeclUndefined || (catalanAudios.isEmpty() && spanishAudios.isEmpty() && englishAudios.isEmpty() && otherAudios.isEmpty()) ) {
if (!skipAudioCheck) throw new Exception("[idioma_audio_no_definido]")
}
def tenimCat=false
if (!catalanAudios.isEmpty()) { //tenim català
tenimCat=true
def tenimEsp = !spanishAudios.isEmpty()
} else if (!spanishAudios.isEmpty()) { //tenemos español
} else if (!englishAudios.isEmpty()) {
if (!skipAudioCheck) throw new Exception("[idioma_audio_solo_ingles]")
} else if (!otherAudios.isEmpty()) {
if (!skipAudioCheck) throw new Exception("[idioma_audio_marginal]")
} else {
if (!skipAudioCheck) throw new Exception("[idioma_audio_no_encontrado]")
}
/***********/
/**************************************/
/**** Carpeta / tipo contenido *******/
def tipoYaSeteado=false
//animacion (no concluyente)
def tieneAnimacion = genres.any{ it =~ /Anima.i.n/}
//familiar (no conclud)
def tieneFamiliar = genres.any{ it =~ /Familia|Family/}
//docu
def esDocu = genres.any{ it =~ /Documental|Documentary|Reality/} && !localize.English.n.contains("Jackass")
//anime
def esAnime = false
def numPaises = info.ProductionCountries.size()
if (tieneAnimacion && info.ProductionCountries.contains("JP")) {
esAnime = numPaises==1 || anime /*|| country=="JP"*/
}
tipoYaSeteado = esDocu || esAnime
//*** española ***
def espanyola = tipoYaSeteado
|| info.ProductionCountries.contains("ES") && (numPaises==1 || (numPaises==2 && info.ProductionCountries.contains("PT")))
|| { try { info.Network =~ /(?i)\bFLIXOL.\b|\b.?TVE\b/ } catch (e) { false } }()
|| { try { info.ProductionCompanies.any{ it =~ /.?TVE|ESDIP|Canal Sur|Canal\+ España/ } } catch (e) { false } }()
|| (info.Certifications.size()==1 && info.Certifications.ES!=null)
|| { try { languages.size()==1 && languages.get(0).toString()=="esp" } catch (e) { false } }() || (movie.alternativeTitles.size()==1 && movie.alternativeTitles.ES!=null)
|| { try { country=="ES" } catch (e){false} }() && { try { if(languages.size()==1) languages.get(0).toString()!="eng" } catch (e) { false } }()
tipoYaSeteado = tipoYaSeteado || espanyola
//***** familiar vs infantil ****
def esFamiliar = tieneFamiliar
def infantil = false
if (!tipoYaSeteado) {
def tieneCertificacion = info.Certifications!=null && info.Certifications.size()!=0
if (tieneFamiliar && tieneAnimacion) {
def noTanInfantil = info.Certifications.US ==~/PG-13/
if (!noTanInfantil)
infantil = true
}
else if (tieneAnimacion) {
if (tieneCertificacion) {
if ( info.Certifications.US=="G"
|| info.Certifications.ES==~/Ai|APTA/
|| info.Certifications.DE==~/0|6/
|| info.Certifications.IT=="T"
|| info.Certifications.LT=="V" || info.Certifications.RU ==~ /6.+/
|| info.Certifications.BR=="L"
)
infantil=true
} else {
def titulosInfantiles = ['Bonnie bears', 'The Jungle Bunch']
if (titulosInfantiles.any { localize.English.n.toLowerCase()contains(it.toLowerCase()) })
infantil = true
}
} else if (!esFamiliar) {
if (tieneCertificacion && (
info.Certifications.US=="G"
)) {
esFamiliar = true //posem a familiar pelis de nens que no son animacio
}
}
tipoYaSeteado = tipoYaSeteado || infantil
}
//asiaticas
def asiatica = false
if (!tipoYaSeteado) {
//asiaticas
if (numPaises>0) {
def paisesAsiaticos = ["CN", "HK", "JP", "KP", "KR", "TH", "NP", "TW", "PH", "MO"]
def matchP = paisesAsiaticos.intersect(info.ProductionCountries)
def allAsian = matchP.size()==numPaises
def probableAsian = matchP.size()>0 && englishAudios.isEmpty() && audio.size()>1
if (allAsian || probableAsian/*en obseracion*/) asiatica=true
}
}
//es animacion
def esAnimacion = tieneAnimacion && !esFamiliar
//tria
if (esDocu) ruta = ruta_docu
else if (esAnime) ruta = ruta_anime
else if (infantil) ruta = ruta_infantil
else if (esAnimacion) ruta = ruta_animacion
else if (espanyola) ruta = ruta_esp
else if (esFamiliar) ruta = ruta_familiar
else if (asiatica) ruta = ruta_asiaticas
else if (y<1980) ruta = ruta_classic
else if (y<2000) ruta = ruta_retro
if (ruta==rutaOK && y>=2021) ruta = ruta_estrenos
/********************************************/
/**************************************/
/*** RESULTADO FINAL ***/
def inicial=''
def inicialsRequerides = ruta==rutaOK || ruta==ruta_retro
if (inicialsRequerides) {
inicial = getInicial()
}
def tracker = fn.find(/(?i)\bHDO(limpo)?\b/)
def extras = tracker != null ? ' ['+tracker.replace("HDOlimpo", "HDO")+']' : ''
def resultado = ruta + //directorios
//nombre fichero
inicial +
localize.English.plex.name
return resultado
} catch (err) {
String str= err.getStackTrace().toString()
def pattern = ( str =~ /groovy.(\d+)./ )
return " Error at line number = " + pattern[0][1] + ". more: "+str
def rutaMotivoErr
def msgErr = err.getMessage()
if (msgErr=="[formato_fichero_noestarndar]" || msgErr=="[video_roto]")
rutaMotivoErr="/fichero/"
else if (msgErr=="[genero_no_especificado]" || msgErr=="[certificado_edad_no_especificado]") {
rutaMotivoErr="/themoviedb/"
} else if (msgErr.startsWith("[idioma_audio")) {
rutaMotivoErr="/audio/"
} else {
def errSplitted = msgErr.split("\\-")
return msgErr
if (errSplitted==null) {
rutaMotivoErr="/error_desconocido/"
} else {
def errType = errSplitted[0]
if (errType=="[formato_audio_no_encontrado")
rutaMotivoErr="/audio/"
else if (errType.startsWith("[idioma_audio"))
rutaMotivoErr="/idioma/"
else {
String str2= err.getStackTrace().toString()
def pattern2 = ( str2 =~ /groovy.(\d+)./ )
return " Error at line number = " + pattern2[0][1]
}
}
}
def resultado = rutaKO + rutaMotivoErr + msgErr + '/' + fn
return resultado
}