ringer: Never cancel async DBus calls and refactor

Previously our code assumed that g_cancellable_cancel() the async DBus
calls to libfeedback would guarantee that the underlying operation would
not be performed (i.e. triggering or ending a feedback).

However the endless ringing exhibited in #470 shows this assumption not
to hold. Therefore we avoid using g_cancellable_cancel () completely and
default to waiting for the async operation to finish.

update_ring () now sets the target state by inspecting managed calls and
the main logic will now step towards the target state:
Changing from regular/loud to soft/quiet ringing (or vice versa)
requires we first end feedback before (re)triggering it.

Additionally the "is-quiet" and "is-ringing" properties are replaced by
a new "state" property to allow changing the combination atomically.

Closes: #470
This commit is contained in:
Evangelos Ribeiro Tzaras
2022-09-13 12:25:15 +02:00
parent 43353d48a3
commit 1056cba62a
4 changed files with 231 additions and 257 deletions

View File

@@ -65,6 +65,7 @@ calls_enum_headers = files(['calls-call.h',
'calls-ussd.h',
'calls-manager.h',
'calls-account.h',
'calls-ringer.h',
])
calls_enum_sources = gnome.mkenums_simple('enum-types',
sources : calls_enum_headers)