90 lines
3 KiB
Python
90 lines
3 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, 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):
|
|
_, 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
|
|
# 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):
|
|
# 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 __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)
|
|
|