From a3ae4ba6df133beb7f6daf0443210f59d3e86399 Mon Sep 17 00:00:00 2001
From: Seoester <seoester@googlemail.com>
Date: Mon, 24 Jun 2013 00:51:12 +0200
Subject: Bugfix: super() function

---
 module/plugins/hoster/StreamcloudEu.py | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

(limited to 'module/plugins/hoster')

diff --git a/module/plugins/hoster/StreamcloudEu.py b/module/plugins/hoster/StreamcloudEu.py
index 9e7c61ccc..7dec2e65b 100644
--- a/module/plugins/hoster/StreamcloudEu.py
+++ b/module/plugins/hoster/StreamcloudEu.py
@@ -15,7 +15,7 @@ class StreamcloudEu(XFileSharingPro):
     DIRECT_LINK_PATTERN = r'file: "(http://(stor|cdn)\d+\.streamcloud.eu:?\d*/.*/video\.mp4)",'
 
     def setup(self):
-        super(XFileSharingPro, self).setup()
+        super(StreamcloudEu, self).setup()
         self.multiDL = True
 
     def getDownloadLink(self):
@@ -23,6 +23,6 @@ class StreamcloudEu(XFileSharingPro):
         if found:
             return found.group(1)
 
-        return super(XFileSharingPro, self).getDownloadLink()
+        return super(StreamcloudEu, self).getDownloadLink()
 
 getInfo = create_getInfo(StreamcloudEu)
-- 
cgit v1.2.3


From 40831c996c0c80e369d2232bd707e0b2088056fc Mon Sep 17 00:00:00 2001
From: Seoester <seoester@googlemail.com>
Date: Mon, 24 Jun 2013 00:51:54 +0200
Subject: StreamcloudEu Update to meet increased bot protection

---
 module/plugins/hoster/StreamcloudEu.py | 85 +++++++++++++++++++++++++++++++++-
 1 file changed, 84 insertions(+), 1 deletion(-)

(limited to 'module/plugins/hoster')

diff --git a/module/plugins/hoster/StreamcloudEu.py b/module/plugins/hoster/StreamcloudEu.py
index 7dec2e65b..35b9a0bd2 100644
--- a/module/plugins/hoster/StreamcloudEu.py
+++ b/module/plugins/hoster/StreamcloudEu.py
@@ -1,5 +1,7 @@
 # -*- coding: utf-8 -*-
 from module.plugins.hoster.XFileSharingPro import XFileSharingPro, create_getInfo
+from module.network.HTTPRequest import HTTPRequest
+from time import sleep
 import re
 
 class StreamcloudEu(XFileSharingPro):
@@ -23,6 +25,87 @@ class StreamcloudEu(XFileSharingPro):
         if found:
             return found.group(1)
 
-        return super(StreamcloudEu, self).getDownloadLink()
+        for i in range(5):
+            self.logDebug("Getting download link: #%d" % i)
+            data = self.getPostParameters()
+            httpRequest = HTTPRequest(options=self.req.options)
+            httpRequest.cj = self.req.cj
+            sleep(10)
+            self.html = httpRequest.load(self.pyfile.url, post = data, referer=False, cookies=True, decode = True)
+            self.header = httpRequest.header
+
+            found = re.search("Location\s*:\s*(.*)", self.header, re.I)
+            if found:
+                break
+
+            found = re.search(self.DIRECT_LINK_PATTERN, self.html, re.S)
+            if found:
+                break
+
+        else:
+            if self.errmsg and 'captcha' in self.errmsg:
+                self.fail("No valid captcha code entered")
+            else:
+                self.fail("Download link not found")
+
+        return found.group(1)
+
+    def getPostParameters(self):
+        for i in range(3):
+            if not self.errmsg: self.checkErrors()
+
+            if hasattr(self,"FORM_PATTERN"):
+                action, inputs = self.parseHtmlForm(self.FORM_PATTERN)
+            else:
+                action, inputs = self.parseHtmlForm(input_names={"op": re.compile("^download")})
+
+            if not inputs:
+                action, inputs = self.parseHtmlForm('F1')
+                if not inputs:
+                    if self.errmsg:
+                        self.retry()
+                    else:
+                        self.parseError("Form not found")
+
+            self.logDebug(self.HOSTER_NAME, inputs)
+
+            if 'op' in inputs and inputs['op'] in ('download1', 'download2', 'download3'):
+                if "password" in inputs:
+                    if self.passwords:
+                        inputs['password'] = self.passwords.pop(0)
+                    else:
+                        self.fail("No or invalid passport")
+
+                if not self.premium:
+                    found = re.search(self.WAIT_PATTERN, self.html)
+                    if found:
+                        wait_time = int(found.group(1)) + 1
+                        self.setWait(wait_time, False)
+                    else:
+                        wait_time = 0
+
+                    self.captcha = self.handleCaptcha(inputs)
+
+                    if wait_time: self.wait()
+
+                self.errmsg = None
+                self.logDebug("getPostParameters {0}".format(i))
+                return inputs
+
+            else:
+                inputs['referer'] = self.pyfile.url
+
+                if self.premium:
+                    inputs['method_premium'] = "Premium Download"
+                    if 'method_free' in inputs: del inputs['method_free']
+                else:
+                    inputs['method_free'] = "Free Download"
+                    if 'method_premium' in inputs: del inputs['method_premium']
+
+                self.html = self.load(self.pyfile.url, post = inputs, ref = False)
+                self.errmsg = None
+
+        else: self.parseError('FORM: %s' % (inputs['op'] if 'op' in inputs else 'UNKNOWN'))
+
 
 getInfo = create_getInfo(StreamcloudEu)
-- 
cgit v1.2.3