E-Paper-Calendar/Calendar/TextFormatter.py

83 lines
2.3 KiB
Python
Raw Normal View History

2019-03-27 18:26:45 +01:00
from settings import hours, language
2019-04-05 22:07:33 +02:00
from datetime import timedelta, datetime, timezone
2019-03-26 22:30:19 +01:00
first_occurrence_char = '['
middle_occurrence_char = '|'
last_occurrence_char = ']'
2019-04-05 22:07:33 +02:00
until_character = '-'
2019-03-26 22:30:19 +01:00
2019-03-27 18:26:45 +01:00
allday_lang = {
"en" : "All day",
"de" : "Ganztägig"
}
allday_detailed = allday_lang[language]
2019-03-26 22:30:19 +01:00
def time_str (dt):
if hours is "12":
2019-03-27 18:26:45 +01:00
return dt.strftime("%I:%M%p")
2019-03-26 22:30:19 +01:00
elif hours is "24":
return dt.strftime("%H:%M")
else:
return str(dt)
def event_prefix_str (event, relative_date=None):
if relative_date is None:
relative_date = event.begin_datetime.date()
2019-04-05 22:07:33 +02:00
if __is_multiday__(event) is False:
2019-03-26 22:30:19 +01:00
return event_time_summary(event)
#Relative to
#First day
2019-04-05 22:07:33 +02:00
elif __equal__(event.begin_datetime, relative_date):
return event_time_summary(event) + until_character
2019-03-26 22:30:19 +01:00
#Last day
2019-04-05 22:07:33 +02:00
elif __equal__(event.end_datetime, relative_date) or \
(__day_duration__(event.end_datetime) == timedelta(0) and __equal__(relative_date + timedelta(1), event.end_datetime)):
return until_character + event_time_summary(event)
2019-03-26 22:30:19 +01:00
#Some day
else:
event.allday = True
2019-04-05 22:07:33 +02:00
return until_character + event_time_summary(event) + until_character
2019-03-26 22:30:19 +01:00
def event_time_summary (event):
if event.allday:
return ""
else:
return time_str(event.begin_datetime)
2019-03-27 18:26:45 +01:00
def event_time_detailed (event):
if event.allday:
return allday_detailed
else:
2019-04-05 22:07:33 +02:00
return time_str(event.begin_datetime) + until_character + time_str(event.end_datetime)
2019-03-27 18:26:45 +01:00
2019-03-26 22:30:19 +01:00
def date_str(dt):
2019-04-05 11:37:41 +02:00
return remove_leading_zero(dt.strftime('%d. %b'))
2019-03-26 22:30:19 +01:00
def remove_leading_zero (text):
while text[0] is '0':
text = text[1:]
2019-03-27 18:26:45 +01:00
return text
def date_summary_str(dt):
2019-04-05 22:07:33 +02:00
return dt.strftime('%a %d. %b')
def __is_multiday__ (event):
if event.allday and event.duration == timedelta(1):
return False
return event.begin_datetime.day != event.end_datetime.day or \
event.begin_datetime.month != event.end_datetime.month or \
event.begin_datetime.year != event.end_datetime.year
def __equal__(dt1, dt2):
return dt1.day == dt2.day and \
dt1.month == dt2.month and \
dt1.year == dt2.year
def __day_duration__(dt):
day_begin = datetime(dt.year, dt.month, dt.day, 0, 0, 0, 0, timezone.utc)
return dt - day_begin