Example #1
0
 def update_relative_due_date(self):
     if not Task.scan_due_date(self.raw):
         match = Task._any_due_date_regex.search(self.raw)
         if match:
             date = Util.mod_date_by(Util.get_today(), match.group(1))
             if date:
                 self.raw = re.sub(Task._any_due_date_regex, " ",
                                   self.raw).strip()
                 self.set_due(date)
Example #2
0
 def commit_due(self, text):
     self.frame.set_focus("body")
     self.update_footer("")
     focus, _ = self.listbox.get_focus()
     try:
         due = focus.task.get_due() or Util.get_today()
         due = Util.mod_date_by(due, text)
         focus.task.set_due(due)
         self.tasklist.save()
         self.fill_listbox()
     except Exception:
         self.update_header("Invalid format!")
Example #3
0
 def update_header(self, message="", color="header_message"):
     today = Util.get_today_str()
     self.frame.header = urwid.AttrMap(
         urwid.Columns([
             urwid.Text([
                 (
                     "header_task_count",
                     "{0} Tasks ".format(
                         len(Tasklist.filter_pending(self.items))),
                 ),
                 (
                     "header_task_due_count",
                     " {0} due ".format(
                         len(Tasklist.filter_due(self.items, today))),
                 ),
                 ("header_sort", " s:{0} ".format(self.sort_order[0])),
                 (
                     "header_view",
                     " v:{0}days ".format(self.view_days)
                     if self.view_days >= 0 else "",
                 ),
             ]),
             urwid.Text((color, message), align="right"),
         ]),
         "header",
     )
Example #4
0
    def update_task(self, search=None):
        t = self.task
        today = Util.get_today()
        self.status = t.get_status(today.isoformat(), Util.get_next_monday().isoformat())

        if search:
            show = Tasklist.get_search_highlight(search, t.raw)
            text = urwid.Text(show, wrap=self.wrapping)
        else:
            status_col = "status_" + self.status[0]
            if t.is_done() or t.is_deleted():
                text_col = status_col
            elif t.priority and t.priority.lower() in "abcdef":
                text_col = "priority_" + t.priority.lower()
            else:
                text_col = "plain"

            due_name = Util.get_date_name(t.get_due(), today=today)
            if t.rec_int:
                if t.rec_int[0] == "+":
                    rec_text = "every " + t.rec_int[1:]
                else:
                    rec_text = "after " + t.rec_int
            else:
                rec_text = ""

            desc = t.get_desc()
            tags = ' '.join(t.tags)

            main = urwid.Text([(text_col, desc), " ", ('context', tags)], wrap=self.wrapping)
            due = urwid.Text((status_col, due_name))
            rec = urwid.Text(("plain", rec_text))
            context = urwid.Text(("context", ",".join(t.contexts)))
            text = urwid.Columns(
                [("weight", 15, main), (12, due), (25, context)], dividechars=2
            )

        self._w = urwid.AttrMap(
            urwid.AttrMap(text, None, "selected"), None, self.colorscheme.focus_map
        )
Example #5
0
 def set_done(self, done=True):
     if self.is_done() == done:
         return
     if done:
         self.set_priority("")
         today = datetime.date.today()
         self.update("x " + today.isoformat() + " " + self.raw)
         if self.rec_int:
             (prefix, value, itype) = Task._rec_int_parts_regex.match(
                 self.rec_int).groups()
             value = int(value)
             date = self.get_due() if prefix == "+" else today
             return Util.date_add_interval(date, itype, value)
     else:
         self.update(re.sub(Task._done_regex, "", self.raw))
Example #6
0
 def task_changed(self):
     # finished editing
     self.skip_task_list_updated = False
     focus, idx = self.listbox.get_focus()
     t = focus.task
     if t.raw:
         t.update_relative_due_date()
         if not t.creation_date:
             t.set_creation_date(Util.get_today())
         self.update_footer("")
         self.tasklist.save()
     elif idx == 0:
         # new empty task
         self.tasklist.delete_by_id(t.task_id)
         t = None
     self.fill_listbox(t)
Example #7
0
 def toggle_done(self, focus):
     t = focus.task
     if t.is_done():
         t.set_done(False)
         self.tasklist.save()
         self.fill_listbox()
     else:
         last = t.raw
         rec = t.set_done()
         if rec:
             self.tasklist.insert_new(-1, t.raw)  # insert done
             t.update(last)
             t.set_due(rec)
             t.set_creation_date(Util.get_today())
         else:
             self.listbox.move_offs(1)
         self.archive_tasks()  # save & update list
Example #8
0
 def filter_by_days(items, days):
     if days >= 0:
         due = Util.get_today_str(days)
         return [item for item in items if item.is_due(due) or not item.has_due()]
     else:
         return items