import posixpath class File: """ Décrit une référence de fichier dans le disque """ def __init__(self, path, name,api_id=None): self.path = path self.name = name self.info_lang = [] self.info_quality = [] self.info_subtitles = [] self.year = self._find_year() self.title = self._get_title() self.simple_name = self.title.replace(' ', '') self.api_id = api_id def get_ext(self): _, ext = posixpath.splitext(self.name) return ext def without_ext(self): _, ext = posixpath.splitext(self.name) return ext def _get_title(self): fname, ext = posixpath.splitext(self.name) # 1) séparateurs fname = fname.replace('.', ' ') fname = fname.replace('_', ' ') fname = fname.replace('-', ' ') # 2.1) marqueurs de qualitée for m in ['HDRiP', 'HDRip', 'HDTS', 'HD', 'DVDRIP', 'DvDRIP', '720p', '1080p', 'DVDSCR', 'BluRay', 'BrRip', 'BRRip']: if m in fname: self.info_quality.append(m) fname = fname.replace(m, '') # 2.2) marqueur de sous-titres for m in ['SRT FR', 'STFR', 'STEN']: if m in fname: self.info_subtitles.append(m) fname = fname.replace(m, '') # 2.3) marqueurs de langues & sous-titres for m in ['VOSTFR', 'VOST-FR', 'VOSTMulti']: if m in fname: self.info_lang.append(m) self.info_subtitles.append(m) fname = fname.replace(m, '') # 2.4) marqueurs de langues for m in ['VO', 'VF','FRENCH', 'FR', 'ENG', '[Eng]', 'VJAP']: if m in fname: self.info_lang.append(m) fname = fname.replace(m, '') # 2.5) marqueurs autres for m in ['UNCENSORED', 'X264', 'x264', 'X265', '[www Cpasbien com]', '[www newpct1 com]', 'YIFY', 'JYK']: fname = fname.replace(m, '') # 3) minuscule fname = fname.lower() # 4) année if self.year is not None: fname = fname.replace('['+str(self.year)+']', '') fname = fname.replace('[ '+str(self.year)+' ]', '') fname = fname.replace('['+str(self.year)+' ]', '') fname = fname.replace('[ '+str(self.year)+']', '') # 5) espaces en bout et centraux fname = fname.lstrip().rstrip() while ' ' in fname: fname = fname.replace(' ', ' ') return fname def _find_year(self): fname, ext = posixpath.splitext(self.name) fname = fname.replace(' ', '') for i in range(1800, 2100): if '['+str(i)+']' in fname: return i return None 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.simple_name == other.simple_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]']: 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', 'HDTS', 'HD', '720p', 'BluRay']: if m in self.info_quality: info['quality'] = 'HD' for m in ['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): return str(self.path+'/'+self.name+' year:['+str(self.year)+']') def __repr__(self): return str(self)