def create_metainfo(self): """ create some metainfo for the archive """ logger.log(9, 'create_metainfo()') display_type = self.display_type name = display_type or 'all' # check autovars for var, val in self.autovars: if var == 'num_%s_timestamp' % name: break else: self.autovars += [ ('num_%s_timestamp' % name, 0), ('num_%s_items' % name, 0), ('num_%s_total_items' % name, 0) ] try: timestamp = os.stat(self.dir)[stat.ST_MTIME] except OSError: return num_timestamp = self.info['num_%s_timestamp' % name] if not num_timestamp or num_timestamp < timestamp: logger.debug('Create metainfo for %s, display_type=%s', self.archive, self.display_type) if self.media: self.media.mount() num_dir_items = 0 num_play_items = 0 files = [] try: if zipfile.is_zipfile(self.archive): archive = zipfile.ZipFile(self.archive, 'r') files = archive.infolist() names = archive.namelist() elif tarfile.is_tarfile(self.archive): archive = tarfile.open(self.archive, 'r') files = archive.getmembers() names = archive.getnames() elif ARCHIVE_RAR_AVAILABLE and rarfile.is_rarfile(self.archive): archive = rarfile.RarFile(self.archive, 'r') files = archive.infolist() names = archive.namelist() except (ZipError, RarError, TarError) as exc: logger.warning('Archive %s error: %s', self.archive, exc) self.valid = False # play items and playlists for p in plugin.mimetype(display_type): num_play_items += p.count(self, names) # normal DirItems for file in files: if is_dir(file): num_dir_items += 1 # store info self['num_dir_items'] = num_dir_items self['num_%s_items' % name] = num_play_items self['num_%s_timestamp' % name] = timestamp total_play_items = DirItem.get_play_items_recursive(self, name) # some items such as archives are not walkable, hence no way to # calculate total number of playable items in the directory tree. logger.debug('self.name=%r, display_type=%r, total_play_items=%r, num_play_items=%r, num_dir_items=%r', self.name, name, total_play_items, num_play_items, num_dir_items) if total_play_items < num_play_items + num_dir_items: total_play_items = num_play_items + num_dir_items self['num_%s_total_items' % name] = total_play_items if self.media: self.media.umount()
def create_metainfo(self): """ create some metainfo for the archive """ logger.log(9, 'create_metainfo()') display_type = self.display_type name = display_type or 'all' # check autovars for var, val in self.autovars: if var == 'num_%s_timestamp' % name: break else: self.autovars += [('num_%s_timestamp' % name, 0), ('num_%s_items' % name, 0), ('num_%s_total_items' % name, 0)] try: timestamp = os.stat(self.dir)[stat.ST_MTIME] except OSError: return num_timestamp = self.info['num_%s_timestamp' % name] if not num_timestamp or num_timestamp < timestamp: logger.debug('Create metainfo for %s, display_type=%s', self.archive, self.display_type) if self.media: self.media.mount() num_dir_items = 0 num_play_items = 0 files = [] try: if zipfile.is_zipfile(self.archive): archive = zipfile.ZipFile(self.archive, 'r') files = archive.infolist() names = archive.namelist() elif tarfile.is_tarfile(self.archive): archive = tarfile.open(self.archive, 'r') files = archive.getmembers() names = archive.getnames() elif ARCHIVE_RAR_AVAILABLE and rarfile.is_rarfile( self.archive): archive = rarfile.RarFile(self.archive, 'r') files = archive.infolist() names = archive.namelist() except (ZipError, RarError, TarError) as exc: logger.warning('Archive %s error: %s', self.archive, exc) self.valid = False # play items and playlists for p in plugin.mimetype(display_type): num_play_items += p.count(self, names) # normal DirItems for file in files: if is_dir(file): num_dir_items += 1 # store info self['num_dir_items'] = num_dir_items self['num_%s_items' % name] = num_play_items self['num_%s_timestamp' % name] = timestamp total_play_items = DirItem.get_play_items_recursive(self, name) # some items such as archives are not walkable, hence no way to # calculate total number of playable items in the directory tree. logger.debug( 'self.name=%r, display_type=%r, total_play_items=%r, num_play_items=%r, num_dir_items=%r', self.name, name, total_play_items, num_play_items, num_dir_items) if total_play_items < num_play_items + num_dir_items: total_play_items = num_play_items + num_dir_items self['num_%s_total_items' % name] = total_play_items if self.media: self.media.umount()