From 3e20ad6f6f6065dbc1db5a3ba2a62cb20c58d5bd Mon Sep 17 00:00:00 2001 From: Scott Mcdermott Date: Sun, 20 Oct 2024 04:00:50 +0800 Subject: [PATCH] Pass rc.weekstart to libshared for ISO8601 weeknum parsing if "monday" (#3654) * libshared: bump for weekstart, epoch defines, eopww fix mainly those visible changes, and miscellaneous others see GothenburgBitFactory/taskwarrior#3623 (weekstart) see GothenburgBitFactory/taskwarrior#3651 (epoch limit defines) see GothenburgBitFactory/libshared#73 (eopww fix) * Initialize libshared's weekstart from user's rc.weekstart config This enables use of newer libshared code that can parse week numbers according to ISO8601 instead of existing code which is always using Sunday-based weeks. To get ISO behavior, set rc.weekstart=monday. Default is still Sunday / old algorithm, as before, since Sunday is in the hardcoded default rcfile. Weekstart does not yet fix week-relative shortcuts, which will still always use Monday. See #3623 for further details. --- src/Context.cpp | 5 +++++ src/commands/CmdCalendar.cpp | 7 +------ src/libshared | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/Context.cpp b/src/Context.cpp index 3ca9e6c2c..2ba1352fb 100644 --- a/src/Context.cpp +++ b/src/Context.cpp @@ -1105,6 +1105,11 @@ void Context::staticInitialization() { Task::regex = Variant::searchUsingRegex = config.getBoolean("regex"); Lexer::dateFormat = Variant::dateFormat = config.get("dateformat"); + auto weekStart = Datetime::dayOfWeek(config.get("weekstart")); + if (weekStart != 0 && weekStart != 1) + throw std::string( + "The 'weekstart' configuration variable may only contain 'Sunday' or 'Monday'."); + Datetime::weekstart = weekStart; Datetime::isoEnabled = config.getBoolean("date.iso"); Datetime::standaloneDateEnabled = false; Datetime::standaloneTimeEnabled = false; diff --git a/src/commands/CmdCalendar.cpp b/src/commands/CmdCalendar.cpp index 3fae4394d..88129a44f 100644 --- a/src/commands/CmdCalendar.cpp +++ b/src/commands/CmdCalendar.cpp @@ -404,12 +404,7 @@ int CmdCalendar::execute(std::string& output) { std::string CmdCalendar::renderMonths(int firstMonth, int firstYear, const Datetime& today, std::vector& all, int monthsPerLine) { auto& config = Context::getContext().config; - - // What day of the week does the user consider the first? - auto weekStart = Datetime::dayOfWeek(config.get("weekstart")); - if (weekStart != 0 && weekStart != 1) - throw std::string( - "The 'weekstart' configuration variable may only contain 'Sunday' or 'Monday'."); + auto weekStart = Datetime::weekstart; // Build table for the number of months to be displayed. Table view; diff --git a/src/libshared b/src/libshared index 47c3262fa..e0d493d16 160000 --- a/src/libshared +++ b/src/libshared @@ -1 +1 @@ -Subproject commit 47c3262fa97c4b69542040d39be6c516c38d0e57 +Subproject commit e0d493d16357d14f0f6092c6670777cde8eca76c