diff options
Diffstat (limited to 'pyload/interaction/InteractionTask.py')
| -rw-r--r-- | pyload/interaction/InteractionTask.py | 100 | 
1 files changed, 100 insertions, 0 deletions
diff --git a/pyload/interaction/InteractionTask.py b/pyload/interaction/InteractionTask.py new file mode 100644 index 000000000..b404aa6ce --- /dev/null +++ b/pyload/interaction/InteractionTask.py @@ -0,0 +1,100 @@ +# -*- 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 +    the Free Software Foundation; either version 3 of the License, +    or (at your option) any later version. + +    This program is distributed in the hope that it will be useful, +    but WITHOUT ANY WARRANTY; without even the implied warranty of +    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +    See the GNU General Public License for more details. + +    You should have received a copy of the GNU General Public License +    along with this program; if not, see <http://www.gnu.org/licenses/>. + +    @author: RaNaN +""" + +from time import time + +from pyload.Api import InteractionTask as BaseInteractionTask +from pyload.Api import Interaction, InputType, Input + +#noinspection PyUnresolvedReferences +class InteractionTask(BaseInteractionTask): +    """ +    General Interaction Task extends ITask defined by api with additional fields and methods. +    """ +    #: Plugins can put needed data here +    storage = None +    #: Timestamp when task expires +    wait_until = 0 +    #: The received result +    result = None +    #: List of registered handles +    handler = None +    #: Error Message +    error = None +    #: Timeout locked +    locked = False +    #: A task that was retrieved counts as seen +    seen = False +    #: A task that is relevant to every user +    shared = False +    #: primary uid of the owner +    owner = None + +    def __init__(self, *args, **kwargs): +        if 'owner' in kwargs: +            self.owner = kwargs['owner'] +            del kwargs['owner'] +        if 'shared' in kwargs: +            self.shared = kwargs['shared'] +            del kwargs['shared'] + +        BaseInteractionTask.__init__(self, *args, **kwargs) + +        # additional internal attributes +        self.storage = {} +        self.handler = [] +        self.wait_until = 0 + +    def convertResult(self, value): +        #TODO: convert based on input/output +        return value + +    def getResult(self): +        return self.result + +    def setShared(self): +        """ enable shared mode, should not be reversed""" +        self.shared = True + +    def setResult(self, value): +        self.result = self.convertResult(value) + +    def setWaiting(self, sec, lock=False): +        """ sets waiting in seconds from now, < 0 can be used as infinitive  """ +        if not self.locked: +            if sec < 0: +                self.wait_until = -1 +            else: +                self.wait_until = max(time() + sec, self.wait_until) + +            if lock: self.locked = True + +    def isWaiting(self): +        if self.result or self.error or self.timedOut(): +            return False + +        return True + +    def timedOut(self): +        return time() > self.wait_until > -1 + +    def correct(self): +        [x.taskCorrect(self) for x in self.handler] + +    def invalid(self): +        [x.taskInvalid(self) for x in self.handler]
\ No newline at end of file  | 
