From c25935607ee765bd8d391dd3fd92e98bad435924 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Mon, 11 Jun 2012 14:22:02 -0400 Subject: [PATCH] Add e_collection_backend_get_cache_dir(). Returns the UID-based cache directory for an ECollectionBackend. This will tie into EServerSideSource's "write-directory" property. --- .../reference/libebackend/libebackend-sections.txt | 1 + libebackend/e-collection-backend.c | 37 +++++++++++++++++++++- libebackend/e-collection-backend.h | 2 ++ 3 files changed, 39 insertions(+), 1 deletion(-) diff --git a/docs/reference/libebackend/libebackend-sections.txt b/docs/reference/libebackend/libebackend-sections.txt index 271e31d..4619a18 100644 --- a/docs/reference/libebackend/libebackend-sections.txt +++ b/docs/reference/libebackend/libebackend-sections.txt @@ -114,6 +114,7 @@ e_backend_factory_get_type ECollectionBackend e_collection_backend_new_child e_collection_backend_ref_server +e_collection_backend_get_cache_dir e_collection_backend_list_calendar_sources e_collection_backend_list_contacts_sources e_collection_backend_list_mail_sources diff --git a/libebackend/e-collection-backend.c b/libebackend/e-collection-backend.c index 4aacd3b..caa9445 100644 --- a/libebackend/e-collection-backend.c +++ b/libebackend/e-collection-backend.c @@ -54,6 +54,8 @@ struct _ECollectionBackendPrivate { GWeakRef server; GQueue children; + gchar *cache_dir; + /* Remembers memory-only data source UIDs * based on a server-assigned resource ID. */ gchar *collection_filename; @@ -463,6 +465,8 @@ collection_backend_constructed (GObject *object) ESourceRegistryServer *server; ESource *source; GNode *node; + const gchar *collection_uid; + const gchar *user_cache_dir; gulong handler_id; backend = E_COLLECTION_BACKEND (object); @@ -471,11 +475,20 @@ collection_backend_constructed (GObject *object) G_OBJECT_CLASS (e_collection_backend_parent_class)-> constructed (object); + source = e_backend_get_source (E_BACKEND (backend)); + collection_backend_load_collection_file (backend); + /* Determine the backend's cache directory. */ + + user_cache_dir = e_get_user_cache_dir (); + collection_uid = e_source_get_uid (source); + backend->priv->cache_dir = g_build_filename ( + user_cache_dir, "sources", collection_uid, NULL); + g_mkdir_with_parents (backend->priv->cache_dir, 0700); + /* Emit "child-added" signals for the children we already have. */ - source = e_backend_get_source (E_BACKEND (backend)); node = e_server_side_source_get_node (E_SERVER_SIDE_SOURCE (source)); node = g_node_first_child (node); @@ -704,6 +717,28 @@ e_collection_backend_ref_server (ECollectionBackend *backend) } /** + * e_collection_backend_get_cache_dir: + * @backend: an #ECollectionBackend + * + * Returns the private cache directory path for @backend, which is named + * after the #ESource:uid of @backend's collection #EBackend:source. + * + * The cache directory is meant to store key files for backend-created + * data sources. See also: e_server_side_source_set_write_directory() + * + * Returns: the cache directory for @backend + * + * Since: 3.6 + **/ +const gchar * +e_collection_backend_get_cache_dir (ECollectionBackend *backend) +{ + g_return_val_if_fail (E_IS_COLLECTION_BACKEND (backend), NULL); + + return backend->priv->cache_dir; +} + +/** * e_collection_backend_list_calendar_sources: * @backend: an #ECollectionBackend * diff --git a/libebackend/e-collection-backend.h b/libebackend/e-collection-backend.h index 169864d..6670480 100644 --- a/libebackend/e-collection-backend.h +++ b/libebackend/e-collection-backend.h @@ -85,6 +85,8 @@ ESource * e_collection_backend_new_child (ECollectionBackend *backend, const gchar *resource_id); struct _ESourceRegistryServer * e_collection_backend_ref_server (ECollectionBackend *backend); +const gchar * e_collection_backend_get_cache_dir + (ECollectionBackend *backend); GList * e_collection_backend_list_calendar_sources (ECollectionBackend *backend); GList * e_collection_backend_list_contacts_sources -- 2.7.4