Exemplo n.º 1
0
    def load(self, filename):
        f = open(filename, 'r')
        f = FileWrapper(f)
        state = "Start"
        newtask = None
        newpomo = None

        skip_read = False
        while True:
            if not skip_read:
                line = f.readline()
            skip_read = False
            if line == "":
                break
            if state == "Start":
                if re.match("#### Task", line):
                    newtask = Task("", "")
                    state = "Task_State"
                    skip_read = True
                if re.match("#### Pomodoro", line):
                    newpomo = Pomo()
                    state = "Pomo_Remaining"

            elif state == "Task_State":

                found, val = self._loadField(f, 'State', hasfield=True)
                if not found:
                    return False
                newtask.state = val

                found, val = self._loadField(f, 'Blocked Reason', hasfield=True, multiline=True)
                if not found:
                    return False
                if val is not None:
                    newtask.blocked_reason = "".join(val).strip()

                found, val = self._loadField(f, 'Closed Reason', hasfield=True, multiline=True)
                if not found:
                    return False
                if val is not None:
                    newtask.closed_reason = "".join(val).strip()

                found, val = self._loadField(f, 'Id', hasfield=True)
                if not found:
                    return False
                if val is not None:
                    newtask.id = int(val)

                found, val = self._loadField(f, 'Date Created', hasfield=True)
                if not found:
                    return False
                if val is not None:
                    newtask.date_created = int(val)

                found, val = self._loadField(f, 'Date Closed', hasfield=True)
                if not found:
                    return False
                if val is not None:
                    newtask.date_closed = int(val)

                found, val = self._loadField(f, 'Date Due', hasfield=True)
                if not found:
                    return False
                if val is not None:
                    newtask.date_due = int(val)

                found, val = self._loadField(f, 'Time Estimate', hasfield=True)
                if not found:
                    return False
                if val is not None:
                    newtask.time_estimate = int(val)

                found, val = self._loadField(f, 'Time Spent', hasfield=True)
                if not found:
                    return False
                if val is not None:
                    newtask.time_spent = int(val)

                found, val = self._loadField(f, 'Summary', hasfield=True, multiline=True)
                if not found:
                    return False
                if val is not None:
                    newtask.summary = "".join(val).strip()

                found, val = self._loadField(f, 'Description', hasfield=True, multiline=True)
                if not found:
                    return False
                if val is not None:
                    newtask.description = "".join(val).strip()

                self.tasks.append(newtask)
                state = "End"

            elif state == "End":
                if re.match("#### Task", line) or re.match("#### Pomodoro", line):
                    if re.match("#### Task", line):
                        state = "Task_State"
                        skip_read = True
                        newtask = Task("", "")
                    else:
                        state = "Pomo_Remaining"
                        newpomo = Pomo()
            elif state == "Pomo_Remaining":
                mo = re.match("## Time Remaining: (.*)", line)
                if mo:
                    remainingTime = float(mo.group(1))
                    newpomo.set_remaining_time(remainingTime)
                    self.pomo = newpomo
                    state = "Pomo_Running"
            elif state == "Pomo_Running":
                mo = re.match("## Running: (.*)", line)
                if mo:
                    if mo.group(1) == "true":
                        state = "Pomo_SaveDate"
                    else:
                        state = "Start"
            elif state == "Pomo_SaveDate":
                mo = re.match("## Save Date: (.*)", line)
                if mo:
                    saveDateUtc = float(mo.group(1))
                    elapsedSinceSave = self.time.time() - saveDateUtc
                    remainingTime = newpomo.get_remaining_time(self.time.time()) - elapsedSinceSave
                    newpomo.set_remaining_time( remainingTime if remainingTime > 0 else 0)
                    newpomo.start(self.time.time())
                    state = "Start"

        if state == "End":
            state = "Start"

        f.close()
        return state == "Start"