diff options
| -rw-r--r-- | module/AccountManager.py | 5 | ||||
| -rw-r--r-- | module/ConfigParser.py | 2 | ||||
| -rw-r--r-- | module/plugins/Account.py | 23 | ||||
| -rw-r--r-- | module/plugins/Plugin.py | 12 | ||||
| -rw-r--r-- | module/plugins/accounts/UploadedTo.py | 18 | ||||
| -rw-r--r-- | module/plugins/hoster/UploadedTo.py | 51 | 
6 files changed, 57 insertions, 54 deletions
| diff --git a/module/AccountManager.py b/module/AccountManager.py index fd2d4c853..391c8e775 100644 --- a/module/AccountManager.py +++ b/module/AccountManager.py @@ -66,6 +66,7 @@ class AccountManager():  			if not line: continue  			if line.startswith("#"): continue +			if line.startswith("version"): continue  			if line.endswith(":"):  				plugin = line[:-1] @@ -77,7 +78,7 @@ class AccountManager():  			elif ":" in line:  				name, pw = line.split(":")[:] -				self.accounts[plugin][name] = {"pw": pw, "options":  []} +				self.accounts[plugin][name] = {"password": pw, "options":  []} @@ -91,4 +92,4 @@ class AccountManager():  		"""init names"""  		for name in self.core.pluginManager.getAccountPlugins():  			self.accounts[name] = {} -		
\ No newline at end of file +		 diff --git a/module/ConfigParser.py b/module/ConfigParser.py index 49401416b..42dce1858 100644 --- a/module/ConfigParser.py +++ b/module/ConfigParser.py @@ -215,7 +215,7 @@ class ConfigParser:      def saveConfig(self, config, filename):          """saves config to filename"""          with open(filename, "wb") as f: -            f.write("config: %i \n" % CONF_VERSION) +            f.write("version: %i \n" % CONF_VERSION)              for section in config.iterkeys():                  f.write('\n%s - "%s":\n' % (section, config[section]["desc"])) diff --git a/module/plugins/Account.py b/module/plugins/Account.py index 91636bc5d..af1c4a383 100644 --- a/module/plugins/Account.py +++ b/module/plugins/Account.py @@ -17,12 +17,12 @@      @author: mkaay  """ -from random import choice +from random import randrange  import re  class Account():      __name__ = "Account" -    __version__ = "0.1" +    __version__ = "0.2"      __type__ = "account"      __description__ = """Account Plugin"""      __author_name__ = ("mkaay") @@ -31,16 +31,18 @@ class Account():      def __init__(self, manager, accounts):          self.manager = manager          self.core = manager.core -        self.accounts = accounts +        self.accounts = {} +        self.register = {} +        self.setAccounts(accounts)      def login(self):          pass      def setAccounts(self, accounts): -        #@TODO improve          self.accounts = accounts +        self.login() -    def getAccountInfo(self, namepass): +    def getAccountInfo(self, name):          return {              "validuntil": None,              "login": name, @@ -52,19 +54,24 @@ class Account():          pass      def getAccountRequest(self, plugin): -        account = self.getAccountData(plugin) -        req = self.core.requestFactory.getRequest(self.__name__, account[0]) +        user, data = self.getAccountData(plugin) +        req = self.core.requestFactory.getRequest(self.__name__, user)          return req      def getAccountData(self, plugin):          if not len(self.accounts):              return None          if not self.register.has_key(plugin): -            account = self.accounts[randrange(0, len(self.accounts), 1)] +            account = self.selectAccount(plugin) +            self.register[plugin] = account          else:              account = self.register[plugin]          return account +    def selectAccount(self, plugin): +        account = self.accounts.items()[randrange(0, len(self.accounts), 1)] +        return account +          def parseTraffic(self, string): #returns kbyte          string = string.strip().lower()          p = re.compile(r"(\d+[\.,]\d+)(.*)") diff --git a/module/plugins/Plugin.py b/module/plugins/Plugin.py index 29fdebde8..a6ea7dee7 100644 --- a/module/plugins/Plugin.py +++ b/module/plugins/Plugin.py @@ -81,7 +81,10 @@ class Plugin(object):          self.ocr = None  # captcha reader instance          self.account = pyfile.m.core.accountManager.getAccountPlugin(self.__name__) # account handler instance -        self.req = pyfile.m.core.requestFactory.getRequest(self.__name__, self.account) +        if self.account: +            self.req = self.account.getAccountRequest(self) +        else: +            self.req = pyfile.m.core.requestFactory.getRequest(self.__name__)          self.log = logging.getLogger("log") @@ -112,8 +115,11 @@ class Plugin(object):      def process(self, pyfile):          """the 'main' method of every plugin"""          raise NotImplementedError - - +     +    def resetAccount(self): +        self.account = None +        self.req = self.core.requestFactory.getRequest(self.__name__) +          def checksum(self, local_file=None):          """          return codes: diff --git a/module/plugins/accounts/UploadedTo.py b/module/plugins/accounts/UploadedTo.py index a56082657..9521f2577 100644 --- a/module/plugins/accounts/UploadedTo.py +++ b/module/plugins/accounts/UploadedTo.py @@ -29,22 +29,22 @@ class UploadedTo(Account):      __author_name__ = ("mkaay")      __author_mail__ = ("mkaay@mkaay.de") -    def getAccountInfo(self, name): -        req = self.core.requestFactory.getRequest(self.__name__, name) +    def getAccountInfo(self, user):          data = None -        for account in self.accounts: -            if account[0] == name: -                data = account +        for account in self.accounts.items(): +            if account[0] == user: +                data = account[1]          if not data:              return +        req = self.core.requestFactory.getRequest(self.__name__, user)          html = req.load("http://uploaded.to/", cookies=True)          raw_traffic = re.search(r"Traffic left: </span><span class=.*?>(.*?)</span>", html).group(1)          raw_valid = re.search(r"Valid until: </span> <span class=.*?>(.*?)</span>", html).group(1)          traffic = int(self.parseTraffic(raw_traffic))          validuntil = int(mktime(strptime(raw_valid.strip(), "%d-%m-%Y %H:%M"))) -        return {"login":name, "validuntil":validuntil, "trafficleft":traffic, "type":self.__name__} +        return {"login":user, "validuntil":validuntil, "trafficleft":traffic, "type":self.__name__}      def login(self): -        for account in self.accounts: -            req = self.core.requestFactory.getRequest(self.__name__, account[0]) -            req.load("http://uploaded.to/login", None, { "email" : account[0], "password" : account[1]}, cookies=True) +        for user, data in self.accounts.items(): +            req = self.core.requestFactory.getRequest(self.__name__, user) +            req.load("http://uploaded.to/login", None, { "email" : user, "password" : data["password"]}, cookies=True) diff --git a/module/plugins/hoster/UploadedTo.py b/module/plugins/hoster/UploadedTo.py index 2fefe5bcf..573119680 100644 --- a/module/plugins/hoster/UploadedTo.py +++ b/module/plugins/hoster/UploadedTo.py @@ -19,17 +19,9 @@ class UploadedTo(Hoster):          self.html = None          self.api_data = None          self.multiDL = False -        # self.usePremium = self.config['premium'] -        # if self.usePremium: -            # self.account = self.parent.core.pluginManager.getAccountPlugin(self.__name__) -            # req = self.account.getAccountRequest(self) -            # if req: -                # self.req = req -                # self.multi_dl = True -                # self.req.canContinue = True -            # else: -                # self.usePremium = False - +        if self.account: +            self.multiDL = True +            self.req.canContinue = True      def process(self, pyfile):          self.url = False @@ -51,15 +43,16 @@ class UploadedTo(Hoster):              # self.pyfile.name = self.get_file_name() -            # if self.usePremium: -                # info = self.account.getAccountInfo(self.account.getAccountData(self)[0]) -                # self.logger.info(_("%s: Use Premium Account (%sGB left)") % (self.__name__, info["trafficleft"]/1024/1024)) -                # if self.api_data["size"]/1024 > info["trafficleft"]: -                    # self.logger.info(_("%s: Not enough traffic left" % self.__name__)) -                    # self.usePremium = False -                # else: -                    # self.pyfile.status.url = self.parent.url -                    # return True +            if self.account: +                info = self.account.getAccountInfo(self.account.getAccountData(self)[0]) +                self.log.debug(_("%s: Use Premium Account (%sGB left)") % (self.__name__, info["trafficleft"]/1024/1024)) +                if self.api_data["size"]/1024 > info["trafficleft"]: +                    self.log.info(_("%s: Not enough traffic left" % self.__name__)) +                    self.resetAcount() +                else: +                    self.url = self.get_file_url() +                    self.pyfile.name = self.get_file_name() +                    return True              self.url = self.get_file_url() @@ -98,9 +91,9 @@ class UploadedTo(Hoster):              return 0      def get_file_url(self): -        # if self.usePremium: -            # self.start_dl = True -            # return self.url +        if self.account: +            self.start_dl = True +            return self.cleanUrl(self.pyfile.url)          try:              file_url_pattern = r".*<form name=\"download_form\" method=\"post\" action=\"(.*)\">"              return re.search(file_url_pattern, self.html).group(1) @@ -133,11 +126,7 @@ class UploadedTo(Hoster):          return url      def proceed(self): -        # if self.usePremium: -            # self.load(url, cookies=True, just_header=True) -            # if self.cleanUrl(self.req.lastEffectiveURL) == self.cleanUrl(url): -                # self.logger.info(_("UploadedTo indirect download")) -                # url = self.cleanUrl(url)+"?redirect" -            # self.download(url, location, cookies=True) -        # else: -        self.download(self.url, cookies=False, post={"download_submit": "Free Download"}) +        if self.account: +            self.download(self.url+"?redirect", cookies=True) +        else: +            self.download(self.url, cookies=False, post={"download_submit": "Free Download"}) | 
