From c663b234f90d1b6b5c5eea53d309d5295342b1e0 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 20 Jan 2010 11:14:21 -0600 Subject: Allocating memory and objects in the lur world --- src/application-service-lru-file.c | 69 +++++++++++++++++++++++++++++++++++++- 1 file changed, 68 insertions(+), 1 deletion(-) diff --git a/src/application-service-lru-file.c b/src/application-service-lru-file.c index 47cfab9..a041453 100644 --- a/src/application-service-lru-file.c +++ b/src/application-service-lru-file.c @@ -6,7 +6,18 @@ typedef struct _AppLruFilePrivate AppLruFilePrivate; struct _AppLruFilePrivate { - gint temp; + GHashTable * apps; + gboolean dirty; + guint timer; + gchar * filename; +}; + +typedef struct _AppData AppData; +struct _AppData { + gchar * id; + gchar * category; + GTimeVal last_touched; + GTimeVal first_touched; }; #define APP_LRU_FILE_GET_PRIVATE(o) \ @@ -16,9 +27,12 @@ static void app_lru_file_class_init (AppLruFileClass *klass); static void app_lru_file_init (AppLruFile *self); static void app_lru_file_dispose (GObject *object); static void app_lru_file_finalize (GObject *object); +static void app_data_free (gpointer data); +static gboolean load_from_file (gpointer data); G_DEFINE_TYPE (AppLruFile, app_lru_file, G_TYPE_OBJECT); +/* Set up the class variable stuff */ static void app_lru_file_class_init (AppLruFileClass *klass) { @@ -32,29 +46,82 @@ app_lru_file_class_init (AppLruFileClass *klass) return; } +/* Set all the data of the per-instance variables */ static void app_lru_file_init (AppLruFile *self) { + AppLruFilePrivate * priv = APP_LRU_FILE_GET_PRIVATE(self); + + /* Default values */ + priv->apps = NULL; + priv->dirty = FALSE; + priv->timer = 0; + priv->filename = NULL; + + /* Now let's build some stuff */ + priv->apps = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, app_data_free); + priv->filename = g_build_filename(g_get_user_config_dir(), "indicators", "application", "lru-file.json", NULL); + + /* No reason to delay other stuff for this, we'll + merge any values that get touched. */ + g_idle_add(load_from_file, self); return; } +/* Get rid of objects and other big things */ static void app_lru_file_dispose (GObject *object) { + AppLruFilePrivate * priv = APP_LRU_FILE_GET_PRIVATE(object); + + if (priv->timer != 0) { + g_source_remove(priv->timer); + priv->timer = 0; + } + + if (priv->apps != NULL) { + /* Cleans up the keys and entries itself */ + g_hash_table_destroy(priv->apps); + priv->apps = NULL; + } G_OBJECT_CLASS (app_lru_file_parent_class)->dispose (object); return; } +/* Deallocate memory */ static void app_lru_file_finalize (GObject *object) { + AppLruFilePrivate * priv = APP_LRU_FILE_GET_PRIVATE(object); + + if (priv->filename != NULL) { + g_free(priv->filename); + priv->filename = NULL; + } G_OBJECT_CLASS (app_lru_file_parent_class)->finalize (object); return; } +/* Takes an AppData structure and free's the + memory from it. */ +static void +app_data_free (gpointer data) +{ + + return; +} + +/* Loads all of the data out of a json file */ +static gboolean +load_from_file (gpointer data) +{ + + return FALSE; +} + /* API */ /* Simple helper to create a new object */ -- cgit v1.2.3