From 282362c01b67f83ff5cf677ba125a41a6d594f2c Mon Sep 17 00:00:00 2001 From: Walter Purcaro Date: Sat, 15 Nov 2014 17:15:29 +0100 Subject: Update plugins 2 --- pyload/plugins/Plugin.py | 6 +- pyload/plugins/addon/IRCInterface.py | 2 +- pyload/plugins/addon/UpdateManager.py | 8 +- pyload/plugins/addon/WindowsPhoneToastNotify.py | 4 - pyload/plugins/captcha/AdsCaptcha.py | 4 +- pyload/plugins/captcha/ReCaptcha.py | 4 +- pyload/plugins/captcha/SolveMedia.py | 2 +- pyload/plugins/crypter/BitshareCom.py | 21 +++++ pyload/plugins/crypter/BitshareComFolder.py | 21 ----- pyload/plugins/crypter/CrockoCom.py | 20 ++++ pyload/plugins/crypter/CrockoComFolder.py | 20 ---- pyload/plugins/crypter/CzshareCom.py | 32 +++++++ pyload/plugins/crypter/CzshareComFolder.py | 32 ------- pyload/plugins/crypter/DataHu.py | 40 ++++++++ pyload/plugins/crypter/DataHuFolder.py | 40 -------- pyload/plugins/crypter/DdlstorageCom.py | 20 ++++ pyload/plugins/crypter/DdlstorageComFolder.py | 20 ---- pyload/plugins/crypter/DepositfilesCom.py | 20 ++++ pyload/plugins/crypter/DepositfilesComFolder.py | 20 ---- pyload/plugins/crypter/DuploadOrg.py | 16 ++++ pyload/plugins/crypter/DuploadOrgFolder.py | 16 ---- pyload/plugins/crypter/EasybytezCom.py | 22 +++++ pyload/plugins/crypter/EasybytezComFolder.py | 22 ----- pyload/plugins/crypter/FilebeerInfo.py | 16 ++++ pyload/plugins/crypter/FilebeerInfoFolder.py | 16 ---- pyload/plugins/crypter/FilecloudIo.py | 21 +++++ pyload/plugins/crypter/FilecloudIoFolder.py | 21 ----- pyload/plugins/crypter/FilefactoryCom.py | 28 ++++++ pyload/plugins/crypter/FilefactoryComFolder.py | 28 ------ pyload/plugins/crypter/FilerNet.py | 26 ++++++ pyload/plugins/crypter/FilerNetFolder.py | 26 ------ pyload/plugins/crypter/FileserveCom.py | 38 ++++++++ pyload/plugins/crypter/FileserveComFolder.py | 38 -------- pyload/plugins/crypter/FilesonicCom.py | 15 +++ pyload/plugins/crypter/FilesonicComFolder.py | 15 --- pyload/plugins/crypter/FiredriveCom.py | 16 ++++ pyload/plugins/crypter/FiredriveComFolder.py | 16 ---- pyload/plugins/crypter/FreakhareCom.py | 38 ++++++++ pyload/plugins/crypter/FreakhareComFolder.py | 38 -------- pyload/plugins/crypter/FshareVn.py | 20 ++++ pyload/plugins/crypter/FshareVnFolder.py | 20 ---- pyload/plugins/crypter/HotfileCom.py | 16 ++++ pyload/plugins/crypter/HotfileComFolder.py | 16 ---- pyload/plugins/crypter/JunocloudMe.py | 20 ++++ pyload/plugins/crypter/JunocloudMeFolder.py | 20 ---- pyload/plugins/crypter/LetitbitNet.py | 33 +++++++ pyload/plugins/crypter/LetitbitNetFolder.py | 33 ------- pyload/plugins/crypter/LinkSaveIn.py | 2 +- pyload/plugins/crypter/MediafireCom.py | 56 +++++++++++ pyload/plugins/crypter/MediafireComFolder.py | 56 ----------- pyload/plugins/crypter/MegaRapidCz.py | 20 ++++ pyload/plugins/crypter/MegaRapidCzFolder.py | 20 ---- pyload/plugins/crypter/MegauploadCom.py | 15 +++ pyload/plugins/crypter/MegauploadComFolder.py | 15 --- pyload/plugins/crypter/MultiUpOrg.py | 2 +- pyload/plugins/crypter/OronCom.py | 16 ++++ pyload/plugins/crypter/OronComFolder.py | 16 ---- pyload/plugins/crypter/QuickshareCz.py | 31 +++++++ pyload/plugins/crypter/QuickshareCzFolder.py | 31 ------- pyload/plugins/crypter/RapidfileshareNet.py | 20 ++++ pyload/plugins/crypter/RapidfileshareNetFolder.py | 20 ---- pyload/plugins/crypter/SharingmatrixCom.py | 15 +++ pyload/plugins/crypter/SharingmatrixComFolder.py | 15 --- pyload/plugins/crypter/SpeedLoadOrg.py | 16 ++++ pyload/plugins/crypter/SpeedLoadOrgFolder.py | 16 ---- pyload/plugins/crypter/TurbobitNet.py | 44 +++++++++ pyload/plugins/crypter/TurbobitNetFolder.py | 44 --------- pyload/plugins/crypter/TusfilesNet.py | 45 +++++++++ pyload/plugins/crypter/TusfilesNetFolder.py | 45 --------- pyload/plugins/crypter/UlozTo.py | 46 +++++++++ pyload/plugins/crypter/UlozToFolder.py | 46 --------- pyload/plugins/crypter/UploadableCh.py | 24 +++++ pyload/plugins/crypter/UploadableChFolder.py | 24 ----- pyload/plugins/crypter/UploadedTo.py | 34 +++++++ pyload/plugins/crypter/UploadedToFolder.py | 34 ------- pyload/plugins/crypter/WuploadCom.py | 15 +++ pyload/plugins/crypter/WuploadComFolder.py | 15 --- pyload/plugins/crypter/XFileSharingPro.py | 47 ++++++++++ pyload/plugins/crypter/XFileSharingProFolder.py | 47 ---------- pyload/plugins/hook/BypassCaptcha.py | 4 - pyload/plugins/hook/Captcha9kw.py | 3 +- pyload/plugins/hook/CaptchaBrotherhood.py | 4 - pyload/plugins/hook/DeathByCaptcha.py | 4 - pyload/plugins/hook/ExpertDecoders.py | 4 - pyload/plugins/hook/ImageTyperz.py | 4 - pyload/plugins/hook/XFileSharingPro.py | 16 ++-- pyload/plugins/hoster/BasePlugin.py | 108 ---------------------- pyload/plugins/hoster/GigapetaCom.py | 2 +- pyload/plugins/hoster/QuickshareCz.py | 2 +- pyload/plugins/internal/BasePlugin.py | 108 ++++++++++++++++++++++ pyload/plugins/internal/Captcha.py | 2 +- pyload/plugins/internal/DeadCrypter.py | 3 +- pyload/plugins/internal/DeadHoster.py | 3 +- pyload/plugins/internal/SimpleCrypter.py | 22 +---- pyload/plugins/internal/SimpleHoster.py | 46 ++------- pyload/plugins/internal/UpdateManager.py | 8 +- pyload/plugins/internal/XFSAccount.py | 5 - pyload/plugins/internal/XFSHoster.py | 4 +- 98 files changed, 1065 insertions(+), 1165 deletions(-) create mode 100644 pyload/plugins/crypter/BitshareCom.py delete mode 100644 pyload/plugins/crypter/BitshareComFolder.py create mode 100644 pyload/plugins/crypter/CrockoCom.py delete mode 100644 pyload/plugins/crypter/CrockoComFolder.py create mode 100644 pyload/plugins/crypter/CzshareCom.py delete mode 100644 pyload/plugins/crypter/CzshareComFolder.py create mode 100644 pyload/plugins/crypter/DataHu.py delete mode 100644 pyload/plugins/crypter/DataHuFolder.py create mode 100644 pyload/plugins/crypter/DdlstorageCom.py delete mode 100644 pyload/plugins/crypter/DdlstorageComFolder.py create mode 100644 pyload/plugins/crypter/DepositfilesCom.py delete mode 100644 pyload/plugins/crypter/DepositfilesComFolder.py create mode 100644 pyload/plugins/crypter/DuploadOrg.py delete mode 100644 pyload/plugins/crypter/DuploadOrgFolder.py create mode 100644 pyload/plugins/crypter/EasybytezCom.py delete mode 100644 pyload/plugins/crypter/EasybytezComFolder.py create mode 100644 pyload/plugins/crypter/FilebeerInfo.py delete mode 100644 pyload/plugins/crypter/FilebeerInfoFolder.py create mode 100644 pyload/plugins/crypter/FilecloudIo.py delete mode 100644 pyload/plugins/crypter/FilecloudIoFolder.py create mode 100644 pyload/plugins/crypter/FilefactoryCom.py delete mode 100644 pyload/plugins/crypter/FilefactoryComFolder.py create mode 100644 pyload/plugins/crypter/FilerNet.py delete mode 100644 pyload/plugins/crypter/FilerNetFolder.py create mode 100644 pyload/plugins/crypter/FileserveCom.py delete mode 100644 pyload/plugins/crypter/FileserveComFolder.py create mode 100644 pyload/plugins/crypter/FilesonicCom.py delete mode 100644 pyload/plugins/crypter/FilesonicComFolder.py create mode 100644 pyload/plugins/crypter/FiredriveCom.py delete mode 100644 pyload/plugins/crypter/FiredriveComFolder.py create mode 100644 pyload/plugins/crypter/FreakhareCom.py delete mode 100644 pyload/plugins/crypter/FreakhareComFolder.py create mode 100644 pyload/plugins/crypter/FshareVn.py delete mode 100644 pyload/plugins/crypter/FshareVnFolder.py create mode 100644 pyload/plugins/crypter/HotfileCom.py delete mode 100644 pyload/plugins/crypter/HotfileComFolder.py create mode 100644 pyload/plugins/crypter/JunocloudMe.py delete mode 100644 pyload/plugins/crypter/JunocloudMeFolder.py create mode 100644 pyload/plugins/crypter/LetitbitNet.py delete mode 100644 pyload/plugins/crypter/LetitbitNetFolder.py create mode 100644 pyload/plugins/crypter/MediafireCom.py delete mode 100644 pyload/plugins/crypter/MediafireComFolder.py create mode 100644 pyload/plugins/crypter/MegaRapidCz.py delete mode 100644 pyload/plugins/crypter/MegaRapidCzFolder.py create mode 100644 pyload/plugins/crypter/MegauploadCom.py delete mode 100644 pyload/plugins/crypter/MegauploadComFolder.py create mode 100644 pyload/plugins/crypter/OronCom.py delete mode 100644 pyload/plugins/crypter/OronComFolder.py create mode 100644 pyload/plugins/crypter/QuickshareCz.py delete mode 100644 pyload/plugins/crypter/QuickshareCzFolder.py create mode 100644 pyload/plugins/crypter/RapidfileshareNet.py delete mode 100644 pyload/plugins/crypter/RapidfileshareNetFolder.py create mode 100644 pyload/plugins/crypter/SharingmatrixCom.py delete mode 100644 pyload/plugins/crypter/SharingmatrixComFolder.py create mode 100644 pyload/plugins/crypter/SpeedLoadOrg.py delete mode 100644 pyload/plugins/crypter/SpeedLoadOrgFolder.py create mode 100644 pyload/plugins/crypter/TurbobitNet.py delete mode 100644 pyload/plugins/crypter/TurbobitNetFolder.py create mode 100644 pyload/plugins/crypter/TusfilesNet.py delete mode 100644 pyload/plugins/crypter/TusfilesNetFolder.py create mode 100644 pyload/plugins/crypter/UlozTo.py delete mode 100644 pyload/plugins/crypter/UlozToFolder.py create mode 100644 pyload/plugins/crypter/UploadableCh.py delete mode 100644 pyload/plugins/crypter/UploadableChFolder.py create mode 100644 pyload/plugins/crypter/UploadedTo.py delete mode 100644 pyload/plugins/crypter/UploadedToFolder.py create mode 100644 pyload/plugins/crypter/WuploadCom.py delete mode 100644 pyload/plugins/crypter/WuploadComFolder.py create mode 100644 pyload/plugins/crypter/XFileSharingPro.py delete mode 100644 pyload/plugins/crypter/XFileSharingProFolder.py delete mode 100644 pyload/plugins/hoster/BasePlugin.py create mode 100644 pyload/plugins/internal/BasePlugin.py (limited to 'pyload/plugins') diff --git a/pyload/plugins/Plugin.py b/pyload/plugins/Plugin.py index 0b8e02512..2d9837b52 100644 --- a/pyload/plugins/Plugin.py +++ b/pyload/plugins/Plugin.py @@ -371,7 +371,7 @@ class Plugin(Base): """ abort and give reason """ if reason: self.pyfile.error = str(reason) - raise Abort #@TODO: Use raise Abort(reason) in 0.4.10 + raise Abort def error(self, reason="", type=""): @@ -389,14 +389,14 @@ class Plugin(Base): """ fail and indicate file is offline """ if reason: self.pyfile.error = str(reason) - raise Fail("offline") #@TODO: Use raise Fail("offline", reason) in 0.4.10 + raise Fail("offline") def tempOffline(self, reason=""): """ fail and indicates file ist temporary offline, the core may take consequences """ if reason: self.pyfile.error = str(reason) - raise Fail("temp. offline") #@TODO: Use raise Fail("temp. offline", reason) in 0.4.10 + raise Fail("temp. offline") def retry(self, max_tries=5, wait_time=1, reason=""): diff --git a/pyload/plugins/addon/IRCInterface.py b/pyload/plugins/addon/IRCInterface.py index d06dad07f..cbb97038b 100644 --- a/pyload/plugins/addon/IRCInterface.py +++ b/pyload/plugins/addon/IRCInterface.py @@ -89,7 +89,7 @@ class IRCInterface(Thread, Addon): self.sock.connect((host, self.getConfig("port"))) if self.getConfig("ssl"): - self.sock = ssl.wrap_socket(self.sock, cert_reqs=ssl.CERT_NONE) #@TODO: support certificate + self.sock = ssl.wrap_socket(self.sock, cert_reqs=ssl.CERT_NONE) #@TODO: support custom certificate nick = self.getConfig("nick") self.sock.send("NICK %s\r\n" % nick) diff --git a/pyload/plugins/addon/UpdateManager.py b/pyload/plugins/addon/UpdateManager.py index 651cdde80..4a7fa736a 100644 --- a/pyload/plugins/addon/UpdateManager.py +++ b/pyload/plugins/addon/UpdateManager.py @@ -187,7 +187,7 @@ class UpdateManager(Addon): for plugin in upgradable: filename = plugin['name'] - prefix = plugin['type'] + type = plugin['type'] version = plugin['version'] if filename.endswith(".pyc"): @@ -195,12 +195,6 @@ class UpdateManager(Addon): else: name = filename.replace(".py", "") - #@TODO: obsolete after 0.4.10 - if prefix.endswith("s"): - type = prefix[:-1] - else: - type = prefix - plugins = getattr(self.core.pluginManager, "%sPlugins" % type) oldver = float(plugins[name]['v']) if name in plugins else None diff --git a/pyload/plugins/addon/WindowsPhoneToastNotify.py b/pyload/plugins/addon/WindowsPhoneToastNotify.py index abcd6c55c..4c57ff72c 100644 --- a/pyload/plugins/addon/WindowsPhoneToastNotify.py +++ b/pyload/plugins/addon/WindowsPhoneToastNotify.py @@ -21,10 +21,6 @@ class WindowsPhoneToastNotify(Addon): __authors__ = [("Andy Voigt", "phone-support@hotmail.de")] - def setup(self): - self.info = {} #@TODO: Remove in 0.4.10 - - def getXmlData(self): myxml = (" " " Pyload Mobile Captcha waiting! " diff --git a/pyload/plugins/captcha/AdsCaptcha.py b/pyload/plugins/captcha/AdsCaptcha.py index 4eabfbf9b..845205e4c 100644 --- a/pyload/plugins/captcha/AdsCaptcha.py +++ b/pyload/plugins/captcha/AdsCaptcha.py @@ -27,7 +27,7 @@ class AdsCaptcha(Captcha): html = self.plugin.html else: errmsg = _("AdsCaptcha html not found") - self.plugin.fail(errmsg) + self.plugin.error(errmsg) raise TypeError(errmsg) m = re.search(self.ID_PATTERN, html) @@ -47,7 +47,7 @@ class AdsCaptcha(Captcha): key = self.key else: errmsg = _("AdsCaptcha key not found") - self.plugin.fail(errmsg) + self.plugin.error(errmsg) raise TypeError(errmsg) CaptchaId, PublicKey = key diff --git a/pyload/plugins/captcha/ReCaptcha.py b/pyload/plugins/captcha/ReCaptcha.py index d68584c9d..4516b76de 100644 --- a/pyload/plugins/captcha/ReCaptcha.py +++ b/pyload/plugins/captcha/ReCaptcha.py @@ -25,7 +25,7 @@ class ReCaptcha(Captcha): html = self.plugin.html else: errmsg = _("ReCaptcha html not found") - self.plugin.fail(errmsg) + self.plugin.error(errmsg) raise TypeError(errmsg) m = re.search(self.KEY_PATTERN, html) or re.search(self.KEY_AJAX_PATTERN, html) @@ -44,7 +44,7 @@ class ReCaptcha(Captcha): key = self.key else: errmsg = _("ReCaptcha key not found") - self.plugin.fail(errmsg) + self.plugin.error(errmsg) raise TypeError(errmsg) js = self.plugin.req.load("http://www.google.com/recaptcha/api/challenge", get={'k': key}) diff --git a/pyload/plugins/captcha/SolveMedia.py b/pyload/plugins/captcha/SolveMedia.py index d1b9eba6a..82f1c4722 100644 --- a/pyload/plugins/captcha/SolveMedia.py +++ b/pyload/plugins/captcha/SolveMedia.py @@ -24,7 +24,7 @@ class SolveMedia(Captcha): key = self.key else: errmsg = _("SolveMedia key not found") - self.plugin.fail(errmsg) + self.plugin.error(errmsg) raise TypeError(errmsg) html = self.plugin.req.load("http://api.solvemedia.com/papi/challenge.noscript", get={'k': key}) diff --git a/pyload/plugins/crypter/BitshareCom.py b/pyload/plugins/crypter/BitshareCom.py new file mode 100644 index 000000000..723faf594 --- /dev/null +++ b/pyload/plugins/crypter/BitshareCom.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.SimpleCrypter import SimpleCrypter + + +class BitshareCom(SimpleCrypter): + __name__ = "BitshareCom" + __type__ = "crypter" + __version__ = "0.03" + + __pattern__ = r'http://(?:www\.)?bitshare\.com/\?d=\w+' + __config__ = [("use_subfolder", "bool", "Save package to subfolder", True), + ("subfolder_per_package", "bool", "Create a subfolder for each package", True)] + + __description__ = """Bitshare.com folder decrypter plugin""" + __license__ = "GPLv3" + __authors__ = [("stickell", "l.stickell@yahoo.it")] + + + LINK_PATTERN = r'.+' + NAME_PATTERN = r'View public folder "(?P.+)"' diff --git a/pyload/plugins/crypter/BitshareComFolder.py b/pyload/plugins/crypter/BitshareComFolder.py deleted file mode 100644 index 4dbeafdb3..000000000 --- a/pyload/plugins/crypter/BitshareComFolder.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- - -from pyload.plugins.internal.SimpleCrypter import SimpleCrypter - - -class BitshareComFolder(SimpleCrypter): - __name__ = "BitshareComFolder" - __type__ = "crypter" - __version__ = "0.03" - - __pattern__ = r'http://(?:www\.)?bitshare\.com/\?d=\w+' - __config__ = [("use_subfolder", "bool", "Save package to subfolder", True), - ("subfolder_per_package", "bool", "Create a subfolder for each package", True)] - - __description__ = """Bitshare.com folder decrypter plugin""" - __license__ = "GPLv3" - __authors__ = [("stickell", "l.stickell@yahoo.it")] - - - LINK_PATTERN = r'.+' - NAME_PATTERN = r'View public folder "(?P.+)"' diff --git a/pyload/plugins/crypter/CrockoCom.py b/pyload/plugins/crypter/CrockoCom.py new file mode 100644 index 000000000..c959fa70a --- /dev/null +++ b/pyload/plugins/crypter/CrockoCom.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.SimpleCrypter import SimpleCrypter + + +class CrockoCom(SimpleCrypter): + __name__ = "CrockoCom" + __type__ = "crypter" + __version__ = "0.01" + + __pattern__ = r'http://(?:www\.)?crocko\.com/f/.*' + __config__ = [("use_subfolder", "bool", "Save package to subfolder", True), + ("subfolder_per_package", "bool", "Create a subfolder for each package", True)] + + __description__ = """Crocko.com folder decrypter plugin""" + __license__ = "GPLv3" + __authors__ = [("zoidberg", "zoidberg@mujmail.cz")] + + + LINK_PATTERN = r'download' diff --git a/pyload/plugins/crypter/CrockoComFolder.py b/pyload/plugins/crypter/CrockoComFolder.py deleted file mode 100644 index 7c96161a5..000000000 --- a/pyload/plugins/crypter/CrockoComFolder.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- - -from pyload.plugins.internal.SimpleCrypter import SimpleCrypter - - -class CrockoComFolder(SimpleCrypter): - __name__ = "CrockoComFolder" - __type__ = "crypter" - __version__ = "0.01" - - __pattern__ = r'http://(?:www\.)?crocko\.com/f/.*' - __config__ = [("use_subfolder", "bool", "Save package to subfolder", True), - ("subfolder_per_package", "bool", "Create a subfolder for each package", True)] - - __description__ = """Crocko.com folder decrypter plugin""" - __license__ = "GPLv3" - __authors__ = [("zoidberg", "zoidberg@mujmail.cz")] - - - LINK_PATTERN = r'download' diff --git a/pyload/plugins/crypter/CzshareCom.py b/pyload/plugins/crypter/CzshareCom.py new file mode 100644 index 000000000..b79f540ff --- /dev/null +++ b/pyload/plugins/crypter/CzshareCom.py @@ -0,0 +1,32 @@ +# -*- coding: utf-8 -*- + +import re +from pyload.plugins.internal.Crypter import Crypter + + +class CzshareCom(Crypter): + __name__ = "CzshareCom" + __type__ = "crypter" + __version__ = "0.2" + + __pattern__ = r'http://(?:www\.)?(czshare|sdilej)\.(com|cz)/folders/.*' + __config__ = [("use_subfolder", "bool", "Save package to subfolder", True), + ("subfolder_per_package", "bool", "Create a subfolder for each package", True)] + + __description__ = """Czshare.com folder decrypter plugin, now Sdilej.cz""" + __license__ = "GPLv3" + __authors__ = [("zoidberg", "zoidberg@mujmail.cz")] + + + FOLDER_PATTERN = r'\s*\s*(.*?)
' + LINK_PATTERN = r'info' + + + def decrypt(self, pyfile): + html = self.load(pyfile.url) + + m = re.search(self.FOLDER_PATTERN, html, re.S) + if m is None: + self.error(_("FOLDER_PATTERN not found")) + + self.urls.extend(re.findall(self.LINK_PATTERN, m.group(1))) diff --git a/pyload/plugins/crypter/CzshareComFolder.py b/pyload/plugins/crypter/CzshareComFolder.py deleted file mode 100644 index bfca84360..000000000 --- a/pyload/plugins/crypter/CzshareComFolder.py +++ /dev/null @@ -1,32 +0,0 @@ -# -*- coding: utf-8 -*- - -import re -from pyload.plugins.internal.Crypter import Crypter - - -class CzshareComFolder(Crypter): - __name__ = "CzshareComFolder" - __type__ = "crypter" - __version__ = "0.2" - - __pattern__ = r'http://(?:www\.)?(czshare|sdilej)\.(com|cz)/folders/.*' - __config__ = [("use_subfolder", "bool", "Save package to subfolder", True), - ("subfolder_per_package", "bool", "Create a subfolder for each package", True)] - - __description__ = """Czshare.com folder decrypter plugin, now Sdilej.cz""" - __license__ = "GPLv3" - __authors__ = [("zoidberg", "zoidberg@mujmail.cz")] - - - FOLDER_PATTERN = r'\s*\s*(.*?)
' - LINK_PATTERN = r'info' - - - def decrypt(self, pyfile): - html = self.load(pyfile.url) - - m = re.search(self.FOLDER_PATTERN, html, re.S) - if m is None: - self.error(_("FOLDER_PATTERN not found")) - - self.urls.extend(re.findall(self.LINK_PATTERN, m.group(1))) diff --git a/pyload/plugins/crypter/DataHu.py b/pyload/plugins/crypter/DataHu.py new file mode 100644 index 000000000..2a02e03c8 --- /dev/null +++ b/pyload/plugins/crypter/DataHu.py @@ -0,0 +1,40 @@ +# -*- coding: utf-8 -*- + +import re + +from pyload.plugins.internal.SimpleCrypter import SimpleCrypter + + +class DataHu(SimpleCrypter): + __name__ = "DataHu" + __type__ = "crypter" + __version__ = "0.06" + + __pattern__ = r'http://(?:www\.)?data\.hu/dir/\w+' + __config__ = [("use_subfolder", "bool", "Save package to subfolder", True), + ("subfolder_per_package", "bool", "Create a subfolder for each package", True)] + + __description__ = """Data.hu folder decrypter plugin""" + __license__ = "GPLv3" + __authors__ = [("crash", None), + ("stickell", "l.stickell@yahoo.it")] + + + LINK_PATTERN = r'\1' + NAME_PATTERN = ur'(?P<N>.+) Let\xf6lt\xe9se' + + + def prepare(self): + super(DataHu, self).prepare() + + if u'K\xe9rlek add meg a jelsz\xf3t' in self.html: # Password protected + password = self.getPassword() + if not password: + self.fail(_("Password required")) + + self.logDebug("The folder is password protected', 'Using password: " + password) + + self.html = self.load(self.pyfile.url, post={'mappa_pass': password}, decode=True) + + if u'Hib\xe1s jelsz\xf3' in self.html: # Wrong password + self.fail(_("Wrong password")) diff --git a/pyload/plugins/crypter/DataHuFolder.py b/pyload/plugins/crypter/DataHuFolder.py deleted file mode 100644 index b65c39904..000000000 --- a/pyload/plugins/crypter/DataHuFolder.py +++ /dev/null @@ -1,40 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from pyload.plugins.internal.SimpleCrypter import SimpleCrypter - - -class DataHuFolder(SimpleCrypter): - __name__ = "DataHuFolder" - __type__ = "crypter" - __version__ = "0.06" - - __pattern__ = r'http://(?:www\.)?data\.hu/dir/\w+' - __config__ = [("use_subfolder", "bool", "Save package to subfolder", True), - ("subfolder_per_package", "bool", "Create a subfolder for each package", True)] - - __description__ = """Data.hu folder decrypter plugin""" - __license__ = "GPLv3" - __authors__ = [("crash", None), - ("stickell", "l.stickell@yahoo.it")] - - - LINK_PATTERN = r'\1' - NAME_PATTERN = ur'(?P<N>.+) Let\xf6lt\xe9se' - - - def prepare(self): - super(DataHuFolder, self).prepare() - - if u'K\xe9rlek add meg a jelsz\xf3t' in self.html: # Password protected - password = self.getPassword() - if not password: - self.fail(_("Password required")) - - self.logDebug("The folder is password protected', 'Using password: " + password) - - self.html = self.load(self.pyfile.url, post={'mappa_pass': password}, decode=True) - - if u'Hib\xe1s jelsz\xf3' in self.html: # Wrong password - self.fail(_("Wrong password")) diff --git a/pyload/plugins/crypter/DdlstorageCom.py b/pyload/plugins/crypter/DdlstorageCom.py new file mode 100644 index 000000000..b4a8d07b4 --- /dev/null +++ b/pyload/plugins/crypter/DdlstorageCom.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.DeadCrypter import DeadCrypter, create_getInfo + + +class DdlstorageCom(DeadCrypter): + __name__ = "DdlstorageCom" + __type__ = "crypter" + __version__ = "0.03" + + __pattern__ = r'https?://(?:www\.)?ddlstorage\.com/folder/\w+' + __config__ = [] + + __description__ = """DDLStorage.com folder decrypter plugin""" + __license__ = "GPLv3" + __authors__ = [("godofdream", "soilfiction@gmail.com"), + ("stickell", "l.stickell@yahoo.it")] + + +getInfo = create_getInfo(SpeedLoadOrg) diff --git a/pyload/plugins/crypter/DdlstorageComFolder.py b/pyload/plugins/crypter/DdlstorageComFolder.py deleted file mode 100644 index 9851f92c1..000000000 --- a/pyload/plugins/crypter/DdlstorageComFolder.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- - -from pyload.plugins.internal.DeadCrypter import DeadCrypter, create_getInfo - - -class DdlstorageComFolder(DeadCrypter): - __name__ = "DdlstorageComFolder" - __type__ = "crypter" - __version__ = "0.03" - - __pattern__ = r'https?://(?:www\.)?ddlstorage\.com/folder/\w+' - __config__ = [] - - __description__ = """DDLStorage.com folder decrypter plugin""" - __license__ = "GPLv3" - __authors__ = [("godofdream", "soilfiction@gmail.com"), - ("stickell", "l.stickell@yahoo.it")] - - -getInfo = create_getInfo(SpeedLoadOrg) diff --git a/pyload/plugins/crypter/DepositfilesCom.py b/pyload/plugins/crypter/DepositfilesCom.py new file mode 100644 index 000000000..9ba211607 --- /dev/null +++ b/pyload/plugins/crypter/DepositfilesCom.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.SimpleCrypter import SimpleCrypter + + +class DepositfilesCom(SimpleCrypter): + __name__ = "DepositfilesCom" + __type__ = "crypter" + __version__ = "0.01" + + __pattern__ = r'http://(?:www\.)?depositfiles\.com/folders/\w+' + __config__ = [("use_subfolder", "bool", "Save package to subfolder", True), + ("subfolder_per_package", "bool", "Create a subfolder for each package", True)] + + __description__ = """Depositfiles.com folder decrypter plugin""" + __license__ = "GPLv3" + __authors__ = [("zoidberg", "zoidberg@mujmail.cz")] + + + LINK_PATTERN = r'
]*>\s*' diff --git a/pyload/plugins/crypter/DepositfilesComFolder.py b/pyload/plugins/crypter/DepositfilesComFolder.py deleted file mode 100644 index 65d73afa8..000000000 --- a/pyload/plugins/crypter/DepositfilesComFolder.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- - -from pyload.plugins.internal.SimpleCrypter import SimpleCrypter - - -class DepositfilesComFolder(SimpleCrypter): - __name__ = "DepositfilesComFolder" - __type__ = "crypter" - __version__ = "0.01" - - __pattern__ = r'http://(?:www\.)?depositfiles\.com/folders/\w+' - __config__ = [("use_subfolder", "bool", "Save package to subfolder", True), - ("subfolder_per_package", "bool", "Create a subfolder for each package", True)] - - __description__ = """Depositfiles.com folder decrypter plugin""" - __license__ = "GPLv3" - __authors__ = [("zoidberg", "zoidberg@mujmail.cz")] - - - LINK_PATTERN = r'
]*>\s*' diff --git a/pyload/plugins/crypter/DuploadOrg.py b/pyload/plugins/crypter/DuploadOrg.py new file mode 100644 index 000000000..fdb51021b --- /dev/null +++ b/pyload/plugins/crypter/DuploadOrg.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.DeadCrypter import DeadCrypter + + +class DuploadOrg(DeadCrypter): + __name__ = "DuploadOrg" + __type__ = "crypter" + __version__ = "0.02" + + __pattern__ = r'http://(?:www\.)?dupload\.org/folder/\d+' + __config__ = [] + + __description__ = """Dupload.org folder decrypter plugin""" + __license__ = "GPLv3" + __authors__ = [("stickell", "l.stickell@yahoo.it")] diff --git a/pyload/plugins/crypter/DuploadOrgFolder.py b/pyload/plugins/crypter/DuploadOrgFolder.py deleted file mode 100644 index 138db9f03..000000000 --- a/pyload/plugins/crypter/DuploadOrgFolder.py +++ /dev/null @@ -1,16 +0,0 @@ -# -*- coding: utf-8 -*- - -from pyload.plugins.internal.DeadCrypter import DeadCrypter - - -class DuploadOrgFolder(DeadCrypter): - __name__ = "DuploadOrgFolder" - __type__ = "crypter" - __version__ = "0.02" - - __pattern__ = r'http://(?:www\.)?dupload\.org/folder/\d+' - __config__ = [] - - __description__ = """Dupload.org folder decrypter plugin""" - __license__ = "GPLv3" - __authors__ = [("stickell", "l.stickell@yahoo.it")] diff --git a/pyload/plugins/crypter/EasybytezCom.py b/pyload/plugins/crypter/EasybytezCom.py new file mode 100644 index 000000000..4cd86e9b6 --- /dev/null +++ b/pyload/plugins/crypter/EasybytezCom.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.XFSCrypter import XFSCrypter + + +class EasybytezCom(XFSCrypter): + __name__ = "EasybytezCom" + __type__ = "crypter" + __version__ = "0.10" + + __pattern__ = r'http://(?:www\.)?easybytez\.com/users/\d+/\d+' + __config__ = [("use_subfolder", "bool", "Save package to subfolder", True), + ("subfolder_per_package", "bool", "Create a subfolder for each package", True)] + + __description__ = """Easybytez.com folder decrypter plugin""" + __license__ = "GPLv3" + __authors__ = [("stickell", "l.stickell@yahoo.it")] + + + HOSTER_DOMAIN = "easybytez.com" + + LOGIN_ACCOUNT = True diff --git a/pyload/plugins/crypter/EasybytezComFolder.py b/pyload/plugins/crypter/EasybytezComFolder.py deleted file mode 100644 index 482ce594b..000000000 --- a/pyload/plugins/crypter/EasybytezComFolder.py +++ /dev/null @@ -1,22 +0,0 @@ -# -*- coding: utf-8 -*- - -from pyload.plugins.internal.XFSCrypter import XFSCrypter - - -class EasybytezComFolder(XFSCrypter): - __name__ = "EasybytezComFolder" - __type__ = "crypter" - __version__ = "0.10" - - __pattern__ = r'http://(?:www\.)?easybytez\.com/users/\d+/\d+' - __config__ = [("use_subfolder", "bool", "Save package to subfolder", True), - ("subfolder_per_package", "bool", "Create a subfolder for each package", True)] - - __description__ = """Easybytez.com folder decrypter plugin""" - __license__ = "GPLv3" - __authors__ = [("stickell", "l.stickell@yahoo.it")] - - - HOSTER_DOMAIN = "easybytez.com" - - LOGIN_ACCOUNT = True diff --git a/pyload/plugins/crypter/FilebeerInfo.py b/pyload/plugins/crypter/FilebeerInfo.py new file mode 100644 index 000000000..75714c81a --- /dev/null +++ b/pyload/plugins/crypter/FilebeerInfo.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.DeadCrypter import DeadCrypter + + +class FilebeerInfo(DeadCrypter): + __name__ = "FilebeerInfo" + __type__ = "crypter" + __version__ = "0.02" + + __pattern__ = r'http://(?:www\.)?filebeer\.info/(\d+~f).*' + __config__ = [] + + __description__ = """Filebeer.info folder decrypter plugin""" + __license__ = "GPLv3" + __authors__ = [("zoidberg", "zoidberg@mujmail.cz")] diff --git a/pyload/plugins/crypter/FilebeerInfoFolder.py b/pyload/plugins/crypter/FilebeerInfoFolder.py deleted file mode 100644 index e361b4e1d..000000000 --- a/pyload/plugins/crypter/FilebeerInfoFolder.py +++ /dev/null @@ -1,16 +0,0 @@ -# -*- coding: utf-8 -*- - -from pyload.plugins.internal.DeadCrypter import DeadCrypter - - -class FilebeerInfoFolder(DeadCrypter): - __name__ = "FilebeerInfoFolder" - __type__ = "crypter" - __version__ = "0.02" - - __pattern__ = r'http://(?:www\.)?filebeer\.info/(\d+~f).*' - __config__ = [] - - __description__ = """Filebeer.info folder decrypter plugin""" - __license__ = "GPLv3" - __authors__ = [("zoidberg", "zoidberg@mujmail.cz")] diff --git a/pyload/plugins/crypter/FilecloudIo.py b/pyload/plugins/crypter/FilecloudIo.py new file mode 100644 index 000000000..6c8369925 --- /dev/null +++ b/pyload/plugins/crypter/FilecloudIo.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.SimpleCrypter import SimpleCrypter + + +class FilecloudIo(SimpleCrypter): + __name__ = "FilecloudIo" + __type__ = "crypter" + __version__ = "0.03" + + __pattern__ = r'https?://(?:www\.)?(filecloud\.io|ifile\.it)/_\w+' + __config__ = [("use_subfolder", "bool", "Save package to subfolder", True), + ("subfolder_per_package", "bool", "Create a subfolder for each package", True)] + + __description__ = """Filecloud.io folder decrypter plugin""" + __license__ = "GPLv3" + __authors__ = [("Walter Purcaro", "vuolter@gmail.com")] + + + LINK_PATTERN = r'href="(http://filecloud\.io/\w+)" title' + NAME_PATTERN = r'>(?P.+?) - filecloud\.io<' diff --git a/pyload/plugins/crypter/FilecloudIoFolder.py b/pyload/plugins/crypter/FilecloudIoFolder.py deleted file mode 100644 index c470cef03..000000000 --- a/pyload/plugins/crypter/FilecloudIoFolder.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- - -from pyload.plugins.internal.SimpleCrypter import SimpleCrypter - - -class FilecloudIoFolder(SimpleCrypter): - __name__ = "FilecloudIoFolder" - __type__ = "crypter" - __version__ = "0.03" - - __pattern__ = r'https?://(?:www\.)?(filecloud\.io|ifile\.it)/_\w+' - __config__ = [("use_subfolder", "bool", "Save package to subfolder", True), - ("subfolder_per_package", "bool", "Create a subfolder for each package", True)] - - __description__ = """Filecloud.io folder decrypter plugin""" - __license__ = "GPLv3" - __authors__ = [("Walter Purcaro", "vuolter@gmail.com")] - - - LINK_PATTERN = r'href="(http://filecloud\.io/\w+)" title' - NAME_PATTERN = r'>(?P.+?) - filecloud\.io<' diff --git a/pyload/plugins/crypter/FilefactoryCom.py b/pyload/plugins/crypter/FilefactoryCom.py new file mode 100644 index 000000000..9792bb9f1 --- /dev/null +++ b/pyload/plugins/crypter/FilefactoryCom.py @@ -0,0 +1,28 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.SimpleCrypter import SimpleCrypter + + +class FilefactoryCom(SimpleCrypter): + __name__ = "FilefactoryCom" + __type__ = "crypter" + __version__ = "0.31" + + __pattern__ = r'https?://(?:www\.)?filefactory\.com/(?:f|folder)/\w+' + __config__ = [("use_subfolder", "bool", "Save package to subfolder", True), + ("subfolder_per_package", "bool", "Create a subfolder for each package", True)] + + __description__ = """Filefactory.com folder decrypter plugin""" + __license__ = "GPLv3" + __authors__ = [("stickell", "l.stickell@yahoo.it")] + + + LINK_PATTERN = r'' + NAME_PATTERN = r'

