From 973cfeaf006813c6d9a3cbb163e6b15ec1b46977 Mon Sep 17 00:00:00 2001
From: RaNaN <Mast3rRaNaN@hotmail.de>
Date: Mon, 13 Jun 2011 20:15:14 +0200
Subject: better retry function

---
 module/plugins/Plugin.py               | 21 ++++++++++++++++++---
 module/plugins/hoster/RealdebridCom.py |  7 +------
 2 files changed, 19 insertions(+), 9 deletions(-)

(limited to 'module/plugins')

diff --git a/module/plugins/Plugin.py b/module/plugins/Plugin.py
index 396069adb..73ce808a6 100644
--- a/module/plugins/Plugin.py
+++ b/module/plugins/Plugin.py
@@ -118,6 +118,7 @@ class Plugin(object):
         self.js = self.core.js  #: js engine, see `JsEngine`
         self.cTask = None #captcha task
 
+        self.retries = 0 #: amount of retries already made
         self.html = None #some plugins store html code here
 
         self.init()
@@ -236,9 +237,23 @@ class Plugin(object):
         """ fail and indicates file ist temporary offline, the core may take consequences """
         raise Fail("temp. offline")
 
-    def retry(self):
-        """ begin again from the beginning """
-        raise Retry
+    def retry(self, max_tries=3, wait_time=1, reason=""):
+        """Retries and begin again from the beginning
+
+        :param max_tries: number of maximum retries
+        :param wait_time: time to wait in seconds
+        :param reason: reason for retrying, will be passed to fail if max_tries reached
+        """
+        if self.retries >= max_tries:
+            if not reason: reason = "Max retries reached"
+            raise Fail(reason)
+
+        t = time() + wait_time
+        while t > time() :
+            if self.pyfile.abort: raise Abort
+
+        self.retries += 1
+        raise Retry(reason)
 
     def invalidCaptcha(self):
         if self.cTask:
diff --git a/module/plugins/hoster/RealdebridCom.py b/module/plugins/hoster/RealdebridCom.py
index 65a28669a..2d35108bc 100644
--- a/module/plugins/hoster/RealdebridCom.py
+++ b/module/plugins/hoster/RealdebridCom.py
@@ -80,10 +80,5 @@ class RealdebridCom(Hoster):
 
         if check == "error":
             #usual this download can safely be retried
-            if self.tries < 3:
-                self.tries += 1
-                sleep(1)
-                self.retry()
-            else:
-                self.fail("An error occured while generating link.")
+            self.retry(reason="An error occured while generating link.")
 
-- 
cgit v1.2.3