[latexila/wip/build-tools-revamp] BuildJob: basic run operation
- From: Sébastien Wilmet <swilmet src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [latexila/wip/build-tools-revamp] BuildJob: basic run operation
- Date: Thu, 8 May 2014 20:09:57 +0000 (UTC)
commit 6607dfd876cf5d892d22fc412c81ad09bf4a864d
Author: Sébastien Wilmet <swilmet gnome org>
Date: Thu May 8 22:08:47 2014 +0200
BuildJob: basic run operation
src/liblatexila/latexila-build-job.c | 99 ++++++++++++++++++++++++++++++++++
src/liblatexila/latexila-build-job.h | 13 ++++-
2 files changed, 111 insertions(+), 1 deletions(-)
---
diff --git a/src/liblatexila/latexila-build-job.c b/src/liblatexila/latexila-build-job.c
index f6d458b..4885d8c 100644
--- a/src/liblatexila/latexila-build-job.c
+++ b/src/liblatexila/latexila-build-job.c
@@ -26,12 +26,15 @@
*/
#include "latexila-build-job.h"
+#include "latexila-build-view.h"
#include "latexila-enum-types.h"
struct _LatexilaBuildJobPrivate
{
gchar *command;
LatexilaPostProcessorType post_processor_type;
+
+ GNode *build_messages;
};
enum
@@ -43,6 +46,30 @@ enum
G_DEFINE_TYPE_WITH_PRIVATE (LatexilaBuildJob, latexila_build_job, G_TYPE_OBJECT)
+static gboolean
+free_build_msg (GNode *node,
+ gpointer user_data)
+{
+ latexila_build_msg_free (node->data);
+ return FALSE;
+}
+
+static void
+free_build_messages (GNode *build_messages)
+{
+ if (build_messages != NULL)
+ {
+ g_node_traverse (build_messages,
+ G_POST_ORDER,
+ G_TRAVERSE_ALL,
+ -1,
+ free_build_msg,
+ NULL);
+
+ g_node_destroy (build_messages);
+ }
+}
+
static void
latexila_build_job_get_property (GObject *object,
guint prop_id,
@@ -105,6 +132,7 @@ latexila_build_job_finalize (GObject *object)
LatexilaBuildJob *build_job = LATEXILA_BUILD_JOB (object);
g_free (build_job->priv->command);
+ free_build_messages (build_job->priv->build_messages);
G_OBJECT_CLASS (latexila_build_job_parent_class)->finalize (object);
}
@@ -192,3 +220,74 @@ latexila_build_job_to_xml (LatexilaBuildJob *build_job)
latexila_post_processor_get_name_from_type
(build_job->priv->post_processor_type),
build_job->priv->command != NULL ? build_job->priv->command : "");
}
+
+/**
+ * latexila_build_job_run_async:
+ * @build_job: a build job.
+ * @file: a file.
+ * @cancellable: a #GCancellable object.
+ * @callback: the callback to call when the operation is finished.
+ * @user_data: the data to pass to the callback function.
+ *
+ * Runs asynchronously the build job on a file. When the operation is finished,
+ * @callback will be called. You can then call latexila_build_job_run_finish()
+ * and get the build messages with latexila_build_job_get_messages().
+ */
+void
+latexila_build_job_run_async (LatexilaBuildJob *build_job,
+ GFile *file,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ GTask *task;
+ LatexilaBuildMsg *msg;
+
+ g_return_if_fail (LATEXILA_IS_BUILD_JOB (build_job));
+ g_return_if_fail (G_IS_FILE (file));
+
+ task = g_task_new (build_job, cancellable, callback, user_data);
+
+ free_build_messages (build_job->priv->build_messages);
+
+ msg = latexila_build_msg_new ();
+ msg->text = g_strdup ("build job!");
+
+ build_job->priv->build_messages = g_node_new (msg);
+
+ g_task_return_boolean (task, TRUE);
+ g_object_unref (task);
+}
+
+/**
+ * latexila_build_job_run_finish:
+ * @build_job: a build job.
+ * @result: a #GAsyncResult.
+ *
+ * Finishes the operation started with latexila_build_job_run_async().
+ */
+void
+latexila_build_job_run_finish (LatexilaBuildJob *build_job,
+ GAsyncResult *result)
+{
+ g_return_if_fail (g_task_is_valid (result, build_job));
+
+ g_task_propagate_boolean (G_TASK (result), NULL);
+}
+
+/**
+ * latexila_build_job_get_messages:
+ * @build_job: a build job.
+ *
+ * Gets the last build messages. Call this function only when the run operation
+ * is finished, i.e. after calling latexila_build_job_run_finish().
+ *
+ * Returns: the last build messages.
+ */
+const GNode *
+latexila_build_job_get_messages (LatexilaBuildJob *build_job)
+{
+ g_return_val_if_fail (LATEXILA_IS_BUILD_JOB (build_job), NULL);
+
+ return build_job->priv->build_messages;
+}
diff --git a/src/liblatexila/latexila-build-job.h b/src/liblatexila/latexila-build-job.h
index d09da3d..8caa2ab 100644
--- a/src/liblatexila/latexila-build-job.h
+++ b/src/liblatexila/latexila-build-job.h
@@ -20,7 +20,7 @@
#ifndef __LATEXILA_BUILD_JOB_H__
#define __LATEXILA_BUILD_JOB_H__
-#include <glib-object.h>
+#include <gio/gio.h>
#include "latexila-types.h"
#include "latexila-post-processor.h"
@@ -56,6 +56,17 @@ LatexilaBuildJob * latexila_build_job_clone (LatexilaBuild
gchar * latexila_build_job_to_xml (LatexilaBuildJob *build_job);
+void latexila_build_job_run_async (LatexilaBuildJob *build_job,
+ GFile *file,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+
+void latexila_build_job_run_finish (LatexilaBuildJob *build_job,
+ GAsyncResult *result);
+
+const GNode * latexila_build_job_get_messages (LatexilaBuildJob *build_job);
+
G_END_DECLS
#endif /* __LATEXILA_BUILD_JOB_H__ */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]