Improve scanner
- Fix the disc and tag removal: they received the filename with capse - add default metadata when resolution is known
This commit is contained in:
@@ -43,12 +43,12 @@ class Scanner(Plugin):
|
||||
threed_types = {
|
||||
'Half SBS': [('half', 'sbs'), ('h', 'sbs'), 'hsbs'],
|
||||
'Full SBS': [('full', 'sbs'), ('f', 'sbs'), 'fsbs'],
|
||||
'SBS': 'sbs',
|
||||
'SBS': ['sbs'],
|
||||
'Half OU': [('half', 'ou'), ('h', 'ou'), 'hou'],
|
||||
'Full OU': [('full', 'ou'), ('h', 'ou'), 'fou'],
|
||||
'OU': 'ou',
|
||||
'OU': ['ou'],
|
||||
'Frame Packed': ['mvc', ('complete', 'bluray')],
|
||||
'3D': '3d'
|
||||
'3D': ['3d']
|
||||
}
|
||||
|
||||
file_types = {
|
||||
@@ -75,6 +75,16 @@ class Scanner(Plugin):
|
||||
'video': ['x264', 'H264', 'DivX', 'Xvid']
|
||||
}
|
||||
|
||||
resolutions = {
|
||||
'1080p': {'resolution_width': 1920, 'resolution_height': 1080, 'aspect': 1.78},
|
||||
'1080i': {'resolution_width': 1920, 'resolution_height': 1080, 'aspect': 1.78},
|
||||
'720p': {'resolution_width': 1280, 'resolution_height': 720, 'aspect': 1.78},
|
||||
'720i': {'resolution_width': 1280, 'resolution_height': 720, 'aspect': 1.78},
|
||||
'480p': {'resolution_width': 640, 'resolution_height': 480, 'aspect': 1.33},
|
||||
'480i': {'resolution_width': 640, 'resolution_height': 480, 'aspect': 1.33},
|
||||
'default': {'resolution_width': 0, 'resolution_height': 0, 'aspect': 1},
|
||||
}
|
||||
|
||||
audio_codec_map = {
|
||||
0x2000: 'AC3',
|
||||
0x2001: 'DTS',
|
||||
@@ -96,8 +106,8 @@ class Scanner(Plugin):
|
||||
'HDTV': ['hdtv']
|
||||
}
|
||||
|
||||
clean = '[ _\,\.\(\)\[\]\-]?(3d|hsbs|sbs|extended.cut|directors.cut|french|swedisch|danish|dutch|swesub|spanish|german|ac3|dts|custom|dc|divx|divx5|dsr|dsrip|dutch|dvd|dvdr|dvdrip|dvdscr|dvdscreener|screener|dvdivx|cam|fragment|fs|hdtv|hdrip' \
|
||||
'|hdtvrip|internal|limited|multisubs|ntsc|ogg|ogm|pal|pdtv|proper|repack|rerip|retail|r3|r5|bd5|se|svcd|swedish|german|read.nfo|nfofix|unrated|ws|telesync|ts|telecine|tc|brrip|bdrip|video_ts|audio_ts|480p|480i|576p|576i|720p|720i|1080p|1080i|hrhd|hrhdtv|hddvd|bluray|x264|h264|xvid|xvidvd|xxx|www.www|cd[1-9]|\[.*\])([ _\,\.\(\)\[\]\-]|$)'
|
||||
clean = '([ _\,\.\(\)\[\]\-]|^)(3d|hsbs|sbs|extended.cut|directors.cut|french|swedisch|danish|dutch|swesub|spanish|german|ac3|dts|custom|dc|divx|divx5|dsr|dsrip|dutch|dvd|dvdr|dvdrip|dvdscr|dvdscreener|screener|dvdivx|cam|fragment|fs|hdtv|hdrip' \
|
||||
'|hdtvrip|webdl|web.dl|webrip|web.rip|internal|limited|multisubs|ntsc|ogg|ogm|pal|pdtv|proper|repack|rerip|retail|r3|r5|bd5|se|svcd|swedish|german|read.nfo|nfofix|unrated|ws|telesync|ts|telecine|tc|brrip|bdrip|video_ts|audio_ts|480p|480i|576p|576i|720p|720i|1080p|1080i|hrhd|hrhdtv|hddvd|bluray|x264|h264|xvid|xvidvd|xxx|www.www|hc|\[.*\])(?=[ _\,\.\(\)\[\]\-]|$)'
|
||||
multipart_regex = [
|
||||
'[ _\.-]+cd[ _\.-]*([0-9a-d]+)', #*cd1
|
||||
'[ _\.-]+dvd[ _\.-]*([0-9a-d]+)', #*dvd1
|
||||
@@ -448,10 +458,13 @@ class Scanner(Plugin):
|
||||
try:
|
||||
data['video'] = meta.get('video', self.getCodec(cur_file, self.codecs['video']))
|
||||
data['audio'] = meta.get('audio', self.getCodec(cur_file, self.codecs['audio']))
|
||||
data['resolution_width'] = meta.get('resolution_width', 720)
|
||||
data['resolution_height'] = meta.get('resolution_height', 480)
|
||||
data['audio_channels'] = meta.get('audio_channels', 2.0)
|
||||
data['aspect'] = round(float(meta.get('resolution_width', 720)) / meta.get('resolution_height', 480), 2)
|
||||
if meta.get('resolution_width'):
|
||||
data['resolution_width'] = meta.get('resolution_width')
|
||||
data['resolution_height'] = meta.get('resolution_height')
|
||||
data['aspect'] = round(float(meta.get('resolution_width')) / meta.get('resolution_height', 1), 2)
|
||||
else:
|
||||
data.update(self.getResolution(cur_file))
|
||||
except:
|
||||
log.debug('Error parsing metadata: %s %s', (cur_file, traceback.format_exc()))
|
||||
pass
|
||||
@@ -481,7 +494,8 @@ class Scanner(Plugin):
|
||||
filename = re.sub('(.cp\(tt[0-9{7}]+\))', '', files[0])
|
||||
data['group'] = self.getGroup(filename[len(folder):])
|
||||
data['source'] = self.getSourceMedia(filename)
|
||||
data['3d_type'] = self.get3dType(filename)
|
||||
if data['quality'].get('is_3d', 0):
|
||||
data['3d_type'] = self.get3dType(filename)
|
||||
return data
|
||||
|
||||
def get3dType(self, filename):
|
||||
@@ -761,6 +775,9 @@ class Scanner(Plugin):
|
||||
identifier = file_path.replace(folder, '').lstrip(os.path.sep) # root folder
|
||||
identifier = os.path.splitext(identifier)[0] # ext
|
||||
|
||||
# Make sure the identifier is lower case as all regex is with lower case tags
|
||||
identifier = identifier.lower()
|
||||
|
||||
try:
|
||||
path_split = splitString(identifier, os.path.sep)
|
||||
identifier = path_split[-2] if len(path_split) > 1 and len(path_split[-2]) > len(path_split[-1]) else path_split[-1] # Only get filename
|
||||
@@ -775,8 +792,11 @@ class Scanner(Plugin):
|
||||
# remove cptag
|
||||
identifier = self.removeCPTag(identifier)
|
||||
|
||||
# groups, release tags, scenename cleaner, regex isn't correct
|
||||
identifier = re.sub(self.clean, '::', simplifyString(identifier)).strip(':')
|
||||
# simplify the string
|
||||
identifier = simplifyString(identifier)
|
||||
|
||||
# groups, release tags, scenename cleaner
|
||||
identifier = re.sub(self.clean, '::', identifier).strip(':')
|
||||
|
||||
# Year
|
||||
if year and identifier[:4] != year:
|
||||
@@ -825,6 +845,14 @@ class Scanner(Plugin):
|
||||
except:
|
||||
return ''
|
||||
|
||||
def getResolution(self, filename):
|
||||
try:
|
||||
for key in self.resolutions:
|
||||
if key in filename and key != 'default':
|
||||
return self.resolutions[key]
|
||||
except:
|
||||
return self.resolutions['default']
|
||||
|
||||
def getGroup(self, file):
|
||||
try:
|
||||
match = re.findall('\-([A-Z0-9]+)[\.\/]', file, re.I)
|
||||
|
||||
Reference in New Issue
Block a user