summaryrefslogtreecommitdiff
path: root/src/services/evolution-alarm-notify
diff options
context:
space:
mode:
Diffstat (limited to 'src/services/evolution-alarm-notify')
-rw-r--r--src/services/evolution-alarm-notify/CMakeLists.txt6
-rw-r--r--src/services/evolution-alarm-notify/e-alarm-notify.c103
2 files changed, 66 insertions, 43 deletions
diff --git a/src/services/evolution-alarm-notify/CMakeLists.txt b/src/services/evolution-alarm-notify/CMakeLists.txt
index a4c0a41e7..baf765d7c 100644
--- a/src/services/evolution-alarm-notify/CMakeLists.txt
+++ b/src/services/evolution-alarm-notify/CMakeLists.txt
@@ -23,7 +23,7 @@ target_compile_definitions(evolution-alarm-notify PRIVATE
)
target_compile_options(evolution-alarm-notify PUBLIC
- ${CANBERRA_CFLAGS}
+ ${GSOUND_CFLAGS}
${DATA_SERVER_CFLAGS}
${GNOME_PLATFORM_CFLAGS}
${GTK_CFLAGS}
@@ -33,7 +33,7 @@ target_include_directories(evolution-alarm-notify PUBLIC
${CMAKE_BINARY_DIR}
${CMAKE_BINARY_DIR}/src
${CMAKE_SOURCE_DIR}/src
- ${CANBERRA_INCLUDE_DIRS}
+ ${GSOUND_INCLUDE_DIRS}
${DATA_SERVER_INCLUDE_DIRS}
${GNOME_PLATFORM_INCLUDE_DIRS}
${GTK_INCLUDE_DIRS}
@@ -41,7 +41,7 @@ target_include_directories(evolution-alarm-notify PUBLIC
target_link_libraries(evolution-alarm-notify
${DEPENDENCIES}
- ${CANBERRA_LDFLAGS}
+ ${GSOUND_LDFLAGS}
${DATA_SERVER_LDFLAGS}
${GNOME_PLATFORM_LDFLAGS}
${GTK_LDFLAGS}
diff --git a/src/services/evolution-alarm-notify/e-alarm-notify.c b/src/services/evolution-alarm-notify/e-alarm-notify.c
index 5c9b479f9..d69245acf 100644
--- a/src/services/evolution-alarm-notify/e-alarm-notify.c
+++ b/src/services/evolution-alarm-notify/e-alarm-notify.c
@@ -19,8 +19,8 @@
#include <time.h>
-#ifdef HAVE_CANBERRA
-#include <canberra-gtk.h>
+#ifdef HAVE_GSOUND
+#include <gsound.h>
#endif
#include <glib/gi18n-lib.h>
@@ -138,7 +138,11 @@ e_alarm_notify_audio (EAlarmNotify *an,
{
ICalAttach *attach = NULL;
GSList *attachments;
- gboolean did_play = FALSE;
+ GdkDisplay *display;
+ GError *error = NULL;
+#ifdef HAVE_GSOUND
+ GSoundContext *ctx;
+#endif
g_return_val_if_fail (an != NULL, FALSE);
g_return_val_if_fail (rd != NULL, FALSE);
@@ -154,33 +158,43 @@ e_alarm_notify_audio (EAlarmNotify *an,
url = i_cal_attach_get_url (attach);
if (url && *url) {
gchar *filename;
- GError *error = NULL;
filename = g_filename_from_uri (url, NULL, &error);
if (!filename) {
ean_debug_print ("Audio notify: Failed to convert URI '%s' to filename: %s\n", url, error ? error->message : "Unknown error");
+ g_clear_error (&error);
} else if (g_file_test (filename, G_FILE_TEST_EXISTS)) {
-#ifdef HAVE_CANBERRA
- gint err = ca_context_play (ca_gtk_context_get (), 0,
- CA_PROP_APPLICATION_NAME, "evolution-alarm-notify",
- CA_PROP_APPLICATION_VERSION, VERSION,
- CA_PROP_APPLICATION_ID, "org.gnome.Evolution-alarm-notify",
- CA_PROP_MEDIA_FILENAME, filename,
- NULL);
-
- did_play = !err;
-
- if (err)
- ean_debug_print ("Audio notify: Cannot play file '%s': %s\n", filename, ca_strerror (err));
+ g_clear_error (&error);
+#ifdef HAVE_GSOUND
+ ctx = gsound_context_new (NULL, &error);
+ if (error != NULL) {
+ ean_debug_print ("Failed to create gsound context: %s\n", error->message);
+ g_clear_error (&error);
+ } else {
+ gsound_context_play_simple (ctx, NULL, &error,
+ GSOUND_ATTR_APPLICATION_NAME, "evolution-alarm-notify",
+ GSOUND_ATTR_APPLICATION_VERSION, VERSION,
+ GSOUND_ATTR_APPLICATION_ID, "org.gnome.Evolution-alarm-notify",
+ GSOUND_ATTR_MEDIA_FILENAME, filename,
+ NULL);
+ if (error != NULL) {
+ ean_debug_print ("Failed to play sound \"%s\": %s\n", filename, error->message);
+ g_clear_error (&error);
+ } else {
+ g_object_unref (ctx);
+ g_free (filename);
+ return FALSE;
+ }
+ }
#else
- ean_debug_print ("Audio notify: Cannot play file '%s': Not compiled with libcanberra\n", filename);
+ g_clear_error (&error);
+ ean_debug_print ("Audio notify: Cannot play file '%s': Not compiled with gsound\n", filename);
#endif
} else {
ean_debug_print ("Audio notify: File '%s' does not exist\n", filename);
}
- g_clear_error (&error);
g_free (filename);
} else {
ean_debug_print ("Audio notify: Alarm has stored empty URL, fallback to default sound\n");
@@ -191,35 +205,44 @@ e_alarm_notify_audio (EAlarmNotify *an,
ean_debug_print ("Audio notify: Alarm attachment is not a URL to sound file, fallback to default sound\n");
}
-#ifdef HAVE_CANBERRA
- if (!did_play) {
- gint err = ca_context_play (ca_gtk_context_get (), 0,
- CA_PROP_APPLICATION_NAME, "evolution-alarm-notify",
- CA_PROP_APPLICATION_VERSION, VERSION,
- CA_PROP_APPLICATION_ID, "org.gnome.Evolution-alarm-notify",
- CA_PROP_EVENT_ID, "alarm-clock-elapsed",
- NULL);
+#ifdef HAVE_GSOUND
+ if (!ctx) {
+ ctx = gsound_context_new (NULL, &error);
+ if (error != NULL) {
+ ean_debug_print ("Failed to create gsound context: %s\n", error->message);
+ g_clear_error (&error);
+ }
+ }
- did_play = !err;
+ if (ctx != NULL) {
+ gsound_context_play_simple (ctx, NULL, &error,
+ GSOUND_ATTR_APPLICATION_NAME, "evolution-alarm-notify",
+ GSOUND_ATTR_APPLICATION_VERSION, VERSION,
+ GSOUND_ATTR_APPLICATION_ID, "org.gnome.Evolution-alarm-notify",
+ GSOUND_ATTR_EVENT_ID, "alarm-clock-elapsed",
+ NULL);
+ if (error != NULL) {
+ ean_debug_print ("Audio notify: Cannot play event sound: %s\n", error->message);
+ g_clear_error (&error);
+ } else {
+ g_object_unref (ctx);
+ return FALSE;
+ }
- if (err)
- ean_debug_print ("Audio notify: Cannot play event sound: %s\n", ca_strerror (err));
+ g_object_unref (ctx);
}
-#endif
- if (!did_play) {
- GdkDisplay *display;
+#endif
- display = an->priv->window ? gtk_widget_get_display (an->priv->window) : NULL;
+ display = an->priv->window ? gtk_widget_get_display (an->priv->window) : NULL;
- if (!display)
- display = gdk_display_get_default ();
+ if (!display)
+ display = gdk_display_get_default ();
- if (display)
- gdk_display_beep (display);
- else
- ean_debug_print ("Audio notify: Cannot beep, no display found\n");
- }
+ if (display)
+ gdk_display_beep (display);
+ else
+ ean_debug_print ("Audio notify: Cannot beep, no display found\n");
return FALSE;
}