piexel-indexer/file.py
2017-12-09 13:21:35 +01:00

116 lines
3.9 KiB
Python

#coding:utf-8
import posixpath
import re
class File:
"""
Décrit une référence de fichier dans le disque
"""
def __init__(self, path, name, info, api_id=None, api_fileid=None):
self.path = path
self.name = name
self.info = info
self.markers = {}
self.api_id = api_id
self.api_fileid = api_fileid
def get_ext(self):
_, ext = posixpath.splitext(self.name)
return ext
def without_ext(self):
n, ext = posixpath.splitext(self.name)
return n
def extract_title(self, tok):
# extrait un titre de film depuis la variable #TITLE#
if 'TITLE' in self.info:
fname = self.info['TITLE']
else:
fname, ext = posixpath.splitext(self.name)
# 1) séparateurs
fname = fname.replace('.', ' ')
fname = fname.replace('_', ' ')
fname = fname.replace('-', ' ')
# 1.5) parenthèses de marqueurs
fname = fname.replace('(', ' ( ')
fname = fname.replace(')', ' ) ')
# 2) marqueurs
fname, info = tok.tokenize(' '+fname+' ')
self.markers = info
# 3) minuscule
fname = fname.lower()
# 4) année
if not 'YEAR' in self.info:
m = re.match(r'.*\[ ?(\d{4}) ?\].*', fname)
if m:
self.info['YEAR'] = m.group(1)
if 'YEAR' in self.info:
year = self.info['YEAR']
fname = fname.replace('['+str(year)+']', '')
fname = fname.replace('[ '+str(year)+' ]', '')
fname = fname.replace('['+str(year)+' ]', '')
fname = fname.replace('[ '+str(year)+']', '')
# 5) espaces en bout, centraux et rajoutés
fname = fname.lstrip().rstrip()
while ' ' in fname:
fname = fname.replace(' ', ' ')
# 6) parenthèses de marqueurs
fname = fname.replace('( )', ' ')
while ' ' in fname:
fname = fname.replace(' ', ' ')
self.title = fname
def filename_same(self, other):
# Compare les noms de fichiers de self et de other
# En supprimant les espaces, la date, et les marques de qualitée
return self.name == other.name
'''
def additional_info(self):
"""
Info supplémentaires sur la langue, la qualitée et les sous-titres du fichier
"""
info = {}
if len(self.info_lang) > 0:
for m in ['VOSTFR', 'VOST-FR', 'VOSTMulti', 'VO']:
if m in self.info_lang:
info['lang'] = 'VO'
for m in ['ENG', '[Eng]', 'VEN']:
pass # notation?
for m in ['VJAP']:
pass # notation?
for m in ['VF','FRENCH', 'FR']:
if m in self.info_lang:
info['lang'] = 'FR'
if len(self.info_quality) > 0:
for m in ['HDRiP', 'HDRip', 'HDrip', 'HDTS', 'HD', '720p', 'BluRay']:
if m in self.info_quality:
info['quality'] = 'HD'
for m in ['DVDRIP', 'DvDrip', 'DvDRIP', 'DVDrip', 'DVDSCR']:
pass # qualité?
for m in ['1080p']:
if m in self.info_quality:
info['quality'] = 'FULL HD'
if len(self.info_subtitles) > 0:
for m in ['SRT FR', 'STFR', 'VOSTFR', 'VOST-FR']:
if m in self.info_subtitles:
info['subtitles'] = 'FR'
for m in ['STEN']:
if m in self.info_subtitles:
info['subtitles'] = 'EN'
return info
'''
def __eq__(self, other):
return (self.path, self.name) == (other.path, other.name)
def __hash__(self):
return hash((self.path, self.name))
def __str__(self):
if 'YEAR' in self.info:
return str(self.path+'/'+self.name+' year:['+str(self.info['YEAR'])+']')
return str(self.path+'/'+self.name)
def __repr__(self):
return str(self)