From 5658d5525d5088a6254322210c1641cbdba2eb7d Mon Sep 17 00:00:00 2001
From: zoidberg10 <zoidberg@mujmail.cz>
Date: Wed, 3 Oct 2012 01:14:48 +0200
Subject: update czshare, little fixes

---
 module/plugins/hoster/CzshareCom.py    | 106 +++++++++++++--------------------
 module/plugins/hoster/LoadTo.py        |   7 ++-
 module/plugins/hoster/RapidgatorNet.py |  11 +---
 3 files changed, 46 insertions(+), 78 deletions(-)

(limited to 'module/plugins/hoster')

diff --git a/module/plugins/hoster/CzshareCom.py b/module/plugins/hoster/CzshareCom.py
index 8d035b64c..c8a576b29 100644
--- a/module/plugins/hoster/CzshareCom.py
+++ b/module/plugins/hoster/CzshareCom.py
@@ -17,42 +17,24 @@
 """
 
 import re
-from module.plugins.internal.SimpleHoster import SimpleHoster, parseFileInfo, PluginParseError
-from module.network.RequestFactory import getURL
-
-def toInfoPage(url):
-    if r"/download.php?" in url:
-        try:
-            id = re.search(r"id=(\d+)", url).group(1)
-            code = re.search(r"code=(\w+)", url).group(1)
-        except Exception, e:
-            return None
-        return "http://czshare.com/%s/%s/" % (id, code)
-    return url
-
-def getInfo(urls):
-    result = []
-
-    for url in urls:
-        info_url = toInfoPage(url)
-        if info_url:
-            file_info = parseFileInfo(CzshareCom, url, getURL(info_url, decode=True)) 
-            result.append(file_info)
-            
-    yield result
+from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
+from module.utils import parseFileSize
 
 class CzshareCom(SimpleHoster):
     __name__ = "CzshareCom"
     __type__ = "hoster"
     __pattern__ = r"http://(\w*\.)*czshare\.(com|cz)/(\d+/|download.php\?).*"
-    __version__ = "0.90"
+    __version__ = "0.91"
     __description__ = """CZshare.com"""
     __author_name__ = ("zoidberg")
 
     FILE_NAME_PATTERN = r'<div class="tab" id="parameters">\s*<p>\s*Cel. n.zev: <a href=[^>]*>(?P<N>[^<]+)</a>'
     FILE_SIZE_PATTERN = r'<div class="tab" id="category">(?:\s*<p>[^\n]*</p>)*\s*Velikost:\s*(?P<S>[0-9., ]+)(?P<U>[kKMG])i?B\s*</div>'
     FILE_OFFLINE_PATTERN = r'<div class="header clearfix">\s*<h2 class="red">'
+    
     FILE_SIZE_REPLACEMENTS = [(' ', '')]
+    FILE_URL_REPLACEMENTS = [(r'http://[^/]*/download.php\?.*?id=(\w+).*', r'http://czshare.com/\1/x/')]
+    SH_CHECK_TRAFFIC = True
 
     FREE_URL_PATTERN = r'<a href="([^"]+)" class="page-download">[^>]*alt="([^"]+)" /></a>'
     FREE_FORM_PATTERN = r'<form action="download.php" method="post">\s*<img src="captcha.php" id="captcha" />(.*?)</form>'
@@ -65,20 +47,7 @@ class CzshareCom(SimpleHoster):
         self.multiDL = self.resumeDownload = True if self.premium else False
         self.chunkLimit = 1
 
-    def process(self, pyfile):
-        url = toInfoPage(pyfile.url)
-        if not url:
-            self.logError(e)
-            self.fail("Invalid URL")
-
-        self.html = self.load(url, cookies=True, decode=True)
-        self.getFileInfo()
-
-        if not self.account or not self.handlePremium():
-            self.handleFree()
-        self.checkDownloadedFile()
-
-    def handlePremium(self):
+    def checkTrafficLeft(self):
         # check if user logged in
         found = re.search(self.USER_CREDIT_PATTERN, self.html)
         if not found:
@@ -89,17 +58,19 @@ class CzshareCom(SimpleHoster):
 
         # check user credit
         try:
-            credit = float(found.group(1).replace(',','.').replace(' ',''))
-            credit = credit * 1024 ** {'KB': 0, 'MB': 1, 'GB': 2}[found.group(2)]
+            credit = parseFileSize(found.group(1).replace(' ',''), found.group(2))
             self.logInfo("Premium download for %i KiB of Credit" % (self.pyfile.size / 1024))
-            self.logInfo("User %s has %i KiB left" % (self.user, credit))
-            if credit * 1024 < self.pyfile.size:
+            self.logInfo("User %s has %i KiB left" % (self.user, credit / 1024))
+            if credit < self.pyfile.size:
                 self.logInfo("Not enough credit to download file %s" % self.pyfile.name)
-                self.resetAccount()
+                return False
         except Exception, e:
             # let's continue and see what happens...
             self.logError('Parse error (CREDIT): %s' % e)
-
+        
+        return True 
+    
+    def handlePremium(self):        
         # parse download link
         try:
             form = re.search(self.PREMIUM_FORM_PATTERN, self.html, re.DOTALL).group(1)
@@ -110,7 +81,7 @@ class CzshareCom(SimpleHoster):
 
         # download the file, destination is determined by pyLoad
         self.download("http://czshare.com/profi_down.php", cookies=True, post=inputs)
-        return True
+        self.checkDownloadedFile()
 
     def handleFree(self):
         # get free url
@@ -121,11 +92,9 @@ class CzshareCom(SimpleHoster):
         self.logDebug("PARSED_URL:" + parsed_url)
 
         # get download ticket and parse html
-        self.html = self.load(parsed_url, cookies=True)
-
-        #if not re.search(self.FREE_FORM_PATTERN, self.html):
+        self.html = self.load(parsed_url, cookies=True, decode=True)
         if re.search(self.MULTIDL_PATTERN, self.html):
-           self.waitForFreeSlot()
+           self.longWait(300, 12)
 
         try:
             form = re.search(self.FREE_FORM_PATTERN, self.html, re.DOTALL).group(1)
@@ -135,15 +104,20 @@ class CzshareCom(SimpleHoster):
             self.logError(e)
             raise PluginParseError('Form')
 
-        # get and decrypt captcha
+        # get and decrypt captcha        
         captcha_url = 'http://czshare.com/captcha.php'
-        inputs['captchastring2'] = self.decryptCaptcha(captcha_url)
-        self.logDebug('CAPTCHA_URL:' + captcha_url + ' CAPTCHA:' + inputs['captchastring2'])
-
-        self.html = self.load(parsed_url, cookies=True, post=inputs)
-        
-        if re.search(self.MULTIDL_PATTERN, self.html):
-           self.waitForFreeSlot()
+        for i in range(5):
+            inputs['captchastring2'] = self.decryptCaptcha(captcha_url)
+            self.html = self.load(parsed_url, cookies=True, post=inputs, decode=True)
+            if u"<li>Zadaný ověřovací kód nesouhlasí!</li>" in self.html:
+                self.invalidCaptcha()
+            elif re.search(self.MULTIDL_PATTERN, self.html):
+                self.longWait(300, 12)
+            else:
+                self.correctCaptcha()
+                break
+        else:
+            self.fail("No valid captcha code entered")
         
         found = re.search("countdown_number = (\d+);", self.html)
         self.setWait(int(found.group(1)) if found else 50)
@@ -158,26 +132,26 @@ class CzshareCom(SimpleHoster):
         
         self.wait() 
         self.multiDL = True           
-        self.download(url)    
+        self.download(url)
+        self.checkDownloadedFile()
 
     def checkDownloadedFile(self):
         # check download
         check = self.checkDownload({
-            "tempoffline": re.compile(r"^Soubor je do.asn. nedostupn.$"),
+            "tempoffline": re.compile(r"^Soubor je do.*asn.* nedostupn.*$"),
+            "credit": re.compile(r"^Nem.*te dostate.*n.* kredit.$"),
             "multi_dl": re.compile(self.MULTIDL_PATTERN),
             "captcha_err": "<li>Zadaný ověřovací kód nesouhlasí!</li>"
             })
 
         if check == "tempoffline":
             self.fail("File not available - try later")
+        if check == "credit":
+            self.resetAccount()
         elif check == "multi_dl":
-            self.waitForFreeSlot()
+            self.longWait(300, 12)
         elif check == "captcha_err":
             self.invalidCaptcha()
             self.retry()
-
-    def waitForFreeSlot(self, wait_time = 300):
-        self.multiDL = False
-        self.setWait(wait_time, True)
-        self.wait()
-        self.retry()
\ No newline at end of file
+        
+getInfo = create_getInfo(CzshareCom)
\ No newline at end of file
diff --git a/module/plugins/hoster/LoadTo.py b/module/plugins/hoster/LoadTo.py
index 66bc6f407..babf354a9 100644
--- a/module/plugins/hoster/LoadTo.py
+++ b/module/plugins/hoster/LoadTo.py
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# -*- coding: utf-8 -*-
 """
     This program is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
@@ -43,7 +43,7 @@ class LoadTo(Hoster):
     __name__ = "LoadTo"
     __type__ = "hoster"
     __pattern__ = r"http://(www.*?\.)?load\.to/.{7,10}?/.*" 
-    __version__ = "0.1002"
+    __version__ = "0.11"
     __description__ = """load.to"""
     __author_name__ = ("halfman")
     __author_mail__ = ("Pulpan3@gmail.com")
@@ -79,4 +79,5 @@ class LoadTo(Hoster):
             self.setWait(timmy.group(1))
             self.wait()
 
-        self.download(download_url)
+        self.req.setOption("timeout", 120)
+        self.download(download_url)
\ No newline at end of file
diff --git a/module/plugins/hoster/RapidgatorNet.py b/module/plugins/hoster/RapidgatorNet.py
index 291ba4c4b..6c09eabb9 100644
--- a/module/plugins/hoster/RapidgatorNet.py
+++ b/module/plugins/hoster/RapidgatorNet.py
@@ -21,7 +21,7 @@ from pycurl import HTTPHEADER
 from random import random
 
 from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
-from module.plugins.internal.CaptchaServices import ReCaptcha, SolveMedia, AdsCaptcha
+from module.plugins.internal.CaptchaService import ReCaptcha, SolveMedia, AdsCaptcha
 from module.common.json_layer import json_loads
 
 class RapidgatorNet(SimpleHoster):
@@ -42,14 +42,7 @@ class RapidgatorNet(SimpleHoster):
     RECAPTCHA_KEY_PATTERN = r'"http://api.recaptcha.net/challenge?k=(.*?)"'
     ADSCAPTCHA_SRC_PATTERN = r'(http://api.adscaptcha.com/Get.aspx[^"\']*)'
     SOLVEMEDIA_PATTERN = r'http:\/\/api\.solvemedia\.com\/papi\/challenge\.script\?k=(.*?)"'
-    
-    def process(self, pyfile):
-        self.pyfile = pyfile
-        if self.premium:
-            self.handlePremium()
-        else:
-            self.fail("NO FREE")
-    
+       
     def getAPIResponse(self, cmd):
         json = self.load('%s/%s' % (self.API_URL, cmd), 
                          get = {'sid': self.account.getAccountData(self.user).get('SID'), 
-- 
cgit v1.2.3