Files in (?P.+)

' + PAGES_PATTERN = r'data-paginator-totalPages="(\d+)"' + + COOKIES = [(".filefactory.com", "locale", "en_US.utf8")] + + + def loadPage(self, page_n): + return self.load(self.pyfile.url, get={'page': page_n}) diff --git a/pyload/plugins/crypter/FilefactoryComFolder.py b/pyload/plugins/crypter/FilefactoryComFolder.py deleted file mode 100644 index 8fb3efc72..000000000 --- a/pyload/plugins/crypter/FilefactoryComFolder.py +++ /dev/null @@ -1,28 +0,0 @@ -# -*- coding: utf-8 -*- - -from pyload.plugins.internal.SimpleCrypter import SimpleCrypter - - -class FilefactoryComFolder(SimpleCrypter): - __name__ = "FilefactoryComFolder" - __type__ = "crypter" - __version__ = "0.31" - - __pattern__ = r'https?://(?:www\.)?filefactory\.com/(?:f|folder)/\w+' - __config__ = [("use_subfolder", "bool", "Save package to subfolder", True), - ("subfolder_per_package", "bool", "Create a subfolder for each package", True)] - - __description__ = """Filefactory.com folder decrypter plugin""" - __license__ = "GPLv3" - __authors__ = [("stickell", "l.stickell@yahoo.it")] - - - LINK_PATTERN = r'
' - NAME_PATTERN = r'

Files in (?P.+)

' - PAGES_PATTERN = r'data-paginator-totalPages="(\d+)"' - - COOKIES = [(".filefactory.com", "locale", "en_US.utf8")] - - - def loadPage(self, page_n): - return self.load(self.pyfile.url, get={'page': page_n}) diff --git a/pyload/plugins/crypter/FilerNet.py b/pyload/plugins/crypter/FilerNet.py new file mode 100644 index 000000000..4d28dc0da --- /dev/null +++ b/pyload/plugins/crypter/FilerNet.py @@ -0,0 +1,26 @@ +import re + +from pyload.plugins.internal.SimpleCrypter import SimpleCrypter + + +class FilerNet(SimpleCrypter): + __name__ = "FilerNet" + __type__ = "crypter" + __version__ = "0.41" + + __pattern__ = r'https?://filer\.net/folder/\w{16}' + __config__ = [("use_subfolder", "bool", "Save package to subfolder", True), + ("subfolder_per_package", "bool", "Create a subfolder for each package", True)] + + __description__ = """Filer.net decrypter plugin""" + __license__ = "GPLv3" + __authors__ = [("nath_schwarz", "nathan.notwhite@gmail.com"), + ("stickell", "l.stickell@yahoo.it")] + + + LINK_PATTERN = r'href="(/get/\w{16})">(?!<)' + NAME_PATTERN = r'

(?P.+?) - (?!<)' - NAME_PATTERN = r'

(?P.+?) - (.*?)' + LINK_PATTERN = r'' + + + def decrypt(self, pyfile): + html = self.load(pyfile.url) + + new_links = [] + + folder = re.search(self.FOLDER_PATTERN, html, re.S) + if folder is None: + self.error(_("FOLDER_PATTERN not found")) + + new_links.extend(re.findall(self.LINK_PATTERN, folder.group(1))) + + if new_links: + self.urls = [map(lambda s: "http://fileserve.com%s" % s, new_links)] diff --git a/pyload/plugins/crypter/FileserveComFolder.py b/pyload/plugins/crypter/FileserveComFolder.py deleted file mode 100644 index c08e174ed..000000000 --- a/pyload/plugins/crypter/FileserveComFolder.py +++ /dev/null @@ -1,38 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from pyload.plugins.internal.Crypter import Crypter - - -class FileserveComFolder(Crypter): - __name__ = "FileserveComFolder" - __type__ = "crypter" - __version__ = "0.11" - - __pattern__ = r'http://(?:www\.)?fileserve\.com/list/\w+' - __config__ = [("use_subfolder", "bool", "Save package to subfolder", True), - ("subfolder_per_package", "bool", "Create a subfolder for each package", True)] - - __description__ = """FileServe.com folder decrypter plugin""" - __license__ = "GPLv3" - __authors__ = [("fionnc", "fionnc@gmail.com")] - - - FOLDER_PATTERN = r'(.*?)
' - LINK_PATTERN = r'
' - - - def decrypt(self, pyfile): - html = self.load(pyfile.url) - - new_links = [] - - folder = re.search(self.FOLDER_PATTERN, html, re.S) - if folder is None: - self.error(_("FOLDER_PATTERN not found")) - - new_links.extend(re.findall(self.LINK_PATTERN, folder.group(1))) - - if new_links: - self.urls = [map(lambda s: "http://fileserve.com%s" % s, new_links)] diff --git a/pyload/plugins/crypter/FilesonicCom.py b/pyload/plugins/crypter/FilesonicCom.py new file mode 100644 index 000000000..33a99f0d5 --- /dev/null +++ b/pyload/plugins/crypter/FilesonicCom.py @@ -0,0 +1,15 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.DeadCrypter import DeadCrypter + + +class FilesonicCom(DeadCrypter): + __name__ = "FilesonicCom" + __type__ = "crypter" + __version__ = "0.12" + + __pattern__ = r'http://(?:www\.)?filesonic\.com/folder/\w+' + + __description__ = """Filesonic.com folder decrypter plugin""" + __license__ = "GPLv3" + __authors__ = [("zoidberg", "zoidberg@mujmail.cz")] diff --git a/pyload/plugins/crypter/FilesonicComFolder.py b/pyload/plugins/crypter/FilesonicComFolder.py deleted file mode 100644 index 992915ab5..000000000 --- a/pyload/plugins/crypter/FilesonicComFolder.py +++ /dev/null @@ -1,15 +0,0 @@ -# -*- coding: utf-8 -*- - -from pyload.plugins.internal.DeadCrypter import DeadCrypter - - -class FilesonicComFolder(DeadCrypter): - __name__ = "FilesonicComFolder" - __type__ = "crypter" - __version__ = "0.12" - - __pattern__ = r'http://(?:www\.)?filesonic\.com/folder/\w+' - - __description__ = """Filesonic.com folder decrypter plugin""" - __license__ = "GPLv3" - __authors__ = [("zoidberg", "zoidberg@mujmail.cz")] diff --git a/pyload/plugins/crypter/FiredriveCom.py b/pyload/plugins/crypter/FiredriveCom.py new file mode 100644 index 000000000..7ef84c8ff --- /dev/null +++ b/pyload/plugins/crypter/FiredriveCom.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.DeadCrypter import DeadCrypter + + +class FiredriveCom(DeadCrypter): + __name__ = "FiredriveCom" + __type__ = "crypter" + __version__ = "0.03" + + __pattern__ = r'https?://(?:www\.)?(firedrive|putlocker)\.com/share/.+' + __config__ = [] + + __description__ = """Firedrive.com folder decrypter plugin""" + __license__ = "GPLv3" + __authors__ = [("Walter Purcaro", "vuolter@gmail.com")] diff --git a/pyload/plugins/crypter/FiredriveComFolder.py b/pyload/plugins/crypter/FiredriveComFolder.py deleted file mode 100644 index f6e6b8670..000000000 --- a/pyload/plugins/crypter/FiredriveComFolder.py +++ /dev/null @@ -1,16 +0,0 @@ -# -*- coding: utf-8 -*- - -from pyload.plugins.internal.DeadCrypter import DeadCrypter - - -class FiredriveComFolder(DeadCrypter): - __name__ = "FiredriveComFolder" - __type__ = "crypter" - __version__ = "0.03" - - __pattern__ = r'https?://(?:www\.)?(firedrive|putlocker)\.com/share/.+' - __config__ = [] - - __description__ = """Firedrive.com folder decrypter plugin""" - __license__ = "GPLv3" - __authors__ = [("Walter Purcaro", "vuolter@gmail.com")] diff --git a/pyload/plugins/crypter/FreakhareCom.py b/pyload/plugins/crypter/FreakhareCom.py new file mode 100644 index 000000000..792badeb4 --- /dev/null +++ b/pyload/plugins/crypter/FreakhareCom.py @@ -0,0 +1,38 @@ +# -*- coding: utf-8 -*- + +import re + +from pyload.plugins.internal.SimpleCrypter import SimpleCrypter + + +class FreakhareCom(SimpleCrypter): + __name__ = "FreakhareCom" + __type__ = "crypter" + __version__ = "0.03" + + __pattern__ = r'http://(?:www\.)?freakshare\.com/folder/.+' + __config__ = [("use_subfolder", "bool", "Save package to subfolder", True), + ("subfolder_per_package", "bool", "Create a subfolder for each package", True)] + + __description__ = """Freakhare.com folder decrypter plugin""" + __license__ = "GPLv3" + __authors__ = [("stickell", "l.stickell@yahoo.it")] + + + LINK_PATTERN = r'' + NAME_PATTERN = r'Folder: (?P.+)' + PAGES_PATTERN = r'Pages: +(\d+)' + + + def loadPage(self, page_n): + if not hasattr(self, 'f_id') and not hasattr(self, 'f_md5'): + m = re.search(r'http://freakshare.com/\?x=folder&f_id=(\d+)&f_md5=(\w+)', self.html) + if m: + self.f_id = m.group(1) + self.f_md5 = m.group(2) + return self.load('http://freakshare.com/', get={'x': 'folder', + 'f_id': self.f_id, + 'f_md5': self.f_md5, + 'entrys': '20', + 'page': page_n - 1, + 'order': ''}, decode=True) diff --git a/pyload/plugins/crypter/FreakhareComFolder.py b/pyload/plugins/crypter/FreakhareComFolder.py deleted file mode 100644 index f5e31ea42..000000000 --- a/pyload/plugins/crypter/FreakhareComFolder.py +++ /dev/null @@ -1,38 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from pyload.plugins.internal.SimpleCrypter import SimpleCrypter - - -class FreakhareComFolder(SimpleCrypter): - __name__ = "FreakhareComFolder" - __type__ = "crypter" - __version__ = "0.03" - - __pattern__ = r'http://(?:www\.)?freakshare\.com/folder/.+' - __config__ = [("use_subfolder", "bool", "Save package to subfolder", True), - ("subfolder_per_package", "bool", "Create a subfolder for each package", True)] - - __description__ = """Freakhare.com folder decrypter plugin""" - __license__ = "GPLv3" - __authors__ = [("stickell", "l.stickell@yahoo.it")] - - - LINK_PATTERN = r'' - NAME_PATTERN = r'Folder: (?P.+)' - PAGES_PATTERN = r'Pages: +(\d+)' - - - def loadPage(self, page_n): - if not hasattr(self, 'f_id') and not hasattr(self, 'f_md5'): - m = re.search(r'http://freakshare.com/\?x=folder&f_id=(\d+)&f_md5=(\w+)', self.html) - if m: - self.f_id = m.group(1) - self.f_md5 = m.group(2) - return self.load('http://freakshare.com/', get={'x': 'folder', - 'f_id': self.f_id, - 'f_md5': self.f_md5, - 'entrys': '20', - 'page': page_n - 1, - 'order': ''}, decode=True) diff --git a/pyload/plugins/crypter/FshareVn.py b/pyload/plugins/crypter/FshareVn.py new file mode 100644 index 000000000..8b22b8bf2 --- /dev/null +++ b/pyload/plugins/crypter/FshareVn.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.SimpleCrypter import SimpleCrypter + + +class FshareVn(SimpleCrypter): + __name__ = "FshareVn" + __type__ = "crypter" + __version__ = "0.01" + + __pattern__ = r'http://(?:www\.)?fshare\.vn/folder/.*' + __config__ = [("use_subfolder", "bool", "Save package to subfolder", True), + ("subfolder_per_package", "bool", "Create a subfolder for each package", True)] + + __description__ = """Fshare.vn folder decrypter plugin""" + __license__ = "GPLv3" + __authors__ = [("zoidberg", "zoidberg@mujmail.cz")] + + + LINK_PATTERN = r'
  • ' diff --git a/pyload/plugins/crypter/FshareVnFolder.py b/pyload/plugins/crypter/FshareVnFolder.py deleted file mode 100644 index 0c0a79495..000000000 --- a/pyload/plugins/crypter/FshareVnFolder.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- - -from pyload.plugins.internal.SimpleCrypter import SimpleCrypter - - -class FshareVnFolder(SimpleCrypter): - __name__ = "FshareVnFolder" - __type__ = "crypter" - __version__ = "0.01" - - __pattern__ = r'http://(?:www\.)?fshare\.vn/folder/.*' - __config__ = [("use_subfolder", "bool", "Save package to subfolder", True), - ("subfolder_per_package", "bool", "Create a subfolder for each package", True)] - - __description__ = """Fshare.vn folder decrypter plugin""" - __license__ = "GPLv3" - __authors__ = [("zoidberg", "zoidberg@mujmail.cz")] - - - LINK_PATTERN = r'
  • ' diff --git a/pyload/plugins/crypter/HotfileCom.py b/pyload/plugins/crypter/HotfileCom.py new file mode 100644 index 000000000..1c1dcb76b --- /dev/null +++ b/pyload/plugins/crypter/HotfileCom.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.DeadCrypter import DeadCrypter + + +class HotfileCom(DeadCrypter): + __name__ = "HotfileCom" + __type__ = "crypter" + __version__ = "0.3" + + __pattern__ = r'https?://(?:www\.)?hotfile\.com/list/\w+/\w+' + __config__ = [] + + __description__ = """Hotfile.com folder decrypter plugin""" + __license__ = "GPLv3" + __authors__ = [("RaNaN", "RaNaN@pyload.org")] diff --git a/pyload/plugins/crypter/HotfileComFolder.py b/pyload/plugins/crypter/HotfileComFolder.py deleted file mode 100644 index 1ce901866..000000000 --- a/pyload/plugins/crypter/HotfileComFolder.py +++ /dev/null @@ -1,16 +0,0 @@ -# -*- coding: utf-8 -*- - -from pyload.plugins.internal.DeadCrypter import DeadCrypter - - -class HotfileComFolder(DeadCrypter): - __name__ = "HotfileComFolder" - __type__ = "crypter" - __version__ = "0.3" - - __pattern__ = r'https?://(?:www\.)?hotfile\.com/list/\w+/\w+' - __config__ = [] - - __description__ = """Hotfile.com folder decrypter plugin""" - __license__ = "GPLv3" - __authors__ = [("RaNaN", "RaNaN@pyload.org")] diff --git a/pyload/plugins/crypter/JunocloudMe.py b/pyload/plugins/crypter/JunocloudMe.py new file mode 100644 index 000000000..3036be616 --- /dev/null +++ b/pyload/plugins/crypter/JunocloudMe.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.XFSCrypter import XFSCrypter + + +class JunocloudMe(XFSCrypter): + __name__ = "JunocloudMe" + __type__ = "crypter" + __version__ = "0.03" + + __pattern__ = r'http://(?:www\.)?junocloud\.me/folders/(?P\d+/\w+)' + __config__ = [("use_subfolder", "bool", "Save package to subfolder", True), + ("subfolder_per_package", "bool", "Create a subfolder for each package", True)] + + __description__ = """Junocloud.me folder decrypter plugin""" + __license__ = "GPLv3" + __authors__ = [("guidobelix", "guidobelix@hotmail.it")] + + + HOSTER_DOMAIN = "junocloud.me" diff --git a/pyload/plugins/crypter/JunocloudMeFolder.py b/pyload/plugins/crypter/JunocloudMeFolder.py deleted file mode 100644 index 2e529169f..000000000 --- a/pyload/plugins/crypter/JunocloudMeFolder.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- - -from pyload.plugins.internal.XFSCrypter import XFSCrypter - - -class JunocloudMeFolder(XFSCrypter): - __name__ = "JunocloudMeFolder" - __type__ = "crypter" - __version__ = "0.03" - - __pattern__ = r'http://(?:www\.)?junocloud\.me/folders/(?P\d+/\w+)' - __config__ = [("use_subfolder", "bool", "Save package to subfolder", True), - ("subfolder_per_package", "bool", "Create a subfolder for each package", True)] - - __description__ = """Junocloud.me folder decrypter plugin""" - __license__ = "GPLv3" - __authors__ = [("guidobelix", "guidobelix@hotmail.it")] - - - HOSTER_DOMAIN = "junocloud.me" diff --git a/pyload/plugins/crypter/LetitbitNet.py b/pyload/plugins/crypter/LetitbitNet.py new file mode 100644 index 000000000..6942aa3ca --- /dev/null +++ b/pyload/plugins/crypter/LetitbitNet.py @@ -0,0 +1,33 @@ +# -*- coding: utf-8 -*- + +import re +from pyload.plugins.internal.Crypter import Crypter + + +class LetitbitNet(Crypter): + __name__ = "LetitbitNet" + __type__ = "crypter" + __version__ = "0.1" + + __pattern__ = r'http://(?:www\.)?letitbit\.net/folder/\w+' + __config__ = [("use_subfolder", "bool", "Save package to subfolder", True), + ("subfolder_per_package", "bool", "Create a subfolder for each package", True)] + + __description__ = """Letitbit.net folder decrypter plugin""" + __license__ = "GPLv3" + __authors__ = [("DHMH", "webmaster@pcProfil.de"), + ("z00nx", "z00nx0@gmail.com")] + + + FOLDER_PATTERN = r'(.*)
    ' + LINK_PATTERN = r'
    ' + + + def decrypt(self, pyfile): + html = self.load(pyfile.url) + + folder = re.search(self.FOLDER_PATTERN, html, re.S) + if folder is None: + self.error(_("FOLDER_PATTERN not found")) + + self.urls.extend(re.findall(self.LINK_PATTERN, folder.group(0))) diff --git a/pyload/plugins/crypter/LetitbitNetFolder.py b/pyload/plugins/crypter/LetitbitNetFolder.py deleted file mode 100644 index 09e6c398d..000000000 --- a/pyload/plugins/crypter/LetitbitNetFolder.py +++ /dev/null @@ -1,33 +0,0 @@ -# -*- coding: utf-8 -*- - -import re -from pyload.plugins.internal.Crypter import Crypter - - -class LetitbitNetFolder(Crypter): - __name__ = "LetitbitNetFolder" - __type__ = "crypter" - __version__ = "0.1" - - __pattern__ = r'http://(?:www\.)?letitbit\.net/folder/\w+' - __config__ = [("use_subfolder", "bool", "Save package to subfolder", True), - ("subfolder_per_package", "bool", "Create a subfolder for each package", True)] - - __description__ = """Letitbit.net folder decrypter plugin""" - __license__ = "GPLv3" - __authors__ = [("DHMH", "webmaster@pcProfil.de"), - ("z00nx", "z00nx0@gmail.com")] - - - FOLDER_PATTERN = r'(.*)
    ' - LINK_PATTERN = r'
    ' - - - def decrypt(self, pyfile): - html = self.load(pyfile.url) - - folder = re.search(self.FOLDER_PATTERN, html, re.S) - if folder is None: - self.error(_("FOLDER_PATTERN not found")) - - self.urls.extend(re.findall(self.LINK_PATTERN, folder.group(0))) diff --git a/pyload/plugins/crypter/LinkSaveIn.py b/pyload/plugins/crypter/LinkSaveIn.py index 44a31a1b1..b45904c2e 100644 --- a/pyload/plugins/crypter/LinkSaveIn.py +++ b/pyload/plugins/crypter/LinkSaveIn.py @@ -148,7 +148,7 @@ class LinkSaveIn(SimpleCrypter): if not self.js: self.logDebug("No JS -> skip Web links") else: - #@TODO: Gather paginated web links + #@TODO: Gather paginated web links pattern = r'' + + + def decrypt(self, pyfile): + url, result = checkHTMLHeader(pyfile.url) + self.logDebug("Location (%d): %s" % (result, url)) + + if result == 0: + # load and parse html + html = self.load(pyfile.url) + m = re.search(self.LINK_PATTERN, html) + if m: + # file page + self.urls.append("http://www.mediafire.com/file/%s" % m.group(1)) + else: + # folder page + m = re.search(self.FOLDER_KEY_PATTERN, html) + if m: + folder_key = m.group(1) + self.logDebug("FOLDER KEY: %s" % folder_key) + + json_resp = json_loads(self.load( + "http://www.mediafire.com/api/folder/get_info.php?folder_key=%s&response_format=json&version=1" % folder_key)) + #self.logInfo(json_resp) + if json_resp['response']['result'] == "Success": + for link in json_resp['response']['folder_info']['files']: + self.urls.append("http://www.mediafire.com/file/%s" % link['quickkey']) + else: + self.fail(json_resp['response']['message']) + elif result == 1: + self.offline() + else: + self.urls.append(url) diff --git a/pyload/plugins/crypter/MediafireComFolder.py b/pyload/plugins/crypter/MediafireComFolder.py deleted file mode 100644 index a1cd84fa0..000000000 --- a/pyload/plugins/crypter/MediafireComFolder.py +++ /dev/null @@ -1,56 +0,0 @@ -# -*- coding: utf-8 -*- - -import re -from pyload.plugins.internal.Crypter import Crypter -from pyload.plugins.hoster.MediafireCom import checkHTMLHeader -from pyload.utils import json_loads - - -class MediafireComFolder(Crypter): - __name__ = "MediafireComFolder" - __type__ = "crypter" - __version__ = "0.14" - - __pattern__ = r'http://(?:www\.)?mediafire\.com/(folder/|\?sharekey=|\?\w{13}($|[/#]))' - __config__ = [("use_subfolder", "bool", "Save package to subfolder", True), - ("subfolder_per_package", "bool", "Create a subfolder for each package", True)] - - __description__ = """Mediafire.com folder decrypter plugin""" - __license__ = "GPLv3" - __authors__ = [("zoidberg", "zoidberg@mujmail.cz")] - - - FOLDER_KEY_PATTERN = r'var afI= \'(\w+)' - LINK_PATTERN = r'' - - - def decrypt(self, pyfile): - url, result = checkHTMLHeader(pyfile.url) - self.logDebug("Location (%d): %s" % (result, url)) - - if result == 0: - # load and parse html - html = self.load(pyfile.url) - m = re.search(self.LINK_PATTERN, html) - if m: - # file page - self.urls.append("http://www.mediafire.com/file/%s" % m.group(1)) - else: - # folder page - m = re.search(self.FOLDER_KEY_PATTERN, html) - if m: - folder_key = m.group(1) - self.logDebug("FOLDER KEY: %s" % folder_key) - - json_resp = json_loads(self.load( - "http://www.mediafire.com/api/folder/get_info.php?folder_key=%s&response_format=json&version=1" % folder_key)) - #self.logInfo(json_resp) - if json_resp['response']['result'] == "Success": - for link in json_resp['response']['folder_info']['files']: - self.urls.append("http://www.mediafire.com/file/%s" % link['quickkey']) - else: - self.fail(json_resp['response']['message']) - elif result == 1: - self.offline() - else: - self.urls.append(url) diff --git a/pyload/plugins/crypter/MegaRapidCz.py b/pyload/plugins/crypter/MegaRapidCz.py new file mode 100644 index 000000000..da797965e --- /dev/null +++ b/pyload/plugins/crypter/MegaRapidCz.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.SimpleCrypter import SimpleCrypter + + +class MegaRapidCz(SimpleCrypter): + __name__ = "MegaRapidCz" + __type__ = "crypter" + __version__ = "0.02" + + __pattern__ = r'http://(?:www\.)?(share|mega)rapid\.cz/slozka/\d+/\w+' + __config__ = [("use_subfolder", "bool", "Save package to subfolder", True), + ("subfolder_per_package", "bool", "Create a subfolder for each package", True)] + + __description__ = """Share-Rapid.com folder decrypter plugin""" + __license__ = "GPLv3" + __authors__ = [("zoidberg", "zoidberg@mujmail.cz")] + + + LINK_PATTERN = r']*>' diff --git a/pyload/plugins/crypter/MegaRapidCzFolder.py b/pyload/plugins/crypter/MegaRapidCzFolder.py deleted file mode 100644 index 4a2344051..000000000 --- a/pyload/plugins/crypter/MegaRapidCzFolder.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- - -from pyload.plugins.internal.SimpleCrypter import SimpleCrypter - - -class MegaRapidCzFolder(SimpleCrypter): - __name__ = "MegaRapidCzFolder" - __type__ = "crypter" - __version__ = "0.02" - - __pattern__ = r'http://(?:www\.)?(share|mega)rapid\.cz/slozka/\d+/\w+' - __config__ = [("use_subfolder", "bool", "Save package to subfolder", True), - ("subfolder_per_package", "bool", "Create a subfolder for each package", True)] - - __description__ = """Share-Rapid.com folder decrypter plugin""" - __license__ = "GPLv3" - __authors__ = [("zoidberg", "zoidberg@mujmail.cz")] - - - LINK_PATTERN = r']*>' diff --git a/pyload/plugins/crypter/MegauploadCom.py b/pyload/plugins/crypter/MegauploadCom.py new file mode 100644 index 000000000..57c08bd53 --- /dev/null +++ b/pyload/plugins/crypter/MegauploadCom.py @@ -0,0 +1,15 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.DeadCrypter import DeadCrypter + + +class MegauploadCom(DeadCrypter): + __name__ = "MegauploadCom" + __type__ = "crypter" + __version__ = "0.02" + + __pattern__ = r'http://(?:www\.)?megaupload\.com/(\?f|xml/folderfiles\.php\?.*&?folderid)=\w+' + + __description__ = """Megaupload.com folder decrypter plugin""" + __license__ = "GPLv3" + __authors__ = [("zoidberg", "zoidberg@mujmail.cz")] diff --git a/pyload/plugins/crypter/MegauploadComFolder.py b/pyload/plugins/crypter/MegauploadComFolder.py deleted file mode 100644 index 7e79863d2..000000000 --- a/pyload/plugins/crypter/MegauploadComFolder.py +++ /dev/null @@ -1,15 +0,0 @@ -# -*- coding: utf-8 -*- - -from pyload.plugins.internal.DeadCrypter import DeadCrypter - - -class MegauploadComFolder(DeadCrypter): - __name__ = "MegauploadComFolder" - __type__ = "crypter" - __version__ = "0.02" - - __pattern__ = r'http://(?:www\.)?megaupload\.com/(\?f|xml/folderfiles\.php\?.*&?folderid)=\w+' - - __description__ = """Megaupload.com folder decrypter plugin""" - __license__ = "GPLv3" - __authors__ = [("zoidberg", "zoidberg@mujmail.cz")] diff --git a/pyload/plugins/crypter/MultiUpOrg.py b/pyload/plugins/crypter/MultiUpOrg.py index 81e204c72..ba5549683 100644 --- a/pyload/plugins/crypter/MultiUpOrg.py +++ b/pyload/plugins/crypter/MultiUpOrg.py @@ -15,7 +15,7 @@ class MultiUpOrg(SimpleCrypter): __config__ = [("use_subfolder", "bool", "Save package to subfolder", True), ("subfolder_per_package", "bool", "Create a subfolder for each package", True)] - __description__ = """MultiUp.org crypter plugin""" + __description__ = """MultiUp.org decrypter plugin""" __license__ = "GPLv3" __authors__ = [("Walter Purcaro", "vuolter@gmail.com")] diff --git a/pyload/plugins/crypter/OronCom.py b/pyload/plugins/crypter/OronCom.py new file mode 100644 index 000000000..c92666a5b --- /dev/null +++ b/pyload/plugins/crypter/OronCom.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.DeadCrypter import DeadCrypter + + +class OronCom(DeadCrypter): + __name__ = "OronCom" + __type__ = "crypter" + __version__ = "0.11" + + __pattern__ = r'http://(?:www\.)?oron\.com/folder/\w+' + __config__ = [] + + __description__ = """Oron.com folder decrypter plugin""" + __license__ = "GPLv3" + __authors__ = [("DHMH", "webmaster@pcProfil.de")] diff --git a/pyload/plugins/crypter/OronComFolder.py b/pyload/plugins/crypter/OronComFolder.py deleted file mode 100644 index dad59099f..000000000 --- a/pyload/plugins/crypter/OronComFolder.py +++ /dev/null @@ -1,16 +0,0 @@ -# -*- coding: utf-8 -*- - -from pyload.plugins.internal.DeadCrypter import DeadCrypter - - -class OronComFolder(DeadCrypter): - __name__ = "OronComFolder" - __type__ = "crypter" - __version__ = "0.11" - - __pattern__ = r'http://(?:www\.)?oron\.com/folder/\w+' - __config__ = [] - - __description__ = """Oron.com folder decrypter plugin""" - __license__ = "GPLv3" - __authors__ = [("DHMH", "webmaster@pcProfil.de")] diff --git a/pyload/plugins/crypter/QuickshareCz.py b/pyload/plugins/crypter/QuickshareCz.py new file mode 100644 index 000000000..156c5feeb --- /dev/null +++ b/pyload/plugins/crypter/QuickshareCz.py @@ -0,0 +1,31 @@ +# -*- coding: utf-8 -*- + +import re +from pyload.plugins.internal.Crypter import Crypter + + +class QuickshareCz(Crypter): + __name__ = "QuickshareCz" + __type__ = "crypter" + __version__ = "0.1" + + __pattern__ = r'http://(?:www\.)?quickshare\.cz/slozka-\d+.*' + __config__ = [("use_subfolder", "bool", "Save package to subfolder", True), + ("subfolder_per_package", "bool", "Create a subfolder for each package", True)] + + __description__ = """Quickshare.cz folder decrypter plugin""" + __license__ = "GPLv3" + __authors__ = [("zoidberg", "zoidberg@mujmail.cz")] + + + FOLDER_PATTERN = r']*>(.*?)' + LINK_PATTERN = r'(http://www\.quickshare\.cz/\S+)' + + + def decrypt(self, pyfile): + html = self.load(pyfile.url) + + m = re.search(self.FOLDER_PATTERN, html, re.S) + if m is None: + self.error(_("FOLDER_PATTERN not found")) + self.urls.extend(re.findall(self.LINK_PATTERN, m.group(1))) diff --git a/pyload/plugins/crypter/QuickshareCzFolder.py b/pyload/plugins/crypter/QuickshareCzFolder.py deleted file mode 100644 index b3f3f2335..000000000 --- a/pyload/plugins/crypter/QuickshareCzFolder.py +++ /dev/null @@ -1,31 +0,0 @@ -# -*- coding: utf-8 -*- - -import re -from pyload.plugins.internal.Crypter import Crypter - - -class QuickshareCzFolder(Crypter): - __name__ = "QuickshareCzFolder" - __type__ = "crypter" - __version__ = "0.1" - - __pattern__ = r'http://(?:www\.)?quickshare\.cz/slozka-\d+.*' - __config__ = [("use_subfolder", "bool", "Save package to subfolder", True), - ("subfolder_per_package", "bool", "Create a subfolder for each package", True)] - - __description__ = """Quickshare.cz folder decrypter plugin""" - __license__ = "GPLv3" - __authors__ = [("zoidberg", "zoidberg@mujmail.cz")] - - - FOLDER_PATTERN = r']*>(.*?)' - LINK_PATTERN = r'(http://www\.quickshare\.cz/\S+)' - - - def decrypt(self, pyfile): - html = self.load(pyfile.url) - - m = re.search(self.FOLDER_PATTERN, html, re.S) - if m is None: - self.error(_("FOLDER_PATTERN not found")) - self.urls.extend(re.findall(self.LINK_PATTERN, m.group(1))) diff --git a/pyload/plugins/crypter/RapidfileshareNet.py b/pyload/plugins/crypter/RapidfileshareNet.py new file mode 100644 index 000000000..bc318a01e --- /dev/null +++ b/pyload/plugins/crypter/RapidfileshareNet.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.XFSCrypter import XFSCrypter + + +class RapidfileshareNet(XFSCrypter): + __name__ = "RapidfileshareNet" + __type__ = "crypter" + __version__ = "0.03" + + __pattern__ = r'http://(?:www\.)?rapidfileshare\.net/users/\w+/\d+/\w+' + __config__ = [("use_subfolder", "bool", "Save package to subfolder", True), + ("subfolder_per_package", "bool", "Create a subfolder for each package", True)] + + __description__ = """Rapidfileshare.net folder decrypter plugin""" + __license__ = "GPLv3" + __authors__ = [("guidobelix", "guidobelix@hotmail.it")] + + + HOSTER_DOMAIN = "rapidfileshare.net" diff --git a/pyload/plugins/crypter/RapidfileshareNetFolder.py b/pyload/plugins/crypter/RapidfileshareNetFolder.py deleted file mode 100644 index daf4c1311..000000000 --- a/pyload/plugins/crypter/RapidfileshareNetFolder.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- - -from pyload.plugins.internal.XFSCrypter import XFSCrypter - - -class RapidfileshareNetFolder(XFSCrypter): - __name__ = "RapidfileshareNetFolder" - __type__ = "crypter" - __version__ = "0.03" - - __pattern__ = r'http://(?:www\.)?rapidfileshare\.net/users/\w+/\d+/\w+' - __config__ = [("use_subfolder", "bool", "Save package to subfolder", True), - ("subfolder_per_package", "bool", "Create a subfolder for each package", True)] - - __description__ = """Rapidfileshare.net folder decrypter plugin""" - __license__ = "GPLv3" - __authors__ = [("guidobelix", "guidobelix@hotmail.it")] - - - HOSTER_DOMAIN = "rapidfileshare.net" diff --git a/pyload/plugins/crypter/SharingmatrixCom.py b/pyload/plugins/crypter/SharingmatrixCom.py new file mode 100644 index 000000000..28906ae7b --- /dev/null +++ b/pyload/plugins/crypter/SharingmatrixCom.py @@ -0,0 +1,15 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.DeadCrypter import DeadCrypter + + +class SharingmatrixCom(DeadCrypter): + __name__ = "SharingmatrixCom" + __type__ = "crypter" + __version__ = "0.01" + + __pattern__ = r'http://(?:www\.)?sharingmatrix\.com/folder/\w+' + + __description__ = """Sharingmatrix.com folder decrypter plugin""" + __license__ = "GPLv3" + __authors__ = [("zoidberg", "zoidberg@mujmail.cz")] diff --git a/pyload/plugins/crypter/SharingmatrixComFolder.py b/pyload/plugins/crypter/SharingmatrixComFolder.py deleted file mode 100644 index a8ab3226a..000000000 --- a/pyload/plugins/crypter/SharingmatrixComFolder.py +++ /dev/null @@ -1,15 +0,0 @@ -# -*- coding: utf-8 -*- - -from pyload.plugins.internal.DeadCrypter import DeadCrypter - - -class SharingmatrixComFolder(DeadCrypter): - __name__ = "SharingmatrixComFolder" - __type__ = "crypter" - __version__ = "0.01" - - __pattern__ = r'http://(?:www\.)?sharingmatrix\.com/folder/\w+' - - __description__ = """Sharingmatrix.com folder decrypter plugin""" - __license__ = "GPLv3" - __authors__ = [("zoidberg", "zoidberg@mujmail.cz")] diff --git a/pyload/plugins/crypter/SpeedLoadOrg.py b/pyload/plugins/crypter/SpeedLoadOrg.py new file mode 100644 index 000000000..46c9b8552 --- /dev/null +++ b/pyload/plugins/crypter/SpeedLoadOrg.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.DeadCrypter import DeadCrypter + + +class SpeedLoadOrg(DeadCrypter): + __name__ = "SpeedLoadOrg" + __type__ = "crypter" + __version__ = "0.3" + + __pattern__ = r'http://(?:www\.)?speedload\.org/(\d+~f$|folder/\d+/)' + __config__ = [] + + __description__ = """Speedload decrypter plugin""" + __license__ = "GPLv3" + __authors__ = [("stickell", "l.stickell@yahoo.it")] diff --git a/pyload/plugins/crypter/SpeedLoadOrgFolder.py b/pyload/plugins/crypter/SpeedLoadOrgFolder.py deleted file mode 100644 index 5b66b7ea6..000000000 --- a/pyload/plugins/crypter/SpeedLoadOrgFolder.py +++ /dev/null @@ -1,16 +0,0 @@ -# -*- coding: utf-8 -*- - -from pyload.plugins.internal.DeadCrypter import DeadCrypter - - -class SpeedLoadOrgFolder(DeadCrypter): - __name__ = "SpeedLoadOrgFolder" - __type__ = "crypter" - __version__ = "0.3" - - __pattern__ = r'http://(?:www\.)?speedload\.org/(\d+~f$|folder/\d+/)' - __config__ = [] - - __description__ = """Speedload decrypter plugin""" - __license__ = "GPLv3" - __authors__ = [("stickell", "l.stickell@yahoo.it")] diff --git a/pyload/plugins/crypter/TurbobitNet.py b/pyload/plugins/crypter/TurbobitNet.py new file mode 100644 index 000000000..e038b9a34 --- /dev/null +++ b/pyload/plugins/crypter/TurbobitNet.py @@ -0,0 +1,44 @@ +# -*- coding: utf-8 -*- + +import re + +from pyload.plugins.internal.SimpleCrypter import SimpleCrypter +from pyload.utils import json_loads + + +class TurbobitNet(SimpleCrypter): + __name__ = "TurbobitNet" + __type__ = "crypter" + __version__ = "0.05" + + __pattern__ = r'http://(?:www\.)?turbobit\.net/download/folder/(?P\w+)' + __config__ = [("use_subfolder", "bool", "Save package to subfolder", True), + ("subfolder_per_package", "bool", "Create a subfolder for each package", True)] + + __description__ = """Turbobit.net folder decrypter plugin""" + __license__ = "GPLv3" + __authors__ = [("stickell", "l.stickell@yahoo.it"), + ("Walter Purcaro", "vuolter@gmail.com")] + + + NAME_PATTERN = r'src=\'/js/lib/grid/icon/folder.png\'> (?P.+?)' + + + def _getLinks(self, id, page=1): + gridFile = self.load("http://turbobit.net/downloadfolder/gridFile", + get={"rootId": id, "rows": 200, "page": page}, decode=True) + grid = json_loads(gridFile) + + if grid['rows']: + for i in grid['rows']: + yield i['id'] + for id in self._getLinks(id, page + 1): + yield id + else: + return + + + def getLinks(self): + id = re.match(self.__pattern__, self.pyfile.url).group("ID") + fixurl = lambda id: "http://turbobit.net/%s.html" % id + return map(fixurl, self._getLinks(id)) diff --git a/pyload/plugins/crypter/TurbobitNetFolder.py b/pyload/plugins/crypter/TurbobitNetFolder.py deleted file mode 100644 index 096cc92c0..000000000 --- a/pyload/plugins/crypter/TurbobitNetFolder.py +++ /dev/null @@ -1,44 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from pyload.plugins.internal.SimpleCrypter import SimpleCrypter -from pyload.utils import json_loads - - -class TurbobitNetFolder(SimpleCrypter): - __name__ = "TurbobitNetFolder" - __type__ = "crypter" - __version__ = "0.05" - - __pattern__ = r'http://(?:www\.)?turbobit\.net/download/folder/(?P\w+)' - __config__ = [("use_subfolder", "bool", "Save package to subfolder", True), - ("subfolder_per_package", "bool", "Create a subfolder for each package", True)] - - __description__ = """Turbobit.net folder decrypter plugin""" - __license__ = "GPLv3" - __authors__ = [("stickell", "l.stickell@yahoo.it"), - ("Walter Purcaro", "vuolter@gmail.com")] - - - NAME_PATTERN = r'src=\'/js/lib/grid/icon/folder.png\'> (?P.+?)' - - - def _getLinks(self, id, page=1): - gridFile = self.load("http://turbobit.net/downloadfolder/gridFile", - get={"rootId": id, "rows": 200, "page": page}, decode=True) - grid = json_loads(gridFile) - - if grid['rows']: - for i in grid['rows']: - yield i['id'] - for id in self._getLinks(id, page + 1): - yield id - else: - return - - - def getLinks(self): - id = re.match(self.__pattern__, self.pyfile.url).group("ID") - fixurl = lambda id: "http://turbobit.net/%s.html" % id - return map(fixurl, self._getLinks(id)) diff --git a/pyload/plugins/crypter/TusfilesNet.py b/pyload/plugins/crypter/TusfilesNet.py new file mode 100644 index 000000000..d8f0b604a --- /dev/null +++ b/pyload/plugins/crypter/TusfilesNet.py @@ -0,0 +1,45 @@ +# -*- coding: utf-8 -*- + +import math +import re +from urlparse import urljoin + +from pyload.plugins.internal.XFSCrypter import XFSCrypter + + +class TusfilesNet(XFSCrypter): + __name__ = "TusfilesNet" + __type__ = "crypter" + __version__ = "0.06" + + __pattern__ = r'https?://(?:www\.)?tusfiles\.net/go/(?P\w+)' + __config__ = [("use_subfolder", "bool", "Save package to subfolder", True), + ("subfolder_per_package", "bool", "Create a subfolder for each package", True)] + + __description__ = """Tusfiles.net folder decrypter plugin""" + __license__ = "GPLv3" + __authors__ = [("Walter Purcaro", "vuolter@gmail.com"), + ("stickell", "l.stickell@yahoo.it")] + + + HOSTER_DOMAIN = "tusfiles.net" + + PAGES_PATTERN = r'>\((\d+) \w+\)<' + + URL_REPLACEMENTS = [(__pattern__, r'https://www.tusfiles.net/go/\g/')] + + + def loadPage(self, page_n): + return self.load(urljoin(self.pyfile.url, str(page_n)), decode=True) + + + def handleMultiPages(self): + pages = re.search(self.PAGES_PATTERN, self.html) + if pages: + pages = int(math.ceil(int(pages.group('pages')) / 25.0)) + else: + return + + for p in xrange(2, pages + 1): + self.html = self.loadPage(p) + self.links += self.getLinks() diff --git a/pyload/plugins/crypter/TusfilesNetFolder.py b/pyload/plugins/crypter/TusfilesNetFolder.py deleted file mode 100644 index 8ca1ada00..000000000 --- a/pyload/plugins/crypter/TusfilesNetFolder.py +++ /dev/null @@ -1,45 +0,0 @@ -# -*- coding: utf-8 -*- - -import math -import re -from urlparse import urljoin - -from pyload.plugins.internal.XFSCrypter import XFSCrypter - - -class TusfilesNetFolder(XFSCrypter): - __name__ = "TusfilesNetFolder" - __type__ = "crypter" - __version__ = "0.06" - - __pattern__ = r'https?://(?:www\.)?tusfiles\.net/go/(?P\w+)' - __config__ = [("use_subfolder", "bool", "Save package to subfolder", True), - ("subfolder_per_package", "bool", "Create a subfolder for each package", True)] - - __description__ = """Tusfiles.net folder decrypter plugin""" - __license__ = "GPLv3" - __authors__ = [("Walter Purcaro", "vuolter@gmail.com"), - ("stickell", "l.stickell@yahoo.it")] - - - HOSTER_DOMAIN = "tusfiles.net" - - PAGES_PATTERN = r'>\((\d+) \w+\)<' - - URL_REPLACEMENTS = [(__pattern__, r'https://www.tusfiles.net/go/\g/')] - - - def loadPage(self, page_n): - return self.load(urljoin(self.pyfile.url, str(page_n)), decode=True) - - - def handleMultiPages(self): - pages = re.search(self.PAGES_PATTERN, self.html) - if pages: - pages = int(math.ceil(int(pages.group('pages')) / 25.0)) - else: - return - - for p in xrange(2, pages + 1): - self.html = self.loadPage(p) - self.links += self.getLinks() diff --git a/pyload/plugins/crypter/UlozTo.py b/pyload/plugins/crypter/UlozTo.py new file mode 100644 index 000000000..8538736ca --- /dev/null +++ b/pyload/plugins/crypter/UlozTo.py @@ -0,0 +1,46 @@ +# -*- coding: utf-8 -*- + +import re +from pyload.plugins.internal.Crypter import Crypter + + +class UlozTo(Crypter): + __name__ = "UlozTo" + __type__ = "crypter" + __version__ = "0.2" + + __pattern__ = r'http://(?:www\.)?(uloz\.to|ulozto\.(cz|sk|net)|bagruj\.cz|zachowajto\.pl)/(m|soubory)/.*' + __config__ = [("use_subfolder", "bool", "Save package to subfolder", True), + ("subfolder_per_package", "bool", "Create a subfolder for each package", True)] + + __description__ = """Uloz.to folder decrypter plugin""" + __license__ = "GPLv3" + __authors__ = [("zoidberg", "zoidberg@mujmail.cz")] + + + FOLDER_PATTERN = r'
      (.*?)
    ' + LINK_PATTERN = r'
    [^<]+' + NEXT_PAGE_PATTERN = r'' + + + def decrypt(self, pyfile): + html = self.load(pyfile.url) + + new_links = [] + for i in xrange(1, 100): + self.logInfo(_("Fetching links from page %i") % i) + m = re.search(self.FOLDER_PATTERN, html, re.S) + if m is None: + self.error(_("FOLDER_PATTERN not found")) + + new_links.extend(re.findall(self.LINK_PATTERN, m.group(1))) + m = re.search(self.NEXT_PAGE_PATTERN, html) + if m: + html = self.load("http://ulozto.net/" + m.group(1)) + else: + break + else: + self.logInfo(_("Limit of 99 pages reached, aborting")) + + if new_links: + self.urls = [map(lambda s: "http://ulozto.net/%s" % s, new_links)] diff --git a/pyload/plugins/crypter/UlozToFolder.py b/pyload/plugins/crypter/UlozToFolder.py deleted file mode 100644 index fe64d41bb..000000000 --- a/pyload/plugins/crypter/UlozToFolder.py +++ /dev/null @@ -1,46 +0,0 @@ -# -*- coding: utf-8 -*- - -import re -from pyload.plugins.internal.Crypter import Crypter - - -class UlozToFolder(Crypter): - __name__ = "UlozToFolder" - __type__ = "crypter" - __version__ = "0.2" - - __pattern__ = r'http://(?:www\.)?(uloz\.to|ulozto\.(cz|sk|net)|bagruj\.cz|zachowajto\.pl)/(m|soubory)/.*' - __config__ = [("use_subfolder", "bool", "Save package to subfolder", True), - ("subfolder_per_package", "bool", "Create a subfolder for each package", True)] - - __description__ = """Uloz.to folder decrypter plugin""" - __license__ = "GPLv3" - __authors__ = [("zoidberg", "zoidberg@mujmail.cz")] - - - FOLDER_PATTERN = r'
      (.*?)
    ' - LINK_PATTERN = r'
    [^<]+' - NEXT_PAGE_PATTERN = r'' - - - def decrypt(self, pyfile): - html = self.load(pyfile.url) - - new_links = [] - for i in xrange(1, 100): - self.logInfo(_("Fetching links from page %i") % i) - m = re.search(self.FOLDER_PATTERN, html, re.S) - if m is None: - self.error(_("FOLDER_PATTERN not found")) - - new_links.extend(re.findall(self.LINK_PATTERN, m.group(1))) - m = re.search(self.NEXT_PAGE_PATTERN, html) - if m: - html = self.load("http://ulozto.net/" + m.group(1)) - else: - break - else: - self.logInfo(_("Limit of 99 pages reached, aborting")) - - if new_links: - self.urls = [map(lambda s: "http://ulozto.net/%s" % s, new_links)] diff --git a/pyload/plugins/crypter/UploadableCh.py b/pyload/plugins/crypter/UploadableCh.py new file mode 100644 index 000000000..4edc08846 --- /dev/null +++ b/pyload/plugins/crypter/UploadableCh.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.SimpleCrypter import SimpleCrypter + + +class UploadableCh(SimpleCrypter): + __name__ = "UploadableCh" + __type__ = "crypter" + __version__ = "0.03" + + __pattern__ = r'http://(?:www\.)?uploadable\.ch/list/\w+' + __config__ = [("use_subfolder", "bool", "Save package to subfolder", True), + ("subfolder_per_package", "bool", "Create a subfolder for each package", True)] + + __description__ = """Uploadable.ch folder decrypter plugin""" + __license__ = "GPLv3" + __authors__ = [("guidobelix", "guidobelix@hotmail.it"), + ("Walter Purcaro", "vuolter@gmail.com")] + + + LINK_PATTERN = r'"(.+?)" class="icon_zipfile">' + NAME_PATTERN = r'
     (?P.+?)
    ' + OFFLINE_PATTERN = r'We are sorry... The URL you entered cannot be found on the server.' + TEMP_OFFLINE_PATTERN = r'
    ' diff --git a/pyload/plugins/crypter/UploadableChFolder.py b/pyload/plugins/crypter/UploadableChFolder.py deleted file mode 100644 index 8fff41c16..000000000 --- a/pyload/plugins/crypter/UploadableChFolder.py +++ /dev/null @@ -1,24 +0,0 @@ -# -*- coding: utf-8 -*- - -from pyload.plugins.internal.SimpleCrypter import SimpleCrypter - - -class UploadableChFolder(SimpleCrypter): - __name__ = "UploadableChFolder" - __type__ = "crypter" - __version__ = "0.03" - - __pattern__ = r'http://(?:www\.)?uploadable\.ch/list/\w+' - __config__ = [("use_subfolder", "bool", "Save package to subfolder", True), - ("subfolder_per_package", "bool", "Create a subfolder for each package", True)] - - __description__ = """Uploadable.ch folder decrypter plugin""" - __license__ = "GPLv3" - __authors__ = [("guidobelix", "guidobelix@hotmail.it"), - ("Walter Purcaro", "vuolter@gmail.com")] - - - LINK_PATTERN = r'"(.+?)" class="icon_zipfile">' - NAME_PATTERN = r'
     (?P.+?)
    ' - OFFLINE_PATTERN = r'We are sorry... The URL you entered cannot be found on the server.' - TEMP_OFFLINE_PATTERN = r'
    ' diff --git a/pyload/plugins/crypter/UploadedTo.py b/pyload/plugins/crypter/UploadedTo.py new file mode 100644 index 000000000..1fbed5f86 --- /dev/null +++ b/pyload/plugins/crypter/UploadedTo.py @@ -0,0 +1,34 @@ +# -*- coding: utf-8 -*- + +import re + +from urlparse import urljoin + +from pyload.plugins.internal.SimpleCrypter import SimpleCrypter + + +class UploadedTo(SimpleCrypter): + __name__ = "UploadedTo" + __type__ = "crypter" + __version__ = "0.42" + + __pattern__ = r'http://(?:www\.)?(uploaded|ul)\.(to|net)/(f|folder|list)/(?P\w+)' + __config__ = [("use_subfolder", "bool", "Save package to subfolder", True), + ("subfolder_per_package", "bool", "Create a subfolder for each package", True)] + + __description__ = """UploadedTo decrypter plugin""" + __license__ = "GPLv3" + __authors__ = [("stickell", "l.stickell@yahoo.it")] + + + PLAIN_PATTERN = r'(?P.+?)<' + + + def getLinks(self): + m = re.search(self.PLAIN_PATTERN, self.html) + if m is None: + self.error(_("PLAIN_PATTERN not found")) + + plain_link = urljoin("http://uploaded.net/", m.group('plain')) + return self.load(plain_link).split('\n')[:-1] diff --git a/pyload/plugins/crypter/UploadedToFolder.py b/pyload/plugins/crypter/UploadedToFolder.py deleted file mode 100644 index da1354f02..000000000 --- a/pyload/plugins/crypter/UploadedToFolder.py +++ /dev/null @@ -1,34 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from urlparse import urljoin - -from pyload.plugins.internal.SimpleCrypter import SimpleCrypter - - -class UploadedToFolder(SimpleCrypter): - __name__ = "UploadedToFolder" - __type__ = "crypter" - __version__ = "0.42" - - __pattern__ = r'http://(?:www\.)?(uploaded|ul)\.(to|net)/(f|folder|list)/(?P\w+)' - __config__ = [("use_subfolder", "bool", "Save package to subfolder", True), - ("subfolder_per_package", "bool", "Create a subfolder for each package", True)] - - __description__ = """UploadedTo decrypter plugin""" - __license__ = "GPLv3" - __authors__ = [("stickell", "l.stickell@yahoo.it")] - - - PLAIN_PATTERN = r'(?P.+?)<' - - - def getLinks(self): - m = re.search(self.PLAIN_PATTERN, self.html) - if m is None: - self.error(_("PLAIN_PATTERN not found")) - - plain_link = urljoin("http://uploaded.net/", m.group('plain')) - return self.load(plain_link).split('\n')[:-1] diff --git a/pyload/plugins/crypter/WuploadCom.py b/pyload/plugins/crypter/WuploadCom.py new file mode 100644 index 000000000..dd1c4a168 --- /dev/null +++ b/pyload/plugins/crypter/WuploadCom.py @@ -0,0 +1,15 @@ +# -*- coding: utf-8 -*- + +from pyload.plugins.internal.DeadCrypter import DeadCrypter + + +class WuploadCom(DeadCrypter): + __name__ = "WuploadCom" + __type__ = "crypter" + __version__ = "0.01" + + __pattern__ = r'http://(?:www\.)?wupload\.com/folder/\w+' + + __description__ = """Wupload.com folder decrypter plugin""" + __license__ = "GPLv3" + __authors__ = [("zoidberg", "zoidberg@mujmail.cz")] diff --git a/pyload/plugins/crypter/WuploadComFolder.py b/pyload/plugins/crypter/WuploadComFolder.py deleted file mode 100644 index 2626a0d13..000000000 --- a/pyload/plugins/crypter/WuploadComFolder.py +++ /dev/null @@ -1,15 +0,0 @@ -# -*- coding: utf-8 -*- - -from pyload.plugins.internal.DeadCrypter import DeadCrypter - - -class WuploadComFolder(DeadCrypter): - __name__ = "WuploadComFolder" - __type__ = "crypter" - __version__ = "0.01" - - __pattern__ = r'http://(?:www\.)?wupload\.com/folder/\w+' - - __description__ = """Wupload.com folder decrypter plugin""" - __license__ = "GPLv3" - __authors__ = [("zoidberg", "zoidberg@mujmail.cz")] diff --git a/pyload/plugins/crypter/XFileSharingPro.py b/pyload/plugins/crypter/XFileSharingPro.py new file mode 100644 index 000000000..27de7f997 --- /dev/null +++ b/pyload/plugins/crypter/XFileSharingPro.py @@ -0,0 +1,47 @@ +# -*- coding: utf-8 -*- + +import re + +from pyload.plugins.internal.XFSCrypter import XFSCrypter + + +class XFileSharingPro(XFSCrypter): + __name__ = "XFileSharingPro" + __type__ = "crypter" + __version__ = "0.03" + + __pattern__ = r'^unmatchable$' + __config__ = [("use_subfolder", "bool", "Save package to subfolder", True), + ("subfolder_per_package", "bool", "Create a subfolder for each package", True)] + + __description__ = """XFileSharingPro dummy folder decrypter plugin for hook""" + __license__ = "GPLv3" + __authors__ = [("Walter Purcaro", "vuolter@gmail.com")] + + + def _log(self, type, args): + msg = " | ".join([str(a).strip() for a in args if a]) + logger = getattr(self.log, type) + logger("%s: %s: %s" % (self.__name__, self.HOSTER_NAME, msg or _("%s MARK" % type.upper()))) + + + def init(self): + super(XFileSharingPro, self).init() + + self.__pattern__ = self.core.pluginManager.crypterPlugins[self.__name__]['pattern'] + + self.HOSTER_DOMAIN = re.match(self.__pattern__, self.pyfile.url).group(1).lower() + self.HOSTER_NAME = "".join([str.capitalize() for str in self.HOSTER_DOMAIN.split('.')]) + + account = self.core.accountManager.getAccountPlugin(self.HOSTER_NAME) + + if account and account.canUse(): + self.account = account + elif self.account: + self.account.HOSTER_DOMAIN = self.HOSTER_DOMAIN + else: + return + + self.user, data = self.account.selectAccount() + self.req = self.account.getAccountRequest(self.user) + self.premium = self.account.isPremium(self.user) diff --git a/pyload/plugins/crypter/XFileSharingProFolder.py b/pyload/plugins/crypter/XFileSharingProFolder.py deleted file mode 100644 index 89fac31ac..000000000 --- a/pyload/plugins/crypter/XFileSharingProFolder.py +++ /dev/null @@ -1,47 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from pyload.plugins.internal.XFSCrypter import XFSCrypter - - -class XFileSharingProFolder(XFSCrypter): - __name__ = "XFileSharingProFolder" - __type__ = "crypter" - __version__ = "0.03" - - __pattern__ = r'^unmatchable$' - __config__ = [("use_subfolder", "bool", "Save package to subfolder", True), - ("subfolder_per_package", "bool", "Create a subfolder for each package", True)] - - __description__ = """XFileSharingPro dummy folder decrypter plugin for hook""" - __license__ = "GPLv3" - __authors__ = [("Walter Purcaro", "vuolter@gmail.com")] - - - def _log(self, type, args): - msg = " | ".join([str(a).strip() for a in args if a]) - logger = getattr(self.log, type) - logger("%s: %s: %s" % (self.__name__, self.HOSTER_NAME, msg or _("%s MARK" % type.upper()))) - - - def init(self): - super(XFileSharingProFolder, self).init() - - self.__pattern__ = self.core.pluginManager.crypterPlugins[self.__name__]['pattern'] - - self.HOSTER_DOMAIN = re.match(self.__pattern__, self.pyfile.url).group(1).lower() - self.HOSTER_NAME = "".join([str.capitalize() for str in self.HOSTER_DOMAIN.split('.')]) - - account = self.core.accountManager.getAccountPlugin(self.HOSTER_NAME) - - if account and account.canUse(): - self.account = account - elif self.account: - self.account.HOSTER_DOMAIN = self.HOSTER_DOMAIN - else: - return - - self.user, data = self.account.selectAccount() - self.req = self.account.getAccountRequest(self.user) - self.premium = self.account.isPremium(self.user) diff --git a/pyload/plugins/hook/BypassCaptcha.py b/pyload/plugins/hook/BypassCaptcha.py index 1a640ef87..c8842b1bf 100644 --- a/pyload/plugins/hook/BypassCaptcha.py +++ b/pyload/plugins/hook/BypassCaptcha.py @@ -48,10 +48,6 @@ class BypassCaptcha(Hook): GETCREDITS_URL = "http://bypasscaptcha.com/ex_left.php" - def setup(self): - self.info = {} #@TODO: Remove in 0.4.10 - - def getCredits(self): res = getURL(self.GETCREDITS_URL, post={"key": self.getConfig("passkey")}) diff --git a/pyload/plugins/hook/Captcha9kw.py b/pyload/plugins/hook/Captcha9kw.py index ab5b802b0..d99ceeec3 100644 --- a/pyload/plugins/hook/Captcha9kw.py +++ b/pyload/plugins/hook/Captcha9kw.py @@ -40,8 +40,7 @@ class Captcha9kw(Hook): API_URL = "http://www.9kw.eu/index.cgi" - def setup(self): - self.info = {} #@TODO: Remove in 0.4.10 + def coreReady(self): if self.getConfig("ssl"): self.API_URL = self.API_URL.replace("http://", "https://") diff --git a/pyload/plugins/hook/CaptchaBrotherhood.py b/pyload/plugins/hook/CaptchaBrotherhood.py index 1b7e18c51..208462c14 100644 --- a/pyload/plugins/hook/CaptchaBrotherhood.py +++ b/pyload/plugins/hook/CaptchaBrotherhood.py @@ -54,10 +54,6 @@ class CaptchaBrotherhood(Hook): API_URL = "http://www.captchabrotherhood.com/" - def setup(self): - self.info = {} #@TODO: Remove in 0.4.10 - - def getCredits(self): res = getURL(self.API_URL + "askCredits.aspx", get={"username": self.getConfig("username"), "password": self.getConfig("passkey")}) diff --git a/pyload/plugins/hook/DeathByCaptcha.py b/pyload/plugins/hook/DeathByCaptcha.py index d032c964f..e4477565c 100644 --- a/pyload/plugins/hook/DeathByCaptcha.py +++ b/pyload/plugins/hook/DeathByCaptcha.py @@ -67,10 +67,6 @@ class DeathByCaptcha(Hook): API_URL = "http://api.dbcapi.me/api/" - def setup(self): - self.info = {} #@TODO: Remove in 0.4.10 - - def call_api(self, api="captcha", post=False, multipart=False): req = getRequest() req.c.setopt(HTTPHEADER, ["Accept: application/json", "User-Agent: pyLoad %s" % self.core.version]) diff --git a/pyload/plugins/hook/ExpertDecoders.py b/pyload/plugins/hook/ExpertDecoders.py index ed889319a..f57ef55bb 100644 --- a/pyload/plugins/hook/ExpertDecoders.py +++ b/pyload/plugins/hook/ExpertDecoders.py @@ -29,10 +29,6 @@ class ExpertDecoders(Hook): API_URL = "http://www.fasttypers.org/imagepost.ashx" - def setup(self): - self.info = {} #@TODO: Remove in 0.4.10 - - def getCredits(self): res = getURL(self.API_URL, post={"key": self.getConfig("passkey"), "action": "balance"}) diff --git a/pyload/plugins/hook/ImageTyperz.py b/pyload/plugins/hook/ImageTyperz.py index ce6527fad..1c99d48c1 100644 --- a/pyload/plugins/hook/ImageTyperz.py +++ b/pyload/plugins/hook/ImageTyperz.py @@ -50,10 +50,6 @@ class ImageTyperz(Hook): GETCREDITS_URL = "http://captchatypers.com/Forms/RequestBalance.ashx" - def setup(self): - self.info = {} #@TODO: Remove in 0.4.10 - - def getCredits(self): res = getURL(self.GETCREDITS_URL, post={'action': "REQUESTBALANCE", diff --git a/pyload/plugins/hook/XFileSharingPro.py b/pyload/plugins/hook/XFileSharingPro.py index 53033d8a4..520e30964 100644 --- a/pyload/plugins/hook/XFileSharingPro.py +++ b/pyload/plugins/hook/XFileSharingPro.py @@ -51,8 +51,7 @@ class XFileSharingPro(Hook): def loadPattern(self): use_builtin_list = self.getConfig('use_builtin_list') - for type, plugin in (("hoster", "XFileSharingPro"), - ("crypter", "XFileSharingProFolder")): + for type in ("hoster", "crypter"): every_plugin = not self.getConfig("use_%s_list" % type) if every_plugin: @@ -69,7 +68,7 @@ class XFileSharingPro(Hook): if not plugin_list: self.logInfo(_("No %s to handle") % type) - self._unload(type, plugin) + self._unload(type) return match_list = '|'.join(sorted(plugin_list)) @@ -79,20 +78,19 @@ class XFileSharingPro(Hook): pattern = self.regexp[type][1] % match_list.replace('.', '\.') - dict = self.core.pluginManager.plugins[type][plugin] + dict = self.core.pluginManager.plugins[type]["XFileSharingPro"] dict['pattern'] = pattern dict['re'] = re.compile(pattern) self.logDebug("Loaded %s pattern: %s" % (type, pattern)) - def _unload(self, type, plugin): - dict = self.core.pluginManager.plugins[type][plugin] + def _unload(self, type): + dict = self.core.pluginManager.plugins[type]["XFileSharingPro"] dict['pattern'] = r'^unmatchable$' dict['re'] = re.compile(dict['pattern']) def unload(self): - for type, plugin in (("hoster", "XFileSharingPro"), - ("crypter", "XFileSharingProFolder")): - self._unload(type, plugin) + for type in ("hoster", "crypter"): + self._unload(type, "XFileSharingPro") diff --git a/pyload/plugins/hoster/BasePlugin.py b/pyload/plugins/hoster/BasePlugin.py deleted file mode 100644 index dd8540578..000000000 --- a/pyload/plugins/hoster/BasePlugin.py +++ /dev/null @@ -1,108 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -from urllib import unquote -from urlparse import urlparse - -from pyload.network.HTTPRequest import BadHeader -from pyload.plugins.internal.Hoster import Hoster -from pyload.utils import html_unescape, remove_chars - - -class BasePlugin(Hoster): - __name__ = "BasePlugin" - __type__ = "hoster" - __version__ = "0.20" - - __pattern__ = r'^unmatchable$' - - __description__ = """Base Plugin when any other didnt fit""" - __license__ = "GPLv3" - __authors__ = [("RaNaN", "RaNaN@pyload.org")] - - - def setup(self): - self.chunkLimit = -1 - self.resumeDownload = True - - - def process(self, pyfile): - """main function""" - - #: debug part, for api exerciser - if pyfile.url.startswith("DEBUG_API"): - self.multiDL = False - return - - if pyfile.url.startswith("http"): - - try: - self.downloadFile(pyfile) - except BadHeader, e: - if e.code in (401, 403): - self.logDebug("Auth required") - - account = self.core.accountManager.getAccountPlugin('Http') - servers = [x['login'] for x in account.getAllAccounts()] - server = urlparse(pyfile.url).netloc - - if server in servers: - self.logDebug("Logging on to %s" % server) - self.req.addAuth(account.accounts[server]['password']) - else: - for pwd in pyfile.package().password.splitlines(): - if ":" in pwd: - self.req.addAuth(pwd.strip()) - break - else: - self.fail(_("Authorization required (username:password)")) - - self.downloadFile(pyfile) - else: - raise - - else: - self.fail(_("No Plugin matched and not a downloadable url")) - - - def downloadFile(self, pyfile): - url = pyfile.url - - for _i in xrange(5): - header = self.load(url, just_header=True) - - # self.load does not raise a BadHeader on 404 responses, do it here - if 'code' in header and header['code'] == 404: - raise BadHeader(404) - - if 'location' in header: - self.logDebug("Location: " + header['location']) - base = re.match(r'https?://[^/]+', url).group(0) - if header['location'].startswith("http"): - url = header['location'] - elif header['location'].startswith("/"): - url = base + unquote(header['location']) - else: - url = '%s/%s' % (base, unquote(header['location'])) - else: - break - - name = html_unescape(unquote(urlparse(url).path.split("/")[-1])) - - if 'content-disposition' in header: - self.logDebug("Content-Disposition: " + header['content-disposition']) - m = re.search("filename(?P=|\*=(?P.+)'')(?P.*)", header['content-disposition']) - if m: - disp = m.groupdict() - self.logDebug(disp) - if not disp['enc']: - disp['enc'] = 'utf-8' - name = remove_chars(disp['name'], "\"';").strip() - name = unicode(unquote(name), disp['enc']) - - if not name: - name = url - pyfile.name = name - self.logDebug("Filename: %s" % pyfile.name) - self.download(url, disposition=True) diff --git a/pyload/plugins/hoster/GigapetaCom.py b/pyload/plugins/hoster/GigapetaCom.py index 74d2b3e49..7a0eef3c9 100644 --- a/pyload/plugins/hoster/GigapetaCom.py +++ b/pyload/plugins/hoster/GigapetaCom.py @@ -44,7 +44,7 @@ class GigapetaCom(SimpleHoster): m = re.search(r'Location\s*:\s*(.+)', self.req.http.header, re.I) if m: - download_url = m.group(1).rstrip() #@TODO: Remove .rstrip() in 0.4.10 + download_url = m.group(1) break elif "Entered figures don`t coincide with the picture" in self.html: self.invalidCaptcha() diff --git a/pyload/plugins/hoster/QuickshareCz.py b/pyload/plugins/hoster/QuickshareCz.py index 5203f90c7..5123e5aa5 100644 --- a/pyload/plugins/hoster/QuickshareCz.py +++ b/pyload/plugins/hoster/QuickshareCz.py @@ -68,7 +68,7 @@ class QuickshareCz(SimpleHoster): m = re.search(r'Location\s*:\s*(.+)', self.header, re.I) if m is None: self.fail(_("File not found")) - download_url = m.group(1).rstrip() #@TODO: Remove .rstrip() in 0.4.10 + download_url = m.group(1) self.logDebug("FREE URL2:" + download_url) # check errors diff --git a/pyload/plugins/internal/BasePlugin.py b/pyload/plugins/internal/BasePlugin.py new file mode 100644 index 000000000..dd8540578 --- /dev/null +++ b/pyload/plugins/internal/BasePlugin.py @@ -0,0 +1,108 @@ +# -*- coding: utf-8 -*- + +import re + +from urllib import unquote +from urlparse import urlparse + +from pyload.network.HTTPRequest import BadHeader +from pyload.plugins.internal.Hoster import Hoster +from pyload.utils import html_unescape, remove_chars + + +class BasePlugin(Hoster): + __name__ = "BasePlugin" + __type__ = "hoster" + __version__ = "0.20" + + __pattern__ = r'^unmatchable$' + + __description__ = """Base Plugin when any other didnt fit""" + __license__ = "GPLv3" + __authors__ = [("RaNaN", "RaNaN@pyload.org")] + + + def setup(self): + self.chunkLimit = -1 + self.resumeDownload = True + + + def process(self, pyfile): + """main function""" + + #: debug part, for api exerciser + if pyfile.url.startswith("DEBUG_API"): + self.multiDL = False + return + + if pyfile.url.startswith("http"): + + try: + self.downloadFile(pyfile) + except BadHeader, e: + if e.code in (401, 403): + self.logDebug("Auth required") + + account = self.core.accountManager.getAccountPlugin('Http') + servers = [x['login'] for x in account.getAllAccounts()] + server = urlparse(pyfile.url).netloc + + if server in servers: + self.logDebug("Logging on to %s" % server) + self.req.addAuth(account.accounts[server]['password']) + else: + for pwd in pyfile.package().password.splitlines(): + if ":" in pwd: + self.req.addAuth(pwd.strip()) + break + else: + self.fail(_("Authorization required (username:password)")) + + self.downloadFile(pyfile) + else: + raise + + else: + self.fail(_("No Plugin matched and not a downloadable url")) + + + def downloadFile(self, pyfile): + url = pyfile.url + + for _i in xrange(5): + header = self.load(url, just_header=True) + + # self.load does not raise a BadHeader on 404 responses, do it here + if 'code' in header and header['code'] == 404: + raise BadHeader(404) + + if 'location' in header: + self.logDebug("Location: " + header['location']) + base = re.match(r'https?://[^/]+', url).group(0) + if header['location'].startswith("http"): + url = header['location'] + elif header['location'].startswith("/"): + url = base + unquote(header['location']) + else: + url = '%s/%s' % (base, unquote(header['location'])) + else: + break + + name = html_unescape(unquote(urlparse(url).path.split("/")[-1])) + + if 'content-disposition' in header: + self.logDebug("Content-Disposition: " + header['content-disposition']) + m = re.search("filename(?P=|\*=(?P.+)'')(?P.*)", header['content-disposition']) + if m: + disp = m.groupdict() + self.logDebug(disp) + if not disp['enc']: + disp['enc'] = 'utf-8' + name = remove_chars(disp['name'], "\"';").strip() + name = unicode(unquote(name), disp['enc']) + + if not name: + name = url + pyfile.name = name + self.logDebug("Filename: %s" % pyfile.name) + self.download(url, disposition=True) diff --git a/pyload/plugins/internal/Captcha.py b/pyload/plugins/internal/Captcha.py index b2fd980e2..7197c390e 100644 --- a/pyload/plugins/internal/Captcha.py +++ b/pyload/plugins/internal/Captcha.py @@ -30,7 +30,7 @@ class Captcha(Plugin): html = self.plugin.html else: errmsg = _("%s html not found") % self.__name__ - self.plugin.fail(errmsg) #@TODO: replace all plugin.fail(errmsg) with plugin.error(errmsg) in 0.4.10 + self.plugin.error(errmsg) raise TypeError(errmsg) m = re.search(self.KEY_PATTERN, html) diff --git a/pyload/plugins/internal/DeadCrypter.py b/pyload/plugins/internal/DeadCrypter.py index ad99c6a13..bf150f3d5 100644 --- a/pyload/plugins/internal/DeadCrypter.py +++ b/pyload/plugins/internal/DeadCrypter.py @@ -16,5 +16,4 @@ class DeadCrypter(_Crypter): def setup(self): - self.pyfile.error = "Crypter is no longer available" - self.offline() #@TODO: self.offline("Crypter is no longer available") + self.offline("Crypter is no longer available") diff --git a/pyload/plugins/internal/DeadHoster.py b/pyload/plugins/internal/DeadHoster.py index 3c59f1489..036ed3cb6 100644 --- a/pyload/plugins/internal/DeadHoster.py +++ b/pyload/plugins/internal/DeadHoster.py @@ -24,5 +24,4 @@ class DeadHoster(_Hoster): def setup(self): - self.pyfile.error = "Hoster is no longer available" - self.offline() #@TODO: self.offline("Hoster is no longer available") + self.offline("Hoster is no longer available") diff --git a/pyload/plugins/internal/SimpleCrypter.py b/pyload/plugins/internal/SimpleCrypter.py index 251acd6b8..460084919 100644 --- a/pyload/plugins/internal/SimpleCrypter.py +++ b/pyload/plugins/internal/SimpleCrypter.py @@ -69,21 +69,6 @@ class SimpleCrypter(Crypter): LOGIN_PREMIUM = False - #@TODO: remove in 0.4.10 - def init(self): - self.info = {} - - account_name = (self.__name__ + ".py").replace("Folder.py", "").replace(".py", "") - account = self.core.accountManager.getAccountPlugin(account_name) - - if account and account.canUse(): - self.user, data = account.selectAccount() - self.req = account.getAccountRequest(self.user) - self.premium = account.isPremium(self.user) - - self.account = account - - def prepare(self): if self.LOGIN_ACCOUNT and not self.account: self.fail(_("Required account not found")) @@ -162,10 +147,5 @@ class SimpleCrypter(Crypter): self.links += self.getLinks() - #@TODO: Remove in 0.4.10 - def wait(self, seconds=0, reconnect=None): - return _wait(self, seconds, reconnect) - - def error(self, reason="", type="parse"): - return _error(self, reason, type) + return super(SimpleCrypter, self).error(self, reason, type) diff --git a/pyload/plugins/internal/SimpleHoster.py b/pyload/plugins/internal/SimpleHoster.py index ee8ef712b..afd61d821 100644 --- a/pyload/plugins/internal/SimpleHoster.py +++ b/pyload/plugins/internal/SimpleHoster.py @@ -14,25 +14,6 @@ from pyload.plugins.Plugin import Fail from pyload.utils import fixup, html_unescape, parseFileSize -#@TODO: Remove in 0.4.10 and redirect to self.error instead -def _error(self, reason, type): - if not reason and not type: - type = "unknown" - - msg = _("%s error") % type.strip().capitalize() if type else _("Error") - msg += ": " + reason.strip() if reason else "" - msg += _(" | Plugin may be out of date") - - raise Fail(msg) - - -#@TODO: Remove in 0.4.10 -def _wait(self, seconds, reconnect): - if seconds: - self.setWait(seconds, reconnect) - super(SimpleHoster, self).wait() - - def replace_patterns(string, ruleslist): for r in ruleslist: rf, rt = r @@ -108,9 +89,6 @@ def parseFileInfo(self, url="", html=""): if hasattr(self, "OFFLINE_PATTERN") and re.search(self.OFFLINE_PATTERN, html): info['status'] = 1 - elif hasattr(self, "FILE_OFFLINE_PATTERN") and re.search(self.FILE_OFFLINE_PATTERN, html): #@TODO: Remove in 0.4.10 - info['status'] = 1 - elif hasattr(self, "TEMP_OFFLINE_PATTERN") and re.search(self.TEMP_OFFLINE_PATTERN, html): info['status'] = 6 @@ -121,8 +99,7 @@ def parseFileInfo(self, url="", html=""): except: pass - for pattern in ("INFO_PATTERN", "NAME_PATTERN", "SIZE_PATTERN", - "FILE_INFO_PATTERN", "FILE_NAME_PATTERN", "FILE_SIZE_PATTERN"): #@TODO: Remove in 0.4.10 + for pattern in ("INFO_PATTERN", "NAME_PATTERN", "SIZE_PATTERN"): try: info.update(re.search(getattr(self, pattern), html).groupdict()) online = True @@ -134,12 +111,10 @@ def parseFileInfo(self, url="", html=""): info['status'] = 2 if 'N' in info: - info['name'] = replace_patterns(info['N'].strip(), - self.FILE_NAME_REPLACEMENTS if hasattr(self, "FILE_NAME_REPLACEMENTS") else self.NAME_REPLACEMENTS) #@TODO: Remove FILE_NAME_REPLACEMENTS check in 0.4.10 + info['name'] = replace_patterns(info['N'].strip(), self.NAME_REPLACEMENTS) if 'S' in info: - size = replace_patterns(info['S'] + info['U'] if 'U' in info else info['S'], - self.FILE_SIZE_REPLACEMENTS if hasattr(self, "FILE_SIZE_REPLACEMENTS") else self.SIZE_REPLACEMENTS) #@TODO: Remove FILE_SIZE_REPLACEMENTS check in 0.4.10 + size = replace_patterns(info['S'] + info['U'] if 'U' in info else info['S'], self.SIZE_REPLACEMENTS) info['size'] = parseFileSize(size) elif isinstance(info['size'], basestring): @@ -178,9 +153,6 @@ def create_getInfo(plugin): if hasattr(plugin, "URL_REPLACEMENTS"): url = replace_patterns(url, plugin.URL_REPLACEMENTS) - elif hasattr(plugin, "FILE_URL_REPLACEMENTS"): #@TODO: Remove in 0.4.10 - url = replace_patterns(url, plugin.FILE_URL_REPLACEMENTS) - if hasattr(plugin, "TEXT_ENCODING"): html = getURL(url, cookies=bool(cj), decode=not plugin.TEXT_ENCODING) if isinstance(plugin.TEXT_ENCODING, basestring): @@ -264,8 +236,7 @@ class SimpleHoster(Hoster): self.req.setOption("timeout", 120) - self.pyfile.url = replace_patterns(self.pyfile.url, - self.FILE_URL_REPLACEMENTS if hasattr(self, "FILE_URL_REPLACEMENTS") else self.URL_REPLACEMENTS) #@TODO: Remove FILE_URL_REPLACEMENTS check in 0.4.10 + self.pyfile.url = replace_patterns(self.pyfile.url, self.URL_REPLACEMENTS) if self.premium: self.logDebug(_("Looking for direct download link...")) @@ -315,7 +286,7 @@ class SimpleHoster(Hoster): if parseFileInfo(self, url, html)[2] is not 2: try: - return re.search(r'Location\s*:\s*(.+)', self.req.http.header, re.I).group(1).rstrip() #@TODO: Remove .rstrip() in 0.4.10 + return re.search(r'Location\s*:\s*(.+)', self.req.http.header, re.I).group(1) except: pass @@ -410,10 +381,5 @@ class SimpleHoster(Hoster): return size <= traffic - #@TODO: Remove in 0.4.10 - def wait(self, seconds=0, reconnect=None): - return _wait(self, seconds, reconnect) - - def error(self, reason="", type="parse"): - return _error(self, reason, type) + return super(SimpleHoster, self).error(self, reason, type) diff --git a/pyload/plugins/internal/UpdateManager.py b/pyload/plugins/internal/UpdateManager.py index 651cdde80..4a7fa736a 100644 --- a/pyload/plugins/internal/UpdateManager.py +++ b/pyload/plugins/internal/UpdateManager.py @@ -187,7 +187,7 @@ class UpdateManager(Addon): for plugin in upgradable: filename = plugin['name'] - prefix = plugin['type'] + type = plugin['type'] version = plugin['version'] if filename.endswith(".pyc"): @@ -195,12 +195,6 @@ class UpdateManager(Addon): else: name = filename.replace(".py", "") - #@TODO: obsolete after 0.4.10 - if prefix.endswith("s"): - type = prefix[:-1] - else: - type = prefix - plugins = getattr(self.core.pluginManager, "%sPlugins" % type) oldver = float(plugins[name]['v']) if name in plugins else None diff --git a/pyload/plugins/internal/XFSAccount.py b/pyload/plugins/internal/XFSAccount.py index 0992a8c31..df28191f1 100644 --- a/pyload/plugins/internal/XFSAccount.py +++ b/pyload/plugins/internal/XFSAccount.py @@ -35,11 +35,6 @@ class XFSAccount(Account): LOGIN_FAIL_PATTERN = r'>(Incorrect Login or Password|Error<)' - def __init__(self, manager, accounts): #@TODO: remove in 0.4.10 - self.init() - return super(XFSAccount, self).__init__(manager, accounts) - - def init(self): # if not self.HOSTER_DOMAIN: # self.fail(_("Missing HOSTER_DOMAIN")) diff --git a/pyload/plugins/internal/XFSHoster.py b/pyload/plugins/internal/XFSHoster.py index 80ddda002..87ddfab3f 100644 --- a/pyload/plugins/internal/XFSHoster.py +++ b/pyload/plugins/internal/XFSHoster.py @@ -143,7 +143,7 @@ class XFSHoster(SimpleHoster): self.errmsg = None - return m.group(1).strip() #@TODO: Remove .strip() in 0.4.10 + return m.group(1) def handleOverriden(self): @@ -195,7 +195,7 @@ class XFSHoster(SimpleHoster): if m is None: self.error(_("OVR_LINK_PATTERN not found")) - header = self.load(m.group(1).strip(), just_header=True, decode=True) #@TODO: Remove .strip() in 0.4.10 + header = self.load(m.group(1), just_header=True, decode=True) if 'location' in header: #: Direct download link self.download(header['location'], ref=True, cookies=True, disposition=True) else: -- cgit v1.2.3