When enumerating entries, return the requests backend understands
authorThadeu Lima de Souza Cascardo <cascardo@holoscopio.com>
Sun, 12 Oct 2008 01:17:15 +0000 (22:17 -0300)
committerThadeu Lima de Souza Cascardo <cascardo@holoscopio.com>
Sun, 12 Oct 2008 01:17:15 +0000 (22:17 -0300)
To be able to map atom:IDs to backend requests, let the backend return
the mapping when enumerating the entries.

backend/gio/gio.c
include/atompub/backend.h
src/backend.c

index 7f140a6..095345b 100644 (file)
@@ -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
index 087cb25..5a42ae2 100644 (file)
@@ -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 *);
index 2ace3f5..84e2e01 100644 (file)
@@ -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 ();