fbd-dev-sound: Play custom sound file if specified

Signed-off-by: Guido Günther <agx@sigxcpu.org>
This commit is contained in:
Guido Günther
2025-01-26 16:12:13 +01:00
parent bff82ef14b
commit e105a21a1d
+26 -12
View File
@@ -176,14 +176,16 @@ on_sound_play_finished_callback (GSoundContext *ctx,
g_autoptr (GError) err = NULL; g_autoptr (GError) err = NULL;
if (!gsound_context_play_full_finish (ctx, res, &err)) { if (!gsound_context_play_full_finish (ctx, res, &err)) {
const char *sound = fbd_feedback_sound_get_file_name (data->feedback);
if (!sound)
sound = fbd_feedback_sound_get_effect (data->feedback);
if (err->domain == GSOUND_ERROR && err->code == GSOUND_ERROR_NOTFOUND) { if (err->domain == GSOUND_ERROR && err->code == GSOUND_ERROR_NOTFOUND) {
g_debug ("Failed to find sound '%s'", fbd_feedback_sound_get_effect (data->feedback)); g_debug ("Failed to find sound '%s'", sound);
} else if (g_error_matches (err, G_IO_ERROR, G_IO_ERROR_CANCELLED)) { } else if (g_error_matches (err, G_IO_ERROR, G_IO_ERROR_CANCELLED)) {
g_debug ("Sound '%s' cancelled", fbd_feedback_sound_get_effect (data->feedback)); g_debug ("Sound '%s' cancelled", sound);
} else { } else {
g_warning ("Failed to play sound '%s': %s", g_warning ("Failed to play sound '%s': %s", sound, err->message);
fbd_feedback_sound_get_effect (data->feedback),
err->message);
} }
} }
@@ -200,6 +202,7 @@ gboolean
fbd_dev_sound_play (FbdDevSound *self, FbdFeedbackSound *feedback, FbdDevSoundPlayedCallback callback) fbd_dev_sound_play (FbdDevSound *self, FbdFeedbackSound *feedback, FbdDevSoundPlayedCallback callback)
{ {
FbdAsyncData *data; FbdAsyncData *data;
const char *filename;
g_return_val_if_fail (FBD_IS_DEV_SOUND (self), FALSE); g_return_val_if_fail (FBD_IS_DEV_SOUND (self), FALSE);
g_return_val_if_fail (GSOUND_IS_CONTEXT (self->ctx), FALSE); g_return_val_if_fail (GSOUND_IS_CONTEXT (self->ctx), FALSE);
@@ -209,13 +212,24 @@ fbd_dev_sound_play (FbdDevSound *self, FbdFeedbackSound *feedback, FbdDevSoundPl
if (!g_hash_table_insert (self->playbacks, feedback, data)) if (!g_hash_table_insert (self->playbacks, feedback, data))
g_warning ("Feedback %p already present", feedback); g_warning ("Feedback %p already present", feedback);
gsound_context_play_full (self->ctx, data->cancel, filename = fbd_feedback_sound_get_file_name (feedback);
(GAsyncReadyCallback) on_sound_play_finished_callback, if (filename) {
data, gsound_context_play_full (self->ctx, data->cancel,
GSOUND_ATTR_EVENT_ID, fbd_feedback_sound_get_effect (feedback), (GAsyncReadyCallback) on_sound_play_finished_callback,
GSOUND_ATTR_EVENT_DESCRIPTION, "Feedbackd sound feedback", data,
GSOUND_ATTR_MEDIA_ROLE, "event", GSOUND_ATTR_MEDIA_FILENAME, filename,
NULL); GSOUND_ATTR_EVENT_DESCRIPTION, "Feedbackd custom sound feedback",
GSOUND_ATTR_MEDIA_ROLE, "event",
NULL);
} else {
gsound_context_play_full (self->ctx, data->cancel,
(GAsyncReadyCallback) on_sound_play_finished_callback,
data,
GSOUND_ATTR_EVENT_ID, fbd_feedback_sound_get_effect (feedback),
GSOUND_ATTR_EVENT_DESCRIPTION, "Feedbackd sound feedback",
GSOUND_ATTR_MEDIA_ROLE, "event",
NULL);
}
return TRUE; return TRUE;
} }