/* * e-backend-factory.c * * This library is free software: you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation. * * This library 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 Lesser General Public License * for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this library. If not, see . * */ /** * SECTION: e-backend-factory * @include: libebackend/libebackend.h * @short_description: An abstract base class for backend factories * * An #EBackendFactory's job is to create an #EBackend instance for a * given #ESource. #EBackendFactory and #EBackend should be subclassed * together, so that each type of #EBackendFactory creates a unique type * of #EBackend. * * Each #EBackendFactory subclass must define a hash key to uniquely * identify itself among other #EBackendFactory subclasses. #EDataFactory * then services incoming connection requests by deriving a hash key from * the requested #ESource, using the dervied hash key to find an appropriate * #EBackendFactory, and creating an #EBackend instance from that factory * to pair with the requested #ESource. **/ #include "e-backend-factory.h" #include #include #include G_DEFINE_ABSTRACT_TYPE (EBackendFactory, e_backend_factory, E_TYPE_EXTENSION) static void e_backend_factory_class_init (EBackendFactoryClass *class) { EExtensionClass *extension_class; extension_class = E_EXTENSION_CLASS (class); extension_class->extensible_type = E_TYPE_DATA_FACTORY; } static void e_backend_factory_init (EBackendFactory *factory) { } /** * e_backend_factory_get_hash_key: * @factory: an #EBackendFactory * * Returns a hash key which uniquely identifies @factory. * * Since only one instance of each #EBackendFactory subclass is ever created, * the hash key need only be unique among subclasses, not among instances of * each subclass. * * Returns: a hash key which uniquely identifies @factory * * Since: 3.4 **/ const gchar * e_backend_factory_get_hash_key (EBackendFactory *factory) { EBackendFactoryClass *class; g_return_val_if_fail (E_IS_BACKEND_FACTORY (factory), NULL); class = E_BACKEND_FACTORY_GET_CLASS (factory); g_return_val_if_fail (class->get_hash_key != NULL, NULL); return class->get_hash_key (factory); } /** * e_backend_factory_new_backend: * @factory: an #EBackendFactory * @source: an #ESource * * Returns a new #EBackend instance for @source. * * Returns: a new #EBackend instance for @source * * Since: 3.4 **/ EBackend * e_backend_factory_new_backend (EBackendFactory *factory, ESource *source) { EBackendFactoryClass *class; g_return_val_if_fail (E_IS_BACKEND_FACTORY (factory), NULL); g_return_val_if_fail (E_IS_SOURCE (source), NULL); class = E_BACKEND_FACTORY_GET_CLASS (factory); g_return_val_if_fail (class->new_backend != NULL, NULL); return class->new_backend (factory, source); } /** * e_backend_factory_get_module_filename: * @factory: an #EBackendFactory * * Returns the filename of the shared library for the module used * to load the backends provided by @factory. * * Returns: the filename for the module associated to the @factory * * Since: 3.16 **/ const gchar * e_backend_factory_get_module_filename (EBackendFactory *factory) { EBackendFactoryClass *class; g_return_val_if_fail (E_IS_BACKEND_FACTORY (factory), NULL); class = E_BACKEND_FACTORY_GET_CLASS (factory); g_return_val_if_fail (class->e_module != NULL, NULL); return e_module_get_filename (class->e_module); } /** * e_backend_factory_share_subprocess: * @factory: an #EBackendFactory * * Returns TRUE if the @factory wants to share the subprocess * for all backends provided by itself. Otherwise, returns FALSE. * * Returns: TRUE if the @factory shares the subprocess for all its * backends. Otherwise, FALSE. * * Since: 3.16 **/ gboolean e_backend_factory_share_subprocess (EBackendFactory *factory) { EBackendFactoryClass *class; g_return_val_if_fail (E_IS_BACKEND_FACTORY (factory), FALSE); class = E_BACKEND_FACTORY_GET_CLASS (factory); return class->share_subprocess; }