def update_label(self): if self.last_activity and self.last_activity.end_time is None: delta = dt.datetime.now() - self.last_activity.start_time duration = delta.seconds / 60 label = "%s %s" % (self.last_activity.activity, stuff.format_duration(duration, False)) self.button.set_text(self.last_activity.activity, stuff.format_duration(duration, False)) else: label = "%s" % _(u"No activity") self.button.set_text(label, None)
def _write_fact(self, report, fact): # no having end time is fine end_time_str, end_time_iso_str = "", "" if fact.end_time: end_time_str = fact.end_time.strftime('%H:%M') end_time_iso_str = fact.end_time.isoformat() category = "" if fact.category != _("Unsorted"): #do not print "unsorted" in list category = fact.category data = dict( date=fact.date.strftime( # date column format for each row in HTML report # Using python datetime formatting syntax. See: # http://docs.python.org/library/time.html#time.strftime C_("html report", "%b %d, %Y")), date_iso=fact.date.isoformat(), activity=fact.activity, category=category, tags=fact.tags, start=fact.start_time.strftime('%H:%M'), start_iso=fact.start_time.isoformat(), end=end_time_str, end_iso=end_time_iso_str, duration=stuff.format_duration(fact.delta) or "", duration_minutes="%d" % (stuff.duration_minutes(fact.delta)), duration_decimal="%.2f" % (stuff.duration_minutes(fact.delta) / 60.0), description=fact.description or "") self.fact_rows.append( Template(self.fact_row_template).safe_substitute(data))
def set_last_activity(self): activity = self.last_activity #sets all the labels and everything as necessary self.get_widget("stop_tracking").set_sensitive(activity != None) if activity: self.get_widget("switch_activity").show() self.get_widget("start_tracking").hide() delta = dt.datetime.now() - activity.start_time duration = delta.seconds / 60 if activity.category != _("Unsorted"): self.get_widget("last_activity_name").set_text("%s - %s" % (activity.activity, activity.category)) else: self.get_widget("last_activity_name").set_text(activity.activity) self.get_widget("last_activity_duration").set_text(stuff.format_duration(duration) or _("Just started")) self.get_widget("last_activity_description").set_text(activity.description or "") self.get_widget("activity_info_box").show() self.tag_box.draw(activity.tags) else: self.get_widget("switch_activity").hide() self.get_widget("start_tracking").show() self.get_widget("last_activity_name").set_text(_("No activity")) self.get_widget("activity_info_box").hide() self.tag_box.draw([])
def _write_fact(self, report, fact): # no having end time is fine end_time_str, end_time_iso_str = "", "" if fact.end_time: end_time_str = fact.end_time.strftime('%H:%M') end_time_iso_str = fact.end_time.isoformat() category = "" if fact.category != _("Unsorted"): #do not print "unsorted" in list category = fact.category data = dict( date = fact.date.strftime( # date column format for each row in HTML report # Using python datetime formatting syntax. See: # http://docs.python.org/library/time.html#time.strftime C_("html report","%b %d, %Y")), date_iso = fact.date.isoformat(), activity = fact.activity, category = category, tags = fact.tags, start = fact.start_time.strftime('%H:%M'), start_iso = fact.start_time.isoformat(), end = end_time_str, end_iso = end_time_iso_str, duration = stuff.format_duration(fact.delta) or "", duration_minutes = "%d" % (stuff.duration_minutes(fact.delta)), duration_decimal = "%.2f" % (stuff.duration_minutes(fact.delta) / 60.0), description = fact.description or "" ) self.fact_rows.append(Template(self.fact_row_template).safe_substitute(data))
def _finish(self, report, facts): # group by date name_category = lambda fact: (fact.category, fact.activity) by_date = [] for date, date_facts in itertools.groupby(facts, lambda fact: fact.date): by_name = sorted(date_facts, key=name_category) by_date_rows = [] for (category, activity), ac_facts in itertools.groupby( by_name, name_category): duration = dt.timedelta() for fact in ac_facts: duration += fact.delta by_date_rows.append( Template(self.by_date_row_template).safe_substitute( dict( activity=activity, category=category, duration=stuff.format_duration(duration), duration_minutes="%d" % (stuff.duration_minutes(fact.delta)), duration_decimal="%.2f" % (stuff.duration_minutes(fact.delta) / 60.0), ))) by_date_total_rows = [] for category, c_facts in itertools.groupby( by_name, lambda fact: fact.category): duration = dt.timedelta() for fact in c_facts: duration += fact.delta by_date_total_rows.append( Template(self.by_date_total_row_template).safe_substitute( dict( category=category, duration=stuff.format_duration(duration), duration_minutes="%d" % (stuff.duration_minutes(fact.delta)), duration_decimal="%.2f" % (stuff.duration_minutes(fact.delta) / 60.0), ))) res = Template(self.by_date_template).safe_substitute( dict( date=fact.date.strftime( # date column format for each row in HTML report # Using python datetime formatting syntax. See: # http://docs.python.org/library/time.html#time.strftime C_("html report", "%b %d, %Y")), by_date_activity_rows="\n".join(by_date_rows), by_date_category_rows="\n".join(by_date_total_rows))) by_date.append(res) data = dict( title=self.title, totals_by_day_title=_("Totals by Day"), activity_log_title=_("Activity Log"), activity_totals_heading=_("totals by activity"), category_totals_heading=_("totals by category"), show_prompt=_("Show:"), header_date=_("Date"), header_activity=_("Activity"), header_category=_("Category"), header_tags=_("Tags"), header_start=_("Start"), header_end=_("End"), header_duration=_("Duration"), header_description=_("Description"), data_dir=runtime.data_dir, show_template=_("Show template"), template_instructions= _("You can override it by storing your version in %(home_folder)s") % {'home_folder': runtime.home_data_dir}, all_activities_rows="\n".join(self.fact_rows), by_date_rows="\n".join(by_date)) report.write(Template(self.main_template).safe_substitute(data)) if self.override: # my report is better than your report - overrode and ran the default report trophies.unlock("my_report") return
def _finish(self, report, facts): # group by date name_category = lambda fact: (fact.category, fact.activity) by_date = [] for date, date_facts in itertools.groupby(facts, lambda fact:fact.date): by_name = sorted(date_facts, key=name_category) by_date_rows = [] for (category, activity), ac_facts in itertools.groupby(by_name, name_category): duration = dt.timedelta() for fact in ac_facts: duration += fact.delta by_date_rows.append(Template(self.by_date_row_template).safe_substitute( dict(activity = activity, category = category, duration = stuff.format_duration(duration), duration_minutes = "%d" % (stuff.duration_minutes(fact.delta)), duration_decimal = "%.2f" % (stuff.duration_minutes(fact.delta) / 60.0), ) )) by_date_total_rows = [] for category, c_facts in itertools.groupby(by_name, lambda fact:fact.category): duration = dt.timedelta() for fact in c_facts: duration += fact.delta by_date_total_rows.append(Template(self.by_date_total_row_template).safe_substitute( dict(category = category, duration = stuff.format_duration(duration), duration_minutes = "%d" % (stuff.duration_minutes(fact.delta)), duration_decimal = "%.2f" % (stuff.duration_minutes(fact.delta) / 60.0), ) )) res = Template(self.by_date_template).safe_substitute( dict(date = fact.date.strftime( # date column format for each row in HTML report # Using python datetime formatting syntax. See: # http://docs.python.org/library/time.html#time.strftime C_("html report","%b %d, %Y")), by_date_activity_rows = "\n".join(by_date_rows), by_date_category_rows = "\n".join(by_date_total_rows) )) by_date.append(res) data = dict( title = self.title, totals_by_day_title = _("Totals by Day"), activity_log_title = _("Activity Log"), activity_totals_heading = _("totals by activity"), category_totals_heading = _("totals by category"), show_prompt = _("Show:"), header_date = _("Date"), header_activity = _("Activity"), header_category = _("Category"), header_tags = _("Tags"), header_start = _("Start"), header_end = _("End"), header_duration = _("Duration"), header_description = _("Description"), data_dir = runtime.data_dir, show_template = _("Show template"), template_instructions = _("You can override it by storing your version in %(home_folder)s") % {'home_folder': runtime.home_data_dir}, all_activities_rows = "\n".join(self.fact_rows), by_date_rows = "\n".join(by_date) ) report.write(Template(self.main_template).safe_substitute(data)) if self.override: # my report is better than your report - overrode and ran the default report trophies.unlock("my_report") return