def METHOD_NAME(self, pluginname, plugin, urls, cb, err=None):
    try:
        result = []  #: result loaded from cache
        process = []  #: urls to process
        for url in urls:
            if url in self.m.info_cache:
                result.append(self.m.info_cache[url])
            else:
                process.append(url)
        if result:
            self.pyload.log.debug(
                f"Fetched {len(result)} values from cache for {pluginname}"
            )
            cb(pluginname, result)
        if process:
            self.pyload.log.debug(f"Run Info Fetching for {pluginname}")
            for result in plugin.get_info(process):
                # result = [ .. (name, size, status, url) .. ]
                if not isinstance(result, list):
                    result = [result]
                for res in result:
                    self.m.info_cache[res[3]] = res
                cb(pluginname, result)
        self.pyload.log.debug(f"Finished Info Fetching for {pluginname}")
    except Exception as exc:
        self.pyload.log.warning(
            self._("Info Fetching for {name} failed | {err}").format(
                name=pluginname, err=exc
            ),
            exc_info=self.pyload.debug > 1,
            stack_info=self.pyload.debug > 2,
        )
        # generate default results
        if err:
            result = [(url, 0, 3, url) for url in urls]
            cb(pluginname, result)