1
0
Fork 0
mirror of https://gitlab.gnome.org/GNOME/calls.git synced 2024-06-30 15:49:31 +00:00

provider: Add API to query supported protocols

These are the protocols that the provider plugin may support. The origins
must be queried independently whether or not they support any given protocol.

Example: A SIP origin/account may or may not support the "tel" protocol.
This commit is contained in:
Evangelos Ribeiro Tzaras 2021-04-19 19:07:00 +02:00
parent 6d8c227b24
commit 7ad0f4cdd6
6 changed files with 70 additions and 0 deletions

View file

@ -30,6 +30,10 @@
#include <libpeas/peas.h> #include <libpeas/peas.h>
#include <glib-unix.h> #include <glib-unix.h>
static const char * const supported_protocols[] = {
"tel",
NULL
};
struct _CallsDummyProvider struct _CallsDummyProvider
{ {
@ -95,6 +99,12 @@ calls_dummy_provider_get_origins (CallsProvider *provider)
return G_LIST_MODEL (self->origins); return G_LIST_MODEL (self->origins);
} }
static const char * const *
calls_dummy_provider_get_protocols (CallsProvider *provider)
{
return supported_protocols;
}
static void static void
constructed (GObject *object) constructed (GObject *object)
{ {
@ -134,6 +144,7 @@ calls_dummy_provider_class_init (CallsDummyProviderClass *klass)
provider_class->get_name = calls_dummy_provider_get_name; provider_class->get_name = calls_dummy_provider_get_name;
provider_class->get_status = calls_dummy_provider_get_status; provider_class->get_status = calls_dummy_provider_get_status;
provider_class->get_origins = calls_dummy_provider_get_origins; provider_class->get_origins = calls_dummy_provider_get_origins;
provider_class->get_protocols = calls_dummy_provider_get_protocols;
} }

View file

@ -32,6 +32,11 @@
#include <libpeas/peas.h> #include <libpeas/peas.h>
#include <glib/gi18n.h> #include <glib/gi18n.h>
static const char * const supported_protocols[] = {
"tel",
NULL
};
struct _CallsMMProvider struct _CallsMMProvider
{ {
CallsProvider parent_instance; CallsProvider parent_instance;
@ -354,6 +359,12 @@ calls_mm_provider_get_origins (CallsProvider *provider)
return G_LIST_MODEL (self->origins); return G_LIST_MODEL (self->origins);
} }
static const char * const *
calls_mm_provider_get_protocols (CallsProvider *provider)
{
return supported_protocols;
}
static void static void
constructed (GObject *object) constructed (GObject *object)
{ {
@ -415,6 +426,7 @@ calls_mm_provider_class_init (CallsMMProviderClass *klass)
provider_class->get_name = calls_mm_provider_get_name; provider_class->get_name = calls_mm_provider_get_name;
provider_class->get_status = calls_mm_provider_get_status; provider_class->get_status = calls_mm_provider_get_status;
provider_class->get_origins = calls_mm_provider_get_origins; provider_class->get_origins = calls_mm_provider_get_origins;
provider_class->get_protocols = calls_mm_provider_get_protocols;
} }

View file

@ -34,6 +34,10 @@
#include <glib/gi18n.h> #include <glib/gi18n.h>
#include <libpeas/peas.h> #include <libpeas/peas.h>
static const char * const supported_protocols[] = {
"tel",
NULL
};
struct _CallsOfonoProvider struct _CallsOfonoProvider
{ {
@ -296,6 +300,11 @@ modem_properties_get_name (GVariant *properties)
return NULL; return NULL;
} }
static const char * const *
calls_ofono_provider_get_protocols (CallsProvider *provider)
{
return supported_protocols;
}
static void static void
modem_added_cb (GDBOManager *manager, modem_added_cb (GDBOManager *manager,
@ -525,6 +534,7 @@ calls_ofono_provider_class_init (CallsOfonoProviderClass *klass)
provider_class->get_name = calls_ofono_provider_get_name; provider_class->get_name = calls_ofono_provider_get_name;
provider_class->get_status = calls_ofono_provider_get_status; provider_class->get_status = calls_ofono_provider_get_status;
provider_class->get_origins = calls_ofono_provider_get_origins; provider_class->get_origins = calls_ofono_provider_get_origins;
provider_class->get_protocols = calls_ofono_provider_get_protocols;
} }

View file

@ -40,6 +40,13 @@
#include <sofia-sip/nua.h> #include <sofia-sip/nua.h>
#include <sofia-sip/su_glib.h> #include <sofia-sip/su_glib.h>
static const char * const supported_protocols[] = {
"tel",
"sip",
"sips",
NULL
};
/** /**
* SECTION:sip-provider * SECTION:sip-provider
* @short_description: A #CallsProvider for the SIP protocol * @short_description: A #CallsProvider for the SIP protocol
@ -156,6 +163,12 @@ calls_sip_provider_get_origins (CallsProvider *provider)
return G_LIST_MODEL (self->origins); return G_LIST_MODEL (self->origins);
} }
static const char * const *
calls_sip_provider_get_protocols (CallsProvider *provider)
{
return supported_protocols;
}
static void static void
calls_sip_provider_deinit_sip (CallsSipProvider *self) calls_sip_provider_deinit_sip (CallsSipProvider *self)
@ -319,6 +332,7 @@ calls_sip_provider_class_init (CallsSipProviderClass *klass)
provider_class->get_name = calls_sip_provider_get_name; provider_class->get_name = calls_sip_provider_get_name;
provider_class->get_status = calls_sip_provider_get_status; provider_class->get_status = calls_sip_provider_get_status;
provider_class->get_origins = calls_sip_provider_get_origins; provider_class->get_origins = calls_sip_provider_get_origins;
provider_class->get_protocols = calls_sip_provider_get_protocols;
props[PROP_SIP_STATE] = props[PROP_SIP_STATE] =
g_param_spec_enum ("sip-state", g_param_spec_enum ("sip-state",

View file

@ -72,6 +72,12 @@ calls_provider_real_get_origins (CallsProvider *self)
return NULL; return NULL;
} }
static const char * const *
calls_provider_real_get_protocols (CallsProvider *self)
{
g_assert_not_reached ();
}
static void static void
calls_provider_get_property (GObject *object, calls_provider_get_property (GObject *object,
@ -101,6 +107,7 @@ calls_provider_class_init (CallsProviderClass *klass)
klass->get_name = calls_provider_real_get_name; klass->get_name = calls_provider_real_get_name;
klass->get_status = calls_provider_real_get_status; klass->get_status = calls_provider_real_get_status;
klass->get_origins = calls_provider_real_get_origins; klass->get_origins = calls_provider_real_get_origins;
klass->get_protocols = calls_provider_real_get_protocols;
props[PROP_STATUS] = props[PROP_STATUS] =
g_param_spec_string ("status", g_param_spec_string ("status",
@ -223,3 +230,17 @@ calls_provider_unload_plugin (const char *name)
else else
g_warning ("Can't unload plugin: No plugin with name %s found", name); g_warning ("Can't unload plugin: No plugin with name %s found", name);
} }
/**
* calls_provider_get_protocols:
* @self: A #CallsProvider
*
* Returns: (transfer none): A null-terminated array of strings
*/
const char * const *
calls_provider_get_protocols (CallsProvider *self)
{
g_return_val_if_fail (CALLS_IS_PROVIDER (self), NULL);
return CALLS_PROVIDER_GET_CLASS (self)->get_protocols (self);
}

View file

@ -47,6 +47,7 @@ struct _CallsProviderClass
const char *(*get_name) (CallsProvider *self); const char *(*get_name) (CallsProvider *self);
const char *(*get_status) (CallsProvider *self); const char *(*get_status) (CallsProvider *self);
GListModel *(*get_origins) (CallsProvider *self); GListModel *(*get_origins) (CallsProvider *self);
const char * const *(*get_protocols) (CallsProvider *self);
}; };
const char *calls_provider_get_name (CallsProvider *self); const char *calls_provider_get_name (CallsProvider *self);
@ -54,6 +55,7 @@ const char *calls_provider_get_status (CallsProvider *self);
GListModel *calls_provider_get_origins (CallsProvider *self); GListModel *calls_provider_get_origins (CallsProvider *self);
CallsProvider *calls_provider_load_plugin (const char *name); CallsProvider *calls_provider_load_plugin (const char *name);
void calls_provider_unload_plugin (const char *name); void calls_provider_unload_plugin (const char *name);
const char * const *calls_provider_get_protocols (CallsProvider *self);
G_END_DECLS G_END_DECLS