/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ /* * GData Client * Copyright (C) Philip Withnall 2010 * * GData Client 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.1 of the License, or (at your option) any later version. * * GData Client 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 GData Client. If not, see . */ #ifndef GDATA_BATCH_OPERATION_H #define GDATA_BATCH_OPERATION_H #include #include #include #include #include G_BEGIN_DECLS /** * GDATA_LINK_BATCH: * * The relation type URI for the batch operation URI for a given #GDataFeed. * * For more information, see the GData specification. * * Since: 0.7.0 */ #define GDATA_LINK_BATCH "http://schemas.google.com/g/2005#batch" /** * GDataBatchOperationType: * @GDATA_BATCH_OPERATION_QUERY: a query operation * @GDATA_BATCH_OPERATION_INSERTION: an insertion operation * @GDATA_BATCH_OPERATION_UPDATE: an update operation * @GDATA_BATCH_OPERATION_DELETION: a deletion operation * * Indicates which type of batch operation caused the current #GDataBatchOperationCallback to be called. * * Since: 0.7.0 */ typedef enum { GDATA_BATCH_OPERATION_QUERY = 0, GDATA_BATCH_OPERATION_INSERTION, GDATA_BATCH_OPERATION_UPDATE, GDATA_BATCH_OPERATION_DELETION } GDataBatchOperationType; /** * GDataBatchOperationCallback: * @operation_id: the operation ID returned from gdata_batch_operation_add_*() * @operation_type: the type of operation which was requested * @entry: the result of the operation, or %NULL * @error: a #GError describing any error which occurred, or %NULL * @user_data: user data passed to the callback * * Callback function called once for each operation in a batch operation run. The operation is identified by @operation_id and @operation_type (where * @operation_id is the ID returned by the relevant call to gdata_batch_operation_add_query(), gdata_batch_operation_add_insertion(), * gdata_batch_operation_add_update() or gdata_batch_operation_add_deletion(), and @operation_type shows which one of the above was called). * * If the operation was successful, the resulting #GDataEntry will be passed in as @entry, and @error will be %NULL. Otherwise, @entry will be %NULL * and a descriptive error will be in @error. If @operation_type is %GDATA_BATCH_OPERATION_DELETION, @entry will always be %NULL, and @error will be * %NULL or non-%NULL as appropriate. * * If the callback code needs to retain a copy of @entry, it must be referenced (with g_object_ref()). Similarly, @error is owned by the calling code, * and must not be freed. * * The callback is called in the main thread, and there is no guarantee on the order in which the callbacks for the operations in a run are executed, * or whether they will be called in a timely manner. It is, however, guaranteed that they will all be called before the #GAsyncReadyCallback which * signals the completion of the run (if initiated with gdata_batch_operation_run_async()) is called; or gdata_batch_operation_run() returns (if * initiated synchronously). * * Since: 0.7.0 */ typedef void (*GDataBatchOperationCallback) (guint operation_id, GDataBatchOperationType operation_type, GDataEntry *entry, GError *error, gpointer user_data); #define GDATA_TYPE_BATCH_OPERATION (gdata_batch_operation_get_type ()) #define GDATA_BATCH_OPERATION(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GDATA_TYPE_BATCH_OPERATION, GDataBatchOperation)) #define GDATA_BATCH_OPERATION_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), GDATA_TYPE_BATCH_OPERATION, GDataBatchOperationClass)) #define GDATA_IS_BATCH_OPERATION(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GDATA_TYPE_BATCH_OPERATION)) #define GDATA_IS_BATCH_OPERATION_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GDATA_TYPE_BATCH_OPERATION)) #define GDATA_BATCH_OPERATION_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GDATA_TYPE_BATCH_OPERATION, GDataBatchOperationClass)) typedef struct _GDataBatchOperationPrivate GDataBatchOperationPrivate; /** * GDataBatchOperation: * * All the fields in the #GDataBatchOperation structure are private and should never be accessed directly. * * Since: 0.7.0 */ typedef struct { GObject parent; GDataBatchOperationPrivate *priv; } GDataBatchOperation; /** * GDataBatchOperationClass: * * All the fields in the #GDataBatchOperationClass structure are private and should never be accessed directly. * * Since: 0.7.0 */ typedef struct { /*< private >*/ GObjectClass parent; /*< private >*/ /* Padding for future expansion */ void (*_g_reserved0) (void); void (*_g_reserved1) (void); void (*_g_reserved2) (void); void (*_g_reserved3) (void); void (*_g_reserved4) (void); void (*_g_reserved5) (void); } GDataBatchOperationClass; GType gdata_batch_operation_get_type (void) G_GNUC_CONST; GDataService *gdata_batch_operation_get_service (GDataBatchOperation *self) G_GNUC_PURE; GDataAuthorizationDomain *gdata_batch_operation_get_authorization_domain (GDataBatchOperation *self) G_GNUC_PURE; const gchar *gdata_batch_operation_get_feed_uri (GDataBatchOperation *self) G_GNUC_PURE; guint gdata_batch_operation_add_query (GDataBatchOperation *self, const gchar *id, GType entry_type, GDataBatchOperationCallback callback, gpointer user_data); guint gdata_batch_operation_add_insertion (GDataBatchOperation *self, GDataEntry *entry, GDataBatchOperationCallback callback, gpointer user_data); guint gdata_batch_operation_add_update (GDataBatchOperation *self, GDataEntry *entry, GDataBatchOperationCallback callback, gpointer user_data); guint gdata_batch_operation_add_deletion (GDataBatchOperation *self, GDataEntry *entry, GDataBatchOperationCallback callback, gpointer user_data); gboolean gdata_batch_operation_run (GDataBatchOperation *self, GCancellable *cancellable, GError **error); void gdata_batch_operation_run_async (GDataBatchOperation *self, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data); gboolean gdata_batch_operation_run_finish (GDataBatchOperation *self, GAsyncResult *async_result, GError **error); G_END_DECLS #endif /* !GDATA_BATCH_OPERATION_H */