From 80bebe82fed357e20298ce3ad33bb0959bdec30f Mon Sep 17 00:00:00 2001 From: Evan Paterakis Date: Thu, 25 Jul 2024 21:37:16 +0300 Subject: [PATCH] feat: feedbackd --- meson.build | 9 ++++++++- src/Application.vala | 17 +++++++++++++++- src/Services/Accounts/InstanceAccount.vala | 4 ++++ src/Utils/Feedback.vala | 23 ++++++++++++++++++++++ src/Utils/meson.build | 4 ++++ 5 files changed, 55 insertions(+), 2 deletions(-) create mode 100644 src/Utils/Feedback.vala diff --git a/meson.build b/meson.build index 8d367b27d..a935504b3 100644 --- a/meson.build +++ b/meson.build @@ -85,6 +85,7 @@ libwebp_dep = dependency('libwebp', required: false) libspelling = dependency('libspelling-1', required: false) clapper_dep = dependency('clapper-0.0', required: false) clapper_gtk_dep = dependency('clapper-gtk-0.0', required: false) +feedbackd_dep = dependency('libfeedback-0.0', version: '>=0', required: false) if not libwebp_dep.found () warning('WebP support might be missing, please install webp-pixbuf-loader.') @@ -94,6 +95,11 @@ if meson.get_compiler('vala').version().version_compare('>=0.56.11') add_project_arguments(['--define=VALAC_05611'], language: 'vala') endif +if feedbackd_dep.found () + add_project_arguments(['--define=FEEDBACKD'], language: 'vala') + add_project_arguments('-DLIBFEEDBACK_USE_UNSTABLE_API', language: 'c') +endif + if libspelling.found () add_project_arguments(['--define=LIBSPELLING'], language: 'vala') endif @@ -134,7 +140,8 @@ final_deps = [ libadwaita_dep, meson.get_compiler('c').find_library('m', required: false), clapper_dep, - clapper_gtk_dep + clapper_gtk_dep, + feedbackd_dep ] executable( diff --git a/src/Application.vala b/src/Application.vala index 1edb1c707..1ad5798bb 100644 --- a/src/Application.vala +++ b/src/Application.vala @@ -169,6 +169,14 @@ namespace Tuba { warning (e.message); } + #if FEEDBACKD + try { + Lfb.init (Build.DOMAIN); + } catch (Error e) { + critical (@"Couldn't init libfeedback: $(e.message)"); + } + #endif + #if CLAPPER Clapper.init (ref args); GLib.Environment.set_variable ("CLAPPER_USE_PLAYBIN3", "1", false); @@ -219,7 +227,14 @@ namespace Tuba { network_monitor = NetworkMonitor.get_default (); app = new Application (); - return app.run (args); + + #if FEEDBACKD + var ret = app.run (args); + Lfb.uninit (); + return ret; + #else + return app.run (args); + #endif } private void on_network_change (bool online) { diff --git a/src/Services/Accounts/InstanceAccount.vala b/src/Services/Accounts/InstanceAccount.vala index defb990f8..a31032680 100644 --- a/src/Services/Accounts/InstanceAccount.vala +++ b/src/Services/Accounts/InstanceAccount.vala @@ -602,6 +602,10 @@ public class Tuba.InstanceAccount : API.Account, Streamable { obj.to_toast.begin (this, others, (_obj, res) => { app.send_notification (id, obj.to_toast.end (res)); }); + + #if FEEDBACKD + Tuba.Feedback.trigger_event ("message-new-email"); + #endif // sent_notification_ids.add(id); } diff --git a/src/Utils/Feedback.vala b/src/Utils/Feedback.vala new file mode 100644 index 000000000..a46296813 --- /dev/null +++ b/src/Utils/Feedback.vala @@ -0,0 +1,23 @@ +public class Tuba.Feedback { + public static string sound_theme { get; private set; } + + static construct { + var settings = new GLib.Settings ("org.gnome.desktop.sound"); + sound_theme = settings.get_string ("theme-name"); + } + + public static void trigger_event (string event_name, int timeout = -1) { + if (!Lfb.is_initted () || timeout == 0) return; + + var event = new Lfb.Event (event_name) { + timeout = timeout + }; + event.trigger_feedback_async.begin (null, (obj, res) => { + try { + event.trigger_feedback_async.end (res); + } catch (GLib.Error e) { + warning (@"Error triggering $event_name: $(e.message)"); + } + }); + } +} diff --git a/src/Utils/meson.build b/src/Utils/meson.build index b7931c73b..f82daa137 100644 --- a/src/Utils/meson.build +++ b/src/Utils/meson.build @@ -10,3 +10,7 @@ sources += files( 'Units.vala', 'WebApHandler.vala', ) + +if feedbackd_dep.found () + sources += files ('Feedback.vala') +endif