summaryrefslogtreecommitdiffstats
path: root/module/plugins/internal/MultiAccount.py
diff options
context:
space:
mode:
Diffstat (limited to 'module/plugins/internal/MultiAccount.py')
-rw-r--r--module/plugins/internal/MultiAccount.py251
1 files changed, 1 insertions, 250 deletions
diff --git a/module/plugins/internal/MultiAccount.py b/module/plugins/internal/MultiAccount.py
index f9252cc10..90cb0e748 100644
--- a/module/plugins/internal/MultiAccount.py
+++ b/module/plugins/internal/MultiAccount.py
@@ -1,16 +1,12 @@
# -*- coding: utf-8 -*-
-import re
-import time
-
from module.plugins.internal.Account import Account
-from module.plugins.internal.utils import decode, remove_chars, uniqify
class MultiAccount(Account):
__name__ = "MultiAccount"
__type__ = "account"
- __version__ = "0.04"
+ __version__ = "0.05"
__status__ = "broken"
__config__ = [("activated" , "bool" , "Activated" , True ),
@@ -22,248 +18,3 @@ class MultiAccount(Account):
__description__ = """Multi-hoster account plugin"""
__license__ = "GPLv3"
__authors__ = [("Walter Purcaro", "vuolter@gmail.com")]
-
-
- # PERIODICAL_INTERVAL = 1 * 60 * 60 #: 1 hour
- PERIODICAL_LOGIN = False
-
- DOMAIN_REPLACEMENTS = [(r'180upload\.com' , "hundredeightyupload.com"),
- (r'bayfiles\.net' , "bayfiles.com" ),
- (r'cloudnator\.com' , "shragle.com" ),
- (r'dfiles\.eu' , "depositfiles.com" ),
- (r'easy-share\.com' , "crocko.com" ),
- (r'freakshare\.net' , "freakshare.com" ),
- (r'hellshare\.com' , "hellshare.cz" ),
- (r'ifile\.it' , "filecloud.io" ),
- (r'nowdownload\.\w+', "nowdownload.sx" ),
- (r'nowvideo\.\w+' , "nowvideo.sx" ),
- (r'putlocker\.com' , "firedrive.com" ),
- (r'share-?rapid\.cz', "multishare.cz" ),
- (r'ul\.to' , "uploaded.to" ),
- (r'uploaded\.net' , "uploaded.to" ),
- (r'uploadhero\.co' , "uploadhero.com" ),
- (r'zshares\.net' , "zshare.net" ),
- (r'^1' , "one" ),
- (r'^2' , "two" ),
- (r'^3' , "three" ),
- (r'^4' , "four" ),
- (r'^5' , "five" ),
- (r'^6' , "six" ),
- (r'^7' , "seven" ),
- (r'^8' , "eight" ),
- (r'^9' , "nine" ),
- (r'^0' , "zero" )]
-
-
- def init(self):
- self.plugins = []
- self.supported = []
- self.newsupported = []
-
- self.pluginclass = None
- self.pluginmodule = None
- self.plugintype = None
-
- self.init_plugin()
-
-
- def init_plugin(self):
- plugin, self.plugintype = self.pyload.pluginManager.findPlugin(self.classname)
-
- if plugin:
- self.pluginmodule = self.pyload.pluginManager.loadModule(self.plugintype, self.classname)
- self.pluginclass = self.pyload.pluginManager.loadClass(self.plugintype, self.classname)
- else:
- self.log_warning(_("Multi-hoster feature will be deactivated due missing plugin reference"))
- self.set_config('multi', False)
-
-
- def activate(self):
- interval = self.get_config('multi_interval') * 60 * 60
- self.start_periodical(interval, threaded=True)
-
-
- def replace_domains(self, list):
- for r in self.DOMAIN_REPLACEMENTS:
- pattern, repl = r
- regex = re.compile(pattern, re.I | re.U)
- domains = [regex.sub(repl, domain) if regex.match(domain) else domain for domain in list]
-
- return domains
-
-
- def parse_domains(self, list):
- regexp = re.compile(r'^(?:https?://)?(?:www\.)?(?:\w+\.)*((?:[\d.]+|[\w\-^_]{3,63}(?:\.[a-zA-Z]{2,}){1,2})(?:\:\d+)?)',
- re.I | re.U)
-
- r'^(?:https?://)?(?:www\.)?(?:\w+\.)*((?:[\d.]+|[\w\-^_]{3,63}(?:\.[a-zA-Z]{2,}){1,2})(?:\:\d+)?)'
-
- domains = [decode(domain).strip().lower() for url in list for domain in regexp.findall(url)]
- return self.replace_domains(uniqify(domains))
-
-
- def _grab_hosters(self):
- try:
- hosterlist = self.grab_hosters(self.user, self.info['login']['password'], self.info['data'])
-
- if hosterlist and isinstance(hosterlist, list):
- domains = self.parse_domains(hosterlist)
- self.info['data']['hosters'] = sorted(domains)
-
- except Exception, e:
- self.log_warning(_("Error loading hoster list for user `%s`") % self.user, e, trace=True)
-
- finally:
- return self.info['data']['hosters']
-
-
- def grab_hosters(self, user, password, data):
- """
- Load list of supported hoster
- :return: List of domain names
- """
- raise NotImplementedError
-
-
- def periodical(self):
- if not self.info['data'].get('hosters'):
- self.log_info(_("Loading hoster list for user `%s`...") % self.user)
- else:
- self.log_info(_("Reloading hoster list for user `%s`...") % self.user)
-
- if self.PERIODICAL_LOGIN and not self.logged:
- self.relogin()
-
- hosters = self._grab_hosters()
-
- self.log_debug("Hoster list for user `%s`: %s" % (self.user, hosters))
-
- old_supported = self.supported
-
- self.supported = []
- self.newsupported = []
- self.plugins = []
-
- self._override()
-
- old_supported = [plugin for plugin in old_supported if plugin not in self.supported]
-
- if old_supported:
- self.log_debug("Unload: %s" % ", ".join(old_supported))
- for plugin in old_supported:
- self.unload_plugin(plugin)
-
- self.set_interval(self.get_config('multi_interval') * 60 * 60)
-
-
- def _override(self):
- excludedList = []
-
- if self.plugintype == "hoster":
- pluginMap = dict((name.lower(), name) for name in self.pyload.pluginManager.hosterPlugins.keys())
- accountList = [account.type.lower() for account in self.pyload.api.getAccounts(False) if account.valid and account.premium]
- else:
- pluginMap = {}
- accountList = [name[::-1].replace("Folder"[::-1], "", 1).lower()[::-1] for name in self.pyload.pluginManager.crypterPlugins.keys()]
-
- for plugin in self.plugins_cached():
- name = remove_chars(plugin, "-.")
-
- if name in accountList:
- excludedList.append(plugin)
- else:
- if name in pluginMap:
- self.supported.append(pluginMap[name])
- else:
- self.newsupported.append(plugin)
-
- if not self.supported and not self.newsupported:
- self.log_error(_("No %s loaded") % self.plugintype)
- return
-
- #: Inject plugin plugin
- self.log_debug("Overwritten %ss: %s" % (self.plugintype, ", ".join(sorted(self.supported))))
-
- for plugin in self.supported:
- hdict = self.pyload.pluginManager.plugins[self.plugintype][plugin]
- hdict['new_module'] = self.pluginmodule
- hdict['new_name'] = self.classname
-
- if excludedList:
- self.log_info(_("%ss not overwritten: %s") % (self.plugintype.capitalize(), ", ".join(sorted(excludedList))))
-
- if self.newsupported:
- plugins = sorted(self.newsupported)
-
- self.log_debug("New %ss: %s" % (self.plugintype, ", ".join(plugins)))
-
- #: Create new regexp
- regexp = r'.*(?P<DOMAIN>%s).*' % "|".join(x.replace('.', '\.') for x in plugins)
- if hasattr(self.pluginclass, "__pattern__") and isinstance(self.pluginclass.__pattern__, basestring) and "://" in self.pluginclass.__pattern__:
- regexp = r'%s|%s' % (self.pluginclass.__pattern__, regexp)
-
- self.log_debug("Regexp: %s" % regexp)
-
- hdict = self.pyload.pluginManager.plugins[self.plugintype][self.classname]
- hdict['pattern'] = regexp
- hdict['re'] = re.compile(regexp)
-
-
- def plugins_cached(self):
- if self.plugins:
- return self.plugins
-
- for _i in xrange(5):
- try:
- pluginset = self._plugin_set(self.grab_hosters())
- break
-
- except Exception, e:
- self.log_warning(e, _("Waiting 1 minute and retry"), trace=True)
- time.sleep(60)
- else:
- self.log_warning(_("No hoster list retrieved"))
- self.interval = self.PERIODICAL_INTERVAL
- return list()
-
- try:
- configmode = self.get_config('pluginmode', 'all')
- if configmode in ("listed", "unlisted"):
- pluginlist = self.get_config('pluginlist', '').replace('|', ',').replace(';', ',').split(',')
- configset = self._plugin_set(pluginlist)
-
- if configmode == "listed":
- pluginset &= configset
- else:
- pluginset -= configset
-
- except Exception, e:
- self.log_error(e)
-
- self.plugins = list(pluginset)
-
- return self.plugins
-
-
- # def unload_plugin(self, plugin):
- # hdict = self.pyload.pluginManager.plugins[self.plugintype][plugin]
- # if "module" in hdict:
- # hdict.pop('module', None)
-
- # if "new_module" in hdict:
- # hdict.pop('new_module', None)
- # hdict.pop('new_name', None)
-
-
- # def deactivate(self):
- # """
- # Remove override for all plugins. Scheduler job is removed by hookmanager
- # """
- # for plugin in self.supported:
- # self.unload_plugin(plugin)
-
- #: Reset pattern
- # hdict = self.pyload.pluginManager.plugins[self.plugintype][self.classname]
-
- # hdict['pattern'] = getattr(self.pluginclass, "__pattern__", r'^unmatchable$')
- # hdict['re'] = re.compile(hdict['pattern'])