Bug 429892

Summary: support set display an alternate calendar system under the main calendar
Product: [Plasma] plasmashell Reporter: Gary Wang <wzc782970009>
Component: CalendarAssignee: Marco Martin <notmart>
Status: RESOLVED FIXED    
Severity: wishlist CC: 250038786, cuco3001, fundawang, ixnij.wu, lancelot96, llyaomo, monstorix, mukdenia, my, nate, nicolas.fella, plasma-bugs, qydwhotmail, schnej, sentinelworks, seo1214, wondertx
Priority: NOR    
Version: master   
Target Milestone: 1.0   
Platform: unspecified   
OS: Linux   
Latest Commit: Version Fixed In: 5.26
Sentry Crash Report:
Attachments: Screenshot of a plasmoid witch is able to show a chinese lunar calendar under the main calendar.
Screenshot of a plasmoid witch is able to show a chinese lunar calendar under the main calendar.
My thoughts about how to add alternate calendar support.
The Calendar System Feature unforgotten back in KDE Version 4

Description Gary Wang 2020-12-01 13:55:01 UTC
Created attachment 133768 [details]
Screenshot of a plasmoid witch is able to show a chinese lunar calendar under the main calendar.

SUMMARY

Right now the plasma calendar component (built-in date and time plasmoid) doesn't seems to support setting an alternate calendar system to make it display under the main calendar, it could be helpful if user can set an alternate calendar when needed. By looking at the current implementation, it doesn't support alternate calendar whatever directly or by writing a plugin in the "event plugin" similar way. I suggest adding a plugin interface for alternate calendar and optionally provide some first-party alternate calendar plugin to use. 

SOFTWARE/OS VERSIONS:
Linux/KDE Plasma: Archlinux
(available in About System)
KDE Plasma Version: 5.20.3
KDE Frameworks Version: 5.76.0
Qt Version: 5.15.2

ADDITIONAL INFORMATION

I did wrote a plasmoid based on the existed calendar QML code from plasma-framework repo and made some change to make it able to display Chinese Lunar calendar (a luni-solar calendar system), see the attachment for a screenshot of my current implementation, and the source code can be provided if needed. I'm new to QML and plasmoid development and it may need some time to make a proper patch. The code quality is way to far from get into KDE, but hopefully it can demonstrate what the feature looks like. 

I'm also would like to help KDE implement this feature (if that's acceptable). Let me know if you need any additional information.

Thanks!
Gary
Comment 1 Gary Wang 2020-12-01 14:27:46 UTC
Created attachment 133771 [details]
Screenshot of a plasmoid witch is able to show a chinese lunar calendar under the main calendar.

Seems I uploaded a outdated screenshot which contains some noticeable bug. I'll upload another one. I think at least it should be able to demonstrate what I means :D Also, my code is uploaded here: https://github.com/BLumia/pineapple-calendar 
Obviously it's far from complete but hopefully it could be useful in some way. It make use of icu4c to display Chinese calendar, since ICU itself support a large amount of calendar system, it could support other calendar system when needed, I think.

There was a GSoC project which related to this feature request: https://community.kde.org/KDE_Core/Astronomical_Calendars

Hope that helps.
Comment 2 Nicolas Fella 2020-12-02 14:47:38 UTC
I see a few possible options, but I'm not familiar enough with different calendar systems and how they are used to judge what is best.

1. Create a plugin for the existing event plugin system. This could show entries from the alternate calendar as events in the gregorian calendar. Relatively easy to do, but probably not very nice
2. Create a new plugin system that allows to draw overlay labels over the gregorian calendar. That could look like in your screenshot.
3. Create a new applet as alternative to the current one. This could reuse parts of the underlying system, e.g. the events plugin system. That would have the biggest flexibility in terms of presentation
Comment 3 Gary Wang 2020-12-03 02:48:38 UTC
> ...but I'm not familiar enough with different calendar systems and how they are used to judge what is best.

Me too! So I think it could be good to discuss with more people so we can know more about how alternate calendar system works before we start to code an implementation into KDE. I'll write what I think at the end of this comment :D

> 1. Create a plugin for the existing event plugin system. This could show entries from the alternate calendar as events in the gregorian calendar. Relatively easy to do, but probably not very nice

Yep that's easy to do but clearly not a good way to address the alternate calendar need.

> 2. Create a new plugin system that allows to draw overlay labels over the gregorian calendar. That could look like in your screenshot.

That could solve the problem but this solution seems too generic/wide. Alternate calendar is not a vary specialization need in Mainland China (In Google Calendar android app, the alternate calendar option have 9 options to choose alone with a "none" option), so I think maybe a plugin system design to add alternate calendar support could be great, and other project like calindori can also get benefit from the plugin system or API design.

> 3. Create a new applet as alternative to the current one. This could reuse parts of the underlying system, e.g. the events plugin system. That would have the biggest flexibility in terms of presentation

That's what I'm doing currently (mainly for test the feasibility of the API design of what I am thinking), but I think since "adding a place to display alternate calendar date text" is a pretty minor change from the current Date and Time plugin, writing a new applet will not be a good way to do if we intended to get this feature into KDE. 

--------------

The alternate calendar means we can display two calendar system at the same time. The basic layout of a month view with alternate calendar enable will be the same as the one if we don't have alternate calendar enabled, but if alternate calendar is enabled, the date text will be able to show up in the day grid (just like the way what my screenshot did).

According to https://support.microsoft.com/en-us/office/display-an-alternate-calendar-8cb201d4-c175-4d9e-9d8f-b4df00ca8f82 , the alternate calendar feature are enabled if the language are set to Arabic, English, Hebrew, Hindi, Chinese, Japanese, Korean, or Thai. Also in Google Clander app, there are also 9 options can be used as an alternate calendar. Also, both Google Calendar and the one from Microsoft are not treat alternate calendar as regular calendar event, so I think reuse the existing event plugin system is not a good idea.

For what I think, we could make the current Date and Time applet display alternate calendar day text in the same grid together with the main calendar date text if an alternate calendar system is available and enabled, and keep it looks exact the same like the current one if no alternate calendar is enabled. At the current state, we only need to change DayDelegate.qml and add adjust the behavior of last Components.Label{}. What I did is https://github.com/BLumia/pineapple-calendar/blob/7fc57a470fecad57d07a79d02e54a6e2febea4e2/plasmoid/package/contents/ui/calendar/DayDelegate.qml#L103 but I'm not sure if that's a good approach. In my current implementation, only one c++ interface are used https://github.com/BLumia/pineapple-calendar/blob/7fc57a470fecad57d07a79d02e54a6e2febea4e2/plasmoid/calendar.cpp#L24 . The `alternateCalendarDayText(day, month, year)` accepts a date in current main calendar, and returns the string which should be display under the day grid according to what the (currently hard-coded) alternate calendar is used.

But I think the biggest challenge here is design a good C++ API for alternate calendar plugins. Since the main goal is letting an existed calendar application know what text to display under the main calendar's date name, so I guess we don't need to design a list of interface to provide full capability of calendar system date and time calculating. Here (https://github.com/BLumia/pineapple-calendar/blob/master/lib/pabstructcalendar.h) are a list of interface I have tried in my current implementation, there are still some other thing not covered in this current implementation, I'll do some more resources and write more about what I think about the API design later.
Comment 4 Gary Wang 2020-12-04 16:09:35 UTC
Created attachment 133875 [details]
My thoughts about how to add alternate calendar support.

I wrote about what I currently found and what I think about how to achieve this, but the content seems too long and may not be suitable to post in the bug tracker. Here ( https://docs.google.com/document/d/1iwEwwK9w34ZKOegb8xcecO4u2Pjgv2e7ifXMFKox62Q/edit?usp=sharing ) is a link to Google Document and please feel free to let me know if you have any suggestions!

Also, to avoid link expiration, I uploaded a copy of the state of the document at the time I post this comment :)
Comment 5 Bug Janitor Service 2022-02-06 16:56:16 UTC
A possibly relevant merge request was started @ https://invent.kde.org/frameworks/plasma-framework/-/merge_requests/450
Comment 6 Bug Janitor Service 2022-02-06 17:00:51 UTC
A possibly relevant merge request was started @ https://invent.kde.org/plasma/kdeplasma-addons/-/merge_requests/112
Comment 7 Fushan Wen 2022-02-09 14:14:12 UTC
*** Bug 74793 has been marked as a duplicate of this bug. ***
Comment 8 Fushan Wen 2022-02-09 14:14:24 UTC
*** Bug 115573 has been marked as a duplicate of this bug. ***
Comment 9 Fushan Wen 2022-05-09 16:05:23 UTC
Git commit 72c3f30249eb41d9e74e78380693e85cb08c6b30 by Fushan Wen.
Committed on 09/05/2022 at 15:37.
Pushed by fusionfuture into branch 'master'.

calendareventsplugin: Add support for alternate dates and sub-labels

Sub-labels are required to show alternate calendar in the calendar
applet.

Two new signals are added:

1. `subLabelReady`: Emitted when the plugin has loaded the sub-labels.
2. `alternateDateReady`: Emitted when the plugin has loaded the
   alternate dates.

`SubLabel` struct contains yearLabel, monthLabel and dayLabel, and the
plugin can specify the priority among Low, Default, High and Urgent for
a SubLabel.

M  +33   -0    src/calendarevents/calendareventsplugin.h

https://invent.kde.org/frameworks/kdeclarative/commit/72c3f30249eb41d9e74e78380693e85cb08c6b30
Comment 10 Fushan Wen 2022-05-19 13:45:26 UTC
Git commit 7d68b36befe7f311f6164e3bca2d9b35ba7fe627 by Fushan Wen.
Committed on 19/05/2022 at 12:21.
Pushed by fusionfuture into branch 'master'.

eventpluginsmanager: relay `alternateDateReady` and `subLabelReady`

Two new signals are added in CalendarEventsPlugin, so we need to relay
them to make DaysModel receive them.

M  +2    -2    components/calendar/eventpluginsmanager.cpp
M  +17   -2    components/calendar/eventpluginsmanager.h

https://invent.kde.org/plasma/plasma-workspace/commit/7d68b36befe7f311f6164e3bca2d9b35ba7fe627
Comment 11 Fushan Wen 2022-05-19 13:45:34 UTC
Git commit 54728d548b35fb2561fda47bc5199cc01972ce64 by Fushan Wen.
Committed on 19/05/2022 at 12:21.
Pushed by fusionfuture into branch 'master'.

daysmodel: Add alternate date and sub-label properties

The calendar applet will need those properties to show alternate
calendar date.

M  +90   -10   components/calendar/daysmodel.cpp
M  +10   -1    components/calendar/daysmodel.h

https://invent.kde.org/plasma/plasma-workspace/commit/54728d548b35fb2561fda47bc5199cc01972ce64
Comment 12 Fushan Wen 2022-05-19 13:45:44 UTC
Git commit e421073f5ed91d14c83fc51b2a072d4a7bd81cbb by Fushan Wen.
Committed on 19/05/2022 at 12:21.
Pushed by fusionfuture into branch 'master'.

calendar: Add support for sublabel in DayDelegate

The sublabel will be displayed under the day number.

M  +69   -11   components/calendar/qml/DayDelegate.qml
M  +8    -0    components/calendar/qml/MonthView.qml

https://invent.kde.org/plasma/plasma-workspace/commit/e421073f5ed91d14c83fc51b2a072d4a7bd81cbb
Comment 13 Fushan Wen 2022-05-19 13:45:50 UTC
Git commit c89698e33c186c67b6de26d2184617b6e080cca5 by Fushan Wen.
Committed on 19/05/2022 at 12:18.
Pushed by fusionfuture into branch 'master'.

alternatecalendar: Add optional dependency on ICU

M  +1    -0    plasmacalendarplugins/CMakeLists.txt
A  +15   -0    plasmacalendarplugins/alternatecalendar/CMakeLists.txt
A  +3    -0    plasmacalendarplugins/alternatecalendar/config-ICU.h.cmake

https://invent.kde.org/plasma/kdeplasma-addons/commit/c89698e33c186c67b6de26d2184617b6e080cca5
Comment 14 Fushan Wen 2022-05-19 13:45:52 UTC
Git commit d447eb95c458eff2ed647ccf5081a7c7d99acd78 by Fushan Wen.
Committed on 19/05/2022 at 12:18.
Pushed by fusionfuture into branch 'master'.

alternatecalendar: Add Messages.sh

A  +8    -0    plasmacalendarplugins/alternatecalendar/Messages.sh

https://invent.kde.org/plasma/kdeplasma-addons/commit/d447eb95c458eff2ed647ccf5081a7c7d99acd78
Comment 15 Fushan Wen 2022-05-19 13:45:54 UTC
Git commit 37335d8024cbe2557a61debb2cdae30cc1a35a51 by Fushan Wen.
Committed on 19/05/2022 at 12:18.
Pushed by fusionfuture into branch 'master'.

alternatecalendar: Add QCalendar provider

This implements calendar system supports from QCalendar.

M  +1    -0    plasmacalendarplugins/alternatecalendar/CMakeLists.txt
M  +2    -0    plasmacalendarplugins/alternatecalendar/alternatecalendarplugin.cpp
A  +74   -0    plasmacalendarplugins/alternatecalendar/provider/qtcalendar.cpp     [License: GPL(v2.0+)]
A  +31   -0    plasmacalendarplugins/alternatecalendar/provider/qtcalendar.h     [License: GPL(v2.0+)]

https://invent.kde.org/plasma/kdeplasma-addons/commit/37335d8024cbe2557a61debb2cdae30cc1a35a51
Comment 16 Fushan Wen 2022-05-19 13:45:56 UTC
Git commit 37ff5f67eb63418c1b720052c59c9bf47805be25 by Fushan Wen.
Committed on 19/05/2022 at 12:18.
Pushed by fusionfuture into branch 'master'.

alternatecalendar: Add calendarProvider in plugin base

The plugin will use the calendar provider to convert date and get
sub-labels.

M  +17   -0    plasmacalendarplugins/alternatecalendar/alternatecalendarplugin.cpp

https://invent.kde.org/plasma/kdeplasma-addons/commit/37ff5f67eb63418c1b720052c59c9bf47805be25
Comment 17 Fushan Wen 2022-05-19 13:45:58 UTC
Git commit f2a0de9a24d69e1a2674e3e5e31e4384d9989bfc by Fushan Wen.
Committed on 19/05/2022 at 12:18.
Pushed by fusionfuture into branch 'master'.

alternatecalendar: Maintain a list of calendar systems

As QCalendar only provides some calendar systems, we need to maintain
our own list of calendar systems.

A  +32   -0    plasmacalendarplugins/alternatecalendar/calendarsystem.h     [License: GPL(v2.0+)]

https://invent.kde.org/plasma/kdeplasma-addons/commit/f2a0de9a24d69e1a2674e3e5e31e4384d9989bfc
Comment 18 Fushan Wen 2022-05-19 13:46:00 UTC
Git commit 3d5b448dab65a13dc8f6a676bc802d7d7010bc30 by Fushan Wen.
Committed on 19/05/2022 at 12:18.
Pushed by fusionfuture into branch 'master'.

alternatecalendar: Add abstract calendar provider class

This base class will be used in alternate calendar provider
implementations.

M  +1    -0    plasmacalendarplugins/alternatecalendar/CMakeLists.txt
A  +34   -0    plasmacalendarplugins/alternatecalendar/provider/abstractcalendarprovider.cpp     [License: GPL(v2.0+)]
A  +43   -0    plasmacalendarplugins/alternatecalendar/provider/abstractcalendarprovider.h     [License: GPL(v2.0+)]

https://invent.kde.org/plasma/kdeplasma-addons/commit/3d5b448dab65a13dc8f6a676bc802d7d7010bc30
Comment 19 Fushan Wen 2022-05-19 13:46:02 UTC
Git commit 740bf91b37aaceb42e583969a3315b2f89f1091a by Fushan Wen.
Committed on 19/05/2022 at 12:18.
Pushed by fusionfuture into branch 'master'.

alternatecalendar: Add support for QCalendar provider in plugin base

Supported calendar systems are from QCalendar.

M  +13   -1    plasmacalendarplugins/alternatecalendar/alternatecalendarplugin.cpp

https://invent.kde.org/plasma/kdeplasma-addons/commit/740bf91b37aaceb42e583969a3315b2f89f1091a
Comment 20 Fushan Wen 2022-05-19 13:46:09 UTC
Git commit 839e08b9c93af3e80e5aa8c88f44d52a6d80493c by Fushan Wen.
Committed on 19/05/2022 at 12:18.
Pushed by fusionfuture into branch 'master'.

alternatecalendar: Add plugin base

This adds the basic structure of the alternate calendar plugin.

M  +12   -0    plasmacalendarplugins/alternatecalendar/CMakeLists.txt
A  +62   -0    plasmacalendarplugins/alternatecalendar/alternatecalendarplugin.cpp     [License: GPL(v2.0+)]
A  +32   -0    plasmacalendarplugins/alternatecalendar/alternatecalendarplugin.h     [License: GPL(v2.0+)]
A  +7    -0    plasmacalendarplugins/alternatecalendar/alternatecalendarplugin.json

https://invent.kde.org/plasma/kdeplasma-addons/commit/839e08b9c93af3e80e5aa8c88f44d52a6d80493c
Comment 21 Fushan Wen 2022-05-19 13:46:11 UTC
Git commit a9f85e2e82e6373358bc3082985d1f69c9fccdee by Fushan Wen.
Committed on 19/05/2022 at 12:32.
Pushed by fusionfuture into branch 'master'.

alternatecalendar: Reload config on config changed

M  +15   -0    plasmacalendarplugins/alternatecalendar/alternatecalendarplugin.cpp
M  +6    -0    plasmacalendarplugins/alternatecalendar/alternatecalendarplugin.h

https://invent.kde.org/plasma/kdeplasma-addons/commit/a9f85e2e82e6373358bc3082985d1f69c9fccdee
Comment 22 Fushan Wen 2022-05-19 13:46:18 UTC
Git commit 145155e0ac2ed90ac389a6ff7d9b723968402a98 by Fushan Wen.
Committed on 19/05/2022 at 12:18.
Pushed by fusionfuture into branch 'master'.

alternatecalendar: Add date offset support for the Islamic Civil calendar in plugin base

Date offset is required to make the Islamic Civil calendar usable.

Special thanks to: @Zayed

M  +6    -2    plasmacalendarplugins/alternatecalendar/alternatecalendarplugin.cpp

https://invent.kde.org/plasma/kdeplasma-addons/commit/145155e0ac2ed90ac389a6ff7d9b723968402a98
Comment 23 Fushan Wen 2022-05-19 13:46:27 UTC
Git commit dc7487d2bd2702317da3fdca5df835e30a7ecc7c by Fushan Wen.
Committed on 19/05/2022 at 12:32.
Pushed by fusionfuture into branch 'master'.

alternatecalendar: Add config UI

M  +2    -1    plasmacalendarplugins/alternatecalendar/alternatecalendarplugin.json
M  +1    -0    plasmacalendarplugins/alternatecalendar/config/CMakeLists.txt
A  +63   -0    plasmacalendarplugins/alternatecalendar/config/qml/AlternateCalendarConfig.qml     [License: GPL(v2.0+)]
A  +6    -0    plasmacalendarplugins/alternatecalendar/config/qml/CMakeLists.txt

https://invent.kde.org/plasma/kdeplasma-addons/commit/dc7487d2bd2702317da3fdca5df835e30a7ecc7c
Comment 24 Fushan Wen 2022-05-19 13:46:35 UTC
Git commit 73f19554448d9f562a7bab766addeca7c2512590 by Fushan Wen.
Committed on 19/05/2022 at 12:32.
Pushed by fusionfuture into branch 'master'.

alternatecalendar: Add ICU calendar system private class

This class will be used in calendar providers that require ICU library.

M  +9    -0    plasmacalendarplugins/alternatecalendar/CMakeLists.txt
A  +82   -0    plasmacalendarplugins/alternatecalendar/provider/icucalendar_p.cpp     [License: GPL(v2.0+)]
A  +71   -0    plasmacalendarplugins/alternatecalendar/provider/icucalendar_p.h     [License: GPL(v2.0+)]

https://invent.kde.org/plasma/kdeplasma-addons/commit/73f19554448d9f562a7bab766addeca7c2512590
Comment 25 Fushan Wen 2022-05-19 13:46:43 UTC
Git commit 1123ebec2776a51b6781e3a4ac5e80ee127bfdda by Fushan Wen.
Committed on 19/05/2022 at 12:32.
Pushed by fusionfuture into branch 'master'.

alternatecalendar: Implement config backend

This provides a config backend and a model contaning all the available
calendar systems that can be used in a combobox.

M  +2    -0    plasmacalendarplugins/alternatecalendar/CMakeLists.txt
M  +10   -0    plasmacalendarplugins/alternatecalendar/alternatecalendarplugin.cpp
M  +3    -0    plasmacalendarplugins/alternatecalendar/calendarsystem.h
A  +5    -0    plasmacalendarplugins/alternatecalendar/config/CMakeLists.txt
A  +15   -0    plasmacalendarplugins/alternatecalendar/config/plugin/CMakeLists.txt
A  +21   -0    plasmacalendarplugins/alternatecalendar/config/plugin/configplugin.cpp     [License: GPL(v2.0+)]
A  +22   -0    plasmacalendarplugins/alternatecalendar/config/plugin/configplugin.h     [License: GPL(v2.0+)]
A  +119  -0    plasmacalendarplugins/alternatecalendar/config/plugin/configstorage.cpp     [License: GPL(v2.0+)]
A  +95   -0    plasmacalendarplugins/alternatecalendar/config/plugin/configstorage.h     [License: GPL(v2.0+)]
A  +7    -0    plasmacalendarplugins/alternatecalendar/config/plugin/qmldir

https://invent.kde.org/plasma/kdeplasma-addons/commit/1123ebec2776a51b6781e3a4ac5e80ee127bfdda
Comment 26 Fushan Wen 2022-05-19 13:46:52 UTC
Git commit 47bcfc37665348b12fa7100e48c41463825b8277 by Fushan Wen.
Committed on 19/05/2022 at 12:32.
Pushed by fusionfuture into branch 'master'.

alternatecalendar: Add Chinese lunar calendar system support

The traditional Chinese calendar (also known as the Agricultural
Calendar is a lunisolar calendar which identifies years, months,
and days according to astronomical phenomena. In China, it is defined
by the Chinese national standard GB/T 33661–2017, "Calculation and
Promulgation of the Chinese Calendar", issued by the Standardization
Administration of China on May 12, 2017.

The plugin is adapted from https://github.com/BLumia/pineapple-calendar

Co-authored-by: Gary Wang <wzc782970009@gmail.com>
FIXED-IN: 5.26

M  +1    -0    plasmacalendarplugins/alternatecalendar/CMakeLists.txt
M  +10   -0    plasmacalendarplugins/alternatecalendar/alternatecalendarplugin.cpp
M  +1    -0    plasmacalendarplugins/alternatecalendar/calendarsystem.h
M  +4    -1    plasmacalendarplugins/alternatecalendar/config/plugin/configstorage.cpp
A  +100  -0    plasmacalendarplugins/alternatecalendar/provider/chinesecalendar.cpp     [License: GPL(v2.0+)]
A  +30   -0    plasmacalendarplugins/alternatecalendar/provider/chinesecalendar.h     [License: GPL(v2.0+)]

https://invent.kde.org/plasma/kdeplasma-addons/commit/47bcfc37665348b12fa7100e48c41463825b8277
Comment 27 Fushan Wen 2022-05-19 13:47:00 UTC
Git commit 3985df2880e44739c8feb7019bce7e0d3273a15b by Fushan Wen.
Committed on 19/05/2022 at 12:32.
Pushed by fusionfuture into branch 'master'.

alternatecalendar: Add Indian national calendar system support

The Indian national calendar, sometimes called the Saka calendar, is
used, alongside the Gregorian calendar, by The Gazette of India, in
news broadcasts by All India Radio and in calendars and communications
issued by the Government of India.

M  +1    -0    plasmacalendarplugins/alternatecalendar/CMakeLists.txt
M  +4    -0    plasmacalendarplugins/alternatecalendar/alternatecalendarplugin.cpp
M  +1    -0    plasmacalendarplugins/alternatecalendar/calendarsystem.h
M  +1    -0    plasmacalendarplugins/alternatecalendar/config/plugin/configstorage.cpp
A  +71   -0    plasmacalendarplugins/alternatecalendar/provider/indiancalendar.cpp     [License: GPL(v2.0+)]
A  +30   -0    plasmacalendarplugins/alternatecalendar/provider/indiancalendar.h     [License: GPL(v2.0+)]

https://invent.kde.org/plasma/kdeplasma-addons/commit/3985df2880e44739c8feb7019bce7e0d3273a15b
Comment 28 Fushan Wen 2022-05-23 09:03:02 UTC
Git commit 6cbadcddb873bb447f921cb4d8b9e697da4332a1 by Fushan Wen.
Committed on 23/05/2022 at 09:02.
Pushed by fusionfuture into branch 'master'.

plasmacalendarplugins/alternatecalendar: cache sublabels

The lookup process of sublabels can be time-consuming, so cache it.

M  +44   -27   plasmacalendarplugins/alternatecalendar/alternatecalendarplugin.cpp

https://invent.kde.org/plasma/kdeplasma-addons/commit/6cbadcddb873bb447f921cb4d8b9e697da4332a1
Comment 29 Bug Janitor Service 2022-07-27 12:41:00 UTC
A possibly relevant merge request was started @ https://invent.kde.org/plasma/plasma-workspace/-/merge_requests/1975
Comment 30 Fushan Wen 2022-07-27 23:36:38 UTC
Git commit 60cb17b38afb126ced114807c2c961cc6fca3291 by Fushan Wen.
Committed on 27/07/2022 at 23:28.
Pushed by fusionfuture into branch 'master'.

components/calendar: add sublabel to `Accessible.description`

M  +5    -1    components/calendar/qml/DayDelegate.qml

https://invent.kde.org/plasma/plasma-workspace/commit/60cb17b38afb126ced114807c2c961cc6fca3291
Comment 31 Joachim Schneider 2023-04-03 21:10:06 UTC
In OpenSuse and Knoppix since Plasma5 the Widget »Digital Clock« has changed:

With KDE4 and Plasma4 the Calendar System could be easily switched in the settings of the widget, to Hebrew, Mohammedian, Indian, Chinese, Julian, etc.

Any Calendar System could be set for each of several clocks, which could be used in the same panel side by side.

Why was the old code abandoned?
Comment 32 Joachim Schneider 2023-07-28 15:22:46 UTC
Created attachment 160590 [details]
The Calendar System Feature unforgotten back in KDE Version 4
Comment 33 Joachim Schneider 2023-07-28 15:32:40 UTC
I filed this on its own: 

https://bugs.kde.org/show_bug.cgi?id=472750

With »KDE4« and »Plasma4« the Calendar System could be easily switched within the settings of the Clock Combined Calendar Widgets: Gregorian, Hebrew, Mohammedian, Indian, Chinese, Julian, Japanese, etc.

For each of several Clock Combined Calendar Widgets, any Calendar System could be set, which could be used in the same Panel or on the same Virtual Desktop side by side.

See screenshots.

Since »Plasma« Version 5 the Configuration and Integration of the Module »Date and Time« into the »Plasma« Desktop Environment has changed, along with the »Plasma« Clock Combined Calendar Widgets.

From »Plasma« Desktop Environment Version 5 on there is no option anymore to use any alternate Calender System at all, if not by Installing a Localized Edition of a Distribution, apparently and probably so in »OpenSuse« and »Knoppix«.

Considering the settings with the KDE3 Fork Desktop Environment Trinity, the Calendar System was already switchable with Version 3 of KDE.

Why was the old code abandoned?

There are recently calls and efforts to rewrite this feature, notably for an integration of Arabic Calendars:

https://bugs.kde.org/show_bug.cgi?id=429892

https://community.kde.org/KDE_Core/Astronomical_Calendars

Calendar System Feature gone for instance in:

Linux/KDE Plasma: OpenSuse 15.4
(available in About System)
KDE Plasma Version: 5.24.4
KDE Frameworks Version: 5.90.0
Qt Version: 5.15.2

Calendar System Feature still exists for instance in:

Linux/KDE Plasma: Kubuntu 14.04.6
(available in About System)
KDElibs Version: 4.13.3
Qt Version: 4.8.6

And even more importantly: why was the old code forgotten?
Comment 34 Nate Graham 2023-07-28 21:04:43 UTC
Because it was a custom thing that only applied to KDE apps and did not take effect anywhere else on the system or in any non-KDE apps. That powerful but not-very-compatible system was abandoned in favor of the more limited functionality provided by Qt, which applies systemwide, to all apps.

Whether this was the best decision is up for interpretation, and reasonable people can disagree on the matter.