summaryrefslogtreecommitdiffstats
path: root/module/plugins/hoster/FilefactoryCom.py
diff options
context:
space:
mode:
Diffstat (limited to 'module/plugins/hoster/FilefactoryCom.py')
-rw-r--r--module/plugins/hoster/FilefactoryCom.py45
1 files changed, 20 insertions, 25 deletions
diff --git a/module/plugins/hoster/FilefactoryCom.py b/module/plugins/hoster/FilefactoryCom.py
index ada498a51..ea1a38b7a 100644
--- a/module/plugins/hoster/FilefactoryCom.py
+++ b/module/plugins/hoster/FilefactoryCom.py
@@ -1,8 +1,7 @@
# -*- coding: utf-8 -*-
import re
-
-from urlparse import urljoin
+import urlparse
from module.network.RequestFactory import getURL
from module.plugins.internal.SimpleHoster import SimpleHoster, parseFileInfo
@@ -21,9 +20,10 @@ def getInfo(urls):
class FilefactoryCom(SimpleHoster):
__name__ = "FilefactoryCom"
__type__ = "hoster"
- __version__ = "0.52"
+ __version__ = "0.55"
__pattern__ = r'https?://(?:www\.)?filefactory\.com/(file|trafficshare/\w+)/\w+'
+ __config__ = [("use_premium", "bool", "Use premium account if available", True)]
__description__ = """Filefactory.com hoster plugin"""
__license__ = "GPLv3"
@@ -32,9 +32,9 @@ class FilefactoryCom(SimpleHoster):
INFO_PATTERN = r'<div id="file_name"[^>]*>\s*<h2>(?P<N>[^<]+)</h2>\s*<div id="file_info">\s*(?P<S>[\d.,]+) (?P<U>[\w^_]+) uploaded'
- OFFLINE_PATTERN = r'<h2>File Removed</h2>|This file is no longer available'
+ OFFLINE_PATTERN = r'<h2>File Removed</h2>|This file is no longer available|Invalid Download Link'
- LINK_PATTERN = r'"([^"]+filefactory\.com/get.+?)"'
+ LINK_FREE_PATTERN = LINK_PREMIUM_PATTERN = r'"([^"]+filefactory\.com/get.+?)"'
WAIT_PATTERN = r'<div id="countdown_clock" data-delay="(\d+)">'
PREMIUM_ONLY_PATTERN = r'>Premium Account Required'
@@ -42,49 +42,44 @@ class FilefactoryCom(SimpleHoster):
COOKIES = [("filefactory.com", "locale", "en_US.utf8")]
- def handleFree(self):
+ def handleFree(self, pyfile):
if "Currently only Premium Members can download files larger than" in self.html:
self.fail(_("File too large for free download"))
elif "All free download slots on this server are currently in use" in self.html:
self.retry(50, 15 * 60, _("All free slots are busy"))
- m = re.search(self.LINK_PATTERN, self.html)
+ m = re.search(self.LINK_FREE_PATTERN, self.html)
if m is None:
self.error(_("Free download link not found"))
- dl_link = m.group(1)
+ self.link = m.group(1)
m = re.search(self.WAIT_PATTERN, self.html)
if m:
- self.wait(int(m.group(1)))
+ self.wait(m.group(1))
- self.download(dl_link, disposition=True)
+ def checkFile(self, rules={}):
check = self.checkDownload({'multiple': "You are currently downloading too many files at once.",
- 'error': '<div id="errorMessage">'})
+ 'error' : '<div id="errorMessage">'})
if check == "multiple":
self.logDebug("Parallel downloads detected; waiting 15 minutes")
self.retry(wait_time=15 * 60, reason=_("Parallel downloads"))
+
elif check == "error":
self.error(_("Unknown error"))
+ return super(FilefactoryCom, self).checkFile(rules)
- def handlePremium(self):
- header = self.load(self.pyfile.url, just_header=True)
- if 'location' in header:
- url = header['location'].strip()
- if not url.startswith("http://"):
- url = urljoin("http://www.filefactory.com", url)
- elif 'content-disposition' in header:
- url = self.pyfile.url
- else:
- html = self.load(self.pyfile.url)
- m = re.search(self.LINK_PATTERN, html)
+ def handlePremium(self, pyfile):
+ self.link = self.directLink(self.load(pyfile.url, just_header=True))
+
+ if not self.link:
+ html = self.load(pyfile.url)
+ m = re.search(self.LINK_PREMIUM_PATTERN, html)
if m:
- url = m.group(1)
+ self.link = m.group(1)
else:
self.error(_("Premium download link not found"))
-
- self.download(url, disposition=True)