Package: release.debian.org Severity: normal Tags: bookworm User: release.debian....@packages.debian.org Usertags: pu
[ Reason ] In Lomiri's clock app, it is possible to configure alarms with custom alarm sounds. ayatana-indicator-datetime is responsible for playing those alarm sounds when the time comes. However, ayatana-indicator-datetime only plays the system-wide default alarm sound. [ Impact ] Limited to Lomiri users, configuring custom alarm sounds will work with this changeset. [ Tests ] Manually, on a bookworm system running Lomiri. [ Risks ] Virtually none. [ Checklist ] [x] *all* changes are documented in the d/changelog [x] I reviewed all changes and I approve them [x] attach debdiff against the package in (old)stable [x] the issue is verified as fixed in unstable [ Changes ] + * debian/patches: + + Add 0001_engine-eds-fix-retrieving-custom-alarm-sound-path.patch. Fix + playing of custom alarm sounds. (Closes: #1037330). -> a patch from upstream (contributed by Ubuntu Touch developers) will be cherry-picked into bookworm's version of ayatana-indicator-datetime. [ Other info ] None.
diff -Nru ayatana-indicator-datetime-22.9.1/debian/changelog ayatana-indicator-datetime-22.9.1/debian/changelog --- ayatana-indicator-datetime-22.9.1/debian/changelog 2022-11-23 17:06:05.000000000 +0100 +++ ayatana-indicator-datetime-22.9.1/debian/changelog 2023-06-11 17:54:33.000000000 +0200 @@ -1,3 +1,11 @@ +ayatana-indicator-datetime (22.9.1-1+deb12u1) bookworm; urgency=medium + + * debian/patches: + + Add 0001_engine-eds-fix-retrieving-custom-alarm-sound-path.patch. Fix + playing of custom alarm sounds. (Closes: #1037330). + + -- Mike Gabriel <sunwea...@debian.org> Sun, 11 Jun 2023 17:54:33 +0200 + ayatana-indicator-datetime (22.9.1-1) unstable; urgency=medium * New upstream release. diff -Nru ayatana-indicator-datetime-22.9.1/debian/patches/0001_engine-eds-fix-retrieving-custom-alarm-sound-path.patch ayatana-indicator-datetime-22.9.1/debian/patches/0001_engine-eds-fix-retrieving-custom-alarm-sound-path.patch --- ayatana-indicator-datetime-22.9.1/debian/patches/0001_engine-eds-fix-retrieving-custom-alarm-sound-path.patch 1970-01-01 01:00:00.000000000 +0100 +++ ayatana-indicator-datetime-22.9.1/debian/patches/0001_engine-eds-fix-retrieving-custom-alarm-sound-path.patch 2023-06-11 17:53:40.000000000 +0200 @@ -0,0 +1,203 @@ +From e089a84b306ef09667752b910d87538043140042 Mon Sep 17 00:00:00 2001 +From: Ratchanan Srirattanamet <ratcha...@ubports.com> +Date: Tue, 6 Jun 2023 15:54:11 +0700 +Subject: [PATCH] engine-eds: fix retrieving custom alarm sound path + +ECal 2.0 returns the list of attachments as a GSList (a singly linked +list). I'm not sure why, but the logic for iterating the list is +completely incorrect. Fixing that fixes custom alarm sound. + +A test is added to catch this case. + +Bug-UBports: https://gitlab.com/ubports/development/apps/lomiri-clock-app/-/issues/183 +Signed-off-by: Mike Gabriel <mike.gabr...@das-netzwerkteam.de> +--- + src/engine-eds.cpp | 13 ++- + tests/CMakeLists.txt | 1 + + tests/test-eds-ics-alarm-custom-sound.cpp | 92 ++++++++++++++++++++ + tests/test-eds-ics-alarm-custom-sound.ics.in | 32 +++++++ + 4 files changed, 131 insertions(+), 7 deletions(-) + create mode 100644 tests/test-eds-ics-alarm-custom-sound.cpp + create mode 100644 tests/test-eds-ics-alarm-custom-sound.ics.in + +diff --git a/src/engine-eds.cpp b/src/engine-eds.cpp +index b7f4682..2748fc1 100644 +--- a/src/engine-eds.cpp ++++ b/src/engine-eds.cpp +@@ -635,19 +635,18 @@ private: + auto action = e_cal_component_alarm_get_action(alarm); + if (action == E_CAL_COMPONENT_ALARM_AUDIO) + { +- ICalAttach *attach = nullptr; + auto attachments = e_cal_component_alarm_get_attachments(alarm); + +- if (attachments != nullptr && attachments->next != nullptr) +- attach = I_CAL_ATTACH (attachments->data); ++ for (; attachments != nullptr; attachments = attachments->next) { ++ ICalAttach *attach = I_CAL_ATTACH (attachments->data); + +- if (attach != nullptr) +- { +- if (i_cal_attach_get_is_url (attach)) ++ if (attach != nullptr && i_cal_attach_get_is_url (attach)) + { + const char* url = i_cal_attach_get_url(attach); +- if (url != nullptr) ++ if (url != nullptr) { + ret = url; ++ break; ++ } + } + } + if (ret.empty()) +diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt +index 4b9b1d7..81eeb5d 100644 +--- a/tests/CMakeLists.txt ++++ b/tests/CMakeLists.txt +@@ -108,6 +108,7 @@ add_eds_ics_test_by_name(test-eds-ics-tzids-2) + add_eds_ics_test_by_name(test-eds-ics-tzids-utc) + add_eds_ics_test_by_name(test-eds-ics-non-attending-alarms) + add_eds_ics_test_by_name(test-eds-ics-repeating-events-with-individual-change) ++add_eds_ics_test_by_name(test-eds-ics-alarm-custom-sound) + + function(add_dbusmock_test_by_name name) + set (TEST_NAME ${name}) +diff --git a/tests/test-eds-ics-alarm-custom-sound.cpp b/tests/test-eds-ics-alarm-custom-sound.cpp +new file mode 100644 +index 0000000..9f63c29 +--- /dev/null ++++ b/tests/test-eds-ics-alarm-custom-sound.cpp +@@ -0,0 +1,92 @@ ++/* ++ * Copyright 2015 Canonical Ltd. ++ * Copyright 2021 Robert Tari ++ * Copyright 2023 UBports Foundation. ++ * ++ * This program is free software: you can redistribute it and/or modify it ++ * under the terms of the GNU General Public License version 3, as published ++ * by the Free Software Foundation. ++ * ++ * This program is distributed in the hope that it will be useful, but ++ * WITHOUT ANY WARRANTY; without even the implied warranties of ++ * MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR ++ * PURPOSE. See the GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License along ++ * with this program. If not, see <http://www.gnu.org/licenses/>. ++ * ++ * Authors: ++ * Charles Kerr <charles.k...@canonical.com> ++ * Robert Tari <rob...@tari.in> ++ * Ratchanan Srirattanamet <ratcha...@ubports.com> ++ */ ++ ++#include <algorithm> ++ ++#include <datetime/alarm-queue-simple.h> ++#include <datetime/clock-mock.h> ++#include <datetime/engine-eds.h> ++#include <datetime/myself.h> ++#include <datetime/planner-range.h> ++ ++#include <gtest/gtest.h> ++ ++#include "glib-fixture.h" ++#include "timezone-mock.h" ++#include "wakeup-timer-mock.h" ++ ++using namespace ayatana::indicator::datetime; ++using VAlarmFixture = GlibFixture; ++ ++/*** ++**** ++***/ ++ ++TEST_F(VAlarmFixture, AlarmCustomSound) ++{ ++ // start the EDS engine ++ auto engine = std::make_shared<EdsEngine>(std::make_shared<Myself>()); ++ ++ // we need a consistent timezone for the planner and our local DateTimes ++ constexpr char const * zone_str {"America/Recife"}; ++ auto tz = std::make_shared<MockTimezone>(zone_str); ++ ++ #if GLIB_CHECK_VERSION(2, 68, 0) ++ auto gtz = g_time_zone_new_identifier(zone_str); ++ ++ if (gtz == NULL) ++ { ++ gtz = g_time_zone_new_utc(); ++ } ++ #else ++ auto gtz = g_time_zone_new(zone_str); ++ #endif ++ ++ // make a planner that looks at the first half of 2023 in EDS ++ auto planner = std::make_shared<SimpleRangePlanner>(engine, tz); ++ const DateTime range_begin {gtz, 2023,1, 1, 0, 0, 0.0}; ++ const DateTime range_end {gtz, 2023,6,30,23,59,59.5}; ++ planner->range().set(std::make_pair(range_begin, range_end)); ++ ++ // give EDS a moment to load ++ if (planner->appointments().get().empty()) { ++ g_message("waiting a moment for EDS to load..."); ++ auto on_appointments_changed = [this](const std::vector<Appointment>& appointments){ ++ g_message("ah, they loaded"); ++ if (!appointments.empty()) ++ g_main_loop_quit(loop); ++ }; ++ core::ScopedConnection conn(planner->appointments().changed().connect(on_appointments_changed)); ++ constexpr int max_wait_sec = 10; ++ wait_msec(max_wait_sec * G_TIME_SPAN_MILLISECOND); ++ } ++ ++ // the planner should match what we've got in the calendar.ics file ++ const auto appts = planner->appointments().get(); ++ EXPECT_EQ(1, appts.size()); ++ EXPECT_EQ(1, appts[0].alarms.size()); ++ EXPECT_EQ(appts[0].alarms[0].audio_url, "file:///usr/share/sounds/lomiri/ringtones/Entropy.ogg"); ++ ++ // cleanup ++ g_time_zone_unref(gtz); ++} +diff --git a/tests/test-eds-ics-alarm-custom-sound.ics.in b/tests/test-eds-ics-alarm-custom-sound.ics.in +new file mode 100644 +index 0000000..5354a71 +--- /dev/null ++++ b/tests/test-eds-ics-alarm-custom-sound.ics.in +@@ -0,0 +1,32 @@ ++BEGIN:VCALENDAR ++CALSCALE:GREGORIAN ++PRODID:-//Ximian//NONSGML Evolution Calendar//EN ++VERSION:2.0 ++X-EVOLUTION-DATA-REVISION:2023-06-06T17:25:48.265942Z(42) ++BEGIN:VTODO ++UID:882a6a702f87a3afde203e5609d2626ba144a3c2 ++DTSTAMP:20230606T172548Z ++DTSTART:20230607T165701 ++PRIORITY:0 ++SUMMARY:Alarm ++CATEGORIES:x-lomiri-alarm ++SEQUENCE:1 ++LAST-MODIFIED:20230606T172548Z ++BEGIN:VALARM ++X-EVOLUTION-ALARM-UID:eceda45c7493b76e41cdb2369ce8160b75e53f98 ++ACTION:AUDIO ++TRIGGER;RELATED=START:PT0S ++REPEAT:0 ++DURATION:PT0S ++ATTACH:file:///usr/share/sounds/lomiri/ringtones/Entropy.ogg ++END:VALARM ++BEGIN:VALARM ++X-EVOLUTION-ALARM-UID:8eec04befc2876fb13a6726181fed33b9f7810c8 ++ACTION:DISPLAY ++DESCRIPTION:Alarm ++TRIGGER;RELATED=START:PT0S ++REPEAT:0 ++DURATION:PT0S ++END:VALARM ++END:VTODO ++END:VCALENDAR +-- +2.30.2 + diff -Nru ayatana-indicator-datetime-22.9.1/debian/patches/series ayatana-indicator-datetime-22.9.1/debian/patches/series --- ayatana-indicator-datetime-22.9.1/debian/patches/series 1970-01-01 01:00:00.000000000 +0100 +++ ayatana-indicator-datetime-22.9.1/debian/patches/series 2023-06-11 17:53:40.000000000 +0200 @@ -0,0 +1 @@ +0001_engine-eds-fix-retrieving-custom-alarm-sound-path.patch