From 8810d97e4cc95f8eb5c8bdce28bcc17f29a5a75a Mon Sep 17 00:00:00 2001 From: dymik739 Date: Wed, 29 Jan 2025 22:23:36 +0200 Subject: [PATCH] auto-schedule-pro-v2: add progress bar display for current lesson --- modules/auto-schedule-pro-v2/main.py | 43 ++++++++++++++++++- .../legacy-vibrant/date-progress.msg | 2 + .../templates/legacy-vibrant/single.msg | 2 +- .../templates/legacy/date-progress.msg | 2 + .../templates/legacy/single.msg | 2 +- .../templates/modern/date-progress.msg | 2 + .../templates/modern/single.msg | 2 +- 7 files changed, 51 insertions(+), 4 deletions(-) create mode 100644 modules/auto-schedule-pro-v2/templates/legacy-vibrant/date-progress.msg create mode 100644 modules/auto-schedule-pro-v2/templates/legacy/date-progress.msg create mode 100644 modules/auto-schedule-pro-v2/templates/modern/date-progress.msg diff --git a/modules/auto-schedule-pro-v2/main.py b/modules/auto-schedule-pro-v2/main.py index 84656a1..e6eb4d6 100644 --- a/modules/auto-schedule-pro-v2/main.py +++ b/modules/auto-schedule-pro-v2/main.py @@ -36,6 +36,9 @@ color_code_mapping = { } +PROGRESS_BAR_LENGTH = 16 + + # global variables module_path = "" @@ -174,6 +177,37 @@ def get_name_of_lesson_type(lesson_type): return lesson_types_to_strings[lesson_type] +def make_progress_bar(start_datetime, total_bar_count): + current_time = datetime.now() + + seconds_elapsed = (current_time.hour - start_datetime.hour) * 3600 \ + + (current_time.minute - start_datetime.minute) * 60 \ + + (current_time.second - start_datetime.second) + + total_seconds = 1 * 3600 + 30 * 60 + + percent_elapsed = max(min(seconds_elapsed / total_seconds, 1), 0) + + if (current_time.day < start_datetime.day): + percent_elapsed = 0 + elif (current_time.day > start_datetime.day): + percent_elapsed = 1 + + bars_ticked = round(percent_elapsed * total_bar_count) + bars_not_ticked = total_bar_count - bars_ticked + + status_line = "[" + "#" * bars_ticked + "-" * bars_not_ticked + "]" + + status_bar_text = f"{round(percent_elapsed*100)}%" + + status_list_text_start_position = round((len(status_line) - len(status_bar_text))/2) + + status_line_overlayed = (status_line[:status_list_text_start_position] + status_bar_text \ + + status_line[status_list_text_start_position+len(status_bar_text):]).replace("-", "--") + + return status_line_overlayed + + def generate_lesson_description(lesson, start_datetime, end_datetime, current_day, current_week, overrides={}, custom_name_prefix="Назва", template="legacy-vibrant", force_date_at_top=False): @@ -224,6 +258,7 @@ def generate_lesson_description(lesson, start_datetime, end_datetime, current_da active_template = active_template.replace("%TYPE%", get_name_of_lesson_type(lesson['type'])) active_template = active_template.replace("%NAME_PREFIX%", custom_name_prefix) active_template = active_template.replace("%COLOR_CODE%", get_color_code(lesson['type'])) + active_template = active_template.replace("%PROGRESS_BAR%", make_progress_bar(start_datetime, PROGRESS_BAR_LENGTH >> 1)) if ('nolink' not in lesson) or (not lesson['nolink']): active_template = active_template.replace("%LINK%", lesson['link']) @@ -237,11 +272,17 @@ def generate_lesson_description(lesson, start_datetime, end_datetime, current_da return active_template elif lesson.__class__ == list: - total_result = load_template(template, "date") + if not force_date_at_top: + total_result = load_template(template, "date-progress") + total_result = total_result.replace("%PROGRESS_BAR%", make_progress_bar(start_datetime, PROGRESS_BAR_LENGTH)) + else: + total_result = load_template(template, "date") + human_readable_date = get_human_readable_date(start_datetime, end_datetime, current_day, current_week) total_result = total_result.replace("%DATE%", human_readable_date) + for l in lesson: if "full" in overrides and overrides["full"]: active_template = load_template(template, "multiple") diff --git a/modules/auto-schedule-pro-v2/templates/legacy-vibrant/date-progress.msg b/modules/auto-schedule-pro-v2/templates/legacy-vibrant/date-progress.msg new file mode 100644 index 0000000..88eb8fa --- /dev/null +++ b/modules/auto-schedule-pro-v2/templates/legacy-vibrant/date-progress.msg @@ -0,0 +1,2 @@ +%PROGRESS_BAR% +%DATE%: diff --git a/modules/auto-schedule-pro-v2/templates/legacy-vibrant/single.msg b/modules/auto-schedule-pro-v2/templates/legacy-vibrant/single.msg index da66381..de19b4c 100644 --- a/modules/auto-schedule-pro-v2/templates/legacy-vibrant/single.msg +++ b/modules/auto-schedule-pro-v2/templates/legacy-vibrant/single.msg @@ -1,4 +1,4 @@ %NAME_PREFIX%: %NAME% (%TYPE%) -Дата: %DATE% +Дата: %DATE% %PROGRESS_BAR% Викладач: %TEACHER% Посилання: %LINK% diff --git a/modules/auto-schedule-pro-v2/templates/legacy/date-progress.msg b/modules/auto-schedule-pro-v2/templates/legacy/date-progress.msg new file mode 100644 index 0000000..c334246 --- /dev/null +++ b/modules/auto-schedule-pro-v2/templates/legacy/date-progress.msg @@ -0,0 +1,2 @@ +%PROGRESS_BAR% +%DATE%: diff --git a/modules/auto-schedule-pro-v2/templates/legacy/single.msg b/modules/auto-schedule-pro-v2/templates/legacy/single.msg index 53f9f70..81323c3 100644 --- a/modules/auto-schedule-pro-v2/templates/legacy/single.msg +++ b/modules/auto-schedule-pro-v2/templates/legacy/single.msg @@ -1,4 +1,4 @@ %NAME_PREFIX%: %NAME% (%TYPE%) -Дата: %DATE% +Дата: %DATE% %PROGRESS_BAR% Викладач: %TEACHER% Посилання: %LINK% diff --git a/modules/auto-schedule-pro-v2/templates/modern/date-progress.msg b/modules/auto-schedule-pro-v2/templates/modern/date-progress.msg new file mode 100644 index 0000000..88eb8fa --- /dev/null +++ b/modules/auto-schedule-pro-v2/templates/modern/date-progress.msg @@ -0,0 +1,2 @@ +%PROGRESS_BAR% +%DATE%: diff --git a/modules/auto-schedule-pro-v2/templates/modern/single.msg b/modules/auto-schedule-pro-v2/templates/modern/single.msg index 8b20b2f..01bf3e1 100644 --- a/modules/auto-schedule-pro-v2/templates/modern/single.msg +++ b/modules/auto-schedule-pro-v2/templates/modern/single.msg @@ -1,4 +1,4 @@ %NAME% (%TYPE%) -Дата: %DATE% +Дата: %DATE% %PROGRESS_BAR% Викладач: %TEACHER% Посилання: %LINK%