mirror of
https://gitlab.alpinelinux.org/alpine/aports.git
synced 2025-08-05 13:27:09 +02:00
previous attempt forgot to guard `WakedUtils.remove_timer()` behind `if (!active)`, so it unconditionally removed the wakealarm
190 lines
6.1 KiB
Diff
190 lines
6.1 KiB
Diff
From a5f37373d2199f95ddc966b2426101bef62b4b93 Mon Sep 17 00:00:00 2001
|
|
From: Robin Westermann <gitlab@seath.de>
|
|
Date: Sat, 27 Feb 2021 14:41:22 +0100
|
|
Subject: [PATCH] invoke waked when an alarm changes
|
|
|
|
When an alarm is deleted, created, edited or rearmed the service
|
|
waked is notified about the update. So waked can wake the system
|
|
from suspend when an alarm is fired.
|
|
|
|
Fixes #100
|
|
|
|
Co-Authored-By: pcworld <0188801@gmail.com>
|
|
---
|
|
build-aux/flatpak/org.gnome.clocks.json | 1 +
|
|
src/alarm-face.vala | 2 +
|
|
src/alarm-item.vala | 10 +++++
|
|
src/alarm-setup-dialog.vala | 1 +
|
|
src/meson.build | 1 +
|
|
src/waked-utils.vala | 53 +++++++++++++++++++++++++
|
|
6 files changed, 68 insertions(+)
|
|
create mode 100644 src/waked-utils.vala
|
|
|
|
diff --git a/build-aux/flatpak/org.gnome.clocks.json b/build-aux/flatpak/org.gnome.clocks.json
|
|
index a58ffcb..b009378 100644
|
|
--- a/build-aux/flatpak/org.gnome.clocks.json
|
|
+++ b/build-aux/flatpak/org.gnome.clocks.json
|
|
@@ -11,6 +11,7 @@
|
|
"--socket=fallback-x11",
|
|
"--socket=wayland",
|
|
"--socket=pulseaudio",
|
|
+ "--system-talk-name=de.seath.Waked",
|
|
"--share=network",
|
|
"--env=G_MESSAGES_DEBUG=org.gnome.ClocksDevel"
|
|
],
|
|
diff --git a/src/alarm-face.vala b/src/alarm-face.vala
|
|
index 58950d5..edcc796 100644
|
|
--- a/src/alarm-face.vala
|
|
+++ b/src/alarm-face.vala
|
|
@@ -73,6 +73,7 @@ public class Face : Adw.Bin, Clocks.Clock {
|
|
item.notify["active"].connect (save);
|
|
|
|
row.remove_alarm.connect (() => {
|
|
+ WakedUtils.remove_timer (((Item) item).id);
|
|
alarms.delete_item ((Item) item);
|
|
save ();
|
|
});
|
|
@@ -129,6 +130,7 @@ public class Face : Adw.Bin, Clocks.Clock {
|
|
((SetupDialog) dialog).apply_to_alarm (alarm);
|
|
save ();
|
|
} else if (response == DELETE_ALARM) {
|
|
+ WakedUtils.remove_timer (alarm.id);
|
|
alarms.delete_item (alarm);
|
|
save ();
|
|
}
|
|
diff --git a/src/alarm-item.vala b/src/alarm-item.vala
|
|
index 263248b..ce7678d 100644
|
|
--- a/src/alarm-item.vala
|
|
+++ b/src/alarm-item.vala
|
|
@@ -20,6 +20,7 @@
|
|
namespace Clocks {
|
|
namespace Alarm {
|
|
|
|
+
|
|
private struct AlarmTime {
|
|
public int hour;
|
|
public int minute;
|
|
@@ -98,6 +99,9 @@ private class Item : Object, ContentItem {
|
|
_active = value;
|
|
|
|
reset ();
|
|
+ if (!active) {
|
|
+ WakedUtils.remove_timer (id);
|
|
+ }
|
|
if (!active && state == State.RINGING) {
|
|
stop ();
|
|
}
|
|
@@ -161,6 +165,10 @@ private class Item : Object, ContentItem {
|
|
}
|
|
|
|
alarm_time = dt;
|
|
+
|
|
+ if (active) {
|
|
+ WakedUtils.update_timer (id, alarm_time);
|
|
+ }
|
|
}
|
|
|
|
private void update_snooze_time (GLib.DateTime start_time) {
|
|
@@ -183,6 +191,7 @@ private class Item : Object, ContentItem {
|
|
public void snooze () {
|
|
bell.stop ();
|
|
state = State.SNOOZING;
|
|
+ WakedUtils.update_timer (id, snooze_time);
|
|
}
|
|
|
|
public void stop () {
|
|
@@ -232,6 +241,7 @@ private class Item : Object, ContentItem {
|
|
update_alarm_time (); // reschedule for the next repeat
|
|
}
|
|
|
|
+
|
|
return state != last_state;
|
|
}
|
|
|
|
diff --git a/src/alarm-setup-dialog.vala b/src/alarm-setup-dialog.vala
|
|
index 5d122cd..b6f66e9 100644
|
|
--- a/src/alarm-setup-dialog.vala
|
|
+++ b/src/alarm-setup-dialog.vala
|
|
@@ -264,6 +264,7 @@ private class SetupDialog : Gtk.Dialog {
|
|
|
|
private void avoid_duplicate_alarm () {
|
|
var alarm = new Item ();
|
|
+ alarm.editing = true;
|
|
apply_to_alarm (alarm);
|
|
|
|
var duplicate = alarm.check_duplicate_alarm (other_alarms);
|
|
diff --git a/src/meson.build b/src/meson.build
|
|
index dfc7d34..ab9de1c 100644
|
|
--- a/src/meson.build
|
|
+++ b/src/meson.build
|
|
@@ -24,6 +24,7 @@ clocks_vala_sources = files(
|
|
'timer-setup.vala',
|
|
'timer-setup-dialog.vala',
|
|
'utils.vala',
|
|
+ 'waked-utils.vala',
|
|
'widgets.vala',
|
|
'window.vala',
|
|
'world-face.vala',
|
|
diff --git a/src/waked-utils.vala b/src/waked-utils.vala
|
|
new file mode 100644
|
|
index 0000000..9b8fa4a
|
|
--- /dev/null
|
|
+++ b/src/waked-utils.vala
|
|
@@ -0,0 +1,53 @@
|
|
+/*
|
|
+ * Copyright (C) 2021 Robin Westermann <waked@seath.de>
|
|
+ *
|
|
+ * This program is free software; you can redistribute it and/or
|
|
+ * modify it under the terms of the GNU General Public License
|
|
+ * as published by the Free Software Foundation; either version 2
|
|
+ * of the License, or (at your option) any later version.
|
|
+ *
|
|
+ * This program is distributed in the hope that it will be useful,
|
|
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
+ * MERCHANTABILITY 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, write to the Free Software
|
|
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
+ */
|
|
+
|
|
+namespace Clocks {
|
|
+namespace WakedUtils {
|
|
+
|
|
+ [DBus (name = "de.seath.Waked")]
|
|
+ interface Waked : Object {
|
|
+ public abstract void add (string id, uint64 time) throws GLib.Error;
|
|
+ public abstract void update (string id, uint64 time) throws GLib.Error;
|
|
+ public abstract void remove (string id) throws GLib.Error;
|
|
+ }
|
|
+
|
|
+ public void update_timer (string id, GLib.DateTime time) {
|
|
+ try {
|
|
+ Waked waked = Bus.get_proxy_sync (BusType.SYSTEM, "de.seath.Waked",
|
|
+ "/de/seath/Waked/Alarm");
|
|
+
|
|
+ waked.update (id, time.to_unix ());
|
|
+
|
|
+ } catch (GLib.Error e) {
|
|
+ stderr.printf ("%s\n", e.message);
|
|
+ }
|
|
+ }
|
|
+
|
|
+ public void remove_timer (string id) {
|
|
+ try {
|
|
+ Waked waked = Bus.get_proxy_sync (BusType.SYSTEM, "de.seath.Waked",
|
|
+ "/de/seath/Waked/Alarm");
|
|
+
|
|
+ waked.remove (id);
|
|
+
|
|
+ } catch (GLib.Error e) {
|
|
+ stderr.printf ("%s\n", e.message);
|
|
+ }
|
|
+ }
|
|
+}
|
|
+}
|
|
--
|
|
2.37.2
|
|
|