summaryrefslogtreecommitdiffstats
path: root/module/plugins/hooks
diff options
context:
space:
mode:
Diffstat (limited to 'module/plugins/hooks')
-rw-r--r--module/plugins/hooks/AndroidPhoneNotify.py2
-rw-r--r--module/plugins/hooks/AntiStandby.py12
-rw-r--r--module/plugins/hooks/AntiVirus.py18
-rw-r--r--module/plugins/hooks/BypassCaptcha.py2
-rw-r--r--module/plugins/hooks/Captcha9Kw.py2
-rw-r--r--module/plugins/hooks/CaptchaBrotherhood.py2
-rw-r--r--module/plugins/hooks/Checksum.py16
-rw-r--r--module/plugins/hooks/ClickNLoad.py12
-rw-r--r--module/plugins/hooks/DeathByCaptcha.py20
-rw-r--r--module/plugins/hooks/DeleteFinished.py8
-rw-r--r--module/plugins/hooks/DownloadScheduler.py2
-rw-r--r--module/plugins/hooks/ExpertDecoders.py2
-rw-r--r--module/plugins/hooks/ExternalScripts.py146
-rw-r--r--module/plugins/hooks/ExtractArchive.py27
-rw-r--r--module/plugins/hooks/HotFolder.py8
-rw-r--r--module/plugins/hooks/IRCInterface.py2
-rw-r--r--module/plugins/hooks/ImageTyperz.py2
-rw-r--r--module/plugins/hooks/JustPremium.py2
-rw-r--r--module/plugins/hooks/LinkdecrypterComHook.py2
-rw-r--r--module/plugins/hooks/LogMarker.py2
-rw-r--r--module/plugins/hooks/MergeFiles.py14
-rw-r--r--module/plugins/hooks/MultiHome.py2
-rw-r--r--module/plugins/hooks/RestartFailed.py4
-rw-r--r--module/plugins/hooks/SkipRev.py2
-rw-r--r--module/plugins/hooks/TransmissionRPC.py10
-rw-r--r--module/plugins/hooks/UnSkipOnFail.py2
-rw-r--r--module/plugins/hooks/UpdateManager.py26
-rw-r--r--module/plugins/hooks/UserAgentSwitcher.py2
-rw-r--r--module/plugins/hooks/WindowsPhoneNotify.py2
-rw-r--r--module/plugins/hooks/XFileSharingPro.py6
-rw-r--r--module/plugins/hooks/XMPPInterface.py2
31 files changed, 157 insertions, 204 deletions
diff --git a/module/plugins/hooks/AndroidPhoneNotify.py b/module/plugins/hooks/AndroidPhoneNotify.py
index 60e9297e1..6ac250e7b 100644
--- a/module/plugins/hooks/AndroidPhoneNotify.py
+++ b/module/plugins/hooks/AndroidPhoneNotify.py
@@ -8,7 +8,7 @@ from module.plugins.internal.Addon import Addon, Expose
class AndroidPhoneNotify(Addon):
__name__ = "AndroidPhoneNotify"
__type__ = "hook"
- __version__ = "0.11"
+ __version__ = "0.12"
__status__ = "testing"
__config__ = [("activated" , "bool", "Activated" , False),
diff --git a/module/plugins/hooks/AntiStandby.py b/module/plugins/hooks/AntiStandby.py
index aa7a028a5..5ad95d6e8 100644
--- a/module/plugins/hooks/AntiStandby.py
+++ b/module/plugins/hooks/AntiStandby.py
@@ -13,7 +13,7 @@ except ImportError:
pass
from module.plugins.internal.Addon import Addon, Expose
-from module.utils import fs_encode, save_join as fs_join
+from module.plugins.internal.utils import encode, fs_join
class Kernel32(object):
@@ -27,7 +27,7 @@ class Kernel32(object):
class AntiStandby(Addon):
__name__ = "AntiStandby"
__type__ = "hook"
- __version__ = "0.12"
+ __version__ = "0.13"
__status__ = "testing"
__config__ = [("activated", "bool", "Activated" , True ),
@@ -43,8 +43,6 @@ class AntiStandby(Addon):
TMP_FILE = ".antistandby"
- PERIODICAL_INTERVAL = 5
-
def init(self):
self.pid = None
@@ -155,7 +153,7 @@ class AntiStandby(Addon):
def max_mtime(self, path):
return max(0, 0,
*(os.path.getmtime(fs_join(root, file))
- for root, dirs, files in os.walk(fs_encode(path), topdown=False)
+ for root, dirs, files in os.walk(encode(path), topdown=False)
for file in files))
@@ -168,8 +166,8 @@ class AntiStandby(Addon):
not self.pyload.threadManager.getActiveFiles()):
return
- download_folder = self.pyload.config.get("general", "download_folder")
- if (self.max_mtime(download_folder) - self.mtime) < self.interval:
+ dl_folder = self.pyload.config.get("general", "download_folder")
+ if (self.max_mtime(dl_folder) - self.mtime) < self.interval:
return
self.touch(self.TMP_FILE)
diff --git a/module/plugins/hooks/AntiVirus.py b/module/plugins/hooks/AntiVirus.py
index c68e86c77..b9a7e93bf 100644
--- a/module/plugins/hooks/AntiVirus.py
+++ b/module/plugins/hooks/AntiVirus.py
@@ -11,13 +11,13 @@ except ImportError:
from module.plugins.internal.Addon import Addon, Expose, threaded
from module.plugins.internal.Plugin import exists
-from module.utils import fs_encode, save_join as fs_join
+from module.plugins.internal.utils import encode, fs_join
class AntiVirus(Addon):
__name__ = "AntiVirus"
__type__ = "hook"
- __version__ = "0.14"
+ __version__ = "0.15"
__status__ = "testing"
#@TODO: add trash option (use Send2Trash lib)
@@ -39,8 +39,8 @@ class AntiVirus(Addon):
@Expose
@threaded
def scan(self, pyfile, thread):
- avfile = fs_encode(self.get_config('avfile'))
- avargs = fs_encode(self.get_config('avargs').strip())
+ avfile = encode(self.get_config('avfile'))
+ avargs = encode(self.get_config('avargs').strip())
if not os.path.isfile(avfile):
self.fail(_("Antivirus executable not found"))
@@ -48,12 +48,12 @@ class AntiVirus(Addon):
scanfolder = self.get_config('avtarget') is "folder"
if scanfolder:
- download_folder = self.pyload.config.get("general", "download_folder")
- package_folder = pyfile.package().folder if self.pyload.config.get("general", "folder_per_package") else ""
- target = fs_join(download_folder, package_folder, pyfile.name)
- target_repr = "Folder: " + package_folder or download_folder
+ dl_folder = self.pyload.config.get("general", "download_folder")
+ package_folder = pyfile.package().folder if self.pyload.config.get("general", "folder_per_package") else ""
+ target = fs_join(dl_folder, package_folder, pyfile.name)
+ target_repr = "Folder: " + package_folder or dl_folder
else:
- target = fs_encode(pyfile.plugin.last_download)
+ target = encode(pyfile.plugin.last_download)
target_repr = "File: " + os.path.basename(pyfile.plugin.last_download)
if not exists(target):
diff --git a/module/plugins/hooks/BypassCaptcha.py b/module/plugins/hooks/BypassCaptcha.py
index df8562431..581d2f6dd 100644
--- a/module/plugins/hooks/BypassCaptcha.py
+++ b/module/plugins/hooks/BypassCaptcha.py
@@ -28,7 +28,7 @@ class BypassCaptchaException(Exception):
class BypassCaptcha(Addon):
__name__ = "BypassCaptcha"
__type__ = "hook"
- __version__ = "0.08"
+ __version__ = "0.09"
__status__ = "testing"
__config__ = [("activated" , "bool" , "Activated" , False),
diff --git a/module/plugins/hooks/Captcha9Kw.py b/module/plugins/hooks/Captcha9Kw.py
index b2883534d..3d2861bbf 100644
--- a/module/plugins/hooks/Captcha9Kw.py
+++ b/module/plugins/hooks/Captcha9Kw.py
@@ -14,7 +14,7 @@ from module.plugins.internal.Addon import Addon, threaded
class Captcha9Kw(Addon):
__name__ = "Captcha9Kw"
__type__ = "hook"
- __version__ = "0.30"
+ __version__ = "0.31"
__status__ = "testing"
__config__ = [("activated" , "bool" , "Activated" , False ),
diff --git a/module/plugins/hooks/CaptchaBrotherhood.py b/module/plugins/hooks/CaptchaBrotherhood.py
index 24254ffbb..5411322de 100644
--- a/module/plugins/hooks/CaptchaBrotherhood.py
+++ b/module/plugins/hooks/CaptchaBrotherhood.py
@@ -38,7 +38,7 @@ class CaptchaBrotherhoodException(Exception):
class CaptchaBrotherhood(Addon):
__name__ = "CaptchaBrotherhood"
__type__ = "hook"
- __version__ = "0.10"
+ __version__ = "0.11"
__status__ = "testing"
__config__ = [("activated" , "bool" , "Activated" , False),
diff --git a/module/plugins/hooks/Checksum.py b/module/plugins/hooks/Checksum.py
index 4d0493212..cf5ed2147 100644
--- a/module/plugins/hooks/Checksum.py
+++ b/module/plugins/hooks/Checksum.py
@@ -8,7 +8,7 @@ import re
import zlib
from module.plugins.internal.Addon import Addon
-from module.utils import save_join as fs_join, fs_encode
+from module.plugins.internal.utils import encode, fs_join
def compute_checksum(local_file, algorithm):
@@ -38,7 +38,7 @@ def compute_checksum(local_file, algorithm):
class Checksum(Addon):
__name__ = "Checksum"
__type__ = "hook"
- __version__ = "0.22"
+ __version__ = "0.23"
__status__ = "testing"
__config__ = [("activated" , "bool" , "Activated" , False ),
@@ -103,9 +103,9 @@ class Checksum(Addon):
if not pyfile.plugin.last_download:
self.check_failed(pyfile, None, "No file downloaded")
- local_file = fs_encode(pyfile.plugin.last_download)
- # download_folder = self.pyload.config.get("general", "download_folder")
- # local_file = fs_encode(fs_join(download_folder, pyfile.package().folder, pyfile.name))
+ local_file = encode(pyfile.plugin.last_download)
+ # dl_folder = self.pyload.config.get("general", "download_folder")
+ # local_file = encode(fs_join(dl_folder, pyfile.package().folder, pyfile.name))
if not os.path.isfile(local_file):
self.check_failed(pyfile, None, "File does not exist")
@@ -166,7 +166,7 @@ class Checksum(Addon):
def package_finished(self, pypack):
- download_folder = fs_join(self.pyload.config.get("general", "download_folder"), pypack.folder, "")
+ dl_folder = fs_join(self.pyload.config.get("general", "download_folder"), pypack.folder, "")
for link in pypack.getChildren().values():
file_type = os.path.splitext(link['name'])[1][1:].lower()
@@ -174,7 +174,7 @@ class Checksum(Addon):
if file_type not in self.formats:
continue
- hash_file = fs_encode(fs_join(download_folder, link['name']))
+ hash_file = encode(fs_join(dl_folder, link['name']))
if not os.path.isfile(hash_file):
self.log_warning(_("File not found"), link['name'])
continue
@@ -186,7 +186,7 @@ class Checksum(Addon):
data = m.groupdict()
self.log_debug(link['name'], data)
- local_file = fs_encode(fs_join(download_folder, data['NAME']))
+ local_file = encode(fs_join(dl_folder, data['NAME']))
algorithm = self.methods.get(file_type, file_type)
checksum = compute_checksum(local_file, algorithm)
diff --git a/module/plugins/hooks/ClickNLoad.py b/module/plugins/hooks/ClickNLoad.py
index fa99ac12c..722e4fbe0 100644
--- a/module/plugins/hooks/ClickNLoad.py
+++ b/module/plugins/hooks/ClickNLoad.py
@@ -1,6 +1,7 @@
# -*- coding: utf-8 -*-
import socket
+import threading
import time
try:
@@ -8,8 +9,6 @@ try:
except ImportError:
pass
-from threading import Lock
-
from module.plugins.internal.Addon import Addon, threaded
@@ -22,14 +21,13 @@ def forward(source, destination):
bufdata = source.recv(bufsize)
finally:
destination.shutdown(socket.SHUT_WR)
- #: destination.close()
#@TODO: IPv6 support
class ClickNLoad(Addon):
__name__ = "ClickNLoad"
__type__ = "hook"
- __version__ = "0.48"
+ __version__ = "0.49"
__status__ = "testing"
__config__ = [("activated", "bool" , "Activated" , True ),
@@ -51,7 +49,7 @@ class ClickNLoad(Addon):
webport = self.pyload.config.get("webinterface", "port")
cnlport = self.get_config('port')
- self.proxy(ip, webport, cnlport)
+ self.pyload.scheduler.addJob(5, self.proxy, [ip, webport, cnlport], threaded=False)
@threaded
@@ -69,13 +67,11 @@ class ClickNLoad(Addon):
@threaded
def proxy(self, ip, webport, cnlport):
- time.sleep(10) #@TODO: Remove in 0.4.10 (implement addon delay on startup)
-
self.log_info(_("Proxy listening on %s:%s") % (ip or "0.0.0.0", cnlport))
self._server(ip, webport, cnlport)
- lock = Lock()
+ lock = threading.Lock()
lock.acquire()
lock.acquire()
diff --git a/module/plugins/hooks/DeathByCaptcha.py b/module/plugins/hooks/DeathByCaptcha.py
index 00d6453a4..229c85791 100644
--- a/module/plugins/hooks/DeathByCaptcha.py
+++ b/module/plugins/hooks/DeathByCaptcha.py
@@ -8,7 +8,7 @@ import time
from base64 import b64encode
-from module.common.json_layer import json_loads
+from module.plugins.internal.utils import json
from module.network.HTTPRequest import BadHeader
from module.network.RequestFactory import getRequest as get_request
from module.plugins.internal.Addon import Addon, threaded
@@ -51,7 +51,7 @@ class DeathByCaptchaException(Exception):
class DeathByCaptcha(Addon):
__name__ = "DeathByCaptcha"
__type__ = "hook"
- __version__ = "0.08"
+ __version__ = "0.09"
__status__ = "testing"
__config__ = [("activated" , "bool" , "Activated" , False),
@@ -80,13 +80,13 @@ class DeathByCaptcha(Addon):
res = None
try:
- json = self.load("%s%s" % (self.API_URL, api),
+ html = self.load("%s%s" % (self.API_URL, api),
post=post,
multipart=multipart,
req=req)
- self.log_debug(json)
- res = json_loads(json)
+ self.log_debug(html)
+ res = json.loads(html)
if "error" in res:
raise DeathByCaptchaException(res['error'])
@@ -94,14 +94,18 @@ class DeathByCaptcha(Addon):
raise DeathByCaptchaException(str(res))
except BadHeader, e:
- if 403 is e.code:
+ if e.code is 403:
raise DeathByCaptchaException('not-logged-in')
- elif 413 is e.code:
+
+ elif e.code is 413:
raise DeathByCaptchaException('invalid-captcha')
- elif 503 is e.code:
+
+ elif e.code is 503:
raise DeathByCaptchaException('service-overload')
+
elif e.code in (400, 405):
raise DeathByCaptchaException('invalid-request')
+
else:
raise
diff --git a/module/plugins/hooks/DeleteFinished.py b/module/plugins/hooks/DeleteFinished.py
index e72439c0a..17b85959a 100644
--- a/module/plugins/hooks/DeleteFinished.py
+++ b/module/plugins/hooks/DeleteFinished.py
@@ -7,7 +7,7 @@ from module.plugins.internal.Addon import Addon
class DeleteFinished(Addon):
__name__ = "DeleteFinished"
__type__ = "hook"
- __version__ = "1.16"
+ __version__ = "1.17"
__status__ = "testing"
__config__ = [("activated" , "bool", "Activated" , False),
@@ -22,10 +22,6 @@ class DeleteFinished(Addon):
PERIODICAL_INTERVAL = 1 * 60 * 60 #: 1 hour
- def activate(self):
- self.start_periodical()
-
-
def periodical(self):
if not self.info['sleep']:
deloffline = self.get_config('deloffline')
@@ -43,7 +39,7 @@ class DeleteFinished(Addon):
def activate(self):
self.info['sleep'] = True
- self.interval = max(self.PERIODICAL_INTERVAL, self.get_config('interval') * 60 * 60)
+ self.set_interval(self.get_config('interval') * 60 * 60)
self.add_event('package_finished', self.wakeup)
diff --git a/module/plugins/hooks/DownloadScheduler.py b/module/plugins/hooks/DownloadScheduler.py
index 8454438a1..9c644ab20 100644
--- a/module/plugins/hooks/DownloadScheduler.py
+++ b/module/plugins/hooks/DownloadScheduler.py
@@ -9,7 +9,7 @@ from module.plugins.internal.Addon import Addon
class DownloadScheduler(Addon):
__name__ = "DownloadScheduler"
__type__ = "hook"
- __version__ = "0.24"
+ __version__ = "0.25"
__status__ = "testing"
__config__ = [("activated", "bool", "Activated" , False ),
diff --git a/module/plugins/hooks/ExpertDecoders.py b/module/plugins/hooks/ExpertDecoders.py
index e94a966f2..55c07d4b9 100644
--- a/module/plugins/hooks/ExpertDecoders.py
+++ b/module/plugins/hooks/ExpertDecoders.py
@@ -15,7 +15,7 @@ from module.plugins.internal.Addon import Addon, threaded
class ExpertDecoders(Addon):
__name__ = "ExpertDecoders"
__type__ = "hook"
- __version__ = "0.06"
+ __version__ = "0.07"
__status__ = "testing"
__config__ = [("activated" , "bool" , "Activated" , False),
diff --git a/module/plugins/hooks/ExternalScripts.py b/module/plugins/hooks/ExternalScripts.py
index 3459eb3aa..8914cfa6c 100644
--- a/module/plugins/hooks/ExternalScripts.py
+++ b/module/plugins/hooks/ExternalScripts.py
@@ -3,26 +3,22 @@
import os
import subprocess
-from module.plugins.internal.Plugin import encode
from module.plugins.internal.Addon import Addon, Expose
-from module.utils import fs_encode, save_join as fs_join
+from module.plugins.internal.utils import encode, fs_join
class ExternalScripts(Addon):
__name__ = "ExternalScripts"
__type__ = "hook"
- __version__ = "0.49"
+ __version__ = "0.51"
__status__ = "testing"
- __config__ = [("activated", "bool", "Activated" , True ),
- ("lock" , "bool", "Wait script ending", False)]
+ __config__ = [("activated", "bool", "Activated" , True ),
+ ("lock" , "bool", "Wait for script to terminate", False)]
__description__ = """Run external scripts"""
__license__ = "GPLv3"
- __authors__ = [("mkaay" , "mkaay@mkaay.de" ),
- ("RaNaN" , "ranan@pyload.org" ),
- ("spoob" , "spoob@pyload.org" ),
- ("Walter Purcaro", "vuolter@gmail.com")]
+ __authors__ = [("Walter Purcaro", "vuolter@gmail.com")]
def init(self):
@@ -85,7 +81,10 @@ class ExternalScripts(Addon):
@Expose
- def call(self, script, args=[], lock=False):
+ def call(self, script, args=[], lock=None):
+ if lock is None:
+ lock = self.get_config('lock')
+
try:
script = os.path.abspath(script)
args = [script] + map(lambda arg: encode(arg) if isinstance(arg, basestring) else encode(str(arg)), args)
@@ -100,153 +99,118 @@ class ExternalScripts(Addon):
e or _("Unknown error"))
+ def _call(self, folder, args=[], lock=None):
+ for script in self.scripts[folder]:
+ self.call(script, args, lock)
+
+
def pyload_start(self):
- lock = self.get_config('lock')
- for script in self.scripts['pyload_start']:
- self.call(script, lock=lock)
+ self._call('pyload_start')
def exit(self):
- lock = self.get_config('lock')
- for script in self.scripts['pyload_restart' if self.pyload.do_restart else 'pyload_stop']:
- self.call(script, lock=True)
+ folder = "pyload_restart" if self.pyload.do_restart else "pyload_stop"
+ self._call(folder, lock=True)
def before_reconnect(self, ip):
- lock = self.get_config('lock')
- for script in self.scripts['before_reconnect']:
- args = [ip]
- self.call(script, args, lock)
+ self._call("before_reconnect", [ip])
def after_reconnect(self, ip, oldip):
- lock = self.get_config('lock')
- for script in self.scripts['after_reconnect']:
- args = [ip, oldip]
- self.call(script, args, lock)
+ self._call("after_reconnect", [ip, oldip])
def download_preparing(self, pyfile):
- lock = self.get_config('lock')
- for script in self.scripts['download_preparing']:
- args = [pyfile.id, pyfile.name, None, pyfile.pluginname, pyfile.url]
- self.call(script, args, lock)
+ args = [pyfile.id, pyfile.name, None, pyfile.pluginname, pyfile.url]
+ self._call("download_preparing", args)
def download_failed(self, pyfile):
- lock = self.get_config('lock')
-
if self.pyload.config.get("general", "folder_per_package"):
- download_folder = fs_join(self.pyload.config.get("general", "download_folder"), pyfile.package().folder)
+ dl_folder = fs_join(self.pyload.config.get("general", "download_folder"), pyfile.package().folder)
else:
- download_folder = self.pyload.config.get("general", "download_folder")
+ dl_folder = self.pyload.config.get("general", "download_folder")
- for script in self.scripts['download_failed']:
- file = fs_join(download_folder, pyfile.name)
- args = [script, pyfile.id, pyfile.name, file, pyfile.pluginname, pyfile.url]
- self.call(script, args, lock)
+ file = fs_join(dl_folder, pyfile.name)
+ args = [script, pyfile.id, pyfile.name, file, pyfile.pluginname, pyfile.url]
+ self._call("download_failed", args)
def download_finished(self, pyfile):
- lock = self.get_config('lock')
-
if self.pyload.config.get("general", "folder_per_package"):
- download_folder = fs_join(self.pyload.config.get("general", "download_folder"), pyfile.package().folder)
+ dl_folder = fs_join(self.pyload.config.get("general", "download_folder"), pyfile.package().folder)
else:
- download_folder = self.pyload.config.get("general", "download_folder")
+ dl_folder = self.pyload.config.get("general", "download_folder")
- for script in self.scripts['download_finished']:
- file = fs_join(download_folder, pyfile.name)
- args = [pyfile.id, pyfile.name, file, pyfile.pluginname, pyfile.url]
- self.call(script, args, lock)
+ file = fs_join(dl_folder, pyfile.name)
+ args = [pyfile.id, pyfile.name, file, pyfile.pluginname, pyfile.url]
+ self._call("download_finished", args)
def archive_extract_failed(self, pyfile, archive):
- lock = self.get_config('lock')
- for script in self.scripts['archive_extract_failed']:
- args = [pyfile.id, pyfile.name, archive.filename, archive.out, archive.files]
- self.call(script, args, lock)
+ args = [pyfile.id, pyfile.name, archive.filename, archive.out, archive.files]
+ self._call("archive_extract_failed", args)
def archive_extracted(self, pyfile, archive):
- lock = self.get_config('lock')
- for script in self.scripts['archive_extracted']:
- args = [script, pyfile.id, pyfile.name, archive.filename, archive.out, archive.files]
- self.call(script, args, lock)
+ args = [script, pyfile.id, pyfile.name, archive.filename, archive.out, archive.files]
+ self._call("archive_extracted", args)
def package_finished(self, pypack):
- lock = self.get_config('lock')
-
if self.pyload.config.get("general", "folder_per_package"):
- download_folder = fs_join(self.pyload.config.get("general", "download_folder"), pypack.folder)
+ dl_folder = fs_join(self.pyload.config.get("general", "download_folder"), pypack.folder)
else:
- download_folder = self.pyload.config.get("general", "download_folder")
+ dl_folder = self.pyload.config.get("general", "download_folder")
- for script in self.scripts['package_finished']:
- args = [pypack.id, pypack.name, download_folder, pypack.password]
- self.call(script, args, lock)
+ args = [pypack.id, pypack.name, dl_folder, pypack.password]
+ self._call("package_finished", args)
def package_deleted(self, pid):
- lock = self.get_config('lock')
pack = self.pyload.api.getPackageInfo(pid)
if self.pyload.config.get("general", "folder_per_package"):
- download_folder = fs_join(self.pyload.config.get("general", "download_folder"), pack.folder)
+ dl_folder = fs_join(self.pyload.config.get("general", "download_folder"), pack.folder)
else:
- download_folder = self.pyload.config.get("general", "download_folder")
+ dl_folder = self.pyload.config.get("general", "download_folder")
- for script in self.scripts['package_deleted']:
- args = [pack.id, pack.name, download_folder, pack.password]
- self.call(script, args, lock)
+ args = [pack.id, pack.name, dl_folder, pack.password]
+ self._call("package_deleted", args)
def package_extract_failed(self, pypack):
- lock = self.get_config('lock')
-
if self.pyload.config.get("general", "folder_per_package"):
- download_folder = fs_join(self.pyload.config.get("general", "download_folder"), pypack.folder)
+ dl_folder = fs_join(self.pyload.config.get("general", "download_folder"), pypack.folder)
else:
- download_folder = self.pyload.config.get("general", "download_folder")
+ dl_folder = self.pyload.config.get("general", "download_folder")
- for script in self.scripts['package_extract_failed']:
- args = [pypack.id, pypack.name, download_folder, pypack.password]
- self.call(script, args, lock)
+ args = [pypack.id, pypack.name, dl_folder, pypack.password]
+ self._call("package_extract_failed", args)
def package_extracted(self, pypack):
- lock = self.get_config('lock')
-
if self.pyload.config.get("general", "folder_per_package"):
- download_folder = fs_join(self.pyload.config.get("general", "download_folder"), pypack.folder)
+ dl_folder = fs_join(self.pyload.config.get("general", "download_folder"), pypack.folder)
else:
- download_folder = self.pyload.config.get("general", "download_folder")
+ dl_folder = self.pyload.config.get("general", "download_folder")
- for script in self.scripts['package_extracted']:
- args = [pypack.id, pypack.name, download_folder]
- self.call(script, args, lock)
+ args = [pypack.id, pypack.name, dl_folder]
+ self._call("package_extracted", args)
def all_downloads_finished(self):
- lock = self.get_config('lock')
- for script in self.scripts['all_downloads_finished']:
- self.call(script, lock=lock)
+ self._call("all_downloads_finished")
def all_downloads_processed(self):
- lock = self.get_config('lock')
- for script in self.scripts['all_downloads_processed']:
- self.call(script, lock=lock)
+ self._call("all_downloads_processed")
def all_archives_extracted(self):
- lock = self.get_config('lock')
- for script in self.scripts['all_archives_extracted']:
- self.call(script, lock=lock)
+ self._call("all_archives_extracted")
def all_archives_processed(self):
- lock = self.get_config('lock')
- for script in self.scripts['all_archives_processed']:
- self.call(script, lock=lock)
+ self._call("all_archives_processed")
diff --git a/module/plugins/hooks/ExtractArchive.py b/module/plugins/hooks/ExtractArchive.py
index 034a4b81a..93107810c 100644
--- a/module/plugins/hooks/ExtractArchive.py
+++ b/module/plugins/hooks/ExtractArchive.py
@@ -50,9 +50,8 @@ except ImportError:
pass
from module.plugins.internal.Addon import Addon, Expose, threaded
-from module.plugins.internal.Plugin import exists, replace_patterns
from module.plugins.internal.Extractor import ArchiveError, CRCError, PasswordError
-from module.utils import fs_encode, save_join as fs_join, uniqify
+from module.plugins.internal.utils import encode, exists, fs_join, replace_patterns, uniqify
class ArchiveQueue(object):
@@ -99,7 +98,7 @@ class ArchiveQueue(object):
class ExtractArchive(Addon):
__name__ = "ExtractArchive"
__type__ = "hook"
- __version__ = "1.52"
+ __version__ = "1.53"
__status__ = "testing"
__config__ = [("activated" , "bool" , "Activated" , True ),
@@ -117,7 +116,7 @@ class ExtractArchive(Addon):
("excludefiles" , "str" , "Don't extract the following files" , "*.nfo,*.DS_Store,index.dat,thumb.db" ),
("recursive" , "bool" , "Extract archives in archives" , True ),
("waitall" , "bool" , "Run after all downloads was processed" , False ),
- ("renice" , "int" , "CPU priority" , 0 )]
+ ("priority" , "int" , "Process priority" , 0 )]
__description__ = """Extract different kind of archives"""
__license__ = "GPLv3"
@@ -242,9 +241,8 @@ class ExtractArchive(Addon):
subfolder = self.get_config('subfolder')
fullpath = self.get_config('fullpath')
overwrite = self.get_config('overwrite')
- renice = self.get_config('renice')
+ priority = self.get_config('priority')
recursive = self.get_config('recursive')
- delete = self.get_config('delete')
keepbroken = self.get_config('keepbroken')
extensions = [x.lstrip('.').lower() for x in toList(self.get_config('extensions'))]
@@ -256,7 +254,7 @@ class ExtractArchive(Addon):
#: Reload from txt file
self.reload_passwords()
- download_folder = self.pyload.config.get("general", "download_folder")
+ dl_folder = self.pyload.config.get("general", "download_folder")
#: Iterate packages -> extractors -> targets
for pid in ids:
@@ -269,7 +267,7 @@ class ExtractArchive(Addon):
self.log_info(_("Check package: %s") % pypack.name)
#: Determine output folder
- out = fs_join(download_folder, pypack.folder, destination, "") #: Force trailing slash
+ out = fs_join(dl_folder, pypack.folder, destination, "") #: Force trailing slash
if subfolder:
out = fs_join(out, pypack.folder)
@@ -279,7 +277,7 @@ class ExtractArchive(Addon):
matched = False
success = True
- files_ids = dict((pylink['name'], ((fs_join(download_folder, pypack.folder, pylink['name'])), pylink['id'], out)) for pylink \
+ files_ids = dict((pylink['name'], ((fs_join(dl_folder, pypack.folder, pylink['name'])), pylink['id'], out)) for pylink \
in sorted(pypack.getChildren().values(), key=lambda k: k['name'])).values() #: Remove duplicates
#: Check as long there are unseen files
@@ -312,8 +310,7 @@ class ExtractArchive(Addon):
fullpath,
overwrite,
excludefiles,
- renice,
- delete,
+ priority,
keepbroken,
fid)
@@ -341,7 +338,7 @@ class ExtractArchive(Addon):
self.set_permissions(file)
for filename in new_files:
- file = fs_encode(fs_join(os.path.dirname(archive.filename), filename))
+ file = encode(fs_join(os.path.dirname(archive.filename), filename))
if not exists(file):
self.log_debug("New file %s does not exists" % filename)
continue
@@ -458,7 +455,7 @@ class ExtractArchive(Addon):
deltotrash = self.get_config('deltotrash')
for f in delfiles:
- file = fs_encode(f)
+ file = encode(f)
if not exists(file):
continue
@@ -526,7 +523,7 @@ class ExtractArchive(Addon):
try:
passwords = []
- file = fs_encode(self.get_config('passwordfile'))
+ file = encode(self.get_config('passwordfile'))
with open(file) as f:
for pw in f.read().splitlines():
passwords.append(pw)
@@ -555,7 +552,7 @@ class ExtractArchive(Addon):
try:
self.passwords = uniqify([password] + self.passwords)
- file = fs_encode(self.get_config('passwordfile'))
+ file = encode(self.get_config('passwordfile'))
with open(file, "wb") as f:
for pw in self.passwords:
f.write(pw + '\n')
diff --git a/module/plugins/hooks/HotFolder.py b/module/plugins/hooks/HotFolder.py
index c7631a1fc..c89083fb1 100644
--- a/module/plugins/hooks/HotFolder.py
+++ b/module/plugins/hooks/HotFolder.py
@@ -7,13 +7,13 @@ import shutil
import time
from module.plugins.internal.Addon import Addon
-from module.utils import fs_encode, save_join as fs_join
+from module.plugins.internal.utils import encode, fs_join
class HotFolder(Addon):
__name__ = "HotFolder"
__type__ = "hook"
- __version__ = "0.19"
+ __version__ = "0.20"
__status__ = "testing"
__config__ = [("activated", "bool", "Activated" , False ),
@@ -32,8 +32,8 @@ class HotFolder(Addon):
def periodical(self):
- folder = fs_encode(self.get_config('folder'))
- file = fs_encode(self.get_config('file'))
+ folder = encode(self.get_config('folder'))
+ file = encode(self.get_config('file'))
try:
if not os.path.isdir(os.path.join(folder, "finished")):
diff --git a/module/plugins/hooks/IRCInterface.py b/module/plugins/hooks/IRCInterface.py
index 16640df0b..1f337d686 100644
--- a/module/plugins/hooks/IRCInterface.py
+++ b/module/plugins/hooks/IRCInterface.py
@@ -18,7 +18,7 @@ from module.utils import formatSize
class IRCInterface(Thread, Addon):
__name__ = "IRCInterface"
__type__ = "hook"
- __version__ = "0.17"
+ __version__ = "0.18"
__status__ = "testing"
__config__ = [("activated", "bool", "Activated" , False ),
diff --git a/module/plugins/hooks/ImageTyperz.py b/module/plugins/hooks/ImageTyperz.py
index 86b1dae2b..656ad0c25 100644
--- a/module/plugins/hooks/ImageTyperz.py
+++ b/module/plugins/hooks/ImageTyperz.py
@@ -32,7 +32,7 @@ class ImageTyperzException(Exception):
class ImageTyperz(Addon):
__name__ = "ImageTyperz"
__type__ = "hook"
- __version__ = "0.08"
+ __version__ = "0.09"
__status__ = "testing"
__config__ = [("activated" , "bool" , "Activated" , False),
diff --git a/module/plugins/hooks/JustPremium.py b/module/plugins/hooks/JustPremium.py
index f4c48cfa9..3f7388020 100644
--- a/module/plugins/hooks/JustPremium.py
+++ b/module/plugins/hooks/JustPremium.py
@@ -8,7 +8,7 @@ from module.plugins.internal.Addon import Addon
class JustPremium(Addon):
__name__ = "JustPremium"
__type__ = "hook"
- __version__ = "0.24"
+ __version__ = "0.25"
__status__ = "testing"
__config__ = [("activated", "bool", "Activated" , False),
diff --git a/module/plugins/hooks/LinkdecrypterComHook.py b/module/plugins/hooks/LinkdecrypterComHook.py
index 1ef5bb72a..f9ab1f3ff 100644
--- a/module/plugins/hooks/LinkdecrypterComHook.py
+++ b/module/plugins/hooks/LinkdecrypterComHook.py
@@ -8,7 +8,7 @@ from module.plugins.internal.Addon import Addon
class LinkdecrypterComHook(Addon):
__name__ = "LinkdecrypterCom"
__type__ = "hook"
- __version__ = "1.08"
+ __version__ = "1.09"
__status__ = "testing"
__config__ = [("activated" , "bool" , "Activated" , False),
diff --git a/module/plugins/hooks/LogMarker.py b/module/plugins/hooks/LogMarker.py
index 0efab602f..4bf8e290a 100644
--- a/module/plugins/hooks/LogMarker.py
+++ b/module/plugins/hooks/LogMarker.py
@@ -9,7 +9,7 @@ from module.plugins.internal.Plugin import seconds_to_nexthour
class LogMarker(Addon):
__name__ = "LogMarker"
__type__ = "hook"
- __version__ = "0.03"
+ __version__ = "0.04"
__status__ = "testing"
__config__ = [("activated", "bool", "Activated" , False),
diff --git a/module/plugins/hooks/MergeFiles.py b/module/plugins/hooks/MergeFiles.py
index a7d6fc7ba..dbe7b1f5f 100644
--- a/module/plugins/hooks/MergeFiles.py
+++ b/module/plugins/hooks/MergeFiles.py
@@ -6,13 +6,13 @@ import os
import re
from module.plugins.internal.Addon import Addon, threaded
-from module.utils import save_join as fs_join
+from module.plugins.internal.utils import fs_join
class MergeFiles(Addon):
__name__ = "MergeFiles"
__type__ = "hook"
- __version__ = "0.17"
+ __version__ = "0.18"
__status__ = "testing"
__config__ = [("activated", "bool", "Activated", True)]
@@ -37,15 +37,15 @@ class MergeFiles(Addon):
files[data['name'][:-4]].sort()
fid_dict[data['name']] = fid
- download_folder = self.pyload.config.get("general", "download_folder")
+ dl_folder = self.pyload.config.get("general", "download_folder")
if self.pyload.config.get("general", "folder_per_package"):
- download_folder = fs_join(download_folder, pack.folder)
+ dl_folder = fs_join(dl_folder, pack.folder)
for name, file_list in files.items():
self.log_info(_("Starting merging of"), name)
- with open(fs_join(download_folder, name), "wb") as final_file:
+ with open(fs_join(dl_folder, name), "wb") as final_file:
for splitted_file in file_list:
self.log_debug("Merging part", splitted_file)
@@ -54,9 +54,9 @@ class MergeFiles(Addon):
pyfile.setStatus("processing")
try:
- with open(fs_join(download_folder, splitted_file), "rb") as s_file:
+ with open(fs_join(dl_folder, splitted_file), "rb") as s_file:
size_written = 0
- s_file_size = int(os.path.getsize(os.path.join(download_folder, splitted_file)))
+ s_file_size = int(os.path.getsize(os.path.join(dl_folder, splitted_file)))
while True:
f_buffer = s_file.read(self.BUFFER_SIZE)
if f_buffer:
diff --git a/module/plugins/hooks/MultiHome.py b/module/plugins/hooks/MultiHome.py
index 90e8a60d2..353753c1a 100644
--- a/module/plugins/hooks/MultiHome.py
+++ b/module/plugins/hooks/MultiHome.py
@@ -44,7 +44,7 @@ class Interface(object):
class MultiHome(Addon):
__name__ = "MultiHome"
__type__ = "hook"
- __version__ = "0.14"
+ __version__ = "0.15"
__status__ = "testing"
__config__ = [("activated" , "bool", "Activated" , False ),
diff --git a/module/plugins/hooks/RestartFailed.py b/module/plugins/hooks/RestartFailed.py
index 74d570425..0e35c4629 100644
--- a/module/plugins/hooks/RestartFailed.py
+++ b/module/plugins/hooks/RestartFailed.py
@@ -6,7 +6,7 @@ from module.plugins.internal.Addon import Addon
class RestartFailed(Addon):
__name__ = "RestartFailed"
__type__ = "hook"
- __version__ = "1.62"
+ __version__ = "1.63"
__status__ = "testing"
__config__ = [("activated", "bool", "Activated" , False),
@@ -26,4 +26,4 @@ class RestartFailed(Addon):
def activate(self):
- self.start_periodical(self.get_config('interval') * 60)
+ self.set_interval(self.get_config('interval') * 60)
diff --git a/module/plugins/hooks/SkipRev.py b/module/plugins/hooks/SkipRev.py
index 891d2db6d..6ce1750d3 100644
--- a/module/plugins/hooks/SkipRev.py
+++ b/module/plugins/hooks/SkipRev.py
@@ -12,7 +12,7 @@ from module.plugins.internal.Addon import Addon
class SkipRev(Addon):
__name__ = "SkipRev"
__type__ = "hook"
- __version__ = "0.34"
+ __version__ = "0.35"
__status__ = "testing"
__config__ = [("activated", "bool" , "Activated" , False ),
diff --git a/module/plugins/hooks/TransmissionRPC.py b/module/plugins/hooks/TransmissionRPC.py
index 9df19e320..fa19a5f91 100644
--- a/module/plugins/hooks/TransmissionRPC.py
+++ b/module/plugins/hooks/TransmissionRPC.py
@@ -5,7 +5,7 @@ import re
import pycurl
-from module.common.json_layer import json_loads, json_dumps
+from module.plugins.internal.utils import json
from module.network.HTTPRequest import BadHeader
from module.network.RequestFactory import getRequest as get_request
from module.plugins.internal.Addon import Addon
@@ -14,7 +14,7 @@ from module.plugins.internal.Addon import Addon
class TransmissionRPC(Addon):
__name__ = "TransmissionRPC"
__type__ = "hook"
- __version__ = "0.12"
+ __version__ = "0.13"
__status__ = "testing"
__pattern__ = r"https?://.+\.torrent|magnet:\?.+"
@@ -47,7 +47,7 @@ class TransmissionRPC(Addon):
try:
response = self.load(transmission_rpc_url,
- post=json_dumps({'arguments': {'filename': url},
+ post=json.dumps({'arguments': {'filename': url},
'method' : 'torrent-add',
'tag' : client_request_id}),
req=req)
@@ -59,7 +59,7 @@ class TransmissionRPC(Addon):
req.c.setopt(pycurl.HTTPHEADER, ["X-Transmission-Session-Id: %s" % session_id])
try:
response = self.load(transmission_rpc_url,
- post=json_dumps({'arguments': {'filename': url},
+ post=json.dumps({'arguments': {'filename': url},
'method' : 'torrent-add',
'tag' : client_request_id}),
req=req)
@@ -77,7 +77,7 @@ class TransmissionRPC(Addon):
return
try:
- res = json_loads(response)
+ res = json.loads(response)
if "result" in res:
self.log_debug("Result: %s" % res['result'])
diff --git a/module/plugins/hooks/UnSkipOnFail.py b/module/plugins/hooks/UnSkipOnFail.py
index d467b8a01..6842cbc51 100644
--- a/module/plugins/hooks/UnSkipOnFail.py
+++ b/module/plugins/hooks/UnSkipOnFail.py
@@ -7,7 +7,7 @@ from module.plugins.internal.Addon import Addon
class UnSkipOnFail(Addon):
__name__ = "UnSkipOnFail"
__type__ = "hook"
- __version__ = "0.09"
+ __version__ = "0.10"
__status__ = "testing"
__config__ = [("activated", "bool", "Activated", True)]
diff --git a/module/plugins/hooks/UpdateManager.py b/module/plugins/hooks/UpdateManager.py
index caebdaa9b..39ec2d49e 100644
--- a/module/plugins/hooks/UpdateManager.py
+++ b/module/plugins/hooks/UpdateManager.py
@@ -10,13 +10,13 @@ import time
from module.plugins.internal.Addon import Expose, Addon, threaded
from module.plugins.internal.Plugin import exists
-from module.utils import fs_encode, save_join as fs_join
+from module.plugins.internal.utils import encode, fs_join
class UpdateManager(Addon):
__name__ = "UpdateManager"
__type__ = "hook"
- __version__ = "1.00"
+ __version__ = "1.01"
__status__ = "testing"
__config__ = [("activated" , "bool", "Activated" , True ),
@@ -34,9 +34,8 @@ class UpdateManager(Addon):
_VERSION = re.compile(r'__version__.*=.*("|\')([\d.]+)')
- SERVER_URL = "http://updatemanager.pyload.org"
-
- PERIODICAL_INTERVAL = 3 * 60 * 60 #: 3 hours
+ SERVER_URL = "http://updatemanager.pyload.org"
+ CHECK_INTERVAL = 3 * 60 * 60 #: 3 hours
def activate(self):
@@ -66,7 +65,6 @@ class UpdateManager(Addon):
def all_downloads_processed(self):
if self.do_restart is True:
- self.log_warning(_("Downloads are done, restarting pyLoad to reload the updated plugins"))
self.pyload.api.restart()
@@ -79,7 +77,7 @@ class UpdateManager(Addon):
return
if self.get_config('checkperiod') and \
- time.time() - max(self.PERIODICAL_INTERVAL, self.get_config('checkinterval') * 60 * 60) > self.info['last_check']:
+ time.time() - max(self.CHECK_INTERVAL, self.get_config('checkinterval') * 60 * 60) > self.info['last_check']:
self.update()
@@ -129,7 +127,7 @@ class UpdateManager(Addon):
get={'v': self.pyload.api.getServerVersion()})
except Exception:
- self.log_warning(_("Unable to retrieve server to get updates"))
+ self.log_warning(_("Unable to connect to the server to retrieve updates"))
else:
res = html.splitlines()
@@ -156,7 +154,7 @@ class UpdateManager(Addon):
self.pyload.api.restart()
else:
self.do_restart = True
- self.log_warning(_("Downloads are active, will restart once the download is done"))
+ self.log_warning(_("pyLoad restart scheduled"), _("Downloads are active, pyLoad restart postponed once the download is done"))
self.pyload.api.pauseServer()
@@ -170,11 +168,11 @@ class UpdateManager(Addon):
exitcode = 0
elif newversion == "None":
- self.log_info(_("No new pyLoad version available"))
+ self.log_info(_("pyLoad is up to date!"))
exitcode = self.update_plugins()
else:
- self.log_info(_("*** New pyLoad Version %s available ***") % newversion)
+ self.log_info(_("*** New pyLoad %s available ***") % newversion)
self.log_info(_("*** Get it here: https://github.com/pyload/pyload/releases ***"))
self.info['pyload'] = True
exitcode = 3
@@ -202,13 +200,13 @@ class UpdateManager(Addon):
if self.pyload.pluginManager.reloadPlugins(updated):
exitcode = 1
else:
- self.log_warning(_("You have to restart pyLoad to reload the updated plugins"))
+ self.log_warning(_("You have to restart pyLoad to use the updated plugins"))
self.info['plugins'] = True
exitcode = 2
self.manager.dispatchEvent("plugin_updated", updated)
else:
- self.log_info(_("*** No plugin updates available ***"))
+ self.log_info(_("All plugins are up to date!"))
exitcode = 0
#: Exit codes:
@@ -311,7 +309,7 @@ class UpdateManager(Addon):
folder = type
with open(fs_join("userplugins", folder, name + ".py"), "wb") as f:
- f.write(fs_encode(content))
+ f.write(encode(content))
updated.append((type, name))
else:
diff --git a/module/plugins/hooks/UserAgentSwitcher.py b/module/plugins/hooks/UserAgentSwitcher.py
index 52f542268..bd51b30bd 100644
--- a/module/plugins/hooks/UserAgentSwitcher.py
+++ b/module/plugins/hooks/UserAgentSwitcher.py
@@ -9,7 +9,7 @@ from module.plugins.internal.Plugin import encode
class UserAgentSwitcher(Addon):
__name__ = "UserAgentSwitcher"
__type__ = "hook"
- __version__ = "0.11"
+ __version__ = "0.12"
__status__ = "testing"
__config__ = [("activated" , "bool", "Activated" , True ),
diff --git a/module/plugins/hooks/WindowsPhoneNotify.py b/module/plugins/hooks/WindowsPhoneNotify.py
index 4343d16f2..e032508c0 100644
--- a/module/plugins/hooks/WindowsPhoneNotify.py
+++ b/module/plugins/hooks/WindowsPhoneNotify.py
@@ -9,7 +9,7 @@ from module.plugins.internal.Addon import Addon, Expose
class WindowsPhoneNotify(Addon):
__name__ = "WindowsPhoneNotify"
__type__ = "hook"
- __version__ = "0.13"
+ __version__ = "0.14"
__status__ = "testing"
__config__ = [("activated" , "bool", "Activated" , False),
diff --git a/module/plugins/hooks/XFileSharingPro.py b/module/plugins/hooks/XFileSharingPro.py
index 92933fb11..75f8323ef 100644
--- a/module/plugins/hooks/XFileSharingPro.py
+++ b/module/plugins/hooks/XFileSharingPro.py
@@ -8,7 +8,7 @@ from module.plugins.internal.Addon import Addon
class XFileSharingPro(Addon):
__name__ = "XFileSharingPro"
__type__ = "hook"
- __version__ = "0.44"
+ __version__ = "0.46"
__status__ = "testing"
__config__ = [("activated" , "bool", "Activated" , True ),
@@ -23,9 +23,9 @@ class XFileSharingPro(Addon):
__authors__ = [("Walter Purcaro", "vuolter@gmail.com")]
- regexp = {'hoster' : (r'https?://(?:www\.)?(?:\w+\.)*?(?P<DOMAIN>(?:[\d.]+|[\w\-^_]{3,}(?:\.[a-zA-Z]{2,}){1,2})(?:\:\d+)?)/(?:embed-)?\w{12}(?:\W|$)',
+ regexp = {'hoster' : (r'https?://(?:www\.)?(?:\w+\.)*(?P<DOMAIN>(?:[\d.]+|[\w\-^_]{3,63}(?:\.[a-zA-Z]{2,}){1,2})(?:\:\d+)?)/(?:embed-)?\w{12}(?:\W|$)',
r'https?://(?:[^/]+\.)?(?P<DOMAIN>%s)/(?:embed-)?\w+'),
- 'crypter': (r'https?://(?:www\.)?(?:\w+\.)*?(?P<DOMAIN>(?:[\d.]+|[\w\-^_]{3,}(?:\.[a-zA-Z]{2,}){1,2})(?:\:\d+)?)/(?:user|folder)s?/\w+',
+ 'crypter': (r'https?://(?:www\.)?(?:\w+\.)*(?P<DOMAIN>(?:[\d.]+|[\w\-^_]{3,63}(?:\.[a-zA-Z]{2,}){1,2})(?:\:\d+)?)/(?:user|folder)s?/\w+',
r'https?://(?:[^/]+\.)?(?P<DOMAIN>%s)/(?:user|folder)s?/\w+')}
BUILTIN_HOSTERS = [#WORKING HOSTERS:
diff --git a/module/plugins/hooks/XMPPInterface.py b/module/plugins/hooks/XMPPInterface.py
index 811e2f5f4..b8fe14239 100644
--- a/module/plugins/hooks/XMPPInterface.py
+++ b/module/plugins/hooks/XMPPInterface.py
@@ -12,7 +12,7 @@ from module.plugins.hooks.IRCInterface import IRCInterface
class XMPPInterface(IRCInterface, JabberClient):
__name__ = "XMPPInterface"
__type__ = "hook"
- __version__ = "0.13"
+ __version__ = "0.14"
__status__ = "testing"
__config__ = [("activated", "bool", "Activated" , False ),