[gnome-builder] unsaved-files: add API to reap old files
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder] unsaved-files: add API to reap old files
- Date: Thu, 25 Jan 2018 02:48:31 +0000 (UTC)
commit 50ca32a8ab1df3dc991563eae206b1d69be85954
Author: Christian Hergert <chergert redhat com>
Date: Wed Jan 24 18:44:47 2018 -0800
unsaved-files: add API to reap old files
This removes the auto-reaping at initialization time (which would happen
since context would be set immediately) and instead adds API to force
a reaping.
Otherwise, we try to reap data dirs before we can build a full path to the
directory containing the buffers.
This fixes an error for which we reap all the old project data in the
.cache instead of just the buffers directory of the current project.
src/libide/buffers/ide-unsaved-files.c | 100 +++++++++++++++++++++------------
src/libide/buffers/ide-unsaved-files.h | 9 +++
2 files changed, 74 insertions(+), 35 deletions(-)
---
diff --git a/src/libide/buffers/ide-unsaved-files.c b/src/libide/buffers/ide-unsaved-files.c
index 7900e0688..f0dce5d1b 100644
--- a/src/libide/buffers/ide-unsaved-files.c
+++ b/src/libide/buffers/ide-unsaved-files.c
@@ -814,38 +814,6 @@ ide_unsaved_files_get_sequence (IdeUnsavedFiles *self)
return ret;
}
-static void
-ide_unsaved_files_set_context (IdeObject *object,
- IdeContext *context)
-{
- IdeUnsavedFiles *self = (IdeUnsavedFiles *)object;
-
- g_assert (IDE_IS_MAIN_THREAD ());
- g_assert (IDE_IS_UNSAVED_FILES (self));
- g_assert (!context || IDE_IS_CONTEXT (context));
-
- IDE_OBJECT_CLASS (ide_unsaved_files_parent_class)->set_context (object, context);
-
- /*
- * Setup a reaper to cleanup old files in case that we left some around
- * after a previous crash.
- */
- if (context != NULL)
- {
- g_autoptr(DzlDirectoryReaper) reaper = NULL;
- g_autoptr(GFile) buffersdir = NULL;
- g_autofree gchar *path = NULL;
-
- reaper = dzl_directory_reaper_new ();
- path = get_buffers_dir (context);
- buffersdir = g_file_new_for_path (path);
- dzl_directory_reaper_add_directory (reaper, buffersdir, G_TIME_SPAN_HOUR);
-
- /* Now cleanup the old files */
- dzl_directory_reaper_execute_async (reaper, NULL, NULL, NULL);
- }
-}
-
static void
ide_unsaved_files_finalize (GObject *object)
{
@@ -863,11 +831,8 @@ static void
ide_unsaved_files_class_init (IdeUnsavedFilesClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
- IdeObjectClass *ide_object_class = IDE_OBJECT_CLASS (klass);
object_class->finalize = ide_unsaved_files_finalize;
-
- ide_object_class->set_context = ide_unsaved_files_set_context;
}
static void
@@ -899,3 +864,68 @@ ide_unsaved_files_clear (IdeUnsavedFiles *self)
g_mutex_unlock (&self->mutex);
}
+
+static void
+ide_unsaved_files_reap_cb (GObject *object,
+ GAsyncResult *result,
+ gpointer user_data)
+{
+ DzlDirectoryReaper *reaper = (DzlDirectoryReaper *)object;
+ g_autoptr(GTask) task = user_data;
+ g_autoptr(GError) error = NULL;
+
+ g_assert (DZL_IS_DIRECTORY_REAPER (reaper));
+ g_assert (G_IS_ASYNC_RESULT (result));
+ g_assert (G_IS_TASK (task));
+
+ if (!dzl_directory_reaper_execute_finish (reaper, result, &error))
+ g_task_return_error (task, g_steal_pointer (&error));
+ else
+ g_task_return_boolean (task, TRUE);
+}
+
+void
+ide_unsaved_files_reap_async (IdeUnsavedFiles *self,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ g_autoptr(GTask) task = NULL;
+ g_autoptr(DzlDirectoryReaper) reaper = NULL;
+ g_autoptr(GFile) buffersdir = NULL;
+ g_autofree gchar *path = NULL;
+ IdeContext *context;
+
+ g_return_if_fail (IDE_IS_UNSAVED_FILES (self));
+ g_return_if_fail (!cancellable || G_IS_CANCELLABLE (cancellable));
+
+ task = g_task_new (self, cancellable, callback, user_data);
+ g_task_set_source_tag (task, ide_unsaved_files_reap_async);
+ g_task_set_priority (task, G_PRIORITY_LOW);
+
+ context = ide_object_get_context (IDE_OBJECT (self));
+ g_return_if_fail (context != NULL);
+
+ reaper = dzl_directory_reaper_new ();
+ path = get_buffers_dir (context);
+ buffersdir = g_file_new_for_path (path);
+
+ dzl_directory_reaper_add_directory (reaper, buffersdir, G_TIME_SPAN_DAY);
+
+ /* Now cleanup the old files */
+ dzl_directory_reaper_execute_async (reaper,
+ cancellable,
+ ide_unsaved_files_reap_cb,
+ g_steal_pointer (&task));
+}
+
+gboolean
+ide_unsaved_files_reap_finish (IdeUnsavedFiles *self,
+ GAsyncResult *result,
+ GError **error)
+{
+ g_return_val_if_fail (IDE_IS_UNSAVED_FILES (self), FALSE);
+ g_return_val_if_fail (G_IS_TASK (result), FALSE);
+
+ return g_task_propagate_boolean (G_TASK (result), error);
+}
diff --git a/src/libide/buffers/ide-unsaved-files.h b/src/libide/buffers/ide-unsaved-files.h
index de5c52b58..b596beebd 100644
--- a/src/libide/buffers/ide-unsaved-files.h
+++ b/src/libide/buffers/ide-unsaved-files.h
@@ -65,5 +65,14 @@ void ide_unsaved_files_clear (IdeUnsavedFiles *self)
IDE_AVAILABLE_IN_ALL
gboolean ide_unsaved_files_contains (IdeUnsavedFiles *self,
GFile *file);
+IDE_AVAILABLE_IN_3_28
+void ide_unsaved_files_reap_async (IdeUnsavedFiles *self,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+IDE_AVAILABLE_IN_3_28
+gboolean ide_unsaved_files_reap_finish (IdeUnsavedFiles *self,
+ GAsyncResult *result,
+ GError **error);
G_END_DECLS
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]