diff --git a/src/hamster/edit_activity.py b/src/hamster/edit_activity.py index 47b6b7c89..318fce8db 100644 --- a/src/hamster/edit_activity.py +++ b/src/hamster/edit_activity.py @@ -273,11 +273,11 @@ def on_tags_changed(self, widget): def update_cmdline(self, select=None): """Update the cmdline entry content.""" self.cmdline_fact = self.fact.copy(description=None) - label = self.cmdline_fact.serialized(prepend_date=False) + label = self.cmdline_fact.serialized(default_day=self.date) with self.cmdline.handler_block(self.cmdline.checker): self.cmdline.set_text(label) if select: - time_str = self.cmdline_fact.serialized_time(prepend_date=False) + time_str = self.cmdline_fact.serialized_time(default_day=self.date) self.cmdline.select_region(0, len(time_str)) def update_fields(self): diff --git a/src/hamster/lib/__init__.py b/src/hamster/lib/__init__.py index 678335ac9..91a618e9f 100644 --- a/src/hamster/lib/__init__.py +++ b/src/hamster/lib/__init__.py @@ -7,11 +7,12 @@ from copy import deepcopy -from hamster.lib.parsing import DATE_FMT, TIME_FMT, parse_fact +from hamster.lib.parsing import DATE_FMT, TIME_FMT, DATETIME_FMT, parse_fact from hamster.lib.stuff import ( datetime_to_hamsterday, hamsterday_time_to_datetime, hamster_now, + hamster_today, ) @@ -150,20 +151,31 @@ def serialized_name(self): res += " %s" % " ".join("#%s" % tag for tag in self.tags) return res - def serialized_time(self, prepend_date=True): - time = "" + def serialized_range(self, default_day=None): + """Return a string representing the time range. + + Start date is shown only if start does not belong to default_day. + End date is shown only if end does not belong to + the same hamster day as start. + """ + time_str = "" if self.start_time: - if prepend_date: - time += self.date.strftime(DATE_FMT) + " " - time += self.start_time.strftime(TIME_FMT) + if datetime_to_hamsterday(self.start_time) != default_day: + time_str += self.start_time.strftime(DATETIME_FMT) + else: + time_str += self.start_time.strftime(TIME_FMT) if self.end_time: - time = "%s-%s" % (time, self.end_time.strftime(TIME_FMT)) - return time + if datetime_to_hamsterday(self.end_time) != datetime_to_hamsterday(self.start_time): + end_time_str = self.end_time.strftime(DATETIME_FMT) + else: + end_time_str = self.end_time.strftime(TIME_FMT) + time_str = "{} - {}".format(time_str, end_time_str) + return time_str - def serialized(self, prepend_date=True): + def serialized(self, default_day=None): """Return a string fully representing the fact.""" name = self.serialized_name() - datetime = self.serialized_time(prepend_date) + datetime = self.serialized_range(default_day) # no need for space if name or datetime is missing space = " " if name and datetime else "" return "{}{}{}".format(datetime, space, name) @@ -192,7 +204,7 @@ def __eq__(self, other): ) def __repr__(self): - return self.serialized(prepend_date=True) + return self.serialized(default_day=None) def default_logger(name): diff --git a/src/hamster/lib/parsing.py b/src/hamster/lib/parsing.py index 4c9f8b85e..23795d4de 100644 --- a/src/hamster/lib/parsing.py +++ b/src/hamster/lib/parsing.py @@ -17,6 +17,7 @@ DATE_FMT = "%Y-%m-%d" # ISO format TIME_FMT = "%H:%M" +DATETIME_FMT = "{} {}".format(DATE_FMT, TIME_FMT) # separator between times and activity ACTIVITY_SEPARATOR = "\s+" diff --git a/src/hamster/widgets/activityentry.py b/src/hamster/widgets/activityentry.py index 398a54c08..953de72b0 100644 --- a/src/hamster/widgets/activityentry.py +++ b/src/hamster/widgets/activityentry.py @@ -415,7 +415,7 @@ def update_suggestions(self, text=""): if variant_fact: variant_fact.description = None - variant = variant_fact.serialized(prepend_date=False) + variant = variant_fact.serialized(default_day=None) variants.append((description, variant)) else: