/* * e-collection-backend-factory.c * * This program 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; either * version 2 of the License, or (at your option) version 3. * * This program 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 the program; if not, see * */ /** * SECTION: e-collection-backend-factory * @include: libebackend/libebackend.h * @short_description: A base class for a data source collection * backend factory * * #ECollectionBackendFactory is a type of #EBackendFactory for creating * #ECollectionBackend instances. **/ #include "e-collection-backend-factory.h" #include #include #include G_DEFINE_TYPE ( ECollectionBackendFactory, e_collection_backend_factory, E_TYPE_BACKEND_FACTORY) static ESourceRegistryServer * collection_backend_factory_get_server (EBackendFactory *factory) { EExtensible *extensible; extensible = e_extension_get_extensible (E_EXTENSION (factory)); return E_SOURCE_REGISTRY_SERVER (extensible); } static const gchar * collection_backend_factory_get_hash_key (EBackendFactory *factory) { ECollectionBackendFactoryClass *class; class = E_COLLECTION_BACKEND_FACTORY_GET_CLASS (factory); g_return_val_if_fail (class->factory_name != NULL, NULL); return class->factory_name; } static EBackend * collection_backend_factory_new_backend (EBackendFactory *factory, ESource *source) { ECollectionBackendFactoryClass *class; ESourceRegistryServer *server; class = E_COLLECTION_BACKEND_FACTORY_GET_CLASS (factory); g_return_val_if_fail (g_type_is_a ( class->backend_type, E_TYPE_COLLECTION_BACKEND), NULL); server = collection_backend_factory_get_server (factory); return g_object_new ( class->backend_type, "server", server, "source", source, NULL); } static void collection_backend_factory_prepare_mail (ECollectionBackendFactory *factory, ESource *mail_account_source, ESource *mail_identity_source, ESource *mail_transport_source) { ESource *source; ESourceExtension *extension; const gchar *extension_name; /* This does only very basic configuration. * The rest is for subclasses to implement. */ source = mail_account_source; extension_name = E_SOURCE_EXTENSION_MAIL_ACCOUNT; extension = e_source_get_extension (source, extension_name); e_source_mail_account_set_identity_uid ( E_SOURCE_MAIL_ACCOUNT (extension), e_source_get_uid (mail_identity_source)); source = mail_identity_source; /* This just makes sure the extension is present * so the source is recognized as a mail identity. */ extension_name = E_SOURCE_EXTENSION_MAIL_IDENTITY; e_source_get_extension (source, extension_name); extension_name = E_SOURCE_EXTENSION_MAIL_SUBMISSION; extension = e_source_get_extension (source, extension_name); e_source_mail_submission_set_transport_uid ( E_SOURCE_MAIL_SUBMISSION (extension), e_source_get_uid (mail_transport_source)); source = mail_transport_source; /* This just makes sure the extension is present * so the source is recognized as a mail transport. */ extension_name = E_SOURCE_EXTENSION_MAIL_TRANSPORT; e_source_get_extension (source, extension_name); } static void e_collection_backend_factory_class_init (ECollectionBackendFactoryClass *class) { EExtensionClass *extension_class; EBackendFactoryClass *factory_class; extension_class = E_EXTENSION_CLASS (class); extension_class->extensible_type = E_TYPE_SOURCE_REGISTRY_SERVER; factory_class = E_BACKEND_FACTORY_CLASS (class); factory_class->get_hash_key = collection_backend_factory_get_hash_key; factory_class->new_backend = collection_backend_factory_new_backend; class->factory_name = "none"; class->backend_type = E_TYPE_COLLECTION_BACKEND; class->prepare_mail = collection_backend_factory_prepare_mail; } static void e_collection_backend_factory_init (ECollectionBackendFactory *factory) { } /** * e_collection_backend_factory_prepare_mail: * @factory: an #ECollectionBackendFactory * @mail_account_source: an #ESource to hold mail account information * @mail_identity_source: an #ESource to hold mail identity information * @mail_transport_source: an #ESource to hold mail transport information * * Convenience function to populate a set of #ESource instances with mail * account information to be added to an #ECollectionBackend. This is mainly * used for vendor-specific collection backends like Google or Yahoo! where * the host, port, and security details are known ahead of time and only * user-specific information needs to be filled in. * * Since: 3.6 **/ void e_collection_backend_factory_prepare_mail (ECollectionBackendFactory *factory, ESource *mail_account_source, ESource *mail_identity_source, ESource *mail_transport_source) { ECollectionBackendFactoryClass *class; g_return_if_fail (E_IS_COLLECTION_BACKEND_FACTORY (factory)); g_return_if_fail (E_IS_SOURCE (mail_account_source)); g_return_if_fail (E_IS_SOURCE (mail_identity_source)); g_return_if_fail (E_IS_SOURCE (mail_transport_source)); class = E_COLLECTION_BACKEND_FACTORY_GET_CLASS (factory); g_return_if_fail (class->prepare_mail != NULL); class->prepare_mail ( factory, mail_account_source, mail_identity_source, mail_transport_source); }