diff options
Diffstat (limited to 'src/services/evolution-alarm-notify')
-rw-r--r-- | src/services/evolution-alarm-notify/CMakeLists.txt | 6 | ||||
-rw-r--r-- | src/services/evolution-alarm-notify/e-alarm-notify.c | 103 |
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; } |