docs: def _process_items(items, user_conf, error_protocol):
      """
      Parse metadata. Remove processed and sucessfully parsed items.
  
      Returns sucessfully processed items.
      """
      def process_meta(item, error_protocol):
          try:
              return item._parse()
          except Exception, e:
              error_protocol.append(
                  "Can't parse %s: %s" % (item._get_filenames()[0], e.message)
              )
  
              if isinstance(item, DataPair):
                  return item.ebook_file
  
      # process all items and put them to output queue
      out = []
      for item in items:
          if isinstance(item, EbookFile):
              out.append(item)
          else:
              out.append(process_meta(item, error_protocol))
      out = filter(lambda x: x, out)  # remove None items (process_meta() fails)
  
      # remove processed files
      fn_pool = []
      soon_removed = out if conf_merger(user_conf, "LEAVE_BAD_FILES") else items
      for item in soon_removed:
          fn_pool.extend(item._get_filenames())
  
      _remove_files(fn_pool)
  
      return out