Initialize all frontend functions when creating a new frontend
[cascardo/atompub.git] / atom / frontend.c
index ed0faad..b634c38 100644 (file)
@@ -27,6 +27,10 @@ struct _atom_frontend
 {
   void (*map_entries) (AtomCtx *, char **, AtomEntry **, size_t);
   int  (*is_feed) (AtomCtx *, char *);
+  AtomRequest * (*get_request) (AtomCtx *);
+  void (*handle_error) (AtomCtx *);
+  void (*handle_entry) (AtomCtx *, AtomEntry *);
+  void (*handle_feed) (AtomCtx *, AtomFeed *);
 };
 
 AtomFrontend *
@@ -36,6 +40,10 @@ atom_frontend_new ()
   frontend = g_slice_new (AtomFrontend);
   frontend->map_entries = NULL;
   frontend->is_feed = NULL;
+  frontend->get_request = NULL;
+  frontend->handle_error = NULL;
+  frontend->handle_entry = NULL;
+  frontend->handle_feed = NULL;
   return frontend;
 }
 
@@ -62,6 +70,34 @@ atom_frontend_is_feed_set (AtomFrontend *frontend,
   frontend->is_feed = is_feed;
 }
 
+void
+atom_frontend_get_request_set (AtomFrontend *frontend,
+                              AtomRequest * get_request (AtomCtx *))
+{
+  frontend->get_request = get_request;
+}
+
+void
+atom_frontend_handle_error_set (AtomFrontend *frontend,
+                               void handle_error (AtomCtx *))
+{
+  frontend->handle_error = handle_error;
+}
+
+void
+atom_frontend_handle_entry_set (AtomFrontend *frontend,
+                               void handle_entry (AtomCtx *, AtomEntry *))
+{
+  frontend->handle_entry = handle_entry;
+}
+
+void
+atom_frontend_handle_feed_set (AtomFrontend *frontend,
+                              void handle_feed (AtomCtx *, AtomFeed *))
+{
+  frontend->handle_feed = handle_feed;
+}
+
 void
 atom_frontend_map_entries (AtomCtx *ctx, char ** reqs,
                           AtomEntry ** entries, size_t len)
@@ -90,3 +126,48 @@ atom_is_feed (AtomCtx *ctx, char *req)
    */
   return 0;
 }
+
+AtomRequest *
+atom_get_request (AtomCtx *ctx)
+{
+  AtomFrontend *frontend;
+  frontend = atom_frontend (ctx);
+  if (frontend && frontend->get_request)
+    {
+      return frontend->get_request (ctx);
+    }
+  return NULL;
+}
+
+void
+atom_handle_error (AtomCtx *ctx)
+{
+  AtomFrontend *frontend;
+  frontend = atom_frontend (ctx);
+  if (frontend && frontend->handle_error)
+    {
+      frontend->handle_error (ctx);
+    }
+}
+
+void
+atom_handle_entry (AtomCtx *ctx, AtomEntry *entry)
+{
+  AtomFrontend *frontend;
+  frontend = atom_frontend (ctx);
+  if (frontend && frontend->handle_entry)
+    {
+      frontend->handle_entry (ctx, entry);
+    }
+}
+
+void
+atom_handle_feed (AtomCtx *ctx, AtomFeed *feed)
+{
+  AtomFrontend *frontend;
+  frontend = atom_frontend (ctx);
+  if (frontend && frontend->handle_feed)
+    {
+      frontend->handle_feed (ctx, feed);
+    }
+}