From: Thadeu Lima de Souza Cascardo Date: Sun, 12 Oct 2008 01:17:15 +0000 (-0300) Subject: When enumerating entries, return the requests backend understands X-Git-Url: http://git.cascardo.eti.br/?p=cascardo%2Fatompub.git;a=commitdiff_plain;h=0b5e74111b3dabb856855efc3f08318608d1b9bd When enumerating entries, return the requests backend understands To be able to map atom:IDs to backend requests, let the backend return the mapping when enumerating the entries. --- diff --git a/backend/gio/gio.c b/backend/gio/gio.c index 7f140a6..095345b 100644 --- a/backend/gio/gio.c +++ b/backend/gio/gio.c @@ -67,7 +67,8 @@ gio_atom_retrieve_entry (AtomCtx *ctx, AtomID *id) } static void -gio_enumerate_entries (AtomCtx *ctx, AtomEntry ***entries, size_t *len) +gio_enumerate_entries (AtomCtx *ctx, char ***reqs, AtomEntry ***entries, + size_t *len) { GFile *dir; GFileEnumerator *enumerator; @@ -79,6 +80,7 @@ gio_enumerate_entries (AtomCtx *ctx, AtomEntry ***entries, size_t *len) gchar *name; gchar *filename; GPtrArray *array; + GPtrArray *filenames; root = atom_config_get_str (ctx, "gio", "root"); dir = g_file_new_for_path (root); error = NULL; @@ -92,6 +94,7 @@ gio_enumerate_entries (AtomCtx *ctx, AtomEntry ***entries, size_t *len) return; } array = g_ptr_array_new (); + filenames = g_ptr_array_new (); while ((info = g_file_enumerator_next_file (enumerator, NULL, NULL)) != NULL) { name = g_file_info_get_name (info); @@ -102,6 +105,7 @@ gio_enumerate_entries (AtomCtx *ctx, AtomEntry ***entries, size_t *len) if (entry) { g_ptr_array_add (array, entry); + g_ptr_array_add (filenames, g_strdup (name)); } else { @@ -113,11 +117,14 @@ gio_enumerate_entries (AtomCtx *ctx, AtomEntry ***entries, size_t *len) g_object_unref (enumerator); g_object_unref (dir); g_free (root); + if (reqs) + *reqs = filenames->pdata; if (entries) *entries = array->pdata; if (len) *len = array->len; g_ptr_array_free (array, FALSE); + g_ptr_array_free (filenames, FALSE); } static int diff --git a/include/atompub/backend.h b/include/atompub/backend.h index 087cb25..5a42ae2 100644 --- a/include/atompub/backend.h +++ b/include/atompub/backend.h @@ -32,10 +32,11 @@ void atom_backend_delete (AtomBackend *); void atom_backend_retrieve_entry_set (AtomBackend *, AtomEntry * (AtomCtx *, AtomID *)); void atom_backend_enumerate_entries_set (AtomBackend *, - void (AtomCtx *, AtomEntry ***, size_t *)); + void (AtomCtx *, char ***, + AtomEntry ***, size_t *)); void atom_backend_is_feed_set (AtomBackend *, int (AtomCtx *, AtomID *)); AtomEntry * atom_retrieve_entry (AtomCtx *, AtomID *); -void atom_enumerate_entries (AtomCtx *, AtomEntry ***, size_t *); +void atom_enumerate_entries (AtomCtx *, char ***, AtomEntry ***, size_t *); int atom_is_feed (AtomCtx *, AtomID *); AtomFeed * atom_retrieve_feed (AtomCtx *); AtomResource *atom_retrieve_resource (AtomCtx *, AtomID *); diff --git a/src/backend.c b/src/backend.c index 2ace3f5..84e2e01 100644 --- a/src/backend.c +++ b/src/backend.c @@ -26,7 +26,7 @@ struct _atom_backend { AtomEntry * (*retrieve_entry) (AtomCtx *, AtomID *); - void (*enumerate_entries) (AtomCtx *, AtomEntry ***, size_t *); + void (*enumerate_entries) (AtomCtx *, char ***, AtomEntry ***, size_t *); int (*is_feed) (AtomCtx *, AtomID *); }; @@ -57,7 +57,9 @@ atom_backend_retrieve_entry_set (AtomBackend *backend, void atom_backend_enumerate_entries_set (AtomBackend *backend, void enumerate_entries (AtomCtx *, - AtomEntry ***, size_t*)) + char ***, + AtomEntry ***, + size_t *)) { backend->enumerate_entries = enumerate_entries; } @@ -80,15 +82,18 @@ atom_retrieve_entry (AtomCtx *ctx, AtomID *id) } void -atom_backend_enumerate_entries (AtomCtx *ctx, AtomEntry *** entries, size_t *len) +atom_backend_enumerate_entries (AtomCtx *ctx, char *** reqs, + AtomEntry *** entries, size_t *len) { AtomBackend *backend; backend = atom_backend (ctx); if (backend && backend->enumerate_entries) { - backend->enumerate_entries (ctx, entries, len); + backend->enumerate_entries (ctx, reqs, entries, len); return; } + if (reqs) + *reqs = NULL; if (entries) *entries = NULL; if (len) @@ -122,7 +127,7 @@ atom_retrieve_feed (AtomCtx *ctx) AtomFeed *feed; AtomEntry **entries; size_t len; - atom_backend_enumerate_entries (ctx, &entries, &len); + atom_backend_enumerate_entries (ctx, NULL, &entries, &len); if (atom_error_get (ctx) != NULL) return NULL; feed = atom_feed_new ();