diff --git a/src/calls-account-provider.c b/src/calls-account-provider.c new file mode 100644 index 0000000..1ff474f --- /dev/null +++ b/src/calls-account-provider.c @@ -0,0 +1,110 @@ +/* + * Copyright (C) 2021 Purism SPC + * + * This file is part of Calls. + * + * Calls is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Calls is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Calls. If not, see . + * + * Author: Evangelos Ribeiro Tzaras + * + * SPDX-License-Identifier: GPL-3.0-or-later + * + */ + +#include "calls-account-provider.h" + +/** + * SECTION:account-provider + * @short_description: An interface for CallsProvider to use online accounts + * @Title: CallsOnlineAccount + * + * #CallsAccountProvider is an interface that should be implemented by a + * #CallsProvider when it provides accounts. See #CallsAccount and + * #CallsCredentials. + */ + +G_DEFINE_INTERFACE (CallsAccountProvider, calls_account_provider, CALLS_TYPE_PROVIDER) + + +static void +calls_account_provider_default_init (CallsAccountProviderInterface *iface) +{ +} + +/** + * calls_account_provider_add_account: + * @self: A #CallsAccountProvider + * @credentials: A #CallsCredentials + * + * Add an account. + * + * Returns: %TRUE if successfully added, %FALSE otherwise + */ +gboolean +calls_account_provider_add_account (CallsAccountProvider *self, + CallsCredentials *credentials) +{ + CallsAccountProviderInterface *iface; + + g_return_val_if_fail (CALLS_IS_ACCOUNT_PROVIDER (self), FALSE); + + iface = CALLS_ACCOUNT_PROVIDER_GET_IFACE (self); + g_return_val_if_fail (iface->add_account != NULL, FALSE); + + return iface->add_account (self, credentials); +} + +/** + * calls_account_provider_remove_account: + * @self: A #CallsAccountProvider + * @credentials: A #CallsCredentials + * + * Removes an account. + * + * Returns: %TRUE if successfully removed, %FALSE otherwise + */ +gboolean +calls_account_provider_remove_account (CallsAccountProvider *self, + CallsCredentials *credentials) +{ + CallsAccountProviderInterface *iface; + + g_return_val_if_fail (CALLS_IS_ACCOUNT_PROVIDER (self), FALSE); + + iface = CALLS_ACCOUNT_PROVIDER_GET_IFACE (self); + g_return_val_if_fail (iface->remove_account != NULL, FALSE); + + return iface->remove_account (self, credentials); +} + +/** + * calls_account_provider_get_account: + * @self: A #CallsAccountProvider + * @credentials: A #CallsCredentials + * + * Get the account which is using #CallsCredentials + */ +CallsAccount * +calls_account_provider_get_account (CallsAccountProvider *self, + CallsCredentials *credentials) +{ + CallsAccountProviderInterface *iface; + + g_return_val_if_fail (CALLS_IS_ACCOUNT_PROVIDER (self), NULL); + + iface = CALLS_ACCOUNT_PROVIDER_GET_IFACE (self); + g_return_val_if_fail (iface->get_account != NULL, NULL); + + return iface->get_account (self, credentials); +} diff --git a/src/calls-account-provider.h b/src/calls-account-provider.h new file mode 100644 index 0000000..7bd8bbf --- /dev/null +++ b/src/calls-account-provider.h @@ -0,0 +1,58 @@ +/* + * Copyright (C) 2021 Purism SPC + * + * This file is part of Calls. + * + * Calls is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Calls is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Calls. If not, see . + * + * Author: Evangelos Ribeiro Tzaras + * + * SPDX-License-Identifier: GPL-3.0-or-later + * + */ + +#pragma once + +#include "calls-account.h" +#include "calls-credentials.h" +#include "calls-provider.h" + +#include + +G_BEGIN_DECLS + +#define CALLS_TYPE_ACCOUNT_PROVIDER (calls_account_provider_get_type ()) + +G_DECLARE_INTERFACE (CallsAccountProvider, calls_account_provider, CALLS, ACCOUNT_PROVIDER, CallsProvider); + +struct _CallsAccountProviderInterface +{ + GTypeInterface parent_iface; + + gboolean (*add_account) (CallsAccountProvider *self, + CallsCredentials *credentials); + gboolean (*remove_account) (CallsAccountProvider *self, + CallsCredentials *credentials); + CallsAccount *(*get_account) (CallsAccountProvider *self, + CallsCredentials *credentials); +}; + +gboolean calls_account_provider_add_account (CallsAccountProvider *self, + CallsCredentials *credentials); +gboolean calls_account_provider_remove_account (CallsAccountProvider *self, + CallsCredentials *credentials); +CallsAccount *calls_account_provider_get_account (CallsAccountProvider *self, + CallsCredentials *credentials); + +G_END_DECLS diff --git a/src/meson.build b/src/meson.build index eaadef9..257c368 100644 --- a/src/meson.build +++ b/src/meson.build @@ -112,6 +112,7 @@ calls_sources = files(['calls-message-source.c', 'calls-message-source.h', 'calls-contacts-row.c', 'calls-contacts-row.h', 'calls-credentials.c', 'calls-credentials.h', 'calls-account.c', 'calls-account.h', + 'calls-account-provider.c', 'calls-account-provider.h', ]) + wayland_sources + calls_generated_sources calls_config_data = config_data