diff options
Diffstat (limited to 'module/plugins/hoster/NoPremiumPl.py')
-rw-r--r-- | module/plugins/hoster/NoPremiumPl.py | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/module/plugins/hoster/NoPremiumPl.py b/module/plugins/hoster/NoPremiumPl.py new file mode 100644 index 000000000..f4f7ba56a --- /dev/null +++ b/module/plugins/hoster/NoPremiumPl.py @@ -0,0 +1,104 @@ +# -*- coding: utf-8 -*- + +from module.plugins.internal.SimpleHoster import SimpleHoster +from module.common.json_layer import json_loads as loads + + +class NoPremiumPl(SimpleHoster): + __name__ = "NoPremiumPl" + __version__ = "0.01" + __type__ = "hoster" + + __pattern__ = r"https?://direct\.nopremium\.pl.*" + __description__ = "NoPremium.pl hoster plugin" + __license__ = "GPLv3" + __authors__ = [("goddie", "dev@nopremium.pl")] + + _api_url = "http://crypt.nopremium.pl" + + _api_query = {"site": "nopremium", + "output": "json", + "username": "", + "password": "", + "url": ""} + + _error_codes = { + 0: "[%s] Incorrect login credentials", + 1: "[%s] Not enough transfer to download - top-up your account", + 2: "[%s] Incorrect / dead link", + 3: "[%s] Error connecting to hosting, try again later", + 9: "[%s] Premium account has expired", + 15: "[%s] Hosting no longer supported", + 80: "[%s] Too many incorrect login attempts, account blocked for 24h" + } + + _usr = False + _pwd = False + + def setup(self): + self.resumeDownload = True + self.multiDL = True + + def get_username_password(self): + if not self.account: + self.fail(_("Please enter your %s account or deactivate this plugin") % "NoPremium.pl") + else: + self._usr = self.account.getAccountData(self.user).get('usr') + self._pwd = self.account.getAccountData(self.user).get('pwd') + + def runFileQuery(self, url, mode=None): + query = self._api_query.copy() + query["username"] = self._usr + query["password"] = self._pwd + query["url"] = url + + if mode == "fileinfo": + query['check'] = 2 + query['loc'] = 1 + self.logDebug(query) + + return self.load(self._api_url, post=query) + + def process(self, pyfile): + self.get_username_password() + try: + data = self.runFileQuery(pyfile.url, 'fileinfo') + except Exception: + self.logDebug("runFileQuery error") + self.tempOffline() + + try: + parsed = loads(data) + except Exception: + self.logDebug("loads error") + self.tempOffline() + + self.logDebug(parsed) + + if "errno" in parsed.keys(): + if parsed["errno"] in self._error_codes: + # error code in known + self.fail(self._error_codes[parsed["errno"]] % self.__name__) + else: + # error code isn't yet added to plugin + self.fail( + parsed["errstring"] + or "Unknown error (code: %s)" % parsed["errno"] + ) + + if "sdownload" in parsed: + if parsed["sdownload"] == "1": + self.fail( + "Download from %s is possible only using NoPremium.pl webiste \ + directly. Update this plugin." % parsed["hosting"]) + + pyfile.name = parsed["filename"] + pyfile.size = parsed["filesize"] + + try: + result_dl = self.runFileQuery(pyfile.url, 'filedownload') + except Exception: + self.logDebug("runFileQuery error #2") + self.tempOffline() + + self.download(result_dl, disposition=True) |