def match(self, movie_file_path): (file_path, file_name) = os.path.split(movie_file_path) movie = None # if there is disc information embedded in the name, # we want to know about it no matter which way we match disc_num = self.get_disc(file_name) # see if the file name has an imdb id...the fastest of matches imdb_id = self.get_imdb_id(file_name) if imdb_id is not None: movie = self.database.get_movie(imdb_id) if movie is not None: self.database.add_movie(movie) # if that didn't work, try to harvest the name and year via # regular expressions and do an imdb lookup with the info if movie is None: name = self.get_name(file_name) year = self.get_year(file_name) if name is not None: to_lookup = name.strip() if year is not None: to_lookup += " (%i)" % (year, ) movie = self.moviedb.lookup_movie(name) if movie is not None: self.database.add_movie(movie) # if all of our matching magic fails, let imdb try to figure # it out from the file name (with the ext removed) if movie is None: (file, extension) = utility.split_file_name(file_name) movie = self.moviedb.lookup_movie(name) if movie is not None: self.database.add_movie(movie) if movie is None: return None else: return (file_name, movie, disc_num)
def multi_thread_download(url, file_name=None, overwrite=False, thread_num=4): if thread_num == 1: single_thread_download(url, file_name, overwrite) elif thread_num > 1: # 如果文件名为空,则从 URL 中获取文件名 if file_name is None: file_name = url.rpartition('/')[-1] # 潜在 bug:如果不覆盖己有文件,而已有文件不完整(eg. 没下载全),会有潜在影响 if os.path.exists(file_name) and (not overwrite): return target_size = get_file_size(url) if (target_size < 0): print("multi_thread_download(): get_file_size() error!\n") return ranges = split_file_size(target_size, thread_num) thread_group = [] for i in range(thread_num): # print(i, '\t', ranges[i][0], ',', ranges[i][1]) t = threading.Thread(target=sub_thread_download, name="thread%d" % i, args=(url, split_file_name(file_name, i), ranges[i][0], ranges[i][1])) t.start() thread_group.append(t) for t in thread_group: t.join() append_file(file_name, thread_num, False)
def get_movie_library_file_name(self, file_name, movie, disc): (file, extension) = utility.split_file_name(file_name) if disc is None: return MOVIE_FILE_NAME % (movie.title, movie.movie_year, movie.id, extension) else: return MOVIE_WITH_DISC_FILE_NAME % (movie.title, movie.movie_year, disc, movie.id, extension)
def get_series_library_file_name(self, file_name, episode): (file, extension) = utility.split_file_name(file_name) split_title = [w.strip().lower() for w in episode.series.title.split(' ')] return SERIES_FILE_NAME % ('_'.join(split_title), episode.season_number, episode.episode_number, extension)