summaryrefslogtreecommitdiff
path: root/logview/src/logview-log.c
diff options
context:
space:
mode:
Diffstat (limited to 'logview/src/logview-log.c')
-rw-r--r--logview/src/logview-log.c101
1 files changed, 46 insertions, 55 deletions
diff --git a/logview/src/logview-log.c b/logview/src/logview-log.c
index 6ff92904..1e236c52 100644
--- a/logview/src/logview-log.c
+++ b/logview/src/logview-log.c
@@ -64,17 +64,14 @@ struct _LogviewLogPrivate {
typedef struct {
LogviewLog *log;
- GError *err;
LogviewCreateCallback callback;
gpointer user_data;
} LoadJob;
typedef struct {
LogviewLog *log;
- GError *err;
const char **lines;
GSList *new_days;
- GCancellable *cancellable;
LogviewNewLinesCallback callback;
gpointer user_data;
} NewLinesJob;
@@ -237,34 +234,35 @@ add_new_days_to_cache (LogviewLog *log, const char **new_lines, guint lines_offs
return new_days;
}
-static gboolean
-new_lines_job_done (gpointer data)
+static void
+new_lines_job_done (GObject *source_object,
+ GAsyncResult *res,
+ gpointer user_data)
{
- NewLinesJob *job = data;
+ NewLinesJob *job = user_data;
+ g_autoptr(GError) error = NULL;
+ gboolean ret;
- if (job->err) {
- job->callback (job->log, NULL, NULL, job->err, job->user_data);
- g_error_free (job->err);
+ ret = g_task_propagate_boolean (G_TASK (res), &error);
+ if (!ret) {
+ job->callback (job->log, NULL, NULL, error, job->user_data);
} else {
- job->callback (job->log, job->lines, job->new_days, job->err, job->user_data);
+ job->callback (job->log, job->lines, job->new_days, error, job->user_data);
}
- g_clear_object (&job->cancellable);
-
g_slist_free_full (job->new_days, (GDestroyNotify) logview_utils_day_free);
/* drop the reference we acquired before */
g_object_unref (job->log);
g_slice_free (NewLinesJob, job);
-
- return FALSE;
}
-static gboolean
-do_read_new_lines (GIOSchedulerJob *io_job,
- GCancellable *cancellable,
- gpointer user_data)
+static void
+do_read_new_lines (GTask *task,
+ gpointer source_object,
+ gpointer user_data,
+ GCancellable *cancellable)
{
/* this runs in a separate thread */
NewLinesJob *job = user_data;
@@ -287,7 +285,7 @@ do_read_new_lines (GIOSchedulerJob *io_job,
g_ptr_array_remove_index (lines, lines->len - 1);
while ((line = g_data_input_stream_read_line (log->priv->stream, NULL,
- job->cancellable, &err)) != NULL)
+ cancellable, &err)) != NULL)
{
g_ptr_array_add (lines, (gpointer) line);
}
@@ -296,8 +294,7 @@ do_read_new_lines (GIOSchedulerJob *io_job,
g_ptr_array_add (lines, NULL);
if (err) {
- job->err = err;
- goto out;
+ g_task_return_error (task, err);
}
log->priv->has_new_lines = FALSE;
@@ -309,23 +306,23 @@ do_read_new_lines (GIOSchedulerJob *io_job,
job->new_days = add_new_days_to_cache (log, job->lines, log->priv->lines_no);
log->priv->lines_no = (lines->len - 1);
-out:
- g_io_scheduler_job_send_to_mainloop_async (io_job,
- new_lines_job_done,
- job, NULL);
- return FALSE;
+ g_task_return_boolean (task, TRUE);
}
-static gboolean
-log_load_done (gpointer user_data)
+static void
+log_load_done (GObject *source_object,
+ GAsyncResult *res,
+ gpointer user_data)
{
LoadJob *job = user_data;
+ g_autoptr(GError) error = NULL;
+ gboolean ret;
- if (job->err) {
- /* the callback will have NULL as log, and the error set */
+ ret = g_task_propagate_boolean (G_TASK (res), &error);
+
+ if (!ret) {
g_object_unref (job->log);
- job->callback (NULL, job->err, job->user_data);
- g_error_free (job->err);
+ job->callback (NULL, error, job->user_data);
} else {
job->callback (job->log, NULL, job->user_data);
setup_file_monitor (job->log);
@@ -333,7 +330,6 @@ log_load_done (gpointer user_data)
g_slice_free (LoadJob, job);
- return FALSE;
}
#ifdef HAVE_ZLIB
@@ -592,11 +588,11 @@ create_zlib_error (void)
}
#endif /* HAVE_ZLIB */
-
-static gboolean
-log_load (GIOSchedulerJob *io_job,
- GCancellable *cancellable,
- gpointer user_data)
+static void
+log_load (GTask *task,
+ gpointer source_object,
+ gpointer user_data,
+ GCancellable *cancellable)
{
/* this runs in a separate i/o thread */
LoadJob *job = user_data;
@@ -772,13 +768,10 @@ log_load (GIOSchedulerJob *io_job,
out:
if (err) {
- job->err = err;
+ g_task_return_error (task, err);
}
- g_io_scheduler_job_send_to_mainloop_async (io_job,
- log_load_done,
- job, NULL);
- return FALSE;
+ g_task_return_boolean (task, TRUE);
}
static void
@@ -786,17 +779,17 @@ log_setup_load (LogviewLog *log, LogviewCreateCallback callback,
gpointer user_data)
{
LoadJob *job;
+ GTask *task;
job = g_slice_new0 (LoadJob);
job->callback = callback;
job->user_data = user_data;
job->log = log;
- job->err = NULL;
- /* push the loading job into another thread */
- g_io_scheduler_push_job (log_load,
- job,
- NULL, 0, NULL);
+ task = g_task_new (log, NULL, log_load_done, job);
+ g_task_set_task_data (task, job, NULL);
+ g_task_run_in_thread (task, log_load);
+ g_object_unref (task);
}
/* public methods */
@@ -808,22 +801,20 @@ logview_log_read_new_lines (LogviewLog *log,
gpointer user_data)
{
NewLinesJob *job;
+ GTask *task;
/* initialize the job struct with sensible values */
job = g_slice_new0 (NewLinesJob);
job->callback = callback;
job->user_data = user_data;
- job->cancellable = (cancellable != NULL) ? g_object_ref (cancellable) : NULL;
job->log = g_object_ref (log);
- job->err = NULL;
job->lines = NULL;
job->new_days = NULL;
- /* push the fetching job into another thread */
- g_io_scheduler_push_job (do_read_new_lines,
- job,
- NULL, 0,
- job->cancellable);
+ task = g_task_new (log, cancellable, new_lines_job_done, job);
+ g_task_set_task_data (task, job, NULL);
+ g_task_run_in_thread (task, do_read_new_lines);
+ g_object_unref (task);
}
void