コード例 #1
0
 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)
コード例 #2
0
 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)
コード例 #3
0
 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')
コード例 #4
0
 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)
コード例 #5
0
 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)
コード例 #6
0
 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)
コード例 #7
0
 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)
コード例 #8
0
 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
コード例 #9
0
 def show_title(self):
     ''' Show title with problematic characters removed '''
     return str(utils.clean_name(self._show_title))
コード例 #10
0
 def episode_title(self):
     return utils.clean_name(self._episode_title)