def test_clean_name(self): ''' Run randomly generated strings through utils.clean_name ''' keywords = [x[0] for x in utils.MAPPED_STRINGS] num_keywords = len(keywords) for _ in range(100): name_length = random.randint(1, 128) test_name = '' while len(test_name) < name_length: if random.random() < 1. / num_keywords: test_name += random.choice(keywords) else: test_name += random.choice(string.printable) utils.clean_name(test_name)
def rename(self, name): # Rename files if they exist if os.path.isdir(self.metadata_dir): # Define "title paths" (paths without extensions) title_path = os.path.join(self.metadata_dir, self.clean_title) new_title_path = os.path.join(self.metadata_dir, utils.clean_name(name)) # Rename stream placeholder, nfo file, and thumb utils.fs.mv_with_type(title_path, '.strm', new_title_path) utils.fs.mv_with_type(title_path, '.nfo', new_title_path) utils.fs.mv_with_type(title_path, '-thumb.jpg', new_title_path) # Rename property and refresh in staged file self.title = name self._clean_title = utils.clean_name(name) resources.lib.database_handler.DatabaseHandler().update_content( self.path, title=self.title)
def remove_and_block_show(self, show_title): ''' Remove all episodes from specified show from the library, delete metadata, and add to blocked list ''' # Remove from staged self.remove_all_episodes(show_title) # Delete metadata folder clean_show_title = utils.clean_name(show_title) metadata_dir = os.path.join(utils.METADATA_FOLDER, 'TV', clean_show_title) utils.fs.remove_dir(metadata_dir) # Add show title to blocked self.dbh.add_blocked_item(show_title, 'tvshow')
def create_metadata_item(self): # IDEA: automatically call this when staging # IDEA: actually create basic nfo file with name and episode number, and thumb if possible # IDEA: could probably just rename based on existing strm file instead of nfo file # Create show_dir in Metadata/TV if it doesn't already exist show_dir = os.path.join(utils.METADATA_FOLDER, 'TV', self.clean_show_title) if not os.path.exists(show_dir): utils.fs.mkdir(show_dir) # Check for existing stream file clean_title_no_0x0 = self.clean_title.replace('-0x0', '') strm_path = os.path.join(show_dir, self.clean_title + '.strm') # Only create metadata item if it doesn't already exist (by checking for stream title) if not os.path.exists(strm_path): # Rename file if old nfo file has episode id old_renamed = glob( os.path.join( show_dir, '*[0-9]+x[0-9]* - {0}.nfo'.format(clean_title_no_0x0))) if old_renamed: # Prepend title with epid if so epid = old_renamed[0].split('/')[-1].replace( clean_title_no_0x0 + '.nfo', '') new_title = epid + self.title.replace('-0x0', '') elif not re.match('.*[0-9]+x[0-9].*|.*[Ss][0-9]+[Ee][0-9].*', self.clean_title): # Otherwise, append -0x0 if title doesn't already have valid episode id new_title = self.title + '-0x0' else: new_title = self.title # Create a blank file so media managers can recognize it and create nfo file filepath = os.path.join(show_dir, utils.clean_name(new_title) + '.strm') utils.fs.create_empty_file(filepath) # Refresh item in database if name changed if new_title != self.title: self.title = new_title self._clean_title = utils.clean_name(new_title) resources.lib.database_handler.DatabaseHandler( ).update_content(self.path, title=self.title)
def add_all_episodes_with_metadata(items): ''' Add all episodes in the specified show with metadata to the library ''' STR_ADDING_ALL_x_EPISODES_WITH_METADATA = utils.ADDON.getLocalizedString(32073) STR_ALL_x_EPISODES_WITH_METADATA_ADDED = utils.ADDON.getLocalizedString(32074) show_title = items[0].show_title clean_show_title = utils.clean_name(show_title) metadata_dir = os.path.join(utils.METADATA_FOLDER, 'TV', clean_show_title) progress_dialog = xbmcgui.DialogProgress() progress_dialog.create( utils.ADDON_NAME, STR_ADDING_ALL_x_EPISODES_WITH_METADATA % show_title ) for index, item in enumerate(items): percent = 100 * index / len(items) nfo_path = os.path.join(metadata_dir, item.clean_title + '.nfo') if os.path.exists(nfo_path): progress_dialog.update(percent, line2=item.title) item.add_to_library() progress_dialog.update(percent, line2=' ') progress_dialog.close() utils.notification(STR_ALL_x_EPISODES_WITH_METADATA_ADDED % show_title)
def read_metadata_item(self): ''' Renames the content item based on old .nfo files ''' # TODO: resolve overlap/duplication with create_metadata_item # Check for existing nfo file show_dir = os.path.join(utils.METADATA_FOLDER, 'TV', self.clean_show_title) clean_title_no_0x0 = self.clean_title.replace('-0x0', '') if os.path.isdir(show_dir): # Rename item if old nfo file has episode id old_renamed = glob( os.path.join( show_dir, '*[0-9]+x[0-9]* - {0}.nfo'.format(clean_title_no_0x0))) if old_renamed: # Prepend title with epid if so epid = old_renamed[0].split('/')[-1].replace( clean_title_no_0x0 + '.nfo', '') self.title = epid + self.title.replace('-0x0', '') self._clean_title = utils.clean_name(self.title) # Refresh item in database if name changed resources.lib.database_handler.DatabaseHandler( ).update_content(self.path, title=self.title)
def test_clean_name(self): ''' Test keywords in clean_name ''' # TODO: Use MAPPED_STRINGS here test_names = { 'test1.': 'test1', 'test2:': 'test2', 'test3/': 'test3', 'test4"': 'test4', 'test5 Part 1': 'test5 Part One', 'test6 Part 2': 'test6 Part Two', 'test7 Part 3': 'test7 Part Three', 'test8 Part 4': 'test8 Part Four', 'test9 Part 5': 'test9 Part Five', 'test10 Part 6': 'test10 Part Six', 'test11 [cc]': 'test11', 'test12.:/"Part 1Part 5Part 6 [cc]': 'test12Part OnePart FivePart Six', 'test13é': 'test13e', 'test14$': 'test14', } for key, value in test_names.iteritems(): self.assertEqual(utils.clean_name(key), value)
def clean_show_title(self): ''' Show title with problematic characters removed ''' if not self._clean_show_title: self._clean_show_title = utils.clean_name(self.show_title) return self._clean_show_title
def show_title(self): ''' Show title with problematic characters removed ''' return str(utils.clean_name(self._show_title))
def episode_title(self): return utils.clean_name(self._episode_title)