# 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, api_fileable_type=None): self.path = path self.name = name self.info = info self.markers = {} self.api_id = api_id self.api_fileid = api_fileid self.fileable_type = {None: None, 'App\\Film': 'film', 'App\\Episode': 'episode'}[api_fileable_type] def get_ext(self): """ Donne l'extension du fichier """ _, ext = posixpath.splitext(self.name) return ext def without_ext(self): """ Donne le nom du fichier sans extension """ n, ext = posixpath.splitext(self.name) return n def extract_title(self, tok): """ extrait un titre de film depuis la variable #TITLE# """ # récupère le titre if 'TITLE' in self.info: fname = self.info['TITLE'] else: fname = self.without_ext() # 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 # 7) type: épisode / film if not self.fileable_type: for m in ['SERIE', 'EPISODE_NUM', 'SEASON_NUM']: if m in self.info: self.fileable_type = 'episode' if (not self.fileable_type) and 'TITLE' in self.info: self.fileable_type = 'film' def filename_same(self, other): """ Vérifie si les deux noms de fichiers sont les mêmes """ return self.name == other.name 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)