summaryrefslogtreecommitdiffstats
path: root/module/plugins/hooks
diff options
context:
space:
mode:
authorGravatar Walter Purcaro <vuolter@gmail.com> 2015-02-16 18:11:19 +0100
committerGravatar Walter Purcaro <vuolter@gmail.com> 2015-02-16 18:11:19 +0100
commit00e547899c7fcfd8bcfc61cd1cc5d0a8aec8cee5 (patch)
tree874064edf3723afbd30c54e14b489085e23f1ad7 /module/plugins/hooks
parentmodule temp (diff)
parent[ZippyshareCom] Update get_checksum (diff)
downloadpyload-00e547899c7fcfd8bcfc61cd1cc5d0a8aec8cee5.tar.xz
Merge branch 'stable' into 0.4.10
Conflicts: module/plugins/OCR.py module/plugins/accounts/BayfilesCom.py module/plugins/accounts/CatShareNet.py module/plugins/accounts/DebridItaliaCom.py module/plugins/accounts/FourSharedCom.py module/plugins/accounts/FshareVn.py module/plugins/accounts/Keep2ShareCc.py module/plugins/accounts/LomafileCom.py module/plugins/accounts/RapiduNet.py module/plugins/accounts/RyushareCom.py module/plugins/accounts/ShareonlineBiz.py module/plugins/addon/Checksum.py module/plugins/addon/ExternalScripts.py module/plugins/addon/ExtractArchive.py module/plugins/addon/MergeFiles.py module/plugins/addon/RestartSlow.py module/plugins/addon/SkipRev.py module/plugins/addon/UnSkipOnFail.py module/plugins/addon/UpdateManager.py module/plugins/addon/WindowsPhoneToastNotify.py module/plugins/container/CCF.py module/plugins/container/LinkList.py module/plugins/container/RSDF.py module/plugins/crypter/BitshareCom.py module/plugins/crypter/CrockoCom.py module/plugins/crypter/DataHu.py module/plugins/crypter/DepositfilesCom.py module/plugins/crypter/Dereferer.py module/plugins/crypter/DevhostStFolder.py module/plugins/crypter/DlProtectCom.py module/plugins/crypter/DontKnowMe.py module/plugins/crypter/EasybytezCom.py module/plugins/crypter/FilecloudIo.py module/plugins/crypter/FilecryptCc.py module/plugins/crypter/FilefactoryCom.py module/plugins/crypter/FilerNet.py module/plugins/crypter/FilestubeCom.py module/plugins/crypter/FiletramCom.py module/plugins/crypter/FreakhareCom.py module/plugins/crypter/FreetexthostCom.py module/plugins/crypter/FshareVn.py module/plugins/crypter/ImgurComAlbum.py module/plugins/crypter/JunocloudMe.py module/plugins/crypter/LinkSaveIn.py module/plugins/crypter/MegaRapidCz.py module/plugins/crypter/MultiUpOrg.py module/plugins/crypter/NetfolderIn.py module/plugins/crypter/NosvideoCom.py module/plugins/crypter/OneKhDe.py module/plugins/crypter/PastebinCom.py module/plugins/crypter/RapidfileshareNet.py module/plugins/crypter/RelinkUs.py module/plugins/crypter/TnyCz.py module/plugins/crypter/TurbobitNet.py module/plugins/crypter/TusfilesNet.py module/plugins/crypter/UploadableCh.py module/plugins/crypter/UploadedTo.py module/plugins/crypter/XFileSharingPro.py module/plugins/hooks/AlldebridCom.py module/plugins/hooks/BypassCaptcha.py module/plugins/hooks/Captcha9Kw.py module/plugins/hooks/CaptchaBrotherhood.py module/plugins/hooks/ClickAndLoad.py module/plugins/hooks/DeathByCaptcha.py module/plugins/hooks/DebridItaliaCom.py module/plugins/hooks/EasybytezCom.py module/plugins/hooks/ExpertDecoders.py module/plugins/hooks/FastixRu.py module/plugins/hooks/FreeWayMe.py module/plugins/hooks/ImageTyperz.py module/plugins/hooks/LinkdecrypterCom.py module/plugins/hooks/LinksnappyCom.py module/plugins/hooks/MegaDebridEu.py module/plugins/hooks/MultishareCz.py module/plugins/hooks/MyfastfileCom.py module/plugins/hooks/OverLoadMe.py module/plugins/hooks/PremiumTo.py module/plugins/hooks/PremiumizeMe.py module/plugins/hooks/RPNetBiz.py module/plugins/hooks/RealdebridCom.py module/plugins/hooks/RehostTo.py module/plugins/hooks/SimplyPremiumCom.py module/plugins/hooks/SimplydebridCom.py module/plugins/hooks/UnrestrictLi.py module/plugins/hooks/XFileSharingPro.py module/plugins/hooks/ZeveraCom.py module/plugins/hoster/AlldebridCom.py module/plugins/hoster/BayfilesCom.py module/plugins/hoster/DebridItaliaCom.py module/plugins/hoster/DepositfilesCom.py module/plugins/hoster/DodanePl.py module/plugins/hoster/ExtabitCom.py module/plugins/hoster/FastixRu.py module/plugins/hoster/FastshareCz.py module/plugins/hoster/FileParadoxIn.py module/plugins/hoster/FileSharkPl.py module/plugins/hoster/FilerNet.py module/plugins/hoster/FileserveCom.py module/plugins/hoster/FreakshareCom.py module/plugins/hoster/FreeWayMe.py module/plugins/hoster/GigapetaCom.py module/plugins/hoster/IfileIt.py module/plugins/hoster/Keep2ShareCc.py module/plugins/hoster/LetitbitNet.py module/plugins/hoster/LinksnappyCom.py module/plugins/hoster/LomafileCom.py module/plugins/hoster/MegaCoNz.py module/plugins/hoster/MegaDebridEu.py module/plugins/hoster/MegaRapidCz.py module/plugins/hoster/MyfastfileCom.py module/plugins/hoster/OverLoadMe.py module/plugins/hoster/PremiumTo.py module/plugins/hoster/PremiumizeMe.py module/plugins/hoster/RPNetBiz.py module/plugins/hoster/RapidgatorNet.py module/plugins/hoster/RealdebridCom.py module/plugins/hoster/RehostTo.py module/plugins/hoster/RyushareCom.py module/plugins/hoster/SendmywayCom.py module/plugins/hoster/ShareonlineBiz.py module/plugins/hoster/SimplyPremiumCom.py module/plugins/hoster/SimplydebridCom.py module/plugins/hoster/TusfilesNet.py module/plugins/hoster/UnibytesCom.py module/plugins/hoster/UnrestrictLi.py module/plugins/hoster/UploadedTo.py module/plugins/hoster/WebshareCz.py module/plugins/hoster/XFileSharingPro.py module/plugins/hoster/YoutubeCom.py module/plugins/hoster/ZeveraCom.py module/plugins/hoster/ZippyshareCom.py module/plugins/internal/AbstractExtractor.py module/plugins/internal/BasePlugin.py module/plugins/internal/CaptchaService.py module/plugins/internal/DeadCrypter.py module/plugins/internal/DeadHoster.py module/plugins/internal/MultiHoster.py module/plugins/internal/SimpleCrypter.py module/plugins/internal/SimpleHoster.py module/plugins/internal/UnRar.py module/plugins/internal/UnZip.py module/plugins/internal/XFSCrypter.py module/plugins/internal/XFSHoster.py
Diffstat (limited to 'module/plugins/hooks')
-rw-r--r--module/plugins/hooks/AlldebridCom.py28
-rw-r--r--module/plugins/hooks/AndroidPhoneNotify.py80
-rw-r--r--module/plugins/hooks/BypassCaptcha.py14
-rw-r--r--module/plugins/hooks/Captcha9Kw.py46
-rw-r--r--module/plugins/hooks/CaptchaBrotherhood.py23
-rw-r--r--module/plugins/hooks/ClickAndLoad.py124
-rw-r--r--module/plugins/hooks/DeathByCaptcha.py23
-rw-r--r--module/plugins/hooks/DebridItaliaCom.py23
-rw-r--r--module/plugins/hooks/EasybytezCom.py37
-rw-r--r--module/plugins/hooks/ExpertDecoders.py24
-rw-r--r--module/plugins/hooks/FastixRu.py23
-rw-r--r--module/plugins/hooks/FreeWayMe.py22
-rw-r--r--module/plugins/hooks/ImageTyperz.py14
-rw-r--r--module/plugins/hooks/JustPremium.py46
-rw-r--r--module/plugins/hooks/LinkdecrypterCom.py59
-rw-r--r--module/plugins/hooks/LinksnappyCom.py22
-rw-r--r--module/plugins/hooks/MegaDebridEu.py21
-rw-r--r--module/plugins/hooks/MultihostersCom.py18
-rw-r--r--module/plugins/hooks/MultishareCz.py22
-rw-r--r--module/plugins/hooks/MyfastfileCom.py24
-rw-r--r--module/plugins/hooks/NoPremiumPl.py31
-rw-r--r--module/plugins/hooks/OverLoadMe.py30
-rw-r--r--module/plugins/hooks/PremiumTo.py35
-rw-r--r--module/plugins/hooks/PremiumizeMe.py40
-rw-r--r--module/plugins/hooks/PutdriveCom.py18
-rw-r--r--module/plugins/hooks/RPNetBiz.py40
-rw-r--r--module/plugins/hooks/RapideoPl.py31
-rw-r--r--module/plugins/hooks/RealdebridCom.py28
-rw-r--r--module/plugins/hooks/RehostTo.py44
-rw-r--r--module/plugins/hooks/SimplyPremiumCom.py22
-rw-r--r--module/plugins/hooks/SimplydebridCom.py22
-rw-r--r--module/plugins/hooks/SmoozedCom.py26
-rw-r--r--module/plugins/hooks/UnrestrictLi.py28
-rw-r--r--module/plugins/hooks/WindowsPhoneNotify.py96
-rw-r--r--module/plugins/hooks/XFileSharingPro.py72
-rw-r--r--module/plugins/hooks/ZeveraCom.py27
36 files changed, 859 insertions, 424 deletions
diff --git a/module/plugins/hooks/AlldebridCom.py b/module/plugins/hooks/AlldebridCom.py
index 5d4a2f4f4..fd89571eb 100644
--- a/module/plugins/hooks/AlldebridCom.py
+++ b/module/plugins/hooks/AlldebridCom.py
@@ -1,27 +1,29 @@
# -*- coding: utf-8 -*-
-from pyload.network.RequestFactory import getURL
-from pyload.plugin.internal.MultiHoster import MultiHoster
+from module.plugins.internal.MultiHook import MultiHook
-class AlldebridCom(MultiHoster):
+class AlldebridCom(MultiHook):
__name__ = "AlldebridCom"
__type__ = "hook"
- __version__ = "0.13"
+ __version__ = "0.16"
- __config__ = [("https", "bool", "Enable HTTPS", False),
- ("hosterListMode", "all;listed;unlisted", "Use for hosters (if supported)", "all"),
- ("hosterList", "str", "Hoster list (comma separated)", ""),
- ("unloadFailing", "bool", "Revert to stanard download if download fails", False),
- ("interval", "int", "Reload interval in hours (0 to disable)", 24)]
+ __config__ = [("pluginmode" , "all;listed;unlisted", "Use for plugins" , "all"),
+ ("pluginlist" , "str" , "Plugin list (comma separated)" , "" ),
+ ("revertfailed" , "bool" , "Revert to standard download if fails", True ),
+ ("retry" , "int" , "Number of retries before revert" , 10 ),
+ ("retryinterval" , "int" , "Retry interval in minutes" , 1 ),
+ ("reload" , "bool" , "Reload plugin list" , True ),
+ ("reloadinterval", "int" , "Reload interval in hours" , 12 ),
+ ("ssl" , "bool" , "Use HTTPS" , True )]
__description__ = """Alldebrid.com hook plugin"""
__license__ = "GPLv3"
__authors__ = [("Andy Voigt", "spamsales@online.de")]
- def getHoster(self):
- https = "https" if self.getConfig("https") else "http"
- page = getURL(https + "://www.alldebrid.com/api.php", get={'action': "get_host"}).replace("\"", "").strip()
+ def getHosters(self):
+ https = "https" if self.getConfig("ssl") else "http"
+ html = self.getURL(https + "://www.alldebrid.com/api.php", get={'action': "get_host"}).replace("\"", "").strip()
- return [x.strip() for x in page.split(",") if x.strip()]
+ return [x.strip() for x in html.split(",") if x.strip()]
diff --git a/module/plugins/hooks/AndroidPhoneNotify.py b/module/plugins/hooks/AndroidPhoneNotify.py
new file mode 100644
index 000000000..a3b24a255
--- /dev/null
+++ b/module/plugins/hooks/AndroidPhoneNotify.py
@@ -0,0 +1,80 @@
+# -*- coding: utf-8 -*-
+
+from time import time
+
+from module.network.RequestFactory import getURL
+from module.plugins.Hook import Hook
+
+
+class AndroidPhoneNotify(Hook):
+ __name__ = "AndroidPhoneNotify"
+ __type__ = "hook"
+ __version__ = "0.05"
+
+ __config__ = [("apikey" , "str" , "API key" , "" ),
+ ("notifycaptcha" , "bool", "Notify captcha request" , True ),
+ ("notifypackage" , "bool", "Notify package finished" , True ),
+ ("notifyprocessed", "bool", "Notify processed packages status" , True ),
+ ("timeout" , "int" , "Timeout between captchas in seconds" , 5 ),
+ ("force" , "bool", "Send notifications if client is connected", False)]
+
+ __description__ = """Send push notifications to your Android Phone using notifymyandroid.com"""
+ __license__ = "GPLv3"
+ __authors__ = [("Steven Kosyra", "steven.kosyra@gmail.com"),
+ ("Walter Purcaro", "vuolter@gmail.com")]
+
+
+ event_list = ["allDownloadsProcessed"]
+
+
+ #@TODO: Remove in 0.4.10
+ def initPeriodical(self):
+ pass
+
+
+ def setup(self):
+ self.info = {} #@TODO: Remove in 0.4.10
+ self.last_notify = 0
+
+
+ def newCaptchaTask(self, task):
+ if not self.getConfig("notifycaptcha"):
+ return False
+
+ if time() - self.last_notify < self.getConf("timeout"):
+ return False
+
+ self.notify(_("Captcha"), _("New request waiting user input"))
+
+
+ def packageFinished(self, pypack):
+ if self.getConfig("notifypackage"):
+ self.notify(_("Package finished"), pypack.name)
+
+
+ def allDownloadsProcessed(self):
+ if not self.getConfig("notifyprocessed"):
+ return False
+
+ if any(True for pdata in self.core.api.getQueue() if pdata.linksdone < pdata.linkstotal):
+ self.notify(_("Package failed"), _("One or more packages was not completed successfully"))
+ else:
+ self.notify(_("All packages finished"))
+
+
+ def notify(self, event, msg=""):
+ apikey = self.getConfig("apikey")
+
+ if not apikey:
+ return False
+
+ if self.core.isClientConnected() and not self.getConfig("force"):
+ return False
+
+ getURL("http://www.notifymyandroid.com/publicapi/notify",
+ get={'apikey' : apikey,
+ 'application': "pyLoad",
+ 'event' : event,
+ 'description': msg})
+
+ self.last_notify = time()
diff --git a/module/plugins/hooks/BypassCaptcha.py b/module/plugins/hooks/BypassCaptcha.py
index 038d7db79..bd19fe953 100644
--- a/module/plugins/hooks/BypassCaptcha.py
+++ b/module/plugins/hooks/BypassCaptcha.py
@@ -2,9 +2,9 @@
from pycurl import FORM_FILE, LOW_SPEED_TIME
-from pyload.network.HTTPRequest import BadHeader
-from pyload.network.RequestFactory import getURL, getRequest
-from pyload.plugin.Addon import Addon
+from module.network.HTTPRequest import BadHeader
+from module.network.RequestFactory import getURL, getRequest
+from module.plugins.Addon import Addon, threaded
class BypassCaptchaException(Exception):
@@ -28,7 +28,7 @@ class BypassCaptchaException(Exception):
class BypassCaptcha(Addon):
__name__ = "BypassCaptcha"
__type__ = "hook"
- __version__ = "0.05"
+ __version__ = "0.06"
__config__ = [("force", "bool", "Force BC even if client is connected", False),
("passkey", "password", "Passkey", "")]
@@ -106,7 +106,8 @@ class BypassCaptcha(Addon):
task.handler.append(self)
task.data['service'] = self.__name__
task.setWaiting(100)
- self.processCaptcha(task)
+ self._processCaptcha(task)
+
else:
self.logInfo(_("Your %s account has not enough credits") % self.__name__)
@@ -121,7 +122,8 @@ class BypassCaptcha(Addon):
self.respond(task.data['ticket'], False)
- def processCaptcha(self, task):
+ @threaded
+ def _processCaptcha(self, task):
c = task.captchaFile
try:
ticket, result = self.submit(c)
diff --git a/module/plugins/hooks/Captcha9Kw.py b/module/plugins/hooks/Captcha9Kw.py
index a74983d9b..04caff345 100644
--- a/module/plugins/hooks/Captcha9Kw.py
+++ b/module/plugins/hooks/Captcha9Kw.py
@@ -10,13 +10,13 @@ from time import sleep
from pyload.network.HTTPRequest import BadHeader
from pyload.network.RequestFactory import getURL
-from pyload.plugin.Addon import Addon
+from module.plugins.Hook import Hook, threaded
-class Captcha9kw(Addon):
- __name__ = "Captcha9kw"
+class Captcha9kw(Hook):
+ __name__ = "Captcha9Kw"
__type__ = "hook"
- __version__ = "0.26"
+ __version__ = "0.28"
__config__ = [("ssl" , "bool" , "Use HTTPS" , True ),
("force" , "bool" , "Force captcha resolving even if client is connected" , True ),
@@ -60,6 +60,7 @@ class Captcha9kw(Addon):
return 0
+ @threaded
def _processCaptcha(self, task):
try:
with open(task.captchaFile, 'rb') as f:
@@ -69,22 +70,19 @@ class Captcha9kw(Addon):
self.logError(e)
return
- data = b64encode(data)
- mouse = 1 if task.isPositional() else 0
pluginname = re.search(r'_([^_]*)_\d+.\w+', task.captchaFile).group(1)
-
- option = {'min' : 2,
- 'max' : 50,
- 'phrase' : 0,
- 'numeric' : 0,
- 'case_sensitive': 0,
- 'math' : 0,
- 'prio' : min(max(self.getConfig("prio"), 0), 10),
- 'confirm' : self.getConfig("confirm"),
- 'timeout' : min(max(self.getConfig("timeout"), 300), 3999),
- 'selfsolve' : self.getConfig("selfsolve"),
- 'cph' : self.getConfig("captchaperhour"),
- 'cpm' : self.getConfig("captchapermin")}
+ option = {'min' : 2,
+ 'max' : 50,
+ 'phrase' : 0,
+ 'numeric' : 0,
+ 'case_sensitive': 0,
+ 'math' : 0,
+ 'prio' : min(max(self.getConfig("prio"), 0), 10),
+ 'confirm' : self.getConfig("confirm"),
+ 'timeout' : min(max(self.getConfig("timeout"), 300), 3999),
+ 'selfsolve' : self.getConfig("selfsolve"),
+ 'cph' : self.getConfig("captchaperhour"),
+ 'cpm' : self.getConfig("captchapermin")}
for opt in str(self.getConfig("hoster_options").split('|')):
@@ -122,8 +120,8 @@ class Captcha9kw(Addon):
'pyload' : "1",
'source' : "pyload",
'base64' : "1",
- 'mouse' : mouse,
- 'file-upload-01': data,
+ 'mouse' : 1 if task.isPositional() else 0,
+ 'file-upload-01': b64encode(data),
'action' : "usercaptchaupload"}
for _i in xrange(5):
@@ -202,9 +200,9 @@ class Captcha9kw(Addon):
for d in details:
hosteroption = d.split("=")
- if (len(hosteroption) > 1
- and hosteroption[0].lower() == 'timeout'
- and hosteroption[1].isdigit()):
+ if len(hosteroption) > 1 \
+ and hosteroption[0].lower() == 'timeout' \
+ and hosteroption[1].isdigit():
timeout = int(hosteroption[1])
break
diff --git a/module/plugins/hooks/CaptchaBrotherhood.py b/module/plugins/hooks/CaptchaBrotherhood.py
index 7bbd85659..ba9d3eb8e 100644
--- a/module/plugins/hooks/CaptchaBrotherhood.py
+++ b/module/plugins/hooks/CaptchaBrotherhood.py
@@ -14,7 +14,7 @@ from time import sleep
from urllib import urlencode
from pyload.network.RequestFactory import getURL, getRequest
-from pyload.plugin.Addon import Addon
+from module.plugins.Hook import Hook, threaded
class CaptchaBrotherhoodException(Exception):
@@ -38,7 +38,7 @@ class CaptchaBrotherhoodException(Exception):
class CaptchaBrotherhood(Addon):
__name__ = "CaptchaBrotherhood"
__type__ = "hook"
- __version__ = "0.06"
+ __version__ = "0.08"
__config__ = [("username", "str", "Username", ""),
("force", "bool", "Force CT even if client is connected", False),
@@ -84,10 +84,10 @@ class CaptchaBrotherhood(Addon):
req = getRequest()
url = "%ssendNewCaptcha.aspx?%s" % (self.API_URL,
- urlencode({"username": self.getConfig("username"),
- "password": self.getConfig("passkey"),
- "captchaSource": "pyLoad",
- "timeout": "80"}))
+ urlencode({'username' : self.getConfig("username"),
+ 'password' : self.getConfig("passkey"),
+ 'captchaSource': "pyLoad",
+ 'timeout' : "80"}))
req.c.setopt(pycurl.URL, url)
req.c.setopt(pycurl.POST, 1)
@@ -109,14 +109,14 @@ class CaptchaBrotherhood(Addon):
for _i in xrange(15):
sleep(5)
- res = self.get_api("askCaptchaResult", ticket)
+ res = self.api_response("askCaptchaResult", ticket)
if res.startswith("OK-answered"):
return ticket, res[12:]
raise CaptchaBrotherhoodException("No solution received in time")
- def get_api(self, api, ticket):
+ def api_response(self, api, ticket):
res = getURL("%s%s.aspx" % (self.API_URL, api),
get={"username": self.getConfig("username"),
"password": self.getConfig("passkey"),
@@ -144,17 +144,18 @@ class CaptchaBrotherhood(Addon):
task.handler.append(self)
task.data['service'] = self.__name__
task.setWaiting(100)
- self.processCaptcha(task)
+ self._processCaptcha(task)
else:
self.logInfo(_("Your CaptchaBrotherhood Account has not enough credits"))
def captchaInvalid(self, task):
if task.data['service'] == self.__name__ and "ticket" in task.data:
- res = self.get_api("complainCaptcha", task.data['ticket'])
+ res = self.api_response("complainCaptcha", task.data['ticket'])
- def processCaptcha(self, task):
+ @threaded
+ def _processCaptcha(self, task):
c = task.captchaFile
try:
ticket, result = self.submit(c)
diff --git a/module/plugins/hooks/ClickAndLoad.py b/module/plugins/hooks/ClickAndLoad.py
new file mode 100644
index 000000000..8b53872e4
--- /dev/null
+++ b/module/plugins/hooks/ClickAndLoad.py
@@ -0,0 +1,124 @@
+# -*- coding: utf-8 -*-
+
+import socket
+
+from threading import Lock
+
+from module.plugins.Hook import Hook, threaded
+
+
+def forward(source, destination):
+ try:
+ bufsize = 1024
+ bufdata = source.recv(bufsize)
+ while bufdata:
+ destination.sendall(bufdata)
+ bufdata = source.recv(bufsize)
+ finally:
+ destination.shutdown(socket.SHUT_WR)
+
+
+#: create_connection wrapper for python 2.5 socket module
+def create_connection(address, timeout=object(), source_address=None):
+ if hasattr(socket, 'create_connection'):
+ if type(timeout) == object:
+ timeout = socket._GLOBAL_DEFAULT_TIMEOUT
+
+ return socket.create_connection(address, timeout, source_address)
+
+ else:
+ host, port = address
+ err = None
+ for res in getaddrinfo(host, port, 0, SOCK_STREAM):
+ af, socktype, proto, canonname, sa = res
+ sock = None
+ try:
+ sock = socket(af, socktype, proto)
+ if type(timeout) != object:
+ sock.settimeout(timeout)
+ if source_address:
+ sock.bind(source_address)
+ sock.connect(sa)
+ return sock
+
+ except socket.error, _:
+ err = _
+ if sock is not None:
+ sock.close()
+
+ if err is not None:
+ raise err
+ else:
+ raise socket.error("getaddrinfo returns an empty list")
+
+
+class ClickAndLoad(Hook):
+ __name__ = "ClickAndLoad"
+ __type__ = "hook"
+ __version__ = "0.35"
+
+ __config__ = [("activated", "bool", "Activated" , True),
+ ("port" , "int" , "Port" , 9666),
+ ("extern" , "bool", "Listen on the public network interface", True)]
+
+ __description__ = """Click'N'Load hook plugin"""
+ __license__ = "GPLv3"
+ __authors__ = [("RaNaN", "RaNaN@pyload.de"),
+ ("Walter Purcaro", "vuolter@gmail.com")]
+
+
+ #@TODO: Remove in 0.4.10
+ def initPeriodical(self):
+ pass
+
+
+ def coreReady(self):
+ if not self.config['webinterface']['activated']:
+ return
+
+ ip = socket.gethostbyname(socket.gethostname()) if self.getConfig("extern") else "127.0.0.1"
+ webport = int(self.config['webinterface']['port'])
+ cnlport = self.getConfig('port')
+
+ self.proxy(ip, webport, cnlport)
+
+
+ @threaded
+ def proxy(self, ip, webport, cnlport):
+ self.manager.startThread(self._server, ip, webport, cnlport)
+ lock = Lock()
+ lock.acquire()
+ lock.acquire()
+
+
+ def _server(self, ip, webport, cnlport, thread):
+ try:
+ server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+ server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
+ server_socket.bind((ip, cnlport))
+ server_socket.listen(5)
+
+ while True:
+ client_socket = server_socket.accept()[0]
+ dock_socket = create_connection(("127.0.0.1", webport))
+
+ self.manager.startThread(forward, dock_socket, client_socket)
+ self.manager.startThread(forward, client_socket, dock_socket)
+
+ except socket.error, e:
+ self.logDebug(e)
+ self._server(ip, webport, cnlport, thread)
+
+ except Exception, e:
+ self.logError(e)
+
+ try:
+ client_socket.close()
+ dock_socket.close()
+ except Exception:
+ pass
+
+ try:
+ server_socket.close()
+ except Exception:
+ pass
diff --git a/module/plugins/hooks/DeathByCaptcha.py b/module/plugins/hooks/DeathByCaptcha.py
index 9460a0cee..8786df12f 100644
--- a/module/plugins/hooks/DeathByCaptcha.py
+++ b/module/plugins/hooks/DeathByCaptcha.py
@@ -11,7 +11,7 @@ from time import sleep
from pyload.utils import json_loads
from pyload.network.HTTPRequest import BadHeader
from pyload.network.RequestFactory import getRequest
-from pyload.plugin.Addon import Addon
+from module.plugins.Hook import Hook, threaded
class DeathByCaptchaException(Exception):
@@ -51,7 +51,7 @@ class DeathByCaptchaException(Exception):
class DeathByCaptcha(Addon):
__name__ = "DeathByCaptcha"
__type__ = "hook"
- __version__ = "0.04"
+ __version__ = "0.06"
__config__ = [("username", "str", "Username", ""),
("passkey", "password", "Password", ""),
@@ -66,7 +66,7 @@ class DeathByCaptcha(Addon):
API_URL = "http://api.dbcapi.me/api/"
- def call_api(self, api="captcha", post=False, multipart=False):
+ def api_response(self, api="captcha", post=False, multipart=False):
req = getRequest()
req.c.setopt(HTTPHEADER, ["Accept: application/json", "User-Agent: pyLoad %s" % self.core.version])
@@ -108,7 +108,7 @@ class DeathByCaptcha(Addon):
def getCredits(self):
- res = self.call_api("user", True)
+ res = self.api_response("user", True)
if 'is_banned' in res and res['is_banned']:
raise DeathByCaptchaException('banned')
@@ -119,14 +119,14 @@ class DeathByCaptcha(Addon):
def getStatus(self):
- res = self.call_api("status", False)
+ res = self.api_response("status", False)
if 'is_service_overloaded' in res and res['is_service_overloaded']:
raise DeathByCaptchaException('service-overload')
def submit(self, captcha, captchaType="file", match=None):
- #workaround multipart-post bug in HTTPRequest.py
+ #@NOTE: Workaround multipart-post bug in HTTPRequest.py
if re.match("^\w*$", self.getConfig("passkey")):
multipart = True
data = (FORM_FILE, captcha)
@@ -136,7 +136,7 @@ class DeathByCaptcha(Addon):
data = f.read()
data = "base64:" + b64encode(data)
- res = self.call_api("captcha", {"captchafile": data}, multipart)
+ res = self.api_response("captcha", {"captchafile": data}, multipart)
if "captcha" not in res:
raise DeathByCaptchaException(res)
@@ -144,7 +144,7 @@ class DeathByCaptcha(Addon):
for _i in xrange(24):
sleep(5)
- res = self.call_api("captcha/%d" % ticket, False)
+ res = self.api_response("captcha/%d" % ticket, False)
if res['text'] and res['is_correct']:
break
else:
@@ -185,13 +185,13 @@ class DeathByCaptcha(Addon):
task.handler.append(self)
task.data['service'] = self.__name__
task.setWaiting(180)
- self.processCaptcha(task)
+ self._processCaptcha(task)
def captchaInvalid(self, task):
if task.data['service'] == self.__name__ and "ticket" in task.data:
try:
- res = self.call_api("captcha/%d/report" % task.data['ticket'], True)
+ res = self.api_response("captcha/%d/report" % task.data['ticket'], True)
except DeathByCaptchaException, e:
self.logError(e.getDesc())
@@ -200,7 +200,8 @@ class DeathByCaptcha(Addon):
self.logError(e)
- def processCaptcha(self, task):
+ @threaded
+ def _processCaptcha(self, task):
c = task.captchaFile
try:
ticket, result = self.submit(c)
diff --git a/module/plugins/hooks/DebridItaliaCom.py b/module/plugins/hooks/DebridItaliaCom.py
index ba3bff71e..719f3dd3a 100644
--- a/module/plugins/hooks/DebridItaliaCom.py
+++ b/module/plugins/hooks/DebridItaliaCom.py
@@ -2,19 +2,21 @@
import re
-from pyload.network.RequestFactory import getURL
-from pyload.plugin.internal.MultiHoster import MultiHoster
+from module.plugins.internal.MultiHook import MultiHook
-class DebridItaliaCom(MultiHoster):
+class DebridItaliaCom(MultiHook):
__name__ = "DebridItaliaCom"
__type__ = "hook"
- __version__ = "0.08"
+ __version__ = "0.12"
- __config__ = [("hosterListMode", "all;listed;unlisted", "Use for hosters (if supported)", "all"),
- ("hosterList", "str", "Hoster list (comma separated)", ""),
- ("unloadFailing", "bool", "Revert to standard download if download fails", False),
- ("interval", "int", "Reload interval in hours (0 to disable)", 24)]
+ __config__ = [("pluginmode" , "all;listed;unlisted", "Use for plugins" , "all"),
+ ("pluginlist" , "str" , "Plugin list (comma separated)" , "" ),
+ ("revertfailed" , "bool" , "Revert to standard download if fails", True ),
+ ("retry" , "int" , "Number of retries before revert" , 10 ),
+ ("retryinterval" , "int" , "Retry interval in minutes" , 1 ),
+ ("reload" , "bool" , "Reload plugin list" , True ),
+ ("reloadinterval", "int" , "Reload interval in hours" , 12 )]
__description__ = """Debriditalia.com hook plugin"""
__license__ = "GPLv3"
@@ -22,6 +24,5 @@ class DebridItaliaCom(MultiHoster):
("Walter Purcaro", "vuolter@gmail.com")]
- def getHoster(self):
- html = getURL("http://www.debriditalia.com/status.php")
- return re.findall(r'title="(.+?)"> \1</td><td><img src="/images/(?:attivo|testing)', html)
+ def getHosters(self):
+ return self.getURL("http://debriditalia.com/api.php", get={'hosts': ""}).replace('"', '').split(',')
diff --git a/module/plugins/hooks/EasybytezCom.py b/module/plugins/hooks/EasybytezCom.py
index e5e012976..85c616054 100644
--- a/module/plugins/hooks/EasybytezCom.py
+++ b/module/plugins/hooks/EasybytezCom.py
@@ -2,38 +2,31 @@
import re
-from pyload.plugin.internal.MultiHoster import MultiHoster
+from module.plugins.internal.MultiHook import MultiHook
-class EasybytezCom(MultiHoster):
+class EasybytezCom(MultiHook):
__name__ = "EasybytezCom"
__type__ = "hook"
- __version__ = "0.03"
+ __version__ = "0.07"
- __config__ = [("hosterListMode", "all;listed;unlisted", "Use for hosters (if supported)", "all"),
- ("hosterList", "str", "Hoster list (comma separated)", "")]
+ __config__ = [("pluginmode" , "all;listed;unlisted", "Use for plugins" , "all"),
+ ("pluginlist" , "str" , "Plugin list (comma separated)" , "" ),
+ ("revertfailed" , "bool" , "Revert to standard download if fails", True ),
+ ("retry" , "int" , "Number of retries before revert" , 10 ),
+ ("retryinterval" , "int" , "Retry interval in minutes" , 1 ),
+ ("reload" , "bool" , "Reload plugin list" , True ),
+ ("reloadinterval", "int" , "Reload interval in hours" , 12 )]
__description__ = """EasyBytez.com hook plugin"""
__license__ = "GPLv3"
__authors__ = [("zoidberg", "zoidberg@mujmail.cz")]
- def getHoster(self):
- self.account = self.core.accountManager.getAccountPlugin(self.__name__)
- user = self.account.selectAccount()[0]
+ def getHosters(self):
+ user, data = self.account.selectAccount()
- try:
- req = self.account.getAccountRequest(user)
- page = req.load("http://www.easybytez.com")
+ req = self.account.getAccountRequest(user)
+ html = req.load("http://www.easybytez.com")
- hosters = re.search(r'</textarea>\s*Supported sites:(.*)', page).group(1).split(',')
-
- except Exception, e:
- self.logWarning(_("Unable to load supported hoster list, using last known"))
- self.logDebug(e)
-
- hosters = ["bitshare.com", "crocko.com", "ddlstorage.com", "depositfiles.com", "extabit.com", "hotfile.com",
- "mediafire.com", "netload.in", "rapidgator.net", "rapidshare.com", "uploading.com", "uload.to",
- "uploaded.to"]
- finally:
- return hosters
+ return re.search(r'</textarea>\s*Supported sites:(.*)', html).group(1).split(',')
diff --git a/module/plugins/hooks/ExpertDecoders.py b/module/plugins/hooks/ExpertDecoders.py
index 37bb4fbbe..04f6d0795 100644
--- a/module/plugins/hooks/ExpertDecoders.py
+++ b/module/plugins/hooks/ExpertDecoders.py
@@ -6,15 +6,15 @@ from base64 import b64encode
from pycurl import LOW_SPEED_TIME
from uuid import uuid4
-from pyload.network.HTTPRequest import BadHeader
-from pyload.network.RequestFactory import getURL, getRequest
-from pyload.plugin.Addon import Addon
+from module.network.HTTPRequest import BadHeader
+from module.network.RequestFactory import getURL, getRequest
+from module.plugins.Hook import Hook, threaded
class ExpertDecoders(Addon):
__name__ = "ExpertDecoders"
__type__ = "hook"
- __version__ = "0.02"
+ __version__ = "0.04"
__config__ = [("force", "bool", "Force CT even if client is connected", False),
("passkey", "password", "Access key", "")]
@@ -40,21 +40,24 @@ class ExpertDecoders(Addon):
return 0
- def processCaptcha(self, task):
+ @threaded
+ def _processCaptcha(self, task):
task.data['ticket'] = ticket = uuid4()
result = None
with open(task.captchaFile, 'rb') as f:
data = f.read()
- data = b64encode(data)
req = getRequest()
#raise timeout threshold
req.c.setopt(LOW_SPEED_TIME, 80)
try:
- result = req.load(self.API_URL, post={"action": "upload", "key": self.getConfig("passkey"),
- "file": data, "gen_task_id": ticket})
+ result = req.load(self.API_URL,
+ post={'action' : "upload",
+ 'key' : self.getConfig("passkey"),
+ 'file' : b64encode(data),
+ 'gen_task_id': ticket})
finally:
req.close()
@@ -75,7 +78,8 @@ class ExpertDecoders(Addon):
if self.getCredits() > 0:
task.handler.append(self)
task.setWaiting(100)
- self.processCaptcha(task)
+ self._processCaptcha(task)
+
else:
self.logInfo(_("Your ExpertDecoders Account has not enough credits"))
@@ -86,7 +90,7 @@ class ExpertDecoders(Addon):
try:
res = getURL(self.API_URL,
post={'action': "refund", 'key': self.getConfig("passkey"), 'gen_task_id': task.data['ticket']})
- self.logInfo(_("Request refund", res)
+ self.logInfo(_("Request refund"), res)
except BadHeader, e:
self.logError(_("Could not send refund request"), e)
diff --git a/module/plugins/hooks/FastixRu.py b/module/plugins/hooks/FastixRu.py
index 4b840e9b4..5f339c4c0 100644
--- a/module/plugins/hooks/FastixRu.py
+++ b/module/plugins/hooks/FastixRu.py
@@ -1,28 +1,31 @@
# -*- coding: utf-8 -*-
from pyload.utils import json_loads
-from pyload.network.RequestFactory import getURL
-from pyload.plugin.internal.MultiHoster import MultiHoster
+from module.plugins.internal.MultiHook import MultiHook
-class FastixRu(MultiHoster):
+class FastixRu(MultiHook):
__name__ = "FastixRu"
__type__ = "hook"
- __version__ = "0.02"
+ __version__ = "0.05"
- __config__ = [("hosterListMode", "all;listed;unlisted", "Use for hosters (if supported)", "all"),
- ("unloadFailing", "bool", "Revert to standard download if download fails", False),
- ("interval", "int", "Reload interval in hours (0 to disable)", 24)]
+ __config__ = [("pluginmode" , "all;listed;unlisted", "Use for plugins" , "all"),
+ ("pluginlist" , "str" , "Plugin list (comma separated)" , "" ),
+ ("revertfailed" , "bool" , "Revert to standard download if fails", True ),
+ ("retry" , "int" , "Number of retries before revert" , 10 ),
+ ("retryinterval" , "int" , "Retry interval in minutes" , 1 ),
+ ("reload" , "bool" , "Reload plugin list" , True ),
+ ("reloadinterval", "int" , "Reload interval in hours" , 12 )]
__description__ = """Fastix.ru hook plugin"""
__license__ = "GPLv3"
__authors__ = [("Massimo Rosamilia", "max@spiritix.eu")]
- def getHoster(self):
- page = getURL("http://fastix.ru/api_v2",
+ def getHosters(self):
+ html = self.getURL("http://fastix.ru/api_v2",
get={'apikey': "5182964c3f8f9a7f0b00000a_kelmFB4n1IrnCDYuIFn2y",
'sub' : "allowed_sources"})
- host_list = json_loads(page)
+ host_list = json_loads(html)
host_list = host_list['allow']
return host_list
diff --git a/module/plugins/hooks/FreeWayMe.py b/module/plugins/hooks/FreeWayMe.py
index f901b4ec0..6fec037d8 100644
--- a/module/plugins/hooks/FreeWayMe.py
+++ b/module/plugins/hooks/FreeWayMe.py
@@ -1,25 +1,27 @@
# -*- coding: utf-8 -*-
-from pyload.network.RequestFactory import getURL
-from pyload.plugin.internal.MultiHoster import MultiHoster
+from module.plugins.internal.MultiHook import MultiHook
-class FreeWayMe(MultiHoster):
+class FreeWayMe(MultiHook):
__name__ = "FreeWayMe"
__type__ = "hook"
- __version__ = "0.11"
+ __version__ = "0.14"
- __config__ = [("hosterListMode", "all;listed;unlisted", "Use for hosters (if supported):", "all"),
- ("hosterList", "str", "Hoster list (comma separated)", ""),
- ("unloadFailing", "bool", "Revert to stanard download if download fails", False),
- ("interval", "int", "Reload interval in hours (0 to disable)", 24)]
+ __config__ = [("pluginmode" , "all;listed;unlisted", "Use for plugins" , "all"),
+ ("pluginlist" , "str" , "Plugin list (comma separated)" , "" ),
+ ("revertfailed" , "bool" , "Revert to standard download if fails", True ),
+ ("retry" , "int" , "Number of retries before revert" , 10 ),
+ ("retryinterval" , "int" , "Retry interval in minutes" , 1 ),
+ ("reload" , "bool" , "Reload plugin list" , True ),
+ ("reloadinterval", "int" , "Reload interval in hours" , 12 )]
__description__ = """FreeWay.me hook plugin"""
__license__ = "GPLv3"
__authors__ = [("Nicolas Giese", "james@free-way.me")]
- def getHoster(self):
- hostis = getURL("https://www.free-way.me/ajax/jd.php", get={'id': 3}).replace("\"", "").strip()
+ def getHosters(self):
+ hostis = self.getURL("https://www.free-way.me/ajax/jd.php", get={'id': 3}).replace("\"", "").strip()
self.logDebug("Hosters", hostis)
return [x.strip() for x in hostis.split(",") if x.strip()]
diff --git a/module/plugins/hooks/ImageTyperz.py b/module/plugins/hooks/ImageTyperz.py
index 6ac75b1a1..8bf326f4d 100644
--- a/module/plugins/hooks/ImageTyperz.py
+++ b/module/plugins/hooks/ImageTyperz.py
@@ -7,8 +7,8 @@ import re
from base64 import b64encode
from pycurl import FORM_FILE, LOW_SPEED_TIME
-from pyload.network.RequestFactory import getURL, getRequest
-from pyload.plugin.Addon import Addon
+from module.network.RequestFactory import getURL, getRequest
+from module.plugins.Hook import Hook, threaded
class ImageTyperzException(Exception):
@@ -32,7 +32,7 @@ class ImageTyperzException(Exception):
class ImageTyperz(Addon):
__name__ = "ImageTyperz"
__type__ = "hook"
- __version__ = "0.05"
+ __version__ = "0.06"
__config__ = [("username", "str", "Username", ""),
("passkey", "password", "Password", ""),
@@ -73,7 +73,7 @@ class ImageTyperz(Addon):
req.c.setopt(LOW_SPEED_TIME, 80)
try:
- #workaround multipart-post bug in HTTPRequest.py
+ #@NOTE: Workaround multipart-post bug in HTTPRequest.py
if re.match("^\w*$", self.getConfig("passkey")):
multipart = True
data = (FORM_FILE, captcha)
@@ -120,7 +120,8 @@ class ImageTyperz(Addon):
task.handler.append(self)
task.data['service'] = self.__name__
task.setWaiting(100)
- self.processCaptcha(task)
+ self._processCaptcha(task)
+
else:
self.logInfo(_("Your %s account has not enough credits") % self.__name__)
@@ -139,7 +140,8 @@ class ImageTyperz(Addon):
self.logError(_("Bad captcha solution received, refund request failed"), res)
- def processCaptcha(self, task):
+ @threaded
+ def _processCaptcha(self, task):
c = task.captchaFile
try:
ticket, result = self.submit(c)
diff --git a/module/plugins/hooks/JustPremium.py b/module/plugins/hooks/JustPremium.py
new file mode 100644
index 000000000..b70d8dd2c
--- /dev/null
+++ b/module/plugins/hooks/JustPremium.py
@@ -0,0 +1,46 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from module.plugins.Hook import Hook
+
+
+class JustPremium(Hook):
+ __name__ = "JustPremium"
+ __type__ = "hook"
+ __version__ = "0.21"
+
+ __config__ = [("excluded", "str", "Exclude hosters (comma separated)", "")]
+
+ __description__ = """Remove all not premium links from urls added"""
+ __license__ = "GPLv3"
+ __authors__ = [("mazleu", "mazleica@gmail.com"),
+ ("Walter Purcaro", "vuolter@gmail.com"),
+ ("immenz", "immenz@gmx.net")]
+
+
+ event_list = ["linksAdded"]
+
+
+ def linksAdded(self, links, pid):
+ hosterdict = self.core.pluginManager.hosterPlugins
+ linkdict = self.core.api.checkURLs(links)
+
+ premiumplugins = set(account.type for account in self.core.api.getAccounts(False) \
+ if account.valid and account.premium)
+ multihosters = set(hoster for hoster in self.core.pluginManager.hosterPlugins \
+ if 'new_name' in hosterdict[hoster] \
+ and hosterdict[hoster]['new_name'] in premiumplugins)
+
+ #: Found at least one hoster with account or multihoster
+ if not any(True for pluginname in linkdict if pluginname in premiumplugins | multihosters):
+ return
+
+ excluded = map(lambda domain: "".join(part.capitalize() for part in re.split(r'(\.|\d+)', domain) if part != '.'),
+ self.getConfig('excluded').replace(' ', '').replace(',', '|').replace(';', '|').split('|'))
+
+ for pluginname in set(linkdict.keys()) - (premiumplugins | multihosters).union(excluded):
+ self.logInfo(_("Remove links of plugin: %s") % pluginname)
+ for link in linkdict[pluginname]:
+ self.logDebug("Remove link: %s" % link)
+ links.remove(link)
diff --git a/module/plugins/hooks/LinkdecrypterCom.py b/module/plugins/hooks/LinkdecrypterCom.py
index fff596386..f85a598bc 100644
--- a/module/plugins/hooks/LinkdecrypterCom.py
+++ b/module/plugins/hooks/LinkdecrypterCom.py
@@ -2,59 +2,24 @@
import re
-from pyload.network.RequestFactory import getURL
-from pyload.plugin.Addon import Addon
-from pyload.utils import remove_chars
+from module.plugins.internal.MultiHook import MultiHook
-class LinkdecrypterCom(Addon):
+class LinkdecrypterCom(MultiHook):
__name__ = "LinkdecrypterCom"
__type__ = "hook"
- __version__ = "0.21"
+ __version__ = "1.02"
+
+ __config__ = [("pluginmode" , "all;listed;unlisted", "Use for plugins" , "all"),
+ ("pluginlist" , "str" , "Plugin list (comma separated)" , "" ),
+ ("reload" , "bool" , "Reload plugin list" , True ),
+ ("reloadinterval", "int" , "Reload interval in hours" , 12 )]
__description__ = """Linkdecrypter.com hook plugin"""
__license__ = "GPLv3"
- __authors__ = [("zoidberg", "zoidberg@mujmail.cz")]
-
-
- def activate(self):
- try:
- self.loadPatterns()
- except Exception, e:
- self.logError(e)
-
-
- def loadPatterns(self):
- html = getURL("http://linkdecrypter.com/")
-
- m = re.search(r'<title>', html)
- if m is None:
- self.logError(_("Linkdecrypter site is down"))
- return
-
- m = re.search(r'<b>Supported\(\d+\)</b>: <i>([^+<]*)', html)
- if m is None:
- self.logError(_("Crypter list not found"))
- return
-
- builtin = [name.lower() for name in self.core.pluginManager.crypterPlugins.keys()]
- builtin.append("downloadserienjunkiesorg")
-
- crypter_pattern = re.compile("(\w[\w.-]+)")
- online = []
- for crypter in m.group(1).split(', '):
- m = re.match(crypter_pattern, crypter)
- if m and remove_chars(m.group(1), "-.") not in builtin:
- online.append(m.group(1).replace(".", "\\."))
-
- if not online:
- self.logError(_("Crypter list is empty"))
- return
-
- regexp = r'https?://([^.]+\.)*?(%s)/.*' % '|'.join(online)
+ __authors__ = [("Walter Purcaro", "vuolter@gmail.com")]
- dict = self.core.pluginManager.crypterPlugins[self.__name__]
- dict['pattern'] = regexp
- dict['re'] = re.compile(regexp)
- self.logDebug("Loaded pattern: %s" % regexp)
+ def getCrypters(self):
+ return re.search(r'>Supported\(\d+\)</b>: <i>(.[\w.\-, ]+)',
+ self.getURL("http://linkdecrypter.com/").replace("(g)", "")).group(1).split(', ')
diff --git a/module/plugins/hooks/LinksnappyCom.py b/module/plugins/hooks/LinksnappyCom.py
index f3c9ccaad..7e607a3d3 100644
--- a/module/plugins/hooks/LinksnappyCom.py
+++ b/module/plugins/hooks/LinksnappyCom.py
@@ -1,27 +1,29 @@
# -*- coding: utf-8 -*-
from pyload.utils import json_loads
-from pyload.network.RequestFactory import getURL
-from pyload.plugin.internal.MultiHoster import MultiHoster
+from module.plugins.internal.MultiHook import MultiHook
-class LinksnappyCom(MultiHoster):
+class LinksnappyCom(MultiHook):
__name__ = "LinksnappyCom"
__type__ = "hook"
- __version__ = "0.01"
+ __version__ = "0.04"
- __config__ = [("hosterListMode", "all;listed;unlisted", "Use for hosters (if supported)", "all"),
- ("hosterList", "str", "Hoster list (comma separated)", ""),
- ("unloadFailing", "bool", "Revert to standard download if download fails", False),
- ("interval", "int", "Reload interval in hours (0 to disable)", 24)]
+ __config__ = [("pluginmode" , "all;listed;unlisted", "Use for plugins" , "all"),
+ ("pluginlist" , "str" , "Plugin list (comma separated)" , "" ),
+ ("revertfailed" , "bool" , "Revert to standard download if fails", True ),
+ ("retry" , "int" , "Number of retries before revert" , 10 ),
+ ("retryinterval" , "int" , "Retry interval in minutes" , 1 ),
+ ("reload" , "bool" , "Reload plugin list" , True ),
+ ("reloadinterval", "int" , "Reload interval in hours" , 12 )]
__description__ = """Linksnappy.com hook plugin"""
__license__ = "GPLv3"
__authors__ = [("stickell", "l.stickell@yahoo.it")]
- def getHoster(self):
- json_data = getURL("http://gen.linksnappy.com/lseAPI.php", get={'act': "FILEHOSTS"})
+ def getHosters(self):
+ json_data = self.getURL("http://gen.linksnappy.com/lseAPI.php", get={'act': "FILEHOSTS"})
json_data = json_loads(json_data)
return json_data['return'].keys()
diff --git a/module/plugins/hooks/MegaDebridEu.py b/module/plugins/hooks/MegaDebridEu.py
index a125481c4..0711b3546 100644
--- a/module/plugins/hooks/MegaDebridEu.py
+++ b/module/plugins/hooks/MegaDebridEu.py
@@ -1,24 +1,29 @@
# -*- coding: utf-8 -*-
from pyload.utils import json_loads
-from pyload.network.RequestFactory import getURL
-from pyload.plugin.internal.MultiHoster import MultiHoster
+from module.plugins.internal.MultiHook import MultiHook
-class MegaDebridEu(MultiHoster):
+class MegaDebridEu(MultiHook):
__name__ = "MegaDebridEu"
__type__ = "hook"
- __version__ = "0.02"
+ __version__ = "0.05"
- __config__ = [("unloadFailing", "bool", "Revert to standard download if download fails", False)]
+ __config__ = [("pluginmode" , "all;listed;unlisted", "Use for plugins" , "all"),
+ ("pluginlist" , "str" , "Plugin list (comma separated)" , "" ),
+ ("revertfailed" , "bool" , "Revert to standard download if fails", True ),
+ ("retry" , "int" , "Number of retries before revert" , 10 ),
+ ("retryinterval" , "int" , "Retry interval in minutes" , 1 ),
+ ("reload" , "bool" , "Reload plugin list" , True ),
+ ("reloadinterval", "int" , "Reload interval in hours" , 12 )]
- __description__ = """mega-debrid.eu hook plugin"""
+ __description__ = """Mega-debrid.eu hook plugin"""
__license__ = "GPLv3"
__authors__ = [("D.Ducatel", "dducatel@je-geek.fr")]
- def getHoster(self):
- reponse = getURL("http://www.mega-debrid.eu/api.php", get={'action': "getHosters"})
+ def getHosters(self):
+ reponse = self.getURL("http://www.mega-debrid.eu/api.php", get={'action': "getHosters"})
json_data = json_loads(reponse)
if json_data['response_code'] == "ok":
diff --git a/module/plugins/hooks/MultihostersCom.py b/module/plugins/hooks/MultihostersCom.py
new file mode 100644
index 000000000..bf88cfae7
--- /dev/null
+++ b/module/plugins/hooks/MultihostersCom.py
@@ -0,0 +1,18 @@
+# -*- coding: utf-8 -*-
+
+from module.plugins.hooks.ZeveraCom import ZeveraCom
+
+
+class MultihostersCom(ZeveraCom):
+ __name__ = "MultihostersCom"
+ __type__ = "hook"
+ __version__ = "0.02"
+
+ __config__ = [("mode" , "all;listed;unlisted", "Use for plugins (if supported)" , "all"),
+ ("pluginlist" , "str" , "Plugin list (comma separated)" , "" ),
+ ("revertfailed", "bool" , "Revert to standard download if download fails", False),
+ ("interval" , "int" , "Reload interval in hours (0 to disable)" , 12 )]
+
+ __description__ = """Multihosters.com hook plugin"""
+ __license__ = "GPLv3"
+ __authors__ = [("tjeh", "tjeh@gmx.net")]
diff --git a/module/plugins/hooks/MultishareCz.py b/module/plugins/hooks/MultishareCz.py
index 791f65f6d..d02f4f8e3 100644
--- a/module/plugins/hooks/MultishareCz.py
+++ b/module/plugins/hooks/MultishareCz.py
@@ -2,17 +2,21 @@
import re
-from pyload.network.RequestFactory import getURL
-from pyload.plugin.internal.MultiHoster import MultiHoster
+from module.plugins.internal.MultiHook import MultiHook
-class MultishareCz(MultiHoster):
+class MultishareCz(MultiHook):
__name__ = "MultishareCz"
__type__ = "hook"
- __version__ = "0.04"
+ __version__ = "0.07"
- __config__ = [("hosterListMode", "all;listed;unlisted", "Use for hosters (if supported)", "all"),
- ("hosterList", "str", "Hoster list (comma separated)", "uloz.to")]
+ __config__ = [("pluginmode" , "all;listed;unlisted", "Use for plugins" , "all"),
+ ("pluginlist" , "str" , "Plugin list (comma separated)" , "" ),
+ ("revertfailed" , "bool" , "Revert to standard download if fails", True ),
+ ("retry" , "int" , "Number of retries before revert" , 10 ),
+ ("retryinterval" , "int" , "Retry interval in minutes" , 1 ),
+ ("reload" , "bool" , "Reload plugin list" , True ),
+ ("reloadinterval", "int" , "Reload interval in hours" , 12 )]
__description__ = """MultiShare.cz hook plugin"""
__license__ = "GPLv3"
@@ -22,6 +26,6 @@ class MultishareCz(MultiHoster):
HOSTER_PATTERN = r'<img class="logo-shareserveru"[^>]*?alt="([^"]+)"></td>\s*<td class="stav">[^>]*?alt="OK"'
- def getHoster(self):
- page = getURL("http://www.multishare.cz/monitoring/")
- return re.findall(self.HOSTER_PATTERN, page)
+ def getHosters(self):
+ html = self.getURL("http://www.multishare.cz/monitoring/")
+ return re.findall(self.HOSTER_PATTERN, html)
diff --git a/module/plugins/hooks/MyfastfileCom.py b/module/plugins/hooks/MyfastfileCom.py
index 9e3709556..a1b5aaba0 100644
--- a/module/plugins/hooks/MyfastfileCom.py
+++ b/module/plugins/hooks/MyfastfileCom.py
@@ -1,29 +1,29 @@
# -*- coding: utf-8 -*-
-from pyload.network.RequestFactory import getURL
-from pyload.plugin.internal.MultiHoster import MultiHoster
+from module.plugins.internal.MultiHook import MultiHook
from pyload.utils import json_loads
-class MyfastfileCom(MultiHoster):
+class MyfastfileCom(MultiHook):
__name__ = "MyfastfileCom"
__type__ = "hook"
- __version__ = "0.02"
+ __version__ = "0.05"
-
- __config__ = [("hosterListMode", "all;listed;unlisted", "Use for hosters (if supported)", "all"),
- ("hosterList", "str", "Hoster list (comma separated)", ""),
- ("unloadFailing", "bool", "Revert to standard download if download fails", False),
- ("interval", "int", "Reload interval in hours (0 to disable)", 24)]
+ __config__ = [("pluginmode" , "all;listed;unlisted", "Use for plugins" , "all"),
+ ("pluginlist" , "str" , "Plugin list (comma separated)" , "" ),
+ ("revertfailed" , "bool" , "Revert to standard download if fails", True ),
+ ("retry" , "int" , "Number of retries before revert" , 10 ),
+ ("retryinterval" , "int" , "Retry interval in minutes" , 1 ),
+ ("reload" , "bool" , "Reload plugin list" , True ),
+ ("reloadinterval", "int" , "Reload interval in hours" , 12 )]
__description__ = """Myfastfile.com hook plugin"""
__license__ = "GPLv3"
__authors__ = [("stickell", "l.stickell@yahoo.it")]
-
- def getHoster(self):
- json_data = getURL("http://myfastfile.com/api.php", get={'hosts': ""}, decode=True)
+ def getHosters(self):
+ json_data = self.getURL("http://myfastfile.com/api.php", get={'hosts': ""}, decode=True)
self.logDebug("JSON data", json_data)
json_data = json_loads(json_data)
diff --git a/module/plugins/hooks/NoPremiumPl.py b/module/plugins/hooks/NoPremiumPl.py
new file mode 100644
index 000000000..1727bec70
--- /dev/null
+++ b/module/plugins/hooks/NoPremiumPl.py
@@ -0,0 +1,31 @@
+# -*- coding: utf-8 -*-
+
+from module.common.json_layer import json_loads
+from module.plugins.internal.MultiHook import MultiHook
+
+
+class NoPremiumPl(MultiHook):
+ __name__ = "NoPremiumPl"
+ __type__ = "hook"
+ __version__ = "0.03"
+
+ __config__ = [("pluginmode" , "all;listed;unlisted", "Use for plugins" , "all"),
+ ("pluginlist" , "str" , "Plugin list (comma separated)" , "" ),
+ ("revertfailed" , "bool" , "Revert to standard download if fails", True ),
+ ("retry" , "int" , "Number of retries before revert" , 10 ),
+ ("retryinterval" , "int" , "Retry interval in minutes" , 1 ),
+ ("reload" , "bool" , "Reload plugin list" , True ),
+ ("reloadinterval", "int" , "Reload interval in hours" , 12 )]
+
+ __description__ = """NoPremium.pl hook plugin"""
+ __license__ = "GPLv3"
+ __authors__ = [("goddie", "dev@nopremium.pl")]
+
+
+ def getHosters(self):
+ hostings = json_loads(self.getURL("https://www.nopremium.pl/clipboard.php?json=3").strip())
+ hostings_domains = [domain for row in hostings for domain in row["domains"] if row["sdownload"] == "0"]
+
+ self.logDebug(hostings_domains)
+
+ return hostings_domains
diff --git a/module/plugins/hooks/OverLoadMe.py b/module/plugins/hooks/OverLoadMe.py
index 93052c014..b15ce2766 100644
--- a/module/plugins/hooks/OverLoadMe.py
+++ b/module/plugins/hooks/OverLoadMe.py
@@ -1,29 +1,31 @@
# -*- coding: utf-8 -*-
-from pyload.network.RequestFactory import getURL
-from pyload.plugin.internal.MultiHoster import MultiHoster
+from module.plugins.internal.MultiHook import MultiHook
-class OverLoadMe(MultiHoster):
+class OverLoadMe(MultiHook):
__name__ = "OverLoadMe"
__type__ = "hook"
- __version__ = "0.01"
+ __version__ = "0.04"
- __config__ = [("https", "bool", "Enable HTTPS", True),
- ("hosterListMode", "all;listed;unlisted", "Use for hosters (if supported):", "all"),
- ("hosterList", "str", "Hoster list (comma separated)", ""),
- ("unloadFailing", "bool", "Revert to standard download if download fails", False),
- ("interval", "int", "Reload interval in hours (0 to disable)", 12)]
+ __config__ = [("pluginmode" , "all;listed;unlisted", "Use for plugins" , "all"),
+ ("pluginlist" , "str" , "Plugin list (comma separated)" , "" ),
+ ("revertfailed" , "bool" , "Revert to standard download if fails", True ),
+ ("retry" , "int" , "Number of retries before revert" , 10 ),
+ ("retryinterval" , "int" , "Retry interval in minutes" , 1 ),
+ ("reload" , "bool" , "Reload plugin list" , True ),
+ ("reloadinterval", "int" , "Reload interval in hours" , 12 ),
+ ("ssl" , "bool" , "Use HTTPS" , True )]
__description__ = """Over-Load.me hook plugin"""
__license__ = "GPLv3"
__authors__ = [("marley", "marley@over-load.me")]
- def getHoster(self):
- https = "https" if self.getConfig("https") else "http"
- page = getURL(https + "://api.over-load.me/hoster.php",
+ def getHosters(self):
+ https = "https" if self.getConfig("ssl") else "http"
+ html = self.getURL(https + "://api.over-load.me/hoster.php",
get={'auth': "0001-cb1f24dadb3aa487bda5afd3b76298935329be7700cd7-5329be77-00cf-1ca0135f"}).replace("\"", "").strip()
- self.logDebug("Hosterlist", page)
+ self.logDebug("Hosterlist", html)
- return [x.strip() for x in page.split(",") if x.strip()]
+ return [x.strip() for x in html.split(",") if x.strip()]
diff --git a/module/plugins/hooks/PremiumTo.py b/module/plugins/hooks/PremiumTo.py
index 08c3dc6bd..b629b111e 100644
--- a/module/plugins/hooks/PremiumTo.py
+++ b/module/plugins/hooks/PremiumTo.py
@@ -1,16 +1,20 @@
# -*- coding: utf-8 -*-
-from pyload.network.RequestFactory import getURL
-from pyload.plugin.internal.MultiHoster import MultiHoster
+from module.plugins.internal.MultiHook import MultiHook
-class PremiumTo(MultiHoster):
+class PremiumTo(MultiHook):
__name__ = "PremiumTo"
__type__ = "hook"
- __version__ = "0.04"
+ __version__ = "0.08"
- __config__ = [("hosterListMode", "all;listed;unlisted", "Use for downloads from supported hosters:", "all"),
- ("hosterList", "str", "Hoster list (comma separated)", "")]
+ __config__ = [("pluginmode" , "all;listed;unlisted", "Use for plugins" , "all"),
+ ("pluginlist" , "str" , "Plugin list (comma separated)" , "" ),
+ ("revertfailed" , "bool" , "Revert to standard download if fails", True ),
+ ("retry" , "int" , "Number of retries before revert" , 10 ),
+ ("retryinterval" , "int" , "Retry interval in minutes" , 1 ),
+ ("reload" , "bool" , "Reload plugin list" , True ),
+ ("reloadinterval", "int" , "Reload interval in hours" , 12 )]
__description__ = """Premium.to hook plugin"""
__license__ = "GPLv3"
@@ -19,20 +23,7 @@ class PremiumTo(MultiHoster):
("stickell", "l.stickell@yahoo.it")]
-
- def getHoster(self):
- page = getURL("http://premium.to/api/hosters.php",
+ def getHosters(self):
+ html = self.getURL("http://premium.to/api/hosters.php",
get={'username': self.account.username, 'password': self.account.password})
- return [x.strip() for x in page.replace("\"", "").split(";")]
-
-
- def activate(self):
- self.account = self.core.accountManager.getAccountPlugin("PremiumTo")
-
- user = self.account.selectAccount()[0]
-
- if not user:
- self.logError(_("Please add your premium.to account first and restart pyLoad"))
- return
-
- return MultiHoster.activate(self)
+ return [x.strip() for x in html.replace("\"", "").split(";")]
diff --git a/module/plugins/hooks/PremiumizeMe.py b/module/plugins/hooks/PremiumizeMe.py
index 5199adc2f..18b6187c4 100644
--- a/module/plugins/hooks/PremiumizeMe.py
+++ b/module/plugins/hooks/PremiumizeMe.py
@@ -1,36 +1,34 @@
# -*- coding: utf-8 -*-
from pyload.utils import json_loads
-from pyload.network.RequestFactory import getURL
-from pyload.plugin.internal.MultiHoster import MultiHoster
+from module.plugins.internal.MultiHook import MultiHook
-class PremiumizeMe(MultiHoster):
+class PremiumizeMe(MultiHook):
__name__ = "PremiumizeMe"
__type__ = "hook"
- __version__ = "0.12"
+ __version__ = "0.17"
- __config__ = [("hosterListMode", "all;listed;unlisted", "Use for hosters (if supported):", "all"),
- ("hosterList", "str", "Hoster list (comma separated)", ""),
- ("unloadFailing", "bool", "Revert to stanard download if download fails", False),
- ("interval", "int", "Reload interval in hours (0 to disable)", 24)]
+ __config__ = [("pluginmode" , "all;listed;unlisted", "Use for plugins" , "all"),
+ ("pluginlist" , "str" , "Plugin list (comma separated)" , "" ),
+ ("revertfailed" , "bool" , "Revert to standard download if fails", True ),
+ ("retry" , "int" , "Number of retries before revert" , 10 ),
+ ("retryinterval" , "int" , "Retry interval in minutes" , 1 ),
+ ("reload" , "bool" , "Reload plugin list" , True ),
+ ("reloadinterval", "int" , "Reload interval in hours" , 12 )]
__description__ = """Premiumize.me hook plugin"""
__license__ = "GPLv3"
__authors__ = [("Florian Franzen", "FlorianFranzen@gmail.com")]
- def getHoster(self):
- # If no accounts are available there will be no hosters available
- if not self.account or not self.account.canUse():
- return []
-
+ def getHosters(self):
# Get account data
- (user, data) = self.account.selectAccount()
+ user, data = self.account.selectAccount()
# Get supported hosters list from premiumize.me using the
# json API v1 (see https://secure.premiumize.me/?show=api)
- answer = getURL("https://api.premiumize.me/pm-api/v1.php"
+ answer = self.getURL("https://api.premiumize.me/pm-api/v1.php",
get={'method': "hosterlist", 'params[login]': user, 'params[pass]': data['password']})
data = json_loads(answer)
@@ -40,15 +38,3 @@ class PremiumizeMe(MultiHoster):
# Extract hosters from json file
return data['result']['hosterlist']
-
-
- def activate(self):
- # Get account plugin and check if there is a valid account available
- self.account = self.core.accountManager.getAccountPlugin("PremiumizeMe")
- if not self.account.canUse():
- self.account = None
- self.logError(_("Please add a valid premiumize.me account first and restart pyLoad"))
- return
-
- # Run the overwriten core ready which actually enables the multihoster hook
- return MultiHoster.activate(self)
diff --git a/module/plugins/hooks/PutdriveCom.py b/module/plugins/hooks/PutdriveCom.py
new file mode 100644
index 000000000..f665dabee
--- /dev/null
+++ b/module/plugins/hooks/PutdriveCom.py
@@ -0,0 +1,18 @@
+# -*- coding: utf-8 -*-
+
+from module.plugins.hooks.ZeveraCom import ZeveraCom
+
+
+class PutdriveCom(ZeveraCom):
+ __name__ = "PutdriveCom"
+ __type__ = "hook"
+ __version__ = "0.01"
+
+ __config__ = [("mode" , "all;listed;unlisted", "Use for plugins (if supported)" , "all"),
+ ("pluginlist" , "str" , "Plugin list (comma separated)" , "" ),
+ ("revertfailed", "bool" , "Revert to standard download if download fails", False),
+ ("interval" , "int" , "Reload interval in hours (0 to disable)" , 12 )]
+
+ __description__ = """Putdrive.com hook plugin"""
+ __license__ = "GPLv3"
+ __authors__ = [("Walter Purcaro", "vuolter@gmail.com")]
diff --git a/module/plugins/hooks/RPNetBiz.py b/module/plugins/hooks/RPNetBiz.py
index f58387dda..2277b10ab 100644
--- a/module/plugins/hooks/RPNetBiz.py
+++ b/module/plugins/hooks/RPNetBiz.py
@@ -1,34 +1,32 @@
# -*- coding: utf-8 -*-
from pyload.utils import json_loads
-from pyload.network.RequestFactory import getURL
-from pyload.plugin.internal.MultiHoster import MultiHoster
+from module.plugins.internal.MultiHook import MultiHook
-class RPNetBiz(MultiHoster):
+class RPNetBiz(MultiHook):
__name__ = "RPNetBiz"
__type__ = "hook"
- __version__ = "0.10"
+ __version__ = "0.14"
- __config__ = [("hosterListMode", "all;listed;unlisted", "Use for hosters (if supported):", "all"),
- ("hosterList", "str", "Hoster list (comma separated)", ""),
- ("unloadFailing", "bool", "Revert to stanard download if download fails", False),
- ("interval", "int", "Reload interval in hours (0 to disable)", 24)]
+ __config__ = [("pluginmode" , "all;listed;unlisted", "Use for plugins" , "all"),
+ ("pluginlist" , "str" , "Plugin list (comma separated)" , "" ),
+ ("revertfailed" , "bool" , "Revert to standard download if fails", True ),
+ ("retry" , "int" , "Number of retries before revert" , 10 ),
+ ("retryinterval" , "int" , "Retry interval in minutes" , 1 ),
+ ("reload" , "bool" , "Reload plugin list" , True ),
+ ("reloadinterval", "int" , "Reload interval in hours" , 12 )]
__description__ = """RPNet.biz hook plugin"""
__license__ = "GPLv3"
__authors__ = [("Dman", "dmanugm@gmail.com")]
- def getHoster(self):
- # No hosts supported if no account
- if not self.account or not self.account.canUse():
- return []
-
+ def getHosters(self):
# Get account data
- (user, data) = self.account.selectAccount()
+ user, data = self.account.selectAccount()
- res = getURL("https://premium.rpnet.biz/client_api.php",
+ res = self.getURL("https://premium.rpnet.biz/client_api.php",
get={'username': user, 'password': data['password'], 'action': "showHosterList"})
hoster_list = json_loads(res)
@@ -38,15 +36,3 @@ class RPNetBiz(MultiHoster):
# Extract hosters from json file
return hoster_list['hosters']
-
-
- def activate(self):
- # Get account plugin and check if there is a valid account available
- self.account = self.core.accountManager.getAccountPlugin("RPNetBiz")
- if not self.account.canUse():
- self.account = None
- self.logError(_("Please enter your %s account or deactivate this plugin") % "rpnet")
- return
-
- # Run the overwriten core ready which actually enables the multihoster hook
- return MultiHoster.activate(self)
diff --git a/module/plugins/hooks/RapideoPl.py b/module/plugins/hooks/RapideoPl.py
new file mode 100644
index 000000000..b605eca17
--- /dev/null
+++ b/module/plugins/hooks/RapideoPl.py
@@ -0,0 +1,31 @@
+# -*- coding: utf-8 -*-
+
+from module.common.json_layer import json_loads
+from module.plugins.internal.MultiHook import MultiHook
+
+
+class RapideoPl(MultiHook):
+ __name__ = "RapideoPl"
+ __type__ = "hook"
+ __version__ = "0.03"
+
+ __config__ = [("pluginmode" , "all;listed;unlisted", "Use for plugins" , "all"),
+ ("pluginlist" , "str" , "Plugin list (comma separated)" , "" ),
+ ("revertfailed" , "bool" , "Revert to standard download if fails", True ),
+ ("retry" , "int" , "Number of retries before revert" , 10 ),
+ ("retryinterval" , "int" , "Retry interval in minutes" , 1 ),
+ ("reload" , "bool" , "Reload plugin list" , True ),
+ ("reloadinterval", "int" , "Reload interval in hours" , 12 )]
+
+ __description__ = """Rapideo.pl hook plugin"""
+ __license__ = "GPLv3"
+ __authors__ = [("goddie", "dev@rapideo.pl")]
+
+
+ def getHosters(self):
+ hostings = json_loads(self.getURL("https://www.rapideo.pl/clipboard.php?json=3").strip())
+ hostings_domains = [domain for row in hostings for domain in row["domains"] if row["sdownload"] == "0"]
+
+ self.logDebug(hostings_domains)
+
+ return hostings_domains
diff --git a/module/plugins/hooks/RealdebridCom.py b/module/plugins/hooks/RealdebridCom.py
index a7e3a08cd..d9c9407dd 100644
--- a/module/plugins/hooks/RealdebridCom.py
+++ b/module/plugins/hooks/RealdebridCom.py
@@ -1,27 +1,29 @@
# -*- coding: utf-8 -*-
-from pyload.network.RequestFactory import getURL
-from pyload.plugin.internal.MultiHoster import MultiHoster
+from module.plugins.internal.MultiHook import MultiHook
-class RealdebridCom(MultiHoster):
+class RealdebridCom(MultiHook):
__name__ = "RealdebridCom"
__type__ = "hook"
- __version__ = "0.43"
+ __version__ = "0.46"
- __config__ = [("https", "bool", "Enable HTTPS", False),
- ("hosterListMode", "all;listed;unlisted", "Use for hosters (if supported):", "all"),
- ("hosterList", "str", "Hoster list (comma separated)", ""),
- ("unloadFailing", "bool", "Revert to stanard download if download fails", False),
- ("interval", "int", "Reload interval in hours (0 to disable)", 24)]
+ __config__ = [("pluginmode" , "all;listed;unlisted", "Use for plugins" , "all"),
+ ("pluginlist" , "str" , "Plugin list (comma separated)" , "" ),
+ ("revertfailed" , "bool" , "Revert to standard download if fails", True ),
+ ("retry" , "int" , "Number of retries before revert" , 10 ),
+ ("retryinterval" , "int" , "Retry interval in minutes" , 1 ),
+ ("reload" , "bool" , "Reload plugin list" , True ),
+ ("reloadinterval", "int" , "Reload interval in hours" , 12 ),
+ ("ssl" , "bool" , "Use HTTPS" , True )]
__description__ = """Real-Debrid.com hook plugin"""
__license__ = "GPLv3"
__authors__ = [("Devirex Hazzard", "naibaf_11@yahoo.de")]
- def getHoster(self):
- https = "https" if self.getConfig("https") else "http"
- page = getURL(https + "://real-debrid.com/api/hosters.php").replace("\"", "").strip()
+ def getHosters(self):
+ https = "https" if self.getConfig("ssl") else "http"
+ html = self.getURL(https + "://real-debrid.com/api/hosters.php").replace("\"", "").strip()
- return [x.strip() for x in page.split(",") if x.strip()]
+ return [x.strip() for x in html.split(",") if x.strip()]
diff --git a/module/plugins/hooks/RehostTo.py b/module/plugins/hooks/RehostTo.py
index cf993a79b..845601c3f 100644
--- a/module/plugins/hooks/RehostTo.py
+++ b/module/plugins/hooks/RehostTo.py
@@ -1,41 +1,29 @@
# -*- coding: utf-8 -*-
-from pyload.network.RequestFactory import getURL
-from pyload.plugin.internal.MultiHoster import MultiHoster
+from module.plugins.internal.MultiHook import MultiHook
-class RehostTo(MultiHoster):
+class RehostTo(MultiHook):
__name__ = "RehostTo"
__type__ = "hook"
- __version__ = "0.43"
+ __version__ = "0.50"
- __config__ = [("hosterListMode", "all;listed;unlisted", "Use for hosters (if supported)", "all"),
- ("hosterList", "str", "Hoster list (comma separated)", ""),
- ("unloadFailing", "bool", "Revert to stanard download if download fails", False),
- ("interval", "int", "Reload interval in hours (0 to disable)", 24)]
+ __config__ = [("pluginmode" , "all;listed;unlisted", "Use for plugins" , "all"),
+ ("pluginlist" , "str" , "Plugin list (comma separated)" , "" ),
+ ("revertfailed" , "bool" , "Revert to standard download if fails", True ),
+ ("retry" , "int" , "Number of retries before revert" , 10 ),
+ ("retryinterval" , "int" , "Retry interval in minutes" , 1 ),
+ ("reload" , "bool" , "Reload plugin list" , True ),
+ ("reloadinterval", "int" , "Reload interval in hours" , 12 )]
__description__ = """Rehost.to hook plugin"""
__license__ = "GPLv3"
__authors__ = [("RaNaN", "RaNaN@pyload.org")]
- def getHoster(self):
- page = getURL("http://rehost.to/api.php",
- get={'cmd': "get_supported_och_dl", 'long_ses': self.long_ses})
- return [x.strip() for x in page.replace("\"", "").split(",")]
-
-
- def activate(self):
- self.account = self.core.accountManager.getAccountPlugin("RehostTo")
-
- user = self.account.selectAccount()[0]
-
- if not user:
- self.logError(_("Please add your rehost.to account first and restart pyLoad"))
- return
-
- data = self.account.getAccountInfo(user)
- self.ses = data['ses']
- self.long_ses = data['long_ses']
-
- return MultiHoster.activate(self)
+ def getHosters(self):
+ user, data = self.account.selectAccount()
+ html = self.getURL("http://rehost.to/api.php",
+ get={'cmd' : "get_supported_och_dl",
+ 'long_ses': self.account.getAccountInfo(user)['session']})
+ return [x.strip() for x in html.replace("\"", "").split(",")]
diff --git a/module/plugins/hooks/SimplyPremiumCom.py b/module/plugins/hooks/SimplyPremiumCom.py
index 1e280eca2..e51cbd1bc 100644
--- a/module/plugins/hooks/SimplyPremiumCom.py
+++ b/module/plugins/hooks/SimplyPremiumCom.py
@@ -1,27 +1,29 @@
# -*- coding: utf-8 -*-
from pyload.utils import json_loads
-from pyload.network.RequestFactory import getURL
-from pyload.plugin.internal.MultiHoster import MultiHoster
+from module.plugins.internal.MultiHook import MultiHook
-class SimplyPremiumCom(MultiHoster):
+class SimplyPremiumCom(MultiHook):
__name__ = "SimplyPremiumCom"
__type__ = "hook"
- __version__ = "0.02"
+ __version__ = "0.05"
- __config__ = [("hosterListMode", "all;listed;unlisted", "Use for hosters (if supported)", "all"),
- ("hosterList", "str", "Hoster list (comma separated)", ""),
- ("unloadFailing", "bool", "Revert to standard download if download fails", "False"),
- ("interval", "int", "Reload interval in hours (0 to disable)", "24")]
+ __config__ = [("pluginmode" , "all;listed;unlisted", "Use for plugins" , "all"),
+ ("pluginlist" , "str" , "Plugin list (comma separated)" , "" ),
+ ("revertfailed" , "bool" , "Revert to standard download if fails", True ),
+ ("retry" , "int" , "Number of retries before revert" , 10 ),
+ ("retryinterval" , "int" , "Retry interval in minutes" , 1 ),
+ ("reload" , "bool" , "Reload plugin list" , True ),
+ ("reloadinterval", "int" , "Reload interval in hours" , 12 )]
__description__ = """Simply-Premium.com hook plugin"""
__license__ = "GPLv3"
__authors__ = [("EvolutionClip", "evolutionclip@live.de")]
- def getHoster(self):
- json_data = getURL("http://www.simply-premium.com/api/hosts.php", get={'format': "json", 'online': 1})
+ def getHosters(self):
+ json_data = self.getURL("http://www.simply-premium.com/api/hosts.php", get={'format': "json", 'online': 1})
json_data = json_loads(json_data)
host_list = [element['regex'] for element in json_data['result']]
diff --git a/module/plugins/hooks/SimplydebridCom.py b/module/plugins/hooks/SimplydebridCom.py
index 650de5545..4d27f5ae4 100644
--- a/module/plugins/hooks/SimplydebridCom.py
+++ b/module/plugins/hooks/SimplydebridCom.py
@@ -1,22 +1,26 @@
# -*- coding: utf-8 -*-
-from pyload.network.RequestFactory import getURL
-from pyload.plugin.internal.MultiHoster import MultiHoster
+from module.plugins.internal.MultiHook import MultiHook
-class SimplydebridCom(MultiHoster):
+class SimplydebridCom(MultiHook):
__name__ = "SimplydebridCom"
__type__ = "hook"
- __version__ = "0.01"
+ __version__ = "0.04"
- __config__ = [("hosterListMode", "all;listed;unlisted", "Use for hosters (if supported)", "all"),
- ("hosterList", "str", "Hoster list (comma separated)", "")]
+ __config__ = [("pluginmode" , "all;listed;unlisted", "Use for plugins" , "all"),
+ ("pluginlist" , "str" , "Plugin list (comma separated)" , "" ),
+ ("revertfailed" , "bool" , "Revert to standard download if fails", True ),
+ ("retry" , "int" , "Number of retries before revert" , 10 ),
+ ("retryinterval" , "int" , "Retry interval in minutes" , 1 ),
+ ("reload" , "bool" , "Reload plugin list" , True ),
+ ("reloadinterval", "int" , "Reload interval in hours" , 12 )]
__description__ = """Simply-Debrid.com hook plugin"""
__license__ = "GPLv3"
__authors__ = [("Kagenoshin", "kagenoshin@gmx.ch")]
- def getHoster(self):
- page = getURL("http://simply-debrid.com/api.php", get={'list': 1})
- return [x.strip() for x in page.rstrip(';').replace("\"", "").split(";")]
+ def getHosters(self):
+ html = self.getURL("http://simply-debrid.com/api.php", get={'list': 1})
+ return [x.strip() for x in html.rstrip(';').replace("\"", "").split(";")]
diff --git a/module/plugins/hooks/SmoozedCom.py b/module/plugins/hooks/SmoozedCom.py
new file mode 100644
index 000000000..9ba2daac9
--- /dev/null
+++ b/module/plugins/hooks/SmoozedCom.py
@@ -0,0 +1,26 @@
+# -*- coding: utf-8 -*-
+
+from module.plugins.internal.MultiHook import MultiHook
+
+
+class SmoozedCom(MultiHook):
+ __name__ = "SmoozedCom"
+ __type__ = "hook"
+ __version__ = "0.03"
+
+ __config__ = [("pluginmode" , "all;listed;unlisted", "Use for plugins" , "all"),
+ ("pluginlist" , "str" , "Plugin list (comma separated)" , "" ),
+ ("revertfailed" , "bool" , "Revert to standard download if fails", True ),
+ ("retry" , "int" , "Number of retries before revert" , 10 ),
+ ("retryinterval" , "int" , "Retry interval in minutes" , 1 ),
+ ("reload" , "bool" , "Reload plugin list" , True ),
+ ("reloadinterval", "int" , "Reload interval in hours" , 12 )]
+
+ __description__ = """Smoozed.com hook plugin"""
+ __license__ = "GPLv3"
+ __authors__ = [("", "")]
+
+
+ def getHosters(self):
+ user, data = self.account.selectAccount()
+ return self.account.getAccountInfo(user)["hosters"]
diff --git a/module/plugins/hooks/UnrestrictLi.py b/module/plugins/hooks/UnrestrictLi.py
index 8a3b2a040..b4c547883 100644
--- a/module/plugins/hooks/UnrestrictLi.py
+++ b/module/plugins/hooks/UnrestrictLi.py
@@ -1,30 +1,30 @@
# -*- coding: utf-8 -*-
from pyload.utils import json_loads
-from pyload.network.RequestFactory import getURL
-from pyload.plugin.internal.MultiHoster import MultiHoster
+from module.plugins.internal.MultiHook import MultiHook
-class UnrestrictLi(MultiHoster):
+class UnrestrictLi(MultiHook):
__name__ = "UnrestrictLi"
__type__ = "hook"
- __version__ = "0.02"
+ __version__ = "0.05"
- __config__ = [("hosterListMode", "all;listed;unlisted", "Use for hosters (if supported)", "all"),
- ("hosterList", "str", "Hoster list (comma separated)", ""),
- ("unloadFailing", "bool", "Revert to standard download if download fails", False),
- ("interval", "int", "Reload interval in hours (0 to disable)", 24),
- ("history", "bool", "Delete History", False)]
+ __config__ = [("pluginmode" , "all;listed;unlisted", "Use for plugins" , "all"),
+ ("pluginlist" , "str" , "Plugin list (comma separated)" , "" ),
+ ("revertfailed" , "bool" , "Revert to standard download if fails", True ),
+ ("retry" , "int" , "Number of retries before revert" , 10 ),
+ ("retryinterval" , "int" , "Retry interval in minutes" , 1 ),
+ ("reload" , "bool" , "Reload plugin list" , True ),
+ ("reloadinterval", "int" , "Reload interval in hours" , 12 ),
+ ("history" , "bool" , "Delete History" , False)]
__description__ = """Unrestrict.li hook plugin"""
__license__ = "GPLv3"
__authors__ = [("stickell", "l.stickell@yahoo.it")]
- def getHoster(self):
- json_data = getURL("http://unrestrict.li/api/jdownloader/hosts.php", get={'format': "json"})
+ def getHosters(self):
+ json_data = self.getURL("http://unrestrict.li/api/jdownloader/hosts.php", get={'format': "json"})
json_data = json_loads(json_data)
- host_list = [element['host'] for element in json_data['result']]
-
- return host_list
+ return [element['host'] for element in json_data['result']]
diff --git a/module/plugins/hooks/WindowsPhoneNotify.py b/module/plugins/hooks/WindowsPhoneNotify.py
new file mode 100644
index 000000000..e0dd75f92
--- /dev/null
+++ b/module/plugins/hooks/WindowsPhoneNotify.py
@@ -0,0 +1,96 @@
+# -*- coding: utf-8 -*-
+
+import httplib
+
+from time import time
+
+from module.plugins.Hook import Hook
+
+
+class WindowsPhoneNotify(Hook):
+ __name__ = "WindowsPhoneNotify"
+ __type__ = "hook"
+ __version__ = "0.07"
+
+ __config__ = [("id" , "str" , "Push ID" , "" ),
+ ("url" , "str" , "Push url" , "" ),
+ ("notifycaptcha" , "bool", "Notify captcha request" , True ),
+ ("notifypackage" , "bool", "Notify package finished" , True ),
+ ("notifyprocessed", "bool", "Notify processed packages status" , True ),
+ ("timeout" , "int" , "Timeout between captchas in seconds" , 5 ),
+ ("force" , "bool", "Send notifications if client is connected", False)]
+
+ __description__ = """Send push notifications to Windows Phone"""
+ __license__ = "GPLv3"
+ __authors__ = [("Andy Voigt", "phone-support@hotmail.de"),
+ ("Walter Purcaro", "vuolter@gmail.com")]
+
+
+ event_list = ["allDownloadsProcessed"]
+
+
+ #@TODO: Remove in 0.4.10
+ def initPeriodical(self):
+ pass
+
+
+ def setup(self):
+ self.info = {} #@TODO: Remove in 0.4.10
+ self.last_notify = 0
+
+
+ def newCaptchaTask(self, task):
+ if not self.getConfig("notifycaptcha"):
+ return False
+
+ if time() - self.last_notify < self.getConf("timeout"):
+ return False
+
+ self.notify(_("Captcha"), _("New request waiting user input"))
+
+
+ def packageFinished(self, pypack):
+ if self.getConfig("notifypackage"):
+ self.notify(_("Package finished"), pypack.name)
+
+
+ def allDownloadsProcessed(self):
+ if not self.getConfig("notifyprocessed"):
+ return False
+
+ if any(True for pdata in self.core.api.getQueue() if pdata.linksdone < pdata.linkstotal):
+ self.notify(_("Package failed"), _("One or more packages was not completed successfully"))
+ else:
+ self.notify(_("All packages finished"))
+
+
+ def getXmlData(self, msg):
+ return ("<?xml version='1.0' encoding='utf-8'?> <wp:Notification xmlns:wp='WPNotification'> "
+ "<wp:Toast> <wp:Text1>pyLoad</wp:Text1> <wp:Text2>%s</wp:Text2> "
+ "</wp:Toast> </wp:Notification>" % msg)
+
+
+ def notify(self, event, msg=""):
+ id = self.getConfig("id")
+ url = self.getConfig("url")
+
+ if not id or not url:
+ return False
+
+ if self.core.isClientConnected() and not self.getConfig("force"):
+ return False
+
+ request = self.getXmlData("%s: %s" % (event, msg) if msg else event)
+ webservice = httplib.HTTP(url)
+
+ webservice.putrequest("POST", id)
+ webservice.putheader("Host", url)
+ webservice.putheader("Content-type", "text/xml")
+ webservice.putheader("X-NotificationClass", "2")
+ webservice.putheader("X-WindowsPhone-Target", "toast")
+ webservice.putheader("Content-length", "%d" % len(request))
+ webservice.endheaders()
+ webservice.send(request)
+ webservice.close()
+
+ self.last_notify = time()
diff --git a/module/plugins/hooks/XFileSharingPro.py b/module/plugins/hooks/XFileSharingPro.py
index 8fb04cf13..78e14c179 100644
--- a/module/plugins/hooks/XFileSharingPro.py
+++ b/module/plugins/hooks/XFileSharingPro.py
@@ -8,14 +8,14 @@ from pyload.plugin.Addon import Addon
class XFileSharingPro(Addon):
__name__ = "XFileSharingPro"
__type__ = "hook"
- __version__ = "0.26"
+ __version__ = "0.31"
__config__ = [("activated" , "bool", "Activated" , True ),
- ("use_hoster_list" , "bool", "Load listed hosters only" , True ),
- ("use_crypter_list", "bool", "Load listed crypters only" , False),
- ("use_builtin_list", "bool", "Load built-in plugin list" , True ),
- ("hoster_list" , "str" , "Hoster list (comma separated)" , "" ),
- ("crypter_list" , "str" , "Crypter list (comma separated)", "" )]
+ ("use_hoster_list" , "bool", "Load listed hosters only" , False),
+ ("use_crypter_list", "bool", "Load listed crypters only" , False),
+ ("use_builtin_list", "bool", "Load built-in plugin list" , True ),
+ ("hoster_list" , "str" , "Hoster list (comma separated)" , "" ),
+ ("crypter_list" , "str" , "Crypter list (comma separated)", "" )]
__description__ = """Load XFileSharingPro based hosters and crypter which don't need a own plugin to run"""
__license__ = "GPLv3"
@@ -23,21 +23,22 @@ class XFileSharingPro(Addon):
# event_list = ["pluginConfigChanged"]
- regexp = {'hoster' : (r'https?://(?:www\.)?([\w.^_]+(?:\.[a-zA-Z]{2,})(?:\:\d+)?)/(?:embed-)?\w{12}(?:\W|$)',
- r'https?://(?:[^/]+\.)?(%s)/(?:embed-)?\w+'),
- 'crypter': (r'https?://(?:www\.)?([\w.^_]+(?:\.[a-zA-Z]{2,})(?:\:\d+)?)/(?:user|folder)s?/\w+',
- r'https?://(?:[^/]+\.)?(%s)/(?:user|folder)s?/\w+')}
-
- HOSTER_LIST = [#WORKING HOSTERS:
- "eyesfile.ca", "file4safe.com", "fileband.com", "filedwon.com", "filevice.com", "hostingbulk.com",
- "linestorage.com", "ravishare.com", "sharesix.com", "thefile.me", "verzend.be", "xvidstage.com",
- #NOT TESTED:
- "101shared.com", "4upfiles.com", "filemaze.ws", "filenuke.com", "linkzhost.com", "mightyupload.com",
- "rockdizfile.com", "sharebeast.com", "sharerepo.com", "shareswift.com", "uploadbaz.com", "uploadc.com",
- "vidbull.com", "zalaa.com", "zomgupload.com",
- #NOT WORKING:
- "amonshare.com", "banicrazy.info", "boosterking.com", "host4desi.com", "laoupload.com", "rd-fs.com"]
- CRYPTER_LIST = []
+ regexp = {'hoster' : (r'https?://(?:www\.)?(?P<DOMAIN>[\w.^_]+(?:\.[a-zA-Z]{2,})(?:\:\d+)?)/(?:embed-)?\w{12}(?:\W|$)',
+ r'https?://(?:[^/]+\.)?(?P<DOMAIN>%s)/(?:embed-)?\w+'),
+ 'crypter': (r'https?://(?:www\.)?(?P<DOMAIN>[\w.^_]+(?:\.[a-zA-Z]{2,})(?:\:\d+)?)/(?:user|folder)s?/\w+',
+ r'https?://(?:[^/]+\.)?(?P<DOMAIN>%s)/(?:user|folder)s?/\w+')}
+
+ HOSTER_BUILTIN = [#WORKING HOSTERS:
+ "180upload.com", "backin.net", "eyesfile.ca", "file4safe.com", "fileband.com", "filedwon.com",
+ "fileparadox.in", "filevice.com", "hostingbulk.com", "junkyvideo.com", "linestorage.com", "ravishare.com",
+ "ryushare.com", "salefiles.com", "sendmyway.com", "sharesix.com", "thefile.me", "verzend.be", "xvidstage.com",
+ #NOT TESTED:
+ "101shared.com", "4upfiles.com", "filemaze.ws", "filenuke.com", "linkzhost.com", "mightyupload.com",
+ "rockdizfile.com", "sharebeast.com", "sharerepo.com", "shareswift.com", "uploadbaz.com", "uploadc.com",
+ "vidbull.com", "zalaa.com", "zomgupload.com",
+ #NOT WORKING:
+ "amonshare.com", "banicrazy.info", "boosterking.com", "host4desi.com", "laoupload.com", "rd-fs.com"]
+ CRYPTER_BUILTIN = ["junocloud.me", "rapidfileshare.net"]
# def pluginConfigChanged(self.__name__, plugin, name, value):
@@ -58,23 +59,26 @@ class XFileSharingPro(Addon):
self.logInfo(_("Handling any %s I can!") % type)
pattern = self.regexp[type][0]
else:
- s = self.getConfig('%s_list' % type).replace('\\', '').replace('|', ',').replace(';', ',').lower()
- plugin_list = set([x.strip() for x in s.split(',')])
+ plugins = self.getConfig('%s_list' % type)
+ plugin_set = set(plugins.replace(' ', '').replace('\\', '').replace('|', ',').replace(';', ',').lower().split(','))
if use_builtin_list:
- plugin_list |= set([x.lower() for x in getattr(self, "%s_LIST" % type.upper())])
+ plugin_set |= set(x.lower() for x in getattr(self, "%s_BUILTIN" % type.upper()))
- plugin_list -= set(('', u''))
+ plugin_set -= set(('', u''))
- if not plugin_list:
+ if not plugin_set:
self.logInfo(_("No %s to handle") % type)
self._unload(type)
return
- match_list = '|'.join(sorted(plugin_list))
+ match_list = '|'.join(sorted(plugin_set))
- len_match_list = len(plugin_list)
- self.logInfo(_("Handling %d %s%s: %s") % (len_match_list, type, "" if len_match_list is 1 else "s", match_list.replace('|', ', ')))
+ len_match_list = len(plugin_set)
+ self.logInfo(_("Handling %d %s%s: %s") % (len_match_list,
+ type,
+ "" if len_match_list == 1 else "s",
+ match_list.replace('|', ', ')))
pattern = self.regexp[type][1] % match_list.replace('.', '\.')
@@ -92,5 +96,15 @@ class XFileSharingPro(Addon):
def deactivate(self):
+ # self.unloadHoster("BasePlugin")
for type in ("hoster", "crypter"):
self._unload(type, "XFileSharingPro")
+
+
+ # def downloadFailed(self, pyfile):
+ # if pyfile.pluginname == "BasePlugin" \
+ # and pyfile.hasStatus("failed") \
+ # and not self.getConfig("use_hoster_list") \
+ # and self.unloadHoster("BasePlugin"):
+ # self.logDebug("Unloaded XFileSharingPro from BasePlugin")
+ # pyfile.setStatus("queued")
diff --git a/module/plugins/hooks/ZeveraCom.py b/module/plugins/hooks/ZeveraCom.py
index e41796a1a..215ec3673 100644
--- a/module/plugins/hooks/ZeveraCom.py
+++ b/module/plugins/hooks/ZeveraCom.py
@@ -1,22 +1,27 @@
# -*- coding: utf-8 -*-
-from pyload.network.RequestFactory import getURL
-from pyload.plugin.internal.MultiHoster import MultiHoster
+from module.plugins.internal.MultiHook import MultiHook
-class ZeveraCom(MultiHoster):
+class ZeveraCom(MultiHook):
__name__ = "ZeveraCom"
__type__ = "hook"
- __version__ = "0.02"
+ __version__ = "0.05"
- __config__ = [("hosterListMode", "all;listed;unlisted", "Use for hosters (if supported)", "all"),
- ("hosterList", "str", "Hoster list (comma separated)", "")]
+ __config__ = [("pluginmode" , "all;listed;unlisted", "Use for plugins" , "all"),
+ ("pluginlist" , "str" , "Plugin list (comma separated)" , "" ),
+ ("revertfailed" , "bool" , "Revert to standard download if fails", True ),
+ ("retry" , "int" , "Number of retries before revert" , 10 ),
+ ("retryinterval" , "int" , "Retry interval in minutes" , 1 ),
+ ("reload" , "bool" , "Reload plugin list" , True ),
+ ("reloadinterval", "int" , "Reload interval in hours" , 12 )]
- __description__ = """Real-Debrid.com hook plugin"""
+ __description__ = """Zevera.com hook plugin"""
__license__ = "GPLv3"
- __authors__ = [("zoidberg", "zoidberg@mujmail.cz")]
+ __authors__ = [("zoidberg", "zoidberg@mujmail.cz"),
+ ("Walter Purcaro", "vuolter@gmail.com")]
- def getHoster(self):
- page = getURL("http://www.zevera.com/jDownloader.ashx", get={'cmd': "gethosters"})
- return [x.strip() for x in page.replace("\"", "").split(",")]
+ def getHosters(self):
+ html = self.account.api_response(pyreq.getHTTPRequest(timeout=120), cmd="gethosters")
+ return [x.strip() for x in html.split(",")]