# -*- coding: utf-8 -*-
import re
import time
from module.plugins.internal.Account import Account
class UploadedTo(Account):
    __name__    = "UploadedTo"
    __type__    = "account"
    __version__ = "0.40"
    __status__  = "testing"
    __description__ = """Uploaded.to account plugin"""
    __license__     = "GPLv3"
    __authors__     = [("Walter Purcaro", "vuolter@gmail.com")]
    COOKIES = False
    PREMIUM_PATTERN      = r'Premium'
    VALID_UNTIL_PATTERN  = r'
Duration:\s* | (.+?)<'
    TRAFFIC_LEFT_PATTERN = r'(?P [\d.,]+) (?P[\w^_]+)'
    def grab_info(self, user, password, data):
        validuntil  = None
        trafficleft = None
        premium     = None
        html = self.load("http://uploaded.net/me")
        premium = True if re.search(self.PREMIUM_PATTERN, html) else False
        m = re.search(self.VALID_UNTIL_PATTERN, html, re.M)
        if m is not None:
            expiredate = m.group(1).lower().strip()
            if expiredate == "unlimited":
                validuntil = -1
            else:
                m = re.findall(r'(\d+) (week|day|hour)', expiredate)
                if m is not None:
                    validuntil = time.time()
                    for n, u in m:
                        validuntil += float(n) * 60 * 60 * {'week': 168, 'day': 24, 'hour': 1}[u]
        m = re.search(self.TRAFFIC_LEFT_PATTERN, html)
        if m is not None:
            traffic = m.groupdict()
            size    = traffic['S'].replace('.', '')
            unit    = traffic['U'].lower()
            trafficleft = self.parse_traffic(size, unit)
        return {'validuntil' : validuntil,
                'trafficleft': trafficleft,
                'premium'    : premium}
    def signin(self, user, password, data):
        try:
            self.load("http://uploaded.net/me")
            html = self.load("http://uploaded.net/io/login",
                             post={'id': user,
                                   'pw': password})
            m = re.search(r'"err":"(.+?)"', html)
            if m is not None:
                self.fail_login(m.group(1))
        except Exception, e:
            self.log_error(e, trace=True)
            self.fail_login(e.message)
 |