def buildMakeMKVConCommand(profiledict): niceness = '' # 30013 == High, 30015 == Low if (profiledict['niceness'] == utils.getString(30013).lower() or profiledict['niceness'] == utils.getString(30015).lower()): if (platform.system() == 'Windows'): if (profiledict['niceness'] == utils.getStringLow(30013)): # If you pass quoted text to the Windows "start" command # as the first argument, it treats this as the name of the # program you want to run, not the command you want to run, # so I just add an empty set of double-quotes to prevent # issues. niceness = 'start /wait /b /high "" ' else: niceness = 'start /wait /b /low "" ' else: if (profiledict['niceness'] == utils.getStringLow(30013)): niceness = 'nice -n -19 ' else: niceness = 'nice -n 19 ' if profiledict['enablecustomripcommand'] == 'true': command = '{niceness} {customripcommand}'.format(niceness = niceness, customripcommand = profiledict['customripcommand']) else: mintitlelength = str(int(profiledict['mintitlelength']) * 60) command = ('{niceness} "{makemkvpath}" mkv --decrypt disc:{driveid} ' 'all --minlength={mintitlelength} "{tempfolder}"'.format( niceness = niceness, makemkvpath = profiledict['makemkvpath'], driveid = profiledict['driveid'], mintitlelength = mintitlelength, # MakeMKV will add a forward slash at the end of a folder if it # has a backslash. This is bad for Windows, so we strip the # trailing slash. tempfolder = profiledict['tempfolder'].rstrip('\\'))) return command
def buildHandBrakeCLICommand(profiledict, f, discName): niceness = '' # 30013 == High, 30015 == Low, 30014 == Medium if (profiledict['niceness'] == utils.getString(30013).lower() or profiledict['niceness'] == utils.getString(30015).lower()): if (platform.system() == 'Windows'): if (profiledict['niceness'] == utils.getStringLow(30013)): # If you pass quoted text to the Windows "start" command # as the first argument, it treats this as the name of the # program you want to run, not the command you want to run, # so I just add an empty set of double-quotes to prevent # issues. niceness = 'start /wait /b /high "" ' else: niceness = 'start /wait /b /low "" ' else: if (profiledict['niceness'] == utils.getStringLow(30013)): niceness = 'nice -n -19 ' else: niceness = 'nice -n 19 ' if profiledict['enablecustomencodecommand'] == 'true': command = '{niceness} {customencodecommand}'.format(niceness = niceness, customencodecommand = profiledict['customencodecommand']) else: if profiledict['resolution'] == '1080': maxwidth = ' --maxWidth 1920' elif profiledict['resolution'] == '720': maxwidth = ' --maxWidth 1280' elif profiledict['resolution'] == '480': maxwidth = ' --maxWidth 720' if profiledict['quality'] == utils.getStringLow(30013): quality = '' elif profiledict['quality'] == utils.getStringLow(30014): quality = ' -q 25 ' elif profiledict['quality'] == utils.getStringLow(30015): quality = ' -q 26 ' if profiledict['blackandwhite'] == 'true': blackandwhite = ' --grayscale ' else: blackandwhite = '' additionalhandbrakeargs = ' {additionalhandbrakeargs}'.format( additionalhandbrakeargs = profiledict['additionalhandbrakeargs']) # To make things easier when we rip foreign films, we just grab all # the audio tracks. Otherwise it can be hard to grab just the # native language of the movie and the native language of the user. # Since grabbing all audio tracks doesn't appear to be an option # with HandBrake, I just grab the first ten tracks. When you list # audio tracks here that don't exist, it doesn't seem to error out # or anything. if profiledict['foreignaudio'] == 'true': audiotracks = ' -a 1,2,3,4,5,6,7,8,9,10 ' else: audiotracks = '' if discName != None: if re.search(r"_t00?\.mkv$", os.path.basename(f)) != None or os.path.basename(f) in ['title00.mkv', 'title.mkv', 'title0.mkv']: destination = os.path.join(profiledict['destinationfolder'], os.path.basename(discName).replace('_', ' ') + os.path.splitext(f)[1]) else: destination = os.path.join(profiledict['destinationfolder'], os.path.basename(discName + '-' + f).replace('_', ' ')) else: destination = os.path.join(profiledict['destinationfolder'], os.path.basename(f).replace('_', ' ')) command = ('{niceness}"{handbrakeclipath}" -i "{filename}" -o ' '"{destination}" -f mkv -d slower -N {nativelanguage} ' '--native-dub -m -Z "High Profile" -s 1{audiotracks}{quality}' '{blackandwhite}{maxwidth}{additionalhandbrakeargs}'.format( niceness = niceness, handbrakeclipath = profiledict['handbrakeclipath'], filename = f, destination = destination, nativelanguage = profiledict['nativelanguage'], audiotracks = audiotracks, quality = quality, blackandwhite = blackandwhite, maxwidth = maxwidth, additionalhandbrakeargs = additionalhandbrakeargs)) return command
def verifyProfile(profiledict): # Let's verify all of our settings. errors = '' # 30013 == High, 30015 == Low, 30019 == Normal if (profiledict['niceness'] != utils.getStringLow(30013) and profiledict['niceness'] != utils.getStringLow(30015) and profiledict['niceness'] != utils.getStringLow(30019)): errors = errors + utils.settingsError( '{invalid} {niceness}. '.format( invalid = utils.getString(30056), niceness = utils.getString(30018))) if (profiledict['updatelibraryafterencode'] != 'true' and profiledict['updatelibraryafterencode'] != 'false'): errors = errors + utils.settingsError( '{invalid} {updatelibraryafterencode}. '.format( invalid = utils.getString(30056), updatelibraryafterencode = utils.getString(30025))) if (profiledict['encodeafterrip'] != 'true' and profiledict['encodeafterrip'] != 'false'): errors = errors + utils.settingsError( '{invalid} {encodeafterrip}. '.format( invalid = utils.getString(30056), encodeafterrip = utils.getString(30025))) # 30027 == Rip, 30028 == Encode, 30029 == Never if (profiledict['ejectafter'] != utils.getStringLow(30027) and profiledict['ejectafter'] != utils.getStringLow(30028) and profiledict['ejectafter'] != utils.getStringLow(30029)): errors = errors + utils.settingsError( '{invalid} {ejectafter}. '.format( invalid = utils.getString(30056), ejectafter = utils.getString(30026))) # 30065 == Notification, if (profiledict['notifyafterrip'] != utils.getStringLow(30065) and profiledict['notifyafterrip'] != utils.getStringLow(30066) and profiledict['notifyafterrip'] != utils.getStringLow(30067)): errors = errors + utils.settingsError( '{invalid} {notifyafterrip}. '.format( invalid = utils.getString(30056), notifyafterrip = utils.getString(30049))) if (profiledict['notifyafterencode'] != utils.getStringLow(30065) and profiledict['notifyafterencode'] != utils.getStringLow(30066) and profiledict['notifyafterencode'] != utils.getStringLow(30067)): errors = errors + utils.settingsError( '{invalid} {notifyafterencode}. '.format( invalid = utils.getString(30056), notifyafterencode = utils.getString(30061))) if (profiledict['enablecustomripcommand'] != 'true' and profiledict['enablecustomripcommand'] != 'false'): errors = errors + utils.settingsError( '{invalid} {enablecustomripcommand}. '.format( invalid = utils.getString(30056), enablecustomripcommand = utils.getString(30078))) if (profiledict['enablecustomencodecommand'] != 'true' and profiledict['enablecustomencodecommand'] != 'false'): errors = errors + utils.settingsError( '{invalid} {enablecustomencodecommand}. '.format( invalid = utils.getString(30056), enablecustomencodecommand = utils.getString(30079))) if (profiledict['enablecustomripcommand'] == 'false' and profiledict['enablecustomencodecommand'] == 'false'): if os.path.isdir(profiledict['tempfolder']): if not os.access(profiledict['tempfolder'], os.W_OK): errors = errors + utils.settingsError( '{couldnotwriteto} {tempfolder}. '.format( couldnotwriteto = utils.getString(30082), tempfolder = profiledict['tempfolder'])) else: errors = errors + utils.settingsError( '{couldnotfind} {tempfolder}. '.format( couldnotfind = utils.getString(30052), tempfolder = profiledict['tempfolder'])) if profiledict['enablecustomripcommand'] == 'false': if not os.path.isfile(profiledict['makemkvpath']): errors = errors + utils.settingsError( '{couldnotfind} makemkvcon. '.format( couldnotfind = utils.getString(30052))) if not profiledict['mintitlelength'].isdigit(): errors = errors + utils.settingsError( '{invalid} {mintitlelength}. '.format( invalid = utils.getString(30056), mintitlelength = utils.getString(30022))) if not profiledict['driveid'].isdigit(): errors = errors + utils.settingsError( '{invalid} {driveid}. '.format( invalid = utils.getString(30056), driveid = utils.getString(30068))) else: if profiledict['customripcommand'] == '': errors = errors + utils.settingsError( '{invalid} {customripcommand}. '.format( invalid = utils.getString(30056), customripcommand = utils.getString(30076))) if (profiledict['enablecustomencodecommand'] == 'true' and profiledict['customencodecommand'] == ''): errors = errors + utils.settingsError( '{invalid} {customencodecommand}. '.format( invalid = utils.getString(30056), customencodecommand = utils.getString(30077))) if (profiledict['enablecustomencodecommand'] == 'false' and profiledict['encodeafterrip'] == 'true'): if not os.path.isfile(profiledict['handbrakeclipath']): errors = errors + utils.settingsError( '{couldnotfind} HandBrakeCLI. '.format( couldnotfind = utils.getString(30052))) if os.path.isdir(profiledict['destinationfolder']): if not os.access(profiledict['destinationfolder'], os.W_OK): errors = errors + utils.settingsError( '{couldnotwriteto} {destinationfolder}. '.format( couldnotwriteto = utils.getString(30082), destinationfolder = profiledict['destinationfolder'])) else: errors = errors + utils.settingsError( '{couldnotfind} {destinationfolder}. '.format( couldnotfind = utils.getString(30052), destinationfolder = profiledict['destinationfolder'])) # 30042 == 1080, 30043 == 720, 30044 == 480 if (profiledict['resolution'] != utils.getStringLow(30042) and profiledict['resolution'] != utils.getStringLow(30043) and profiledict['resolution'] != utils.getStringLow(30044)): errors = errors + utils.settingsError( '{invalid} {resolution}. '.format( invalid = utils.getString(30056), resolution = utils.getString(30011))) # 30013 == High, 30015 == Low, 30014 == Medium if (profiledict['quality'] != utils.getStringLow(30013) and profiledict['quality'] != utils.getStringLow(30014) and profiledict['quality'] != utils.getStringLow(30015)): errors = errors + utils.settingsError( '{invalid} {quality}. '.format( invalid = utils.getString(30056), quality = utils.getString(30012))) # List of valid ISO-639.2 language names. # From http://www.loc.gov/standards/iso639-2/ISO-639-2_8859-1.txt This # is the format that HandBrake requires language arguments to be in. validlanguages = [ 'all', 'aar', 'abk', 'ace', 'ach', 'ada', 'ady', 'afa', 'afh', 'afr', 'ain', 'aka', 'akk', 'alb', 'ale', 'alg', 'alt', 'amh', 'ang', 'anp', 'apa', 'ara', 'arc', 'arg', 'arm', 'arn', 'arp', 'art', 'arw', 'asm', 'ast', 'ath', 'aus', 'ava', 'ave', 'awa', 'aym', 'aze', 'bad', 'bai', 'bak', 'bal', 'bam', 'ban', 'baq', 'bas', 'bat', 'bej', 'bel', 'bem', 'ben', 'ber', 'bho', 'bih', 'bik', 'bin', 'bis', 'bla', 'bnt', 'bos', 'bra', 'bre', 'btk', 'bua', 'bug', 'bul', 'bur', 'byn', 'cad', 'cai', 'car', 'cat', 'cau', 'ceb', 'cel', 'cha', 'chb', 'che', 'chg', 'chi', 'chk', 'chm', 'chn', 'cho', 'chp', 'chr', 'chu', 'chv', 'chy', 'cmc', 'cop', 'cor', 'cos', 'cpe', 'cpf', 'cpp', 'cre', 'crh', 'crp', 'csb', 'cus', 'cze', 'dak', 'dan', 'dar', 'day', 'del', 'den', 'dgr', 'din', 'div', 'doi', 'dra', 'dsb', 'dua', 'dum', 'dut', 'dyu', 'dzo', 'efi', 'egy', 'eka', 'elx', 'eng', 'enm', 'epo', 'est', 'ewe', 'ewo', 'fan', 'fao', 'fat', 'fij', 'fil', 'fin', 'fiu', 'fon', 'fre', 'frm', 'fro', 'frr', 'frs', 'fry', 'ful', 'fur', 'gaa', 'gay', 'gba', 'gem', 'geo', 'ger', 'gez', 'gil', 'gla', 'gle', 'glg', 'glv', 'gmh', 'goh', 'gon', 'gor', 'got', 'grb', 'grc', 'gre', 'grn', 'gsw', 'guj', 'gwi', 'hai', 'hat', 'hau', 'haw', 'heb', 'her', 'hil', 'him', 'hin', 'hit', 'hmn', 'hmo', 'hrv', 'hsb', 'hun', 'hup', 'iba', 'ibo', 'ice', 'ido', 'iii', 'ijo', 'iku', 'ile', 'ilo', 'ina', 'inc', 'ind', 'ine', 'inh', 'ipk', 'ira', 'iro', 'ita', 'jav', 'jbo', 'jpn', 'jpr', 'jrb', 'kaa', 'kab', 'kac', 'kal', 'kam', 'kan', 'kar', 'kas', 'kau', 'kaw', 'kaz', 'kbd', 'kha', 'khi', 'khm', 'kho', 'kik', 'kin', 'kir', 'kmb', 'kok', 'kom', 'kon', 'kor', 'kos', 'kpe', 'krc', 'krl', 'kro', 'kru', 'kua', 'kum', 'kur', 'kut', 'lad', 'lah', 'lam', 'lao', 'lat', 'lav', 'lez', 'lim', 'lin', 'lit', 'lol', 'loz', 'ltz', 'lua', 'lub', 'lug', 'lui', 'lun', 'luo', 'lus', 'mac', 'mad', 'mag', 'mah', 'mai', 'mak', 'mal', 'man', 'mao', 'map', 'mar', 'mas', 'may', 'mdf', 'mdr', 'men', 'mga', 'mic', 'min', 'mis', 'mkh', 'mlg', 'mlt', 'mnc', 'mni', 'mno', 'moh', 'mon', 'mos', 'mul', 'mun', 'mus', 'mwl', 'mwr', 'myn', 'myv', 'nah', 'nai', 'nap', 'nau', 'nav', 'nbl', 'nde', 'ndo', 'nds', 'nep', 'new', 'nia', 'nic', 'niu', 'nno', 'nob', 'nog', 'non', 'nor', 'nqo', 'nso', 'nub', 'nwc', 'nya', 'nym', 'nyn', 'nyo', 'nzi', 'oci', 'oji', 'ori', 'orm', 'osa', 'oss', 'ota', 'oto', 'paa', 'pag', 'pal', 'pam', 'pan', 'pap', 'pau', 'peo', 'per', 'phi', 'phn', 'pli', 'pol', 'pon', 'por', 'pra', 'pro', 'pus', 'qaa-qtz', 'que', 'raj', 'rap', 'rar', 'roa', 'roh', 'rom', 'rum', 'run', 'rup', 'rus', 'sad', 'sag', 'sah', 'sai', 'sal', 'sam', 'san', 'sas', 'sat', 'scn', 'sco', 'sel', 'sem', 'sga', 'sgn', 'shn', 'sid', 'sin', 'sio', 'sit', 'sla', 'slo', 'slv', 'sma', 'sme', 'smi', 'smj', 'smn', 'smo', 'sms', 'sna', 'snd', 'snk', 'sog', 'som', 'son', 'sot', 'spa', 'srd', 'srn', 'srp', 'srr', 'ssa', 'ssw', 'suk', 'sun', 'sus', 'sux', 'swa', 'swe', 'syc', 'syr', 'tah', 'tai', 'tam', 'tat', 'tel', 'tem', 'ter', 'tet', 'tgk', 'tgl', 'tha', 'tib', 'tig', 'tir', 'tiv', 'tkl', 'tlh', 'tli', 'tmh', 'tog', 'ton', 'tpi', 'tsi', 'tsn', 'tso', 'tuk', 'tum', 'tup', 'tur', 'tut', 'tvl', 'twi', 'tyv', 'udm', 'uga', 'uig', 'ukr', 'umb', 'und', 'urd', 'uzb', 'vai', 'ven', 'vie', 'vol', 'vot', 'wak', 'wal', 'war', 'was', 'wel', 'wen', 'wln', 'wol', 'xal', 'xho', 'yao', 'yap', 'yid', 'yor', 'ypk', 'zap', 'zbl', 'zen', 'zgh', 'zha', 'znd', 'zul', 'zun', 'zxx', 'zza'] if profiledict['nativelanguage'] not in validlanguages: errors = errors + utils.settingsError( '{invalid} {nativelanguage}. '.format( invalid = utils.getString(30056), nativelanguage = utils.getString(30023))) if (profiledict['foreignaudio'] != 'true' and profiledict['foreignaudio'] != 'false'): errors = errors + utils.settingsError( '{invalid} {foreignaudio}. '.format( invalid = utils.getString(30056), foreignaudio = utils.getString(30024))) if (profiledict['cleanuptempdir'] != 'true' and profiledict['cleanuptempdir'] != 'false'): errors = errors + utils.settingsError( '{invalid} {cleanuptempdir}. '.format( invalid = utils.getString(30056), cleanuptempdir = utils.getString(30030))) if (profiledict['blackandwhite'] != 'true' and profiledict['blackandwhite'] != 'false'): errors = errors + utils.settingsError( '{invalid} {blackandwhite}. '.format( invalid = utils.getString(30056), blackandwhite = utils.getString(30060))) if errors: utils.exitFailed(errors, errors)
# 30085 = Failed to Open Disc utils.exitFailed(utils.getString(30085), utils.getString(30085)) if ('The source file' in e.output and ' is corrupt or invalid at offset' in e.output and ', attempting to work around' in e.output): # 30086 = MakeMKV Had Trouble Reading the Disc. Try Cleaning it utils.exitFailed(utils.getString(30086), utils.getString(30086)) utils.exitFailed('MakeMKV {failed}'.format( failed = utils.getString(30059)), e.output) utils.logDebug(ripoutput) # Eject if we need to # 30027 == Rip if profiledict['ejectafter'] == utils.getStringLow(30027): xbmc.executebuiltin('EjectTray()') # Display notification/dialog if we need to. A notification is a # toast that auto-dismisses after a few seconds, whereas a dialog # requires the user to press ok. # 30065 == Notification if profiledict['notifyafterrip'] == utils.getStringLow(30065): utils.showNotification('{rip} {completedsuccessfully}'.format( rip = utils.getString(30027), completedsuccessfully = utils.getString(30058))) # 30066 == Dialog elif profiledict['notifyafterrip'] == utils.getStringLow(30066): utils.showOK('{rip} {completedsuccessfully}'.format( rip = utils.getString(30027), completedsuccessfully = utils.getString(30058)))
def buildHandBrakeCLICommand(profiledict, f): niceness = '' # 30013 == High, 30015 == Low, 30014 == Medium if (profiledict['niceness'] == utils.getString(30013).lower() or profiledict['niceness'] == utils.getString(30015).lower()): if (platform.system() == 'Windows'): if (profiledict['niceness'] == utils.getStringLow(30013)): # If you pass quoted text to the Windows "start" command # as the first argument, it treats this as the name of the # program you want to run, not the command you want to run, # so I just add an empty set of double-quotes to prevent # issues. niceness = 'start /wait /b /high "" ' else: niceness = 'start /wait /b /low "" ' else: if (profiledict['niceness'] == utils.getStringLow(30013)): niceness = 'nice -n -19 ' else: niceness = 'nice -n 19 ' if profiledict['enablecustomencodecommand'] == 'true': command = '{niceness} {customencodecommand}'.format(niceness = niceness, customencodecommand = profiledict['customencodecommand']) else: if profiledict['resolution'] == '1080': maxwidth = ' --maxWidth 1920' elif profiledict['resolution'] == '720': maxwidth = ' --maxWidth 1280' elif profiledict['resolution'] == '480': maxwidth = ' --maxWidth 640' if profiledict['quality'] == utils.getStringLow(30013): quality = '' elif profiledict['quality'] == utils.getStringLow(30014): quality = ' -q 25 ' elif profiledict['quality'] == utils.getStringLow(30015): quality = ' -q 26 ' if profiledict['blackandwhite'] == 'true': blackandwhite = ' --grayscale ' else: blackandwhite = '' additionalhandbrakeargs = ' {additionalhandbrakeargs}'.format( additionalhandbrakeargs = profiledict['additionalhandbrakeargs']) # To make things easier when we rip foreign films, we just grab all # the audio tracks. Otherwise it can be hard to grab just the # native language of the movie and the native language of the user. # Since grabbing all audio tracks doesn't appear to be an option # with HandBrake, I just grab the first ten tracks. When you list # audio tracks here that don't exist, it doesn't seem to error out # or anything. if profiledict['foreignaudio'] == 'true': audiotracks = ' -a 1,2,3,4,5,6,7,8,9,10 ' else: audiotracks = '' command = ('{niceness}"{handbrakeclipath}" -i "{filename}" -o ' '"{destination}" -f mkv -d slower -N {nativelanguage} ' '--native-dub -m -Z "High Profile" -s 1{audiotracks}{quality}' '{blackandwhite}{maxwidth}{additionalhandbrakeargs}'.format( niceness = niceness, handbrakeclipath = profiledict['handbrakeclipath'], filename = f, destination = os.path.join(profiledict['destinationfolder'], os.path.basename(f).replace('_', ' ')), nativelanguage = profiledict['nativelanguage'], audiotracks = audiotracks, quality = quality, blackandwhite = blackandwhite, maxwidth = maxwidth, additionalhandbrakeargs = additionalhandbrakeargs)) return command
def verifyProfile(profiledict): # Let's verify all of our settings. errors = '' # 30013 == High, 30015 == Low, 30019 == Normal if (profiledict['niceness'] != utils.getStringLow(30013) and profiledict['niceness'] != utils.getStringLow(30015) and profiledict['niceness'] != utils.getStringLow(30019)): errors = errors + utils.settingsError( '{invalid} {niceness}. '.format( invalid = utils.getString(30056), niceness = utils.getString(30018))) if (profiledict['encodeafterrip'] != 'true' and profiledict['encodeafterrip'] != 'false'): errors = errors + utils.settingsError( '{invalid} {encodeafterrip}. '.format( invalid = utils.getString(30056), encodeafterrip = utils.getString(30025))) # 30027 == Rip, 30028 == Encode, 30029 == Never if (profiledict['ejectafter'] != utils.getStringLow(30027) and profiledict['ejectafter'] != utils.getStringLow(30028) and profiledict['ejectafter'] != utils.getStringLow(30029)): errors = errors + utils.settingsError( '{invalid} {ejectafter}. '.format( invalid = utils.getString(30056), ejectafter = utils.getString(30026))) # 30065 == Notification, if (profiledict['notifyafterrip'] != utils.getStringLow(30065) and profiledict['notifyafterrip'] != utils.getStringLow(30066) and profiledict['notifyafterrip'] != utils.getStringLow(30067)): errors = errors + utils.settingsError( '{invalid} {notifyafterrip}. '.format( invalid = utils.getString(30056), notifyafterrip = utils.getString(30049))) if (profiledict['notifyafterencode'] != utils.getStringLow(30065) and profiledict['notifyafterencode'] != utils.getStringLow(30066) and profiledict['notifyafterencode'] != utils.getStringLow(30067)): errors = errors + utils.settingsError( '{invalid} {notifyafterencode}. '.format( invalid = utils.getString(30056), notifyafterencode = utils.getString(30061))) if (profiledict['enablecustomripcommand'] != 'true' and profiledict['enablecustomripcommand'] != 'false'): errors = errors + utils.settingsError( '{invalid} {enablecustomripcommand}. '.format( invalid = utils.getString(30056), enablecustomripcommand = utils.getString(30078))) if (profiledict['enablecustomencodecommand'] != 'true' and profiledict['enablecustomencodecommand'] != 'false'): errors = errors + utils.settingsError( '{invalid} {enablecustomencodecommand}. '.format( invalid = utils.getString(30056), enablecustomencodecommand = utils.getString(30079))) if (profiledict['enablecustomripcommand'] == 'false' and profiledict['enablecustomencodecommand'] == 'false'): if os.path.isdir(profiledict['tempfolder']): if not os.access(profiledict['tempfolder'], os.W_OK): errors = errors + utils.settingsError( '{couldnotwriteto} {tempfolder}. '.format( couldnotwriteto = utils.getString(30082), tempfolder = profiledict['tempfolder'])) else: errors = errors + utils.settingsError( '{couldnotfind} {tempfolder}. '.format( couldnotfind = utils.getString(30052), tempfolder = profiledict['tempfolder'])) if profiledict['enablecustomripcommand'] == 'false': if not os.path.isfile(profiledict['makemkvpath']): errors = errors + utils.settingsError( '{couldnotfind} makemkvcon. '.format( couldnotfind = utils.getString(30052))) if not profiledict['mintitlelength'].isdigit(): errors = errors + utils.settingsError( '{invalid} {mintitlelength}. '.format( invalid = utils.getString(30056), mintitlelength = utils.getString(30022))) if not profiledict['driveid'].isdigit(): errors = errors + utils.settingsError( '{invalid} {driveid}. '.format( invalid = utils.getString(30056), driveid = utils.getString(30068))) else: if profiledict['customripcommand'] == '': errors = errors + utils.settingsError( '{invalid} {customripcommand}. '.format( invalid = utils.getString(30056), customripcommand = utils.getString(30076))) if (profiledict['enablecustomencodecommand'] == 'true' and profiledict['customencodecommand'] == ''): errors = errors + utils.settingsError( '{invalid} {customencodecommand}. '.format( invalid = utils.getString(30056), customencodecommand = utils.getString(30077))) if (profiledict['enablecustomencodecommand'] == 'false' and profiledict['encodeafterrip'] == 'true'): if not os.path.isfile(profiledict['handbrakeclipath']): errors = errors + utils.settingsError( '{couldnotfind} HandBrakeCLI. '.format( couldnotfind = utils.getString(30052))) if os.path.isdir(profiledict['destinationfolder']): if not os.access(profiledict['destinationfolder'], os.W_OK): errors = errors + utils.settingsError( '{couldnotwriteto} {destinationfolder}. '.format( couldnotwriteto = utils.getString(30082), destinationfolder = profiledict['destinationfolder'])) else: errors = errors + utils.settingsError( '{couldnotfind} {destinationfolder}. '.format( couldnotfind = utils.getString(30052), destinationfolder = profiledict['destinationfolder'])) # 30042 == 1080, 30043 == 720, 30044 == 480 if (profiledict['resolution'] != utils.getStringLow(30042) and profiledict['resolution'] != utils.getStringLow(30043) and profiledict['resolution'] != utils.getStringLow(30044)): errors = errors + utils.settingsError( '{invalid} {resolution}. '.format( invalid = utils.getString(30056), resolution = utils.getString(30011))) # 30013 == High, 30015 == Low, 30014 == Medium if (profiledict['quality'] != utils.getStringLow(30013) and profiledict['quality'] != utils.getStringLow(30014) and profiledict['quality'] != utils.getStringLow(30015)): errors = errors + utils.settingsError( '{invalid} {quality}. '.format( invalid = utils.getString(30056), quality = utils.getString(30012))) # List of valid ISO-639.2 language names. # From http://www.loc.gov/standards/iso639-2/ISO-639-2_8859-1.txt This # is the format that HandBrake requires language arguments to be in. validlanguages = [ 'all', 'aar', 'abk', 'ace', 'ach', 'ada', 'ady', 'afa', 'afh', 'afr', 'ain', 'aka', 'akk', 'alb', 'ale', 'alg', 'alt', 'amh', 'ang', 'anp', 'apa', 'ara', 'arc', 'arg', 'arm', 'arn', 'arp', 'art', 'arw', 'asm', 'ast', 'ath', 'aus', 'ava', 'ave', 'awa', 'aym', 'aze', 'bad', 'bai', 'bak', 'bal', 'bam', 'ban', 'baq', 'bas', 'bat', 'bej', 'bel', 'bem', 'ben', 'ber', 'bho', 'bih', 'bik', 'bin', 'bis', 'bla', 'bnt', 'bos', 'bra', 'bre', 'btk', 'bua', 'bug', 'bul', 'bur', 'byn', 'cad', 'cai', 'car', 'cat', 'cau', 'ceb', 'cel', 'cha', 'chb', 'che', 'chg', 'chi', 'chk', 'chm', 'chn', 'cho', 'chp', 'chr', 'chu', 'chv', 'chy', 'cmc', 'cop', 'cor', 'cos', 'cpe', 'cpf', 'cpp', 'cre', 'crh', 'crp', 'csb', 'cus', 'cze', 'dak', 'dan', 'dar', 'day', 'del', 'den', 'dgr', 'din', 'div', 'doi', 'dra', 'dsb', 'dua', 'dum', 'dut', 'dyu', 'dzo', 'efi', 'egy', 'eka', 'elx', 'eng', 'enm', 'epo', 'est', 'ewe', 'ewo', 'fan', 'fao', 'fat', 'fij', 'fil', 'fin', 'fiu', 'fon', 'fre', 'frm', 'fro', 'frr', 'frs', 'fry', 'ful', 'fur', 'gaa', 'gay', 'gba', 'gem', 'geo', 'ger', 'gez', 'gil', 'gla', 'gle', 'glg', 'glv', 'gmh', 'goh', 'gon', 'gor', 'got', 'grb', 'grc', 'gre', 'grn', 'gsw', 'guj', 'gwi', 'hai', 'hat', 'hau', 'haw', 'heb', 'her', 'hil', 'him', 'hin', 'hit', 'hmn', 'hmo', 'hrv', 'hsb', 'hun', 'hup', 'iba', 'ibo', 'ice', 'ido', 'iii', 'ijo', 'iku', 'ile', 'ilo', 'ina', 'inc', 'ind', 'ine', 'inh', 'ipk', 'ira', 'iro', 'ita', 'jav', 'jbo', 'jpn', 'jpr', 'jrb', 'kaa', 'kab', 'kac', 'kal', 'kam', 'kan', 'kar', 'kas', 'kau', 'kaw', 'kaz', 'kbd', 'kha', 'khi', 'khm', 'kho', 'kik', 'kin', 'kir', 'kmb', 'kok', 'kom', 'kon', 'kor', 'kos', 'kpe', 'krc', 'krl', 'kro', 'kru', 'kua', 'kum', 'kur', 'kut', 'lad', 'lah', 'lam', 'lao', 'lat', 'lav', 'lez', 'lim', 'lin', 'lit', 'lol', 'loz', 'ltz', 'lua', 'lub', 'lug', 'lui', 'lun', 'luo', 'lus', 'mac', 'mad', 'mag', 'mah', 'mai', 'mak', 'mal', 'man', 'mao', 'map', 'mar', 'mas', 'may', 'mdf', 'mdr', 'men', 'mga', 'mic', 'min', 'mis', 'mkh', 'mlg', 'mlt', 'mnc', 'mni', 'mno', 'moh', 'mon', 'mos', 'mul', 'mun', 'mus', 'mwl', 'mwr', 'myn', 'myv', 'nah', 'nai', 'nap', 'nau', 'nav', 'nbl', 'nde', 'ndo', 'nds', 'nep', 'new', 'nia', 'nic', 'niu', 'nno', 'nob', 'nog', 'non', 'nor', 'nqo', 'nso', 'nub', 'nwc', 'nya', 'nym', 'nyn', 'nyo', 'nzi', 'oci', 'oji', 'ori', 'orm', 'osa', 'oss', 'ota', 'oto', 'paa', 'pag', 'pal', 'pam', 'pan', 'pap', 'pau', 'peo', 'per', 'phi', 'phn', 'pli', 'pol', 'pon', 'por', 'pra', 'pro', 'pus', 'qaa-qtz', 'que', 'raj', 'rap', 'rar', 'roa', 'roh', 'rom', 'rum', 'run', 'rup', 'rus', 'sad', 'sag', 'sah', 'sai', 'sal', 'sam', 'san', 'sas', 'sat', 'scn', 'sco', 'sel', 'sem', 'sga', 'sgn', 'shn', 'sid', 'sin', 'sio', 'sit', 'sla', 'slo', 'slv', 'sma', 'sme', 'smi', 'smj', 'smn', 'smo', 'sms', 'sna', 'snd', 'snk', 'sog', 'som', 'son', 'sot', 'spa', 'srd', 'srn', 'srp', 'srr', 'ssa', 'ssw', 'suk', 'sun', 'sus', 'sux', 'swa', 'swe', 'syc', 'syr', 'tah', 'tai', 'tam', 'tat', 'tel', 'tem', 'ter', 'tet', 'tgk', 'tgl', 'tha', 'tib', 'tig', 'tir', 'tiv', 'tkl', 'tlh', 'tli', 'tmh', 'tog', 'ton', 'tpi', 'tsi', 'tsn', 'tso', 'tuk', 'tum', 'tup', 'tur', 'tut', 'tvl', 'twi', 'tyv', 'udm', 'uga', 'uig', 'ukr', 'umb', 'und', 'urd', 'uzb', 'vai', 'ven', 'vie', 'vol', 'vot', 'wak', 'wal', 'war', 'was', 'wel', 'wen', 'wln', 'wol', 'xal', 'xho', 'yao', 'yap', 'yid', 'yor', 'ypk', 'zap', 'zbl', 'zen', 'zgh', 'zha', 'znd', 'zul', 'zun', 'zxx', 'zza'] if profiledict['nativelanguage'] not in validlanguages: errors = errors + utils.settingsError( '{invalid} {nativelanguage}. '.format( invalid = utils.getString(30056), nativelanguage = utils.getString(30023))) if (profiledict['foreignaudio'] != 'true' and profiledict['foreignaudio'] != 'false'): errors = errors + utils.settingsError( '{invalid} {foreignaudio}. '.format( invalid = utils.getString(30056), foreignaudio = utils.getString(30024))) if (profiledict['cleanuptempdir'] != 'true' and profiledict['cleanuptempdir'] != 'false'): errors = errors + utils.settingsError( '{invalid} {cleanuptempdir}. '.format( invalid = utils.getString(30056), cleanuptempdir = utils.getString(30030))) if (profiledict['blackandwhite'] != 'true' and profiledict['blackandwhite'] != 'false'): errors = errors + utils.settingsError( '{invalid} {blackandwhite}. '.format( invalid = utils.getString(30056), blackandwhite = utils.getString(30060))) if errors: utils.exitFailed(errors, errors)