summaryrefslogtreecommitdiffstats
path: root/module
diff options
context:
space:
mode:
Diffstat (limited to 'module')
-rw-r--r--module/plugins/accounts/NoPremiumPl.py4
-rw-r--r--module/plugins/accounts/OneFichierCom.py6
-rw-r--r--module/plugins/accounts/RapideoPl.py4
-rw-r--r--module/plugins/accounts/RapidgatorNet.py4
-rw-r--r--module/plugins/crypter/DevhostStFolder.py2
-rw-r--r--module/plugins/crypter/FilecryptCc.py7
-rw-r--r--module/plugins/crypter/LinkCryptWs.py13
-rw-r--r--module/plugins/crypter/MultiUpOrg.py8
-rw-r--r--module/plugins/crypter/ShareLinksBiz.py15
-rw-r--r--module/plugins/hooks/Checksum.py10
-rw-r--r--module/plugins/hooks/ExternalScripts.py9
-rw-r--r--module/plugins/hooks/HotFolder.py3
-rw-r--r--module/plugins/hooks/UpdateManager.py4
-rw-r--r--module/plugins/hoster/CrockoCom.py2
-rw-r--r--module/plugins/hoster/FileSharkPl.py2
-rw-r--r--module/plugins/hoster/FileboomMe.py2
-rw-r--r--module/plugins/hoster/MediafireCom.py4
-rw-r--r--module/plugins/hoster/NarodRu.py2
-rw-r--r--module/plugins/hoster/OneFichierCom.py4
-rw-r--r--module/plugins/hoster/UloziskoSk.py2
-rw-r--r--module/plugins/hoster/UnibytesCom.py2
-rw-r--r--module/plugins/hoster/UploadedTo.py4
-rw-r--r--module/plugins/hoster/UploadheroCom.py4
-rw-r--r--module/plugins/hoster/YibaishiwuCom.py2
-rw-r--r--module/plugins/hoster/YoutubeCom.py4
-rw-r--r--module/plugins/internal/Captcha.py2
-rw-r--r--module/plugins/internal/Hoster.py3
-rw-r--r--module/plugins/internal/SimpleCrypter.py3
-rw-r--r--module/plugins/internal/SimpleHoster.py5
-rw-r--r--module/plugins/internal/XFSAccount.py4
30 files changed, 77 insertions, 63 deletions
diff --git a/module/plugins/accounts/NoPremiumPl.py b/module/plugins/accounts/NoPremiumPl.py
index e9dad7647..97e58f5f0 100644
--- a/module/plugins/accounts/NoPremiumPl.py
+++ b/module/plugins/accounts/NoPremiumPl.py
@@ -11,7 +11,7 @@ from module.plugins.internal.Account import Account
class NoPremiumPl(Account):
__name__ = "NoPremiumPl"
__type__ = "account"
- __version__ = "0.03"
+ __version__ = "0.04"
__status__ = "testing"
__description__ = "NoPremium.pl account plugin"
@@ -32,7 +32,7 @@ class NoPremiumPl(Account):
_pwd = None
- def parse_info(self, name, req):
+ def parse_info(self, user, password, data, req):
self._req = req
try:
result = json_loads(self.run_auth_query())
diff --git a/module/plugins/accounts/OneFichierCom.py b/module/plugins/accounts/OneFichierCom.py
index 3a0131a3f..e2e84feef 100644
--- a/module/plugins/accounts/OneFichierCom.py
+++ b/module/plugins/accounts/OneFichierCom.py
@@ -10,7 +10,7 @@ from module.plugins.internal.Account import Account
class OneFichierCom(Account):
__name__ = "OneFichierCom"
__type__ = "account"
- __version__ = "0.14"
+ __version__ = "0.15"
__status__ = "testing"
__description__ = """1fichier.com account plugin"""
@@ -19,7 +19,7 @@ class OneFichierCom(Account):
("Walter Purcaro", "vuolter@gmail.com")]
- VALID_UNTIL_PATTERN = r'Your Premium Status will end the (\d+/\d+/\d+)'
+ VALID_UNTIL_PATTERN = r'Your subscription will end the (\d+-\d+-\d+)'
def parse_info(self, user, password, data, req):
@@ -35,7 +35,7 @@ class OneFichierCom(Account):
self.log_debug("Expire date: " + expiredate)
try:
- validuntil = time.mktime(time.strptime(expiredate, "%d/%m/%Y"))
+ validuntil = time.mktime(time.strptime(expiredate, "%Y-%m-%d"))
except Exception, e:
self.log_error(e)
else:
diff --git a/module/plugins/accounts/RapideoPl.py b/module/plugins/accounts/RapideoPl.py
index 42d084bdb..e9a483927 100644
--- a/module/plugins/accounts/RapideoPl.py
+++ b/module/plugins/accounts/RapideoPl.py
@@ -11,7 +11,7 @@ from module.plugins.internal.Account import Account
class RapideoPl(Account):
__name__ = "RapideoPl"
__type__ = "account"
- __version__ = "0.03"
+ __version__ = "0.04"
__status__ = "testing"
__description__ = "Rapideo.pl account plugin"
@@ -32,7 +32,7 @@ class RapideoPl(Account):
_pwd = None
- def parse_info(self, name, req):
+ def parse_info(self, user, password, data, req):
self._req = req
try:
result = json_loads(self.run_auth_query())
diff --git a/module/plugins/accounts/RapidgatorNet.py b/module/plugins/accounts/RapidgatorNet.py
index 5ce51a1ec..2fc266722 100644
--- a/module/plugins/accounts/RapidgatorNet.py
+++ b/module/plugins/accounts/RapidgatorNet.py
@@ -9,7 +9,7 @@ from module.common.json_layer import json_loads
class RapidgatorNet(Account):
__name__ = "RapidgatorNet"
__type__ = "account"
- __version__ = "0.11"
+ __version__ = "0.13"
__status__ = "testing"
__description__ = """Rapidgator.net account plugin"""
@@ -17,7 +17,7 @@ class RapidgatorNet(Account):
__authors__ = [("zoidberg", "zoidberg@mujmail.cz")]
- API_URL = "http://rapidgator.net/api/user"
+ API_URL = "http://rapidgator.net/api/user/"
def parse_info(self, user, password, data, req):
diff --git a/module/plugins/crypter/DevhostStFolder.py b/module/plugins/crypter/DevhostStFolder.py
index 8340adeb8..6c50c8480 100644
--- a/module/plugins/crypter/DevhostStFolder.py
+++ b/module/plugins/crypter/DevhostStFolder.py
@@ -42,7 +42,7 @@ class DevhostStFolder(SimpleCrypter):
p = r'href="(.+?)">Back to \w+<'
m = re.search(p, self.html)
- html = self.load(urlparse.urljoin("http://d-h.st", m.group(1)),
+ html = self.load(urlparse.urljoin("http://d-h.st/", m.group(1)),
cookies=False)
p = '\?fld_id=%s.*?">(.+?)<' % self.info['pattern']['ID']
diff --git a/module/plugins/crypter/FilecryptCc.py b/module/plugins/crypter/FilecryptCc.py
index 9f4ad69aa..ac78e9aa8 100644
--- a/module/plugins/crypter/FilecryptCc.py
+++ b/module/plugins/crypter/FilecryptCc.py
@@ -16,7 +16,7 @@ from module.plugins.captcha.ReCaptcha import ReCaptcha
class FilecryptCc(Crypter):
__name__ = "FilecryptCc"
__type__ = "crypter"
- __version__ = "0.18"
+ __version__ = "0.19"
__status__ = "testing"
__pattern__ = r'https?://(?:www\.)?filecrypt\.cc/Container/\w+'
@@ -140,8 +140,9 @@ class FilecryptCc(Crypter):
for link in weblinks:
res = self.load("%s/Link/%s.html" % (self.base_url, link))
link2 = re.search('<iframe noresize src="(.*)"></iframe>', res)
- res2 = self.load(link2.group(1), just_header=True)
- self.links.append(res2['location'])
+ if link2:
+ res2 = self.load(link2.group(1), just_header=True)
+ self.links.append(res2['location'])
except Exception, e:
self.log_debug("Error decrypting weblinks: %s" % e)
diff --git a/module/plugins/crypter/LinkCryptWs.py b/module/plugins/crypter/LinkCryptWs.py
index af13f55f6..557a63cbd 100644
--- a/module/plugins/crypter/LinkCryptWs.py
+++ b/module/plugins/crypter/LinkCryptWs.py
@@ -31,7 +31,6 @@ class LinkCryptWs(Crypter):
def setup(self):
- self.captcha = False
self.links = []
self.sources = ['cnl', 'web', 'dlc', 'rsdf', 'ccf']
@@ -60,7 +59,6 @@ class LinkCryptWs(Crypter):
self.retry(8, 15, _("Can't handle Key-Captcha"))
if self.is_captcha_protected():
- self.captcha = True
self.unlock_captcha_protection()
self.handle_captcha_errors()
@@ -165,12 +163,11 @@ class LinkCryptWs(Crypter):
def handle_captcha_errors(self):
- if self.captcha:
- if "Your choice was wrong!" in self.html:
- self.captcha.invalid()
- self.retry()
- else:
- self.captcha.correct()
+ if "Your choice was wrong!" in self.html:
+ self.captcha.invalid()
+ self.retry()
+ else:
+ self.captcha.correct()
def handle_link_source(self, type):
diff --git a/module/plugins/crypter/MultiUpOrg.py b/module/plugins/crypter/MultiUpOrg.py
index b4326b679..fb228c3cd 100644
--- a/module/plugins/crypter/MultiUpOrg.py
+++ b/module/plugins/crypter/MultiUpOrg.py
@@ -9,10 +9,10 @@ from module.plugins.internal.SimpleCrypter import SimpleCrypter, create_getInfo
class MultiUpOrg(SimpleCrypter):
__name__ = "MultiUpOrg"
__type__ = "crypter"
- __version__ = "0.04"
+ __version__ = "0.05"
__status__ = "testing"
- __pattern__ = r'http://(?:www\.)?multiup\.org/(en|fr)/(?P<TYPE>project|download|miror)/\w+(/\w+)?'
+ __pattern__ = r'http://(?:www\.)?multiup\.org/(en|fr)/(?P<TYPE>project|download|mirror)/\w+(/\w+)?'
__config__ = [("use_premium" , "bool", "Use premium account if available" , True),
("use_subfolder" , "bool", "Save package to subfolder" , True),
("subfolder_per_pack", "bool", "Create a subfolder for each package", True)]
@@ -34,8 +34,8 @@ class MultiUpOrg(SimpleCrypter):
pattern = r'style="width:97%;text-align:left".*\n.*href="(.*)"'
if m_type == "download":
dl_pattern = r'href="(.*)">.*\n.*<h5>DOWNLOAD</h5>'
- miror_page = urlparse.urljoin("http://www.multiup.org", re.search(dl_pattern, self.html).group(1))
- self.html = self.load(miror_page)
+ mirror_page = urlparse.urljoin("http://www.multiup.org/", re.search(dl_pattern, self.html).group(1))
+ self.html = self.load(mirror_page)
return re.findall(pattern, self.html)
diff --git a/module/plugins/crypter/ShareLinksBiz.py b/module/plugins/crypter/ShareLinksBiz.py
index 6fbe59b38..712b4fff2 100644
--- a/module/plugins/crypter/ShareLinksBiz.py
+++ b/module/plugins/crypter/ShareLinksBiz.py
@@ -10,7 +10,7 @@ from module.plugins.internal.Crypter import Crypter
class ShareLinksBiz(Crypter):
__name__ = "ShareLinksBiz"
__type__ = "crypter"
- __version__ = "1.16"
+ __version__ = "1.17"
__status__ = "testing"
__pattern__ = r'http://(?:www\.)?(share-links|s2l)\.biz/(?P<ID>_?\w+)'
@@ -68,8 +68,12 @@ class ShareLinksBiz(Crypter):
url = pyfile.url
if 's2l.biz' in url:
url = self.load(url, just_header=True)['location']
- self.base_url = "http://www.%s.biz" % re.match(self.__pattern__, url).group(1)
- self.file_id = re.match(self.__pattern__, url).group('ID')
+ if re.match(self.__pattern__, url):
+ self.base_url = "http://www.%s.biz" % re.match(self.__pattern__, url).group(1)
+ self.file_id = re.match(self.__pattern__, url).group('ID')
+ else:
+ self.log_debug("Could not initialize, URL [%s] does not match pattern [%s]" % (url, self.__pattern__))
+ self.fail("Unsupported download link")
self.package = pyfile.package()
@@ -114,7 +118,10 @@ class ShareLinksBiz(Crypter):
self.log_debug("Captcha map with [%d] positions" % len(captchaMap.keys()))
#: Request user for captcha coords
- m = re.search(r'<img src="/captcha.gif\?d=(.*?)&amp;PHPSESSID=(.*?)&amp;legend=1"', self.html)
+ m = re.search(r'<img src="/captcha.gif\?d=(.+?)&PHPSESSID=(.+?)&legend=1"', self.html)
+ if not m:
+ self.log_debug("Captcha url data not found, maybe plugin out of date?")
+ self.fail("Captcha url data not found")
captchaUrl = self.base_url + '/captcha.gif?d=%s&PHPSESSID=%s' % (m.group(1), m.group(2))
self.log_debug("Waiting user for correct position")
coords = self.captcha.decrypt(captchaUrl, input_type="gif", output_type='positional')
diff --git a/module/plugins/hooks/Checksum.py b/module/plugins/hooks/Checksum.py
index 6ecbfcda2..da4d35df1 100644
--- a/module/plugins/hooks/Checksum.py
+++ b/module/plugins/hooks/Checksum.py
@@ -38,7 +38,7 @@ def compute_checksum(local_file, algorithm):
class Checksum(Addon):
__name__ = "Checksum"
__type__ = "hook"
- __version__ = "0.19"
+ __version__ = "0.20"
__status__ = "testing"
__config__ = [("check_checksum", "bool" , "Check checksum? (If False only size will be verified)", True ),
@@ -131,15 +131,15 @@ class Checksum(Addon):
for key in self.algorithms:
if key in data:
- checksum = computeChecksum(local_file, key.replace("-", "").lower())
+ checksum = compute_checksum(local_file, key.replace("-", "").lower())
if checksum:
- if checksum is data[key].lower():
+ if checksum == data[key].lower():
self.log_info(_('File integrity of "%s" verified by %s checksum (%s)') %
(pyfile.name, key.upper(), checksum))
break
else:
self.log_warning(_("%s checksum for file %s does not match (%s != %s)") %
- (key.upper(), pyfile.name, checksum, data[key]))
+ (key.upper(), pyfile.name, checksum, data[key].lower()))
self.check_failed(pyfile, local_file, "Checksums do not match")
else:
self.log_warning(_("Unsupported hashing algorithm"), key.upper())
@@ -186,7 +186,7 @@ class Checksum(Addon):
local_file = fs_encode(fs_join(download_folder, data['NAME']))
algorithm = self.methods.get(file_type, file_type)
- checksum = computeChecksum(local_file, algorithm)
+ checksum = compute_checksum(local_file, algorithm)
if checksum is data['HASH']:
self.log_info(_('File integrity of "%s" verified by %s checksum (%s)') %
(data['NAME'], algorithm, checksum))
diff --git a/module/plugins/hooks/ExternalScripts.py b/module/plugins/hooks/ExternalScripts.py
index b7495136a..4ec526d35 100644
--- a/module/plugins/hooks/ExternalScripts.py
+++ b/module/plugins/hooks/ExternalScripts.py
@@ -3,6 +3,7 @@
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
@@ -10,7 +11,7 @@ from module.utils import fs_encode, save_join as fs_join
class ExternalScripts(Addon):
__name__ = "ExternalScripts"
__type__ = "hook"
- __version__ = "0.46"
+ __version__ = "0.47"
__status__ = "testing"
__config__ = [("activated", "bool", "Activated" , True ),
@@ -66,7 +67,8 @@ class ExternalScripts(Addon):
self.log_debug(e)
return
- for file in os.listdir(path):
+ for filename in os.listdir(path):
+ file = fs_join(path, filename)
if not os.path.isfile(file):
continue
@@ -77,13 +79,14 @@ class ExternalScripts(Addon):
self.log_warning(_("Script not executable: [%s] %s") % (name, file))
self.scripts[name].append(file)
+ self.log_info(_("Registered script: [%s] %s") % (name, file))
@Expose
def call(self, script, args=[], lock=False):
try:
script = os.path.abspath(script)
- args = [script] + map(encode, args)
+ args = [script] + map(lambda arg: encode(arg) if isinstance(arg, basestring) else encode(str(arg)), args)
self.log_info(_("EXECUTE [%s] %s") % (os.path.dirname(script), args))
p = subprocess.Popen(args, bufsize=-1) #@NOTE: output goes to pyload
diff --git a/module/plugins/hooks/HotFolder.py b/module/plugins/hooks/HotFolder.py
index 84db4db17..5a65146b9 100644
--- a/module/plugins/hooks/HotFolder.py
+++ b/module/plugins/hooks/HotFolder.py
@@ -14,7 +14,7 @@ from module.utils import fs_encode, save_join as fs_join
class HotFolder(Addon):
__name__ = "HotFolder"
__type__ = "hook"
- __version__ = "0.16"
+ __version__ = "0.17"
__status__ = "testing"
__config__ = [("folder" , "str" , "Folder to observe" , "container"),
@@ -29,6 +29,7 @@ class HotFolder(Addon):
def init(self):
self.interval = 30
+ self.init_periodical()
def periodical(self):
diff --git a/module/plugins/hooks/UpdateManager.py b/module/plugins/hooks/UpdateManager.py
index 117da0633..fb9e28b5d 100644
--- a/module/plugins/hooks/UpdateManager.py
+++ b/module/plugins/hooks/UpdateManager.py
@@ -17,7 +17,7 @@ from module.utils import fs_encode, save_join as fs_join
class UpdateManager(Addon):
__name__ = "UpdateManager"
__type__ = "hook"
- __version__ = "0.55"
+ __version__ = "0.56"
__status__ = "testing"
__config__ = [("activated" , "bool", "Activated" , True ),
@@ -268,7 +268,7 @@ class UpdateManager(Addon):
raise Exception(_("Version mismatch"))
except Exception, e:
- self.log_error(_("Error updating plugin: %s") % filename, e)
+ self.log_error(_("Error updating plugin: [%s] %s") % (type, name), e)
if self.pyload.debug:
traceback.print_exc()
diff --git a/module/plugins/hoster/CrockoCom.py b/module/plugins/hoster/CrockoCom.py
index 8f092ad0c..17e3ee93c 100644
--- a/module/plugins/hoster/CrockoCom.py
+++ b/module/plugins/hoster/CrockoCom.py
@@ -40,7 +40,7 @@ class CrockoCom(SimpleHoster):
for _i in xrange(5):
m = re.search(self.CAPTCHA_PATTERN, self.html)
if m:
- url = urlparse.urljoin("http://crocko.com", m.group(1))
+ url = urlparse.urljoin("http://crocko.com/", m.group(1))
self.wait(m.group(2))
self.html = self.load(url)
else:
diff --git a/module/plugins/hoster/FileSharkPl.py b/module/plugins/hoster/FileSharkPl.py
index 62a7a553f..978861dd6 100644
--- a/module/plugins/hoster/FileSharkPl.py
+++ b/module/plugins/hoster/FileSharkPl.py
@@ -78,7 +78,7 @@ class FileSharkPl(SimpleHoster):
if m is None:
self.error(_("Download url not found"))
- link = urlparse.urljoin("http://fileshark.pl", m.group(1))
+ link = urlparse.urljoin("http://fileshark.pl/", m.group(1))
self.html = self.load(link)
diff --git a/module/plugins/hoster/FileboomMe.py b/module/plugins/hoster/FileboomMe.py
index 2798d9eda..3c11f1d16 100644
--- a/module/plugins/hoster/FileboomMe.py
+++ b/module/plugins/hoster/FileboomMe.py
@@ -37,7 +37,7 @@ class FileboomMe(SimpleHoster):
def handle_free(self, pyfile):
- post_url = urljoin(pyfile.url, "/file/" + self.info['pattern']['ID'])
+ post_url = urljoin(pyfile.url, "file/" + self.info['pattern']['ID'])
m = re.search(r'data-slow-id="(\w+)"', self.html)
if m:
diff --git a/module/plugins/hoster/MediafireCom.py b/module/plugins/hoster/MediafireCom.py
index 3ba191160..21e643171 100644
--- a/module/plugins/hoster/MediafireCom.py
+++ b/module/plugins/hoster/MediafireCom.py
@@ -8,10 +8,10 @@ from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
class MediafireCom(SimpleHoster):
__name__ = "MediafireCom"
__type__ = "hoster"
- __version__ = "0.90"
+ __version__ = "0.91"
__status__ = "testing"
- __pattern__ = r'https?://(?:www\.)?mediafire\.com/(file/|view/\??|download(\.php\?|/)|\?)(?P<ID>\w{15})'
+ __pattern__ = r'https?://(?:www\.)?mediafire\.com/(file/|view/\??|download(\.php\?|/)|\?)(?P<ID>\w+)'
__config__ = [("use_premium", "bool", "Use premium account if available", True)]
__description__ = """Mediafire.com hoster plugin"""
diff --git a/module/plugins/hoster/NarodRu.py b/module/plugins/hoster/NarodRu.py
index b0d4a4960..a20c23954 100644
--- a/module/plugins/hoster/NarodRu.py
+++ b/module/plugins/hoster/NarodRu.py
@@ -49,7 +49,7 @@ class NarodRu(SimpleHoster):
m = re.search(self.LINK_FREE_PATTERN, self.html)
if m:
- self.link = urlparse.urljoin("http://narod.ru", m.group(1))
+ self.link = urlparse.urljoin("http://narod.ru/", m.group(1))
self.captcha.correct()
break
diff --git a/module/plugins/hoster/OneFichierCom.py b/module/plugins/hoster/OneFichierCom.py
index c564dc677..cba67b26c 100644
--- a/module/plugins/hoster/OneFichierCom.py
+++ b/module/plugins/hoster/OneFichierCom.py
@@ -8,7 +8,7 @@ from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
class OneFichierCom(SimpleHoster):
__name__ = "OneFichierCom"
__type__ = "hoster"
- __version__ = "0.86"
+ __version__ = "0.88"
__status__ = "testing"
__pattern__ = r'https?://(?:www\.)?(?:(?P<ID1>\w+)\.)?(?P<HOST>1fichier\.com|alterupload\.com|cjoint\.net|d(es)?fichiers\.com|dl4free\.com|megadl\.fr|mesfichiers\.org|piecejointe\.net|pjointe\.com|tenvoi\.com)(?:/\?(?P<ID2>\w+))?'
@@ -28,7 +28,7 @@ class OneFichierCom(SimpleHoster):
COOKIES = [("1fichier.com", "LG", "en")]
- NAME_PATTERN = r'>FileName :</td>\s*<td.*>(?P<N>.+?)<'
+ NAME_PATTERN = r'>File\s*Name :</td>\s*<td.*>(?P<N>.+?)<'
SIZE_PATTERN = r'>Size :</td>\s*<td.*>(?P<S>[\d.,]+) (?P<U>[\w^_]+)'
OFFLINE_PATTERN = r'File not found !\s*<'
diff --git a/module/plugins/hoster/UloziskoSk.py b/module/plugins/hoster/UloziskoSk.py
index 7cbcb4d40..12e88cf1c 100644
--- a/module/plugins/hoster/UloziskoSk.py
+++ b/module/plugins/hoster/UloziskoSk.py
@@ -58,7 +58,7 @@ class UloziskoSk(SimpleHoster):
if m is None:
self.error(_("CAPTCHA_PATTERN not found"))
- captcha_url = urlparse.urljoin("http://www.ulozisko.sk", m.group(1))
+ captcha_url = urlparse.urljoin("http://www.ulozisko.sk/", m.group(1))
captcha = self.captcha.decrypt(captcha_url, cookies=True)
self.log_debug("CAPTCHA_URL:" + captcha_url + ' CAPTCHA:' + captcha)
diff --git a/module/plugins/hoster/UnibytesCom.py b/module/plugins/hoster/UnibytesCom.py
index ac2589f47..d4b7d6dd4 100644
--- a/module/plugins/hoster/UnibytesCom.py
+++ b/module/plugins/hoster/UnibytesCom.py
@@ -65,7 +65,7 @@ class UnibytesCom(SimpleHoster):
self.wait(m.group(1) if m else 60, False)
elif last_step in ("captcha", "last"):
- post_data['captcha'] = self.captcha.decrypt(urlparse.urljoin(domain, "/captcha.jpg"))
+ post_data['captcha'] = self.captcha.decrypt(urlparse.urljoin(domain, "captcha.jpg"))
else:
self.fail(_("No valid captcha code entered"))
diff --git a/module/plugins/hoster/UploadedTo.py b/module/plugins/hoster/UploadedTo.py
index c90f2bb0f..697f1febd 100644
--- a/module/plugins/hoster/UploadedTo.py
+++ b/module/plugins/hoster/UploadedTo.py
@@ -12,7 +12,7 @@ from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
class UploadedTo(SimpleHoster):
__name__ = "UploadedTo"
__type__ = "hoster"
- __version__ = "0.96"
+ __version__ = "0.97"
__status__ = "testing"
__pattern__ = r'https?://(?:www\.)?(uploaded\.(to|net)|ul\.to)(/file/|/?\?id=|.*?&id=|/)(?P<ID>\w+)'
@@ -31,6 +31,7 @@ class UploadedTo(SimpleHoster):
OFFLINE_PATTERN = r'>Page not found'
TEMP_OFFLINE_PATTERN = r'<title>uploaded\.net - Maintenance'
+ PREMIUM_ONLY_PATTERN = r'This file exceeds the max\. filesize which can be downloaded by free users'
LINK_FREE_PATTERN = r"url:\s*'(.+?)'"
LINK_PREMIUM_PATTERN = r'<div class="tfree".*\s*<form method="post" action="(.+?)"'
@@ -77,6 +78,7 @@ class UploadedTo(SimpleHoster):
self.html = self.load("http://uploaded.net/io/ticket/captcha/%s" % self.info['pattern']['ID'],
post={'recaptcha_challenge_field': challenge,
'recaptcha_response_field' : response})
+ self.check_errors()
super(UploadedTo, self).handle_free(pyfile)
self.check_errors()
diff --git a/module/plugins/hoster/UploadheroCom.py b/module/plugins/hoster/UploadheroCom.py
index 2af0f32fc..ded0d60dd 100644
--- a/module/plugins/hoster/UploadheroCom.py
+++ b/module/plugins/hoster/UploadheroCom.py
@@ -44,7 +44,7 @@ class UploadheroCom(SimpleHoster):
if m is None:
self.error(_("Captcha not found"))
- captcha = self.captcha.decrypt(urlparse.urljoin("http://uploadhero.co", m.group(1)))
+ captcha = self.captcha.decrypt(urlparse.urljoin("http://uploadhero.co/", m.group(1)))
self.html = self.load(pyfile.url,
get={'code': captcha})
@@ -58,7 +58,7 @@ class UploadheroCom(SimpleHoster):
def check_errors(self):
m = re.search(self.IP_BLOCKED_PATTERN, self.html)
if m:
- self.html = self.load(urlparse.urljoin("http://uploadhero.co", m.group(1)))
+ self.html = self.load(urlparse.urljoin("http://uploadhero.co/", m.group(1)))
m = re.search(self.IP_WAIT_PATTERN, self.html)
wait_time = (int(m.group(1)) * 60 + int(m.group(2))) if m else 5 * 60
diff --git a/module/plugins/hoster/YibaishiwuCom.py b/module/plugins/hoster/YibaishiwuCom.py
index e0e90a311..0c1a028f8 100644
--- a/module/plugins/hoster/YibaishiwuCom.py
+++ b/module/plugins/hoster/YibaishiwuCom.py
@@ -37,7 +37,7 @@ class YibaishiwuCom(SimpleHoster):
self.log_debug(('FREEUSER' if m.group(2) == "download" else 'GUEST') + ' URL', url)
- res = json_loads(self.load(urlparse.urljoin("http://115.com", url), decode=False))
+ res = json_loads(self.load(urlparse.urljoin("http://115.com/", url), decode=False))
if "urls" in res:
mirrors = res['urls']
diff --git a/module/plugins/hoster/YoutubeCom.py b/module/plugins/hoster/YoutubeCom.py
index 865eeef2e..86cca7cf1 100644
--- a/module/plugins/hoster/YoutubeCom.py
+++ b/module/plugins/hoster/YoutubeCom.py
@@ -33,7 +33,7 @@ def which(program):
class YoutubeCom(Hoster):
__name__ = "YoutubeCom"
__type__ = "hoster"
- __version__ = "0.44"
+ __version__ = "0.45"
__status__ = "testing"
__pattern__ = r'https?://(?:[^/]*\.)?(youtube\.com|youtu\.be)/watch\?(?:.*&)?v=.+'
@@ -54,7 +54,7 @@ class YoutubeCom(Hoster):
URL_REPLACEMENTS = [(r'youtu\.be/', 'youtube.com/')]
#: Invalid characters that must be removed from the file name
- invalidChars = u'\u2605:?><"|\\'
+ invalid_chars = u'\u2605:?><"|\\'
#: name, width, height, quality ranking, 3D
formats = {5 : (".flv" , 400 , 240 , 1 , False),
diff --git a/module/plugins/internal/Captcha.py b/module/plugins/internal/Captcha.py
index c08050ee8..600fd1d34 100644
--- a/module/plugins/internal/Captcha.py
+++ b/module/plugins/internal/Captcha.py
@@ -120,7 +120,7 @@ class Captcha(Plugin):
self.log_warning(_("Error removing: %s") % tmp_img.name, e)
traceback.print_exc()
- self.log_info(_("Captcha result: ") + result) #@TODO: Remove from here?
+ #self.log_info(_("Captcha result: ") + result) #@TODO: Remove from here?
return result
diff --git a/module/plugins/internal/Hoster.py b/module/plugins/internal/Hoster.py
index a0cdb1e2e..b397a92a6 100644
--- a/module/plugins/internal/Hoster.py
+++ b/module/plugins/internal/Hoster.py
@@ -3,6 +3,7 @@
from __future__ import with_statement
import inspect
+import mimetypes
import os
import random
import time
@@ -43,7 +44,7 @@ def create_getInfo(klass):
class Hoster(Plugin):
__name__ = "Hoster"
__type__ = "hoster"
- __version__ = "0.19"
+ __version__ = "0.20"
__status__ = "testing"
__pattern__ = r'^unmatchable$'
diff --git a/module/plugins/internal/SimpleCrypter.py b/module/plugins/internal/SimpleCrypter.py
index 6a3f91a5b..9597116cc 100644
--- a/module/plugins/internal/SimpleCrypter.py
+++ b/module/plugins/internal/SimpleCrypter.py
@@ -10,7 +10,7 @@ from module.utils import fixup, html_unescape
class SimpleCrypter(Crypter, SimpleHoster):
__name__ = "SimpleCrypter"
__type__ = "crypter"
- __version__ = "0.60"
+ __version__ = "0.61"
__status__ = "testing"
__pattern__ = r'^unmatchable$'
@@ -91,6 +91,7 @@ class SimpleCrypter(Crypter, SimpleHoster):
def decrypt(self, pyfile):
+ self.links = [] #@TODO: Recheck in 0.4.10
self.prepare()
self.check_info() #@TODO: Remove in 0.4.10
diff --git a/module/plugins/internal/SimpleHoster.py b/module/plugins/internal/SimpleHoster.py
index 9c310ca27..69f88081a 100644
--- a/module/plugins/internal/SimpleHoster.py
+++ b/module/plugins/internal/SimpleHoster.py
@@ -2,7 +2,6 @@
from __future__ import with_statement
-import mimetypes
import os
import re
import time
@@ -23,7 +22,7 @@ statusMap = dict((v, k) for k, v in _statusMap.items())
class SimpleHoster(Hoster):
__name__ = "SimpleHoster"
__type__ = "hoster"
- __version__ = "1.80"
+ __version__ = "1.81"
__status__ = "testing"
__pattern__ = r'^unmatchable$'
@@ -315,7 +314,7 @@ class SimpleHoster(Hoster):
elif self.check_download({'Empty file': re.compile(r'\A((.|)(\2|\s)*)\Z')},
file_size=self.info['size'] if 'size' in self.info else 0,
size_tolerance=10485760,
- delete=True):
+ delete=False): #@TODO: Make `delete` settable in 0.4.10
self.error(_("Empty file"))
else:
diff --git a/module/plugins/internal/XFSAccount.py b/module/plugins/internal/XFSAccount.py
index e0f6b1ee8..5a4cc35fb 100644
--- a/module/plugins/internal/XFSAccount.py
+++ b/module/plugins/internal/XFSAccount.py
@@ -11,7 +11,7 @@ from module.plugins.internal.Plugin import parse_html_form, set_cookie
class XFSAccount(Account):
__name__ = "XFSAccount"
__type__ = "account"
- __version__ = "0.42"
+ __version__ = "0.43"
__status__ = "testing"
__description__ = """XFileSharing account plugin"""
@@ -151,6 +151,8 @@ class XFSAccount(Account):
if not self.HOSTER_URL:
self.login_fail(_("Missing HOSTER_URL"))
+ else:
+ self.HOSTER_URL = self.HOSTER_URL.rstrip('/') + "/"
if not self.LOGIN_URL:
self.LOGIN_URL = urlparse.urljoin(self.HOSTER_URL, "login.html")