|
|
@ -40,11 +40,9 @@ name_abd_presets = ('%SN - %A-D - %EN', |
|
|
|
'%Y/%0M/%S.N.%A.D.%E.N-%RG' |
|
|
|
) |
|
|
|
|
|
|
|
name_sports_presets = ('%SN - %Sx%0E - %EN', |
|
|
|
'%S.N.S%0SE%0E.%E.N', |
|
|
|
'%Sx%0E - %EN', |
|
|
|
'S%0SE%0E - %EN', |
|
|
|
'Season %0S/%S.N.S%0SE%0E.%Q.N-%RG' |
|
|
|
name_sports_presets = ('%SN - %A-D - %EN', |
|
|
|
'%S.N.%A.D.%E.N.%Q.N', |
|
|
|
'%Y/%0M/%S.N.%A.D.%E.N-%RG' |
|
|
|
) |
|
|
|
|
|
|
|
class TVShow(): |
|
|
@ -98,7 +96,7 @@ class TVEpisode(tv.TVEpisode): |
|
|
|
self._is_proper = True |
|
|
|
|
|
|
|
|
|
|
|
def check_force_season_folders(pattern=None, multi=None): |
|
|
|
def check_force_season_folders(pattern=None, multi=None, anime_type=None): |
|
|
|
""" |
|
|
|
Checks if the name can still be parsed if you strip off the folders to determine if we need to force season folders |
|
|
|
to be enabled or not. |
|
|
@ -108,15 +106,18 @@ def check_force_season_folders(pattern=None, multi=None): |
|
|
|
if pattern == None: |
|
|
|
pattern = sickbeard.NAMING_PATTERN |
|
|
|
|
|
|
|
valid = not validate_name(pattern, None, file_only=True) |
|
|
|
if anime_type == None: |
|
|
|
anime_type = sickbeard.NAMING_ANIME |
|
|
|
|
|
|
|
valid = not validate_name(pattern, None, anime_type, file_only=True) |
|
|
|
|
|
|
|
if multi != None: |
|
|
|
valid = valid or not validate_name(pattern, multi, file_only=True) |
|
|
|
valid = valid or not validate_name(pattern, multi, anime_type, file_only=True) |
|
|
|
|
|
|
|
return valid |
|
|
|
|
|
|
|
|
|
|
|
def check_valid_naming(pattern=None, multi=None): |
|
|
|
def check_valid_naming(pattern=None, multi=None, anime_type=None): |
|
|
|
""" |
|
|
|
Checks if the name is can be parsed back to its original form for both single and multi episodes. |
|
|
|
|
|
|
@ -125,12 +126,15 @@ def check_valid_naming(pattern=None, multi=None): |
|
|
|
if pattern == None: |
|
|
|
pattern = sickbeard.NAMING_PATTERN |
|
|
|
|
|
|
|
if anime_type == None: |
|
|
|
anime_type = sickbeard.NAMING_ANIME |
|
|
|
|
|
|
|
logger.log(u"Checking whether the pattern " + pattern + " is valid for a single episode", logger.DEBUG) |
|
|
|
valid = validate_name(pattern, None) |
|
|
|
valid = validate_name(pattern, None, anime_type) |
|
|
|
|
|
|
|
if multi != None: |
|
|
|
logger.log(u"Checking whether the pattern " + pattern + " is valid for a multi episode", logger.DEBUG) |
|
|
|
valid = valid and validate_name(pattern, multi) |
|
|
|
valid = valid and validate_name(pattern, multi, anime_type) |
|
|
|
|
|
|
|
return valid |
|
|
|
|
|
|
@ -163,10 +167,10 @@ def check_valid_sports_naming(pattern=None): |
|
|
|
|
|
|
|
return valid |
|
|
|
|
|
|
|
def validate_name(pattern, multi=None, file_only=False, abd=False, sports=False): |
|
|
|
ep = generate_sample_ep(multi, abd, sports) |
|
|
|
def validate_name(pattern, multi=None, anime_type=None, file_only=False, abd=False, sports=False): |
|
|
|
ep = generate_sample_ep(multi, abd, sports, anime_type) |
|
|
|
|
|
|
|
new_name = ep.formatted_filename(pattern, multi) + '.ext' |
|
|
|
new_name = ep.formatted_filename(pattern, multi, anime_type) + '.ext' |
|
|
|
new_path = ep.formatted_dir(pattern, multi) |
|
|
|
if not file_only: |
|
|
|
new_name = ek.ek(os.path.join, new_path, new_name) |
|
|
@ -177,7 +181,7 @@ def validate_name(pattern, multi=None, file_only=False, abd=False, sports=False) |
|
|
|
|
|
|
|
logger.log(u"Trying to parse " + new_name, logger.DEBUG) |
|
|
|
|
|
|
|
parser = NameParser(True) |
|
|
|
parser = NameParser(True, showObj=ep.show) |
|
|
|
|
|
|
|
try: |
|
|
|
result = parser.parse(new_name) |
|
|
@ -191,18 +195,26 @@ def validate_name(pattern, multi=None, file_only=False, abd=False, sports=False) |
|
|
|
if result.air_date != ep.airdate: |
|
|
|
logger.log(u"Air date incorrect in parsed episode, pattern isn't valid", logger.DEBUG) |
|
|
|
return False |
|
|
|
elif sports: |
|
|
|
if result.sports_event_date != ep.airdate: |
|
|
|
logger.log(u"Sports event date incorrect in parsed episode, pattern isn't valid", logger.DEBUG) |
|
|
|
return False |
|
|
|
elif anime_type != 3: |
|
|
|
if len(result.ab_episode_numbers) and result.ab_episode_numbers != [x.absolute_number for x in [ep] + ep.relatedEps]: |
|
|
|
logger.log(u"Absolute numbering incorrect in parsed episode, pattern isn't valid", logger.DEBUG) |
|
|
|
return False |
|
|
|
else: |
|
|
|
if result.season_number != ep.season: |
|
|
|
logger.log(u"Season incorrect in parsed episode, pattern isn't valid", logger.DEBUG) |
|
|
|
logger.log(u"Season number incorrect in parsed episode, pattern isn't valid", logger.DEBUG) |
|
|
|
return False |
|
|
|
if result.episode_numbers != [x.episode for x in [ep] + ep.relatedEps]: |
|
|
|
logger.log(u"Episode incorrect in parsed episode, pattern isn't valid", logger.DEBUG) |
|
|
|
logger.log(u"Episode numbering incorrect in parsed episode, pattern isn't valid", logger.DEBUG) |
|
|
|
return False |
|
|
|
|
|
|
|
return True |
|
|
|
|
|
|
|
|
|
|
|
def generate_sample_ep(multi=None, abd=False, sports=False, anime=False): |
|
|
|
def generate_sample_ep(multi=None, abd=False, sports=False, anime_type=None): |
|
|
|
# make a fake episode object |
|
|
|
ep = TVEpisode(2, 3, 3, "Ep Name") |
|
|
|
|
|
|
@ -215,14 +227,27 @@ def generate_sample_ep(multi=None, abd=False, sports=False, anime=False): |
|
|
|
elif sports: |
|
|
|
ep._release_name = 'Show.Name.100.Fighter.vs.Fighter.HDTV.XviD-RLSGROUP' |
|
|
|
ep.show.sports = 1 |
|
|
|
elif anime: |
|
|
|
ep._release_name = 'Show.Name.S02E03.HDTV.XviD-RLSGROUP' |
|
|
|
else: |
|
|
|
if anime_type != 3: |
|
|
|
ep.show.anime = 1 |
|
|
|
ep._release_name = 'Show.Name.003.HDTV.XviD-RLSGROUP' |
|
|
|
else: |
|
|
|
ep._release_name = 'Show.Name.S02E03.HDTV.XviD-RLSGROUP' |
|
|
|
|
|
|
|
if multi != None: |
|
|
|
ep._name = "Ep Name (1)" |
|
|
|
|
|
|
|
if anime_type != 3: |
|
|
|
ep.show.anime = 1 |
|
|
|
|
|
|
|
ep._release_name = 'Show.Name.003-004.HDTV.XviD-RLSGROUP' |
|
|
|
|
|
|
|
secondEp = TVEpisode(2, 4, 4, "Ep Name (2)") |
|
|
|
secondEp._status = Quality.compositeStatus(DOWNLOADED, Quality.HDTV) |
|
|
|
secondEp._release_name = ep._release_name |
|
|
|
|
|
|
|
ep.relatedEps.append(secondEp) |
|
|
|
else: |
|
|
|
ep._release_name = 'Show.Name.S02E03E04E05.HDTV.XviD-RLSGROUP' |
|
|
|
|
|
|
|
secondEp = TVEpisode(2, 4, 4, "Ep Name (2)") |
|
|
@ -239,7 +264,7 @@ def generate_sample_ep(multi=None, abd=False, sports=False, anime=False): |
|
|
|
return ep |
|
|
|
|
|
|
|
|
|
|
|
def test_name(pattern, multi=None, abd=False, sports=False, anime=False): |
|
|
|
ep = generate_sample_ep(multi, abd, sports, anime) |
|
|
|
def test_name(pattern, multi=None, abd=False, sports=False, anime_type=None): |
|
|
|
ep = generate_sample_ep(multi, abd, sports, anime_type) |
|
|
|
|
|
|
|
return {'name': ep.formatted_filename(pattern, multi), 'dir': ep.formatted_dir(pattern, multi)} |
|
|
|
return {'name': ep.formatted_filename(pattern, multi, anime_type), 'dir': ep.formatted_dir(pattern, multi)} |