diff options
Diffstat (limited to 'pyload/plugins/MultiHoster.py')
| -rw-r--r-- | pyload/plugins/MultiHoster.py | 73 | 
1 files changed, 73 insertions, 0 deletions
| diff --git a/pyload/plugins/MultiHoster.py b/pyload/plugins/MultiHoster.py new file mode 100644 index 000000000..8825cc2f8 --- /dev/null +++ b/pyload/plugins/MultiHoster.py @@ -0,0 +1,73 @@ +# -*- coding: utf-8 -*- + +from time import time + +from pyload.utils import remove_chars + +from Account import Account + +def normalize(domain): +   """ Normalize domain/plugin name, so they are comparable """ +   return remove_chars(domain.strip().lower(), "-.") + +#noinspection PyUnresolvedReferences +class MultiHoster(Account): +    """ +    Base class for MultiHoster services. +    This is also an Account instance so you should see :class:`Account` and overwrite necessary methods. +    Multihoster becomes only active when an Account was entered and the MultiHoster addon was activated. +    You need to overwrite `loadHosterList` and a corresponding :class:`Hoster` plugin with the same name should +    be available to make your service working. +    """ + +    #: List of hoster names that will be replaced so pyLoad will recognize them: (orig_name, pyload_name) +    replacements = [("freakshare.net", "freakshare.com")] + +    #: Load new hoster list every x seconds +    hoster_timeout = 300 + +    def __init__(self, *args, **kwargs): + +        # Hoster list +        self.hoster = [] +        # Timestamp +        self.ts = 0 + +        Account.__init__(self, *args, **kwargs) + +    def loadHosterList(self, req): +        """Load list of supported hoster + +        :return: List of domain names +        """ +        raise NotImplementedError + + +    def isHosterUsuable(self, domain): +        """ Determine before downloading if hoster should be used. + +        :param domain: domain name +        :return: True to let the MultiHoster download, False to fallback to default plugin +        """ +        return True + +    def getHosterList(self, force=False): +        if self.ts + self.hoster_timeout < time() or force: +            req = self.getAccountRequest() +            try: +                self.hoster = self.loadHosterList(req) +            except Exception, e: +                self.logError(e) +                return [] +            finally: +                req.close() + +            for rep in self.replacements: +                if rep[0] in self.hoster: +                    self.hoster.remove(rep[0]) +                    if rep[1] not in self.hoster: +                        self.hoster.append(rep[1]) + +            self.ts = time() + +        return self.hoster
\ No newline at end of file | 
