From 84821ece8828fc87a45b9ba2ca75ef0a15d797ce Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Tue, 3 Aug 2010 16:18:42 -0500 Subject: Reusing the application service marshallers, not beautiful, but it works for now. --- src/Makefile.am | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'src/Makefile.am') diff --git a/src/Makefile.am b/src/Makefile.am index 68be1c0..b704b5e 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -94,7 +94,8 @@ BUILT_SOURCES += \ libappindicator_la_SOURCES = \ $(libappindicator_headers) \ app-indicator-enum-types.c \ - app-indicator.c + app-indicator.c \ + application-service-marshal.c libappindicator_la_LDFLAGS = \ -version-info 0:0:0 \ -- cgit v1.2.3 From 18628e90b2a60b905569e62257f2b75a8bcb9335 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Thu, 5 Aug 2010 17:09:56 -0500 Subject: Incrementing the major version number --- src/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/Makefile.am') diff --git a/src/Makefile.am b/src/Makefile.am index b704b5e..0e84749 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -98,7 +98,7 @@ libappindicator_la_SOURCES = \ application-service-marshal.c libappindicator_la_LDFLAGS = \ - -version-info 0:0:0 \ + -version-info 1:0:0 \ -no-undefined \ -export-symbols-regex "^[^_d].*" -- cgit v1.2.3 From 5bffdaf7141fd7909474daa23ff9107c6f047453 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Tue, 10 Aug 2010 11:43:42 -0500 Subject: Brining generate-id into the fold --- .bzrignore | 1 + src/Makefile.am | 2 ++ src/app-indicator.c | 1 + src/generate-id.c | 2 ++ 4 files changed, 6 insertions(+) (limited to 'src/Makefile.am') diff --git a/.bzrignore b/.bzrignore index 94155ae..6183694 100644 --- a/.bzrignore +++ b/.bzrignore @@ -113,3 +113,4 @@ tests/test-approver tests/test-approver-tester bindings/mono/policy.0.0.appindicator-sharp.config bindings/mono/policy.0.0.appindicator-sharp.dll +src/libapplication_la-generate-id.lo diff --git a/src/Makefile.am b/src/Makefile.am index 0e84749..ef23ccc 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -15,6 +15,8 @@ applicationlib_LTLIBRARIES = libapplication.la libapplication_la_SOURCES = \ application-service-marshal.c \ dbus-shared.h \ + generate-id.h \ + generate-id.c \ indicator-application.c libapplication_la_CFLAGS = $(INDICATOR_CFLAGS) \ -Wall \ diff --git a/src/app-indicator.c b/src/app-indicator.c index 0b9b10e..3ba2cfb 100644 --- a/src/app-indicator.c +++ b/src/app-indicator.c @@ -43,6 +43,7 @@ License version 3 and version 2.1 along with this program. If not, see #include "notification-watcher-client.h" #include "dbus-shared.h" +#include "generate-id.h" #define PANEL_ICON_SUFFIX "panel" diff --git a/src/generate-id.c b/src/generate-id.c index 95a4bee..6855b39 100644 --- a/src/generate-id.c +++ b/src/generate-id.c @@ -19,6 +19,8 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ +#include "generate-id.h" + struct ordering_id_struct { gchar category; gchar first; -- cgit v1.2.3 From 4a52e90da37a03c2a4b523193861010539632e6e Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Tue, 10 Aug 2010 11:56:31 -0500 Subject: Uhg, wrong library --- src/Makefile.am | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'src/Makefile.am') diff --git a/src/Makefile.am b/src/Makefile.am index ef23ccc..273a63b 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -15,8 +15,6 @@ applicationlib_LTLIBRARIES = libapplication.la libapplication_la_SOURCES = \ application-service-marshal.c \ dbus-shared.h \ - generate-id.h \ - generate-id.c \ indicator-application.c libapplication_la_CFLAGS = $(INDICATOR_CFLAGS) \ -Wall \ @@ -97,7 +95,9 @@ libappindicator_la_SOURCES = \ $(libappindicator_headers) \ app-indicator-enum-types.c \ app-indicator.c \ - application-service-marshal.c + application-service-marshal.c \ + generate-id.h \ + generate-id.c libappindicator_la_LDFLAGS = \ -version-info 1:0:0 \ -- cgit v1.2.3 From 961575a255bf88e7befcc17fed6bcf6c87337e88 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Tue, 10 Aug 2010 14:43:41 -0500 Subject: Pulling in the generate ID function as well --- src/Makefile.am | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'src/Makefile.am') diff --git a/src/Makefile.am b/src/Makefile.am index 273a63b..620527c 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -50,11 +50,15 @@ indicator_application_service_SOURCES = \ application-service-watcher.h \ application-service-watcher.c \ app-indicator-enum-types.c \ - dbus-shared.h + dbus-shared.h \ + generate-id.h \ + generate-id.c + indicator_application_service_CFLAGS = \ $(INDICATOR_CFLAGS) \ -Wall -Werror \ -DG_LOG_DOMAIN=\"indicator-application-service\" + indicator_application_service_LDADD = \ $(INDICATOR_LIBS) \ libappindicator.la -- cgit v1.2.3 From d2c36a2dc643c8760556736067e1134aed674800 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Tue, 10 Aug 2010 14:49:00 -0500 Subject: Removing the LRU file object. --- src/Makefile.am | 2 - src/application-service-lru-file.c | 473 ------------------------------------- src/application-service-lru-file.h | 59 ----- 3 files changed, 534 deletions(-) delete mode 100644 src/application-service-lru-file.c delete mode 100644 src/application-service-lru-file.h (limited to 'src/Makefile.am') diff --git a/src/Makefile.am b/src/Makefile.am index 620527c..a7cfc0b 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -44,8 +44,6 @@ indicator_application_service_SOURCES = \ application-service.c \ application-service-appstore.h \ application-service-appstore.c \ - application-service-lru-file.h \ - application-service-lru-file.c \ application-service-marshal.c \ application-service-watcher.h \ application-service-watcher.c \ diff --git a/src/application-service-lru-file.c b/src/application-service-lru-file.c deleted file mode 100644 index c69a20f..0000000 --- a/src/application-service-lru-file.c +++ /dev/null @@ -1,473 +0,0 @@ -/* -This object manages the database of when the entires were touched -and loved. And writes that out to disk occationally as well. - -Copyright 2010 Canonical Ltd. - -Authors: - Ted Gould - -This program is free software: you can redistribute it and/or modify it -under the terms of the GNU General Public License version 3, as published -by the Free Software Foundation. - -This program is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranties of -MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR -PURPOSE. See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License along -with this program. If not, see . -*/ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include -#include -#include "application-service-lru-file.h" - -#define ENTRY_CATEGORY "category" -#define ENTRY_FIRST_TIME "first-time" -#define ENTRY_LAST_TIME "last-time" -#define ENTRY_VERSION "version" - -#define CONFIG_DIR ("indicators" G_DIR_SEPARATOR_S "application") -#define CONFIG_FILE "lru-file.json" - -typedef struct _AppLruFilePrivate AppLruFilePrivate; -struct _AppLruFilePrivate { - GHashTable * apps; - gboolean dirty; - guint timer; - gchar * filename; -}; - -typedef struct _AppData AppData; -struct _AppData { - gchar * category; - GTimeVal last_touched; - GTimeVal first_touched; -}; - -#define APP_LRU_FILE_GET_PRIVATE(o) \ - (G_TYPE_INSTANCE_GET_PRIVATE ((o), APP_LRU_FILE_TYPE, AppLruFilePrivate)) - -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 void get_dirty (AppLruFile * lrufile); -static gboolean load_from_file (gpointer data); -static void load_file_object_cb (JsonObject * obj, const gchar * key, JsonNode * value, gpointer data); -static void clean_off_hash_cb (gpointer key, gpointer value, gpointer data); -static void clean_off_write_end_cb (GObject * obj, GAsyncResult * res, 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) -{ - GObjectClass *object_class = G_OBJECT_CLASS (klass); - - g_type_class_add_private (klass, sizeof (AppLruFilePrivate)); - - object_class->dispose = app_lru_file_dispose; - object_class->finalize = app_lru_file_finalize; - - 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(), CONFIG_DIR, CONFIG_FILE, 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) -{ - AppData * appdata = (AppData *)data; - - if (appdata->category != NULL) { - g_free(appdata->category); - } - - g_free(appdata); - - return; -} - -/* Loads all of the data out of a json file */ -static gboolean -load_from_file (gpointer data) -{ - AppLruFile * lrufile = (AppLruFile *)data; - AppLruFilePrivate * priv = APP_LRU_FILE_GET_PRIVATE(lrufile); - - if (!g_file_test(priv->filename, G_FILE_TEST_EXISTS)) { - return FALSE; - } - - JsonParser * parser = json_parser_new(); - - if (!json_parser_load_from_file(parser, priv->filename, NULL)) { - g_warning("Unable to parse JSON file '%s'", priv->filename); - g_object_unref(parser); - return FALSE; - } - - JsonNode * root = json_parser_get_root(parser); - JsonObject * rootobj = json_node_get_object(root); - if (rootobj == NULL) { - g_warning("Malformed LRU file. The root node is not an object."); - g_object_unref(parser); - return FALSE; - } - - json_object_foreach_member(rootobj, load_file_object_cb, lrufile); - - g_object_unref(parser); - return FALSE; -} - -/* Looks at the various things that we need on a node, makes - sure that we have them, and then copies them into the - application hash table of love. */ -static void -load_file_object_cb (JsonObject * rootobj, const gchar * key, JsonNode * value, gpointer data) -{ - AppLruFile * lrufile = (AppLruFile *)data; - AppLruFilePrivate * priv = APP_LRU_FILE_GET_PRIVATE(lrufile); - - /* We're not looking at this today. */ - if (!g_strcmp0(key, ENTRY_VERSION)) { - return; - } - - JsonObject * obj = json_node_get_object(value); - if (obj == NULL) { - g_warning("Data for node '%s' is not an object.", key); - return; - } - - const gchar * obj_category = json_object_get_string_member(obj, ENTRY_CATEGORY); - const gchar * obj_first = json_object_get_string_member(obj, ENTRY_FIRST_TIME); - const gchar * obj_last = json_object_get_string_member(obj, ENTRY_LAST_TIME); - - if (obj_category == NULL || obj_first == NULL || obj_last == NULL) { - g_warning("Node '%s' is missing data. Got: ('%s', '%s', '%s')", key, obj_category, obj_first, obj_last); - get_dirty(lrufile); - return; - } - - /* Check to see how old this entry is. If it hasn't been - used in the last year, we remove the cruft. */ - GTimeVal currenttime; - g_get_current_time(¤ttime); - GDate * currentdate = g_date_new(); - g_date_set_time_val(currentdate, ¤ttime); - - GTimeVal lasttouch; - g_time_val_from_iso8601(obj_last, &lasttouch); - GDate * lastdate = g_date_new(); - g_date_set_time_val(lastdate, &lasttouch); - - gint spread = g_date_days_between(lastdate, currentdate); - - g_date_free(currentdate); - g_date_free(lastdate); - - if (spread > 365) { - g_debug("Removing node '%s' as it's %d days old.", key, spread); - get_dirty(lrufile); - return; - } - - /* See if we already have one of these. It's a little bit - unlikely, but since we're async, we need to check */ - gpointer datapntr = g_hash_table_lookup(priv->apps, key); - if (datapntr == NULL) { - /* Build a new node */ - AppData * appdata = g_new0(AppData, 1); - appdata->category = g_strdup(obj_category); - g_time_val_from_iso8601(obj_first, &appdata->first_touched); - g_time_val_from_iso8601(obj_last, &appdata->last_touched); - - g_hash_table_insert(priv->apps, g_strdup(key), appdata); - } else { - /* Merge nodes */ - AppData * appdata = (AppData *)datapntr; - GTimeVal temptime; - g_time_val_from_iso8601(obj_first, &temptime); - - if (temptime.tv_sec < appdata->first_touched.tv_sec) { - g_time_val_from_iso8601(obj_first, &appdata->first_touched); - } - } - - return; -} - -/* Write out our cache to a file so that we can unmark the dirty - bit and be happy. */ -static gboolean -clean_off (gpointer data) -{ - AppLruFile * lrufile = (AppLruFile *)data; - AppLruFilePrivate * priv = APP_LRU_FILE_GET_PRIVATE(lrufile); - priv->timer = 0; - - GError * error = NULL; - - /* Check to see if our directory exists. Build it if not. */ - gchar * dirname = g_build_filename(g_get_user_config_dir(), CONFIG_DIR, NULL); - if (!g_file_test(dirname, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_DIR)) { - GFile * dirfile = g_file_new_for_path(dirname); - g_file_make_directory_with_parents(dirfile, NULL, NULL); - g_object_unref(dirfile); - } - g_free(dirname); - - GFile * file = g_file_new_for_path(priv->filename); - GFileOutputStream * ostream = g_file_replace(file, - NULL, /* etag */ - TRUE, /* backup */ - G_FILE_CREATE_NONE, /* flags */ - NULL, /* cancelable */ - &error); - if (error != NULL) { - g_warning("Unable to open a file to store LRU file: %s", error->message); - return FALSE; - } - - /* This is how the file will start */ - GString * filestring = g_string_new("{\n \"" ENTRY_VERSION "\": 1"); - - /* Put the middle in. */ - g_hash_table_foreach (priv->apps, clean_off_hash_cb, filestring); - - /* And then tack on the end. */ - g_string_append(filestring, "\n}\n"); - gchar * filedata = g_string_free(filestring, FALSE); - g_output_stream_write_async(G_OUTPUT_STREAM(ostream), - filedata, - strlen(filedata), - G_PRIORITY_DEFAULT_IDLE, - NULL, - clean_off_write_end_cb, - filedata); - - return FALSE; /* drop the timer */ -} - -/* Looks at every value in the applications hash table and - turns it into a string for writing out. */ -static void -clean_off_hash_cb (gpointer key, gpointer value, gpointer data) -{ - /* Mega-cast */ - gchar * id = (gchar *)key; - AppData * appdata = (AppData *)value; - GString * string = (GString *)data; - - gchar * firsttime = g_time_val_to_iso8601(&appdata->first_touched); - gchar * lasttime = g_time_val_to_iso8601(&appdata->last_touched); - - g_string_append_printf(string, ",\n \"%s\": { \"" ENTRY_FIRST_TIME "\": \"%s\", \"" ENTRY_LAST_TIME "\": \"%s\", \"" ENTRY_CATEGORY "\": \"%s\"}", id, firsttime, lasttime, appdata->category); - - g_free(lasttime); - g_free(firsttime); - - return; -} - -/* Very much like clean_off_write_cb except that it is the - last actor on this Output Stream so it closes it. */ -static void -clean_off_write_end_cb (GObject * obj, GAsyncResult * res, gpointer data) -{ - g_free(data); - - GError * error = NULL; - g_output_stream_close(G_OUTPUT_STREAM(obj), NULL, &error); - - if (error != NULL) { - g_warning("Unable to close LRU File: %s", error->message); - g_error_free(error); - } - - return; -} - -/* Sets the dirty bit if not already set and makes sure that - we have a timer to fix that at some point. */ -static void -get_dirty (AppLruFile * lrufile) -{ - AppLruFilePrivate * priv = APP_LRU_FILE_GET_PRIVATE(lrufile); - - priv->dirty = TRUE; - - if (priv->timer == 0) { - priv->timer = g_timeout_add_seconds(60, clean_off, lrufile); - } - - return; -} - -/* API */ - -/* Simple helper to create a new object */ -AppLruFile * -app_lru_file_new (void) -{ - return APP_LRU_FILE(g_object_new(APP_LRU_FILE_TYPE, NULL)); -} - -/* This updates the timestamp for a particular - entry in the database. It also queues up a - write out of the database. But that'll happen - later. */ -void -app_lru_file_touch (AppLruFile * lrufile, const gchar * id, const gchar * category) -{ - g_return_if_fail(IS_APP_LRU_FILE(lrufile)); - g_return_if_fail(id != NULL && id[0] != '\0'); - g_return_if_fail(category != NULL && category[0] != '\0'); - - AppData * appdata = NULL; - AppLruFilePrivate * priv = APP_LRU_FILE_GET_PRIVATE(lrufile); - gpointer data = g_hash_table_lookup(priv->apps, id); - - if (data == NULL) { - /* Oh, we don't have one, let's build it and put it - into the hash table ourselves */ - appdata = g_new0(AppData, 1); - - appdata->category = g_strdup(category); - g_get_current_time(&(appdata->first_touched)); - /* NOTE: last touched set below */ - - g_hash_table_insert(priv->apps, g_strdup(id), appdata); - } else { - /* Boring, we've got this one already */ - appdata = (AppData *)data; - } - - /* Touch it and mark the DB as dirty */ - g_get_current_time(&(appdata->last_touched)); - get_dirty(lrufile); - return; -} - -/* Used to sort or compare different applications. */ -gint -app_lru_file_sort (AppLruFile * lrufile, const gchar * id_a, const gchar * id_b) -{ - g_return_val_if_fail(IS_APP_LRU_FILE(lrufile), -1); - - /* Let's first look to see if the IDs are the same, this - really shouldn't happen, but it'll be confusing if we - don't get it out of the way to start. */ - if (g_strcmp0(id_a, id_b) == 0) { - return 0; - } - - AppLruFilePrivate * priv = APP_LRU_FILE_GET_PRIVATE(lrufile); - - /* Now make sure we have app data for both of these. If - not we'll assume that the one without is newer? */ - gpointer data_a = g_hash_table_lookup(priv->apps, id_a); - if (data_a == NULL) { - return -1; - } - - gpointer data_b = g_hash_table_lookup(priv->apps, id_b); - if (data_b == NULL) { - return 1; - } - - /* Ugly casting */ - AppData * appdata_a = (AppData *)data_a; - AppData * appdata_b = (AppData *)data_b; - - /* Look at categories, we'll put the categories in alpha - order if they're not the same. */ - gint catcompare = g_strcmp0(appdata_a->category, appdata_b->category); - if (catcompare != 0) { - return catcompare; - } - - /* Now we're looking at the first time that these two were - seen in this account. Only using seconds. I mean, seriously. */ - if (appdata_a->first_touched.tv_sec < appdata_b->first_touched.tv_sec) { - return -1; - } - if (appdata_b->first_touched.tv_sec < appdata_a->first_touched.tv_sec) { - return 1; - } - - /* Eh, this seems roughly impossible. But if we have to choose, - I like A better. */ - return 1; -} diff --git a/src/application-service-lru-file.h b/src/application-service-lru-file.h deleted file mode 100644 index 7c92c82..0000000 --- a/src/application-service-lru-file.h +++ /dev/null @@ -1,59 +0,0 @@ -/* -This object manages the database of when the entires were touched -and loved. And writes that out to disk occationally as well. - -Copyright 2010 Canonical Ltd. - -Authors: - Ted Gould - -This program is free software: you can redistribute it and/or modify it -under the terms of the GNU General Public License version 3, as published -by the Free Software Foundation. - -This program is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranties of -MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR -PURPOSE. See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License along -with this program. If not, see . -*/ - -#ifndef __APP_LRU_FILE_H__ -#define __APP_LRU_FILE_H__ - -#include -#include - -G_BEGIN_DECLS - -#define APP_LRU_FILE_TYPE (app_lru_file_get_type ()) -#define APP_LRU_FILE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), APP_LRU_FILE_TYPE, AppLruFile)) -#define APP_LRU_FILE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), APP_LRU_FILE_TYPE, AppLruFileClass)) -#define IS_APP_LRU_FILE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), APP_LRU_FILE_TYPE)) -#define IS_APP_LRU_FILE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), APP_LRU_FILE_TYPE)) -#define APP_LRU_FILE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), APP_LRU_FILE_TYPE, AppLruFileClass)) - -typedef struct _AppLruFile AppLruFile; -typedef struct _AppLruFileClass AppLruFileClass; - -struct _AppLruFileClass { - GObjectClass parent_class; - -}; - -struct _AppLruFile { - GObject parent; - -}; - -GType app_lru_file_get_type (void); - -AppLruFile * app_lru_file_new (void); -void app_lru_file_touch (AppLruFile * lrufile, const gchar * id, const gchar * category); -gint app_lru_file_sort (AppLruFile * lrufile, const gchar * id_a, const gchar * id_b); - -G_END_DECLS - -#endif -- cgit v1.2.3 From f4b22a7fa52695acc7e1e5abd20859f320e3895f Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Tue, 10 Aug 2010 16:59:25 -0500 Subject: Putting together the pieces to look for override files --- src/Makefile.am | 1 + src/application-service-appstore.c | 16 ++++++++++++++++ 2 files changed, 17 insertions(+) (limited to 'src/Makefile.am') diff --git a/src/Makefile.am b/src/Makefile.am index a7cfc0b..1c4e7ae 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -54,6 +54,7 @@ indicator_application_service_SOURCES = \ indicator_application_service_CFLAGS = \ $(INDICATOR_CFLAGS) \ + -DDATADIR="\"$(pkgdatadir)\"" \ -Wall -Werror \ -DG_LOG_DOMAIN=\"indicator-application-service\" diff --git a/src/application-service-appstore.c b/src/application-service-appstore.c index 47396bb..0df4dd5 100644 --- a/src/application-service-appstore.c +++ b/src/application-service-appstore.c @@ -57,6 +57,7 @@ static gboolean _application_service_server_get_applications (ApplicationService #define NOTIFICATION_ITEM_SIG_NEW_ICON_THEME_PATH "NewIconThemePath" #define OVERRIDE_GROUP_NAME "Ordering Index Overrides" +#define OVERRIDE_FILE_NAME "ordering-override.keyfile" /* Private Stuff */ struct _ApplicationServiceAppstorePrivate { @@ -112,6 +113,7 @@ static void application_service_appstore_class_init (ApplicationServiceAppstoreC static void application_service_appstore_init (ApplicationServiceAppstore *self); static void application_service_appstore_dispose (GObject *object); static void application_service_appstore_finalize (GObject *object); +static void load_override_file (GHashTable * hash, const gchar * filename); static AppIndicatorStatus string_to_status(const gchar * status_string); static void apply_status (Application * app, AppIndicatorStatus status); static void approver_free (gpointer papprover, gpointer user_data); @@ -188,6 +190,11 @@ application_service_appstore_init (ApplicationServiceAppstore *self) priv->approvers = NULL; priv->ordering_overrides = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, NULL); + + load_override_file(priv->ordering_overrides, DATADIR "/" OVERRIDE_FILE_NAME); + gchar * userfile = g_build_filename(g_get_user_data_dir(), "indicators", "application", OVERRIDE_FILE_NAME, NULL); + load_override_file(priv->ordering_overrides, userfile); + g_free(userfile); GError * error = NULL; priv->bus = dbus_g_bus_get(DBUS_BUS_STARTER, &error); @@ -241,6 +248,15 @@ application_service_appstore_finalize (GObject *object) return; } +/* Loads the file and adds the override entries to the table + of overrides */ +static void +load_override_file (GHashTable * hash, const gchar * filename) +{ + + +} + /* Return from getting the properties from the item. We're looking at those and making sure we have everythign that we need. If we do, then we'll move on up to sending this onto the indicator. */ -- cgit v1.2.3