[anjuta/sdb-core-trans: 78/80] symbol-db: implemented all packages ifaces. Removed dead code from prefs.
- From: Massimo Cora' <mcora src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [anjuta/sdb-core-trans: 78/80] symbol-db: implemented all packages ifaces. Removed dead code from prefs.
- Date: Sat, 14 Aug 2010 15:22:06 +0000 (UTC)
commit f87f5901aa557efef4a6d172235113c84c673e19
Author: Massimo Corà <mcora src gnome org>
Date: Sat Aug 14 17:09:09 2010 +0200
symbol-db: implemented all packages ifaces. Removed dead code from prefs.
plugins/symbol-db/plugin.c | 315 +++++++++++++++------
plugins/symbol-db/plugin.h | 2 +-
plugins/symbol-db/symbol-db-engine-core.c | 93 +++++--
plugins/symbol-db/symbol-db-engine-core.h | 3 +-
plugins/symbol-db/symbol-db-prefs.c | 451 +----------------------------
plugins/symbol-db/symbol-db-prefs.h | 3 +-
plugins/symbol-db/symbol-db-system.c | 7 +-
plugins/symbol-db/symbol-db-system.h | 4 +-
8 files changed, 314 insertions(+), 564 deletions(-)
---
diff --git a/plugins/symbol-db/plugin.c b/plugins/symbol-db/plugin.c
index 0e01419..2677907 100644
--- a/plugins/symbol-db/plugin.c
+++ b/plugins/symbol-db/plugin.c
@@ -1262,23 +1262,15 @@ do_import_project_sources (AnjutaPlugin *plugin, IAnjutaProjectManager *pm,
g_list_free (prj_elements_list);
}
+/**
+ * This function will call do_import_project_sources_after_abort ().
+ * The list of files for sysstem packages enqueued on the first scan aren't
+ * persisted on session for later retrieval. So we can only rely
+ * on fixing the zero-symbols file.
+ */
static void
do_import_system_sources (SymbolDBPlugin *sdb_plugin)
{
- /* system's packages management */
- GList *item = sdb_plugin->session_packages;
- while (item != NULL)
- {
- /* the function will take care of checking if the package is already
- * scanned and present on db
- */
- DEBUG_PRINT ("ianjuta_project_manager_get_packages: package required: %s",
- (gchar*)item->data);
- symbol_db_system_scan_package (sdb_plugin->sdbs, item->data);
-
- item = item->next;
- }
-
/* the resume thing */
GPtrArray *sys_src_array = NULL;
sys_src_array =
@@ -1457,20 +1449,98 @@ do_check_offline_files_changed (SymbolDBPlugin *sdb_plugin)
return real_added > 0 ? TRUE : FALSE;
}
+/**
+ * Session saved string will have the form:
+ * pkg_name1:version1:version2:version3
+ */
+static GList *
+save_session_packages (SymbolDBPlugin *sdb_plugin)
+{
+ GHashTableIter iter;
+ gpointer key, versions;
+ GList *pkg_list;
+
+ pkg_list = NULL;
+
+ g_hash_table_iter_init (&iter, sdb_plugin->session_packages);
+ while (g_hash_table_iter_next (&iter, &key, &versions))
+ {
+ GList *node;
+ GString *result;
+
+ result = g_string_new (key);
+
+ node = versions;
+ while (node != NULL)
+ {
+ result = g_string_append (result, ":");
+ result = g_string_append (result, node->data);
+
+ node = g_list_next (node);
+ }
+
+ pkg_list = g_list_prepend (pkg_list, g_strdup (result->str));
+ g_string_free (result, TRUE);
+ }
+
+ return pkg_list;
+}
+
static void
on_session_save (AnjutaShell *shell, AnjutaSessionPhase phase,
AnjutaSession *session,
SymbolDBPlugin *sdb_plugin)
{
+ GList *pkgs;
if (phase != ANJUTA_SESSION_PHASE_NORMAL)
return;
DEBUG_PRINT ("%s", "SymbolDB: session_save");
+ pkgs = save_session_packages (sdb_plugin);
+
anjuta_session_set_string_list (session,
SESSION_SECTION,
SESSION_KEY,
- sdb_plugin->session_packages);
+ pkgs);
+}
+
+static void
+load_session_packages (SymbolDBPlugin *sdb_plugin, GList *hash_glist)
+{
+ GList *node;
+
+ node = hash_glist;
+ while (node != NULL)
+ {
+ if (node->data != NULL)
+ {
+ gchar **split;
+ gint i;
+ gint len;
+ GList *versions;
+ split = g_strsplit (node->data, ":", 0);
+
+ len = g_strv_length (split);
+ if (len <= 1)
+ {
+ g_strfreev(split);
+ continue;
+ }
+
+ /* add items to glist, skipping first splitted item (the pkg name) */
+ for (i = 1; i < len; i++)
+ {
+ versions = g_list_prepend (versions, strdup (split[i]));
+ }
+
+ /* finally add key and value to hash table */
+ g_hash_table_insert (sdb_plugin->session_packages,
+ g_strdup (split[0]), versions);
+ }
+
+ node = g_list_next (node);
+ }
}
static void
@@ -1484,26 +1554,18 @@ on_session_load (AnjutaShell *shell, AnjutaSessionPhase phase,
if (phase == ANJUTA_SESSION_PHASE_START)
{
- sdb_plugin->session_packages = anjuta_session_get_string_list (session,
- SESSION_SECTION,
- SESSION_KEY);
+ GList *hash_glist = anjuta_session_get_string_list (session,
+ SESSION_SECTION,
+ SESSION_KEY);
+
+ load_session_packages (sdb_plugin, hash_glist);
+
+ anjuta_util_glist_strings_free (hash_glist);
DEBUG_PRINT ("SymbolDB: session_loading started. Getting info from %s",
anjuta_session_get_session_directory (session));
sdb_plugin->session_loading = TRUE;
- if (sdb_plugin->session_packages == NULL)
- {
- /* hey, does user want to import system sources for this project? */
- gboolean automatic_scan = anjuta_preferences_get_bool (sdb_plugin->prefs,
- PROJECT_AUTOSCAN);
-
- if (automatic_scan == TRUE)
- {
- sdb_plugin->session_packages = ianjuta_project_manager_get_packages (pm, NULL);
- }
- }
-
/* get preferences about the parallel scan */
gboolean parallel_scan = anjuta_preferences_get_bool (sdb_plugin->prefs,
PARALLEL_SCAN);
@@ -1920,10 +1982,11 @@ symbol_db_activate (AnjutaPlugin *plugin)
ctags_path = g_strdup (CTAGS_PATH);
}
- /* initialize the session packages to NULL. We'll store there the user
+ /* initialize the session packages. We'll store there the user
* preferences for the session about global-system packages
*/
- sdb_plugin->session_packages = NULL;
+ sdb_plugin->session_packages = g_hash_table_new_full (g_str_hash,
+ g_str_equal, g_free, (GDestroyNotify)anjuta_util_glist_strings_free);
sdb_plugin->buf_update_timeout_id = 0;
sdb_plugin->need_symbols_update = FALSE;
@@ -2250,8 +2313,7 @@ symbol_db_deactivate (AnjutaPlugin *plugin)
if (sdb_plugin->session_packages)
{
- g_list_foreach (sdb_plugin->session_packages, (GFunc)g_free, NULL);
- g_list_free (sdb_plugin->session_packages);
+ g_hash_table_destroy (sdb_plugin->session_packages);
sdb_plugin->session_packages = NULL;
}
@@ -2345,48 +2407,6 @@ symbol_db_class_init (GObjectClass *klass)
g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
}
-
-
-static void
-on_prefs_package_add (SymbolDBPrefs *sdbp, const gchar *package,
- gpointer user_data)
-{
- SymbolDBPlugin *sdb_plugin;
-
- g_return_if_fail (package != NULL);
-
- DEBUG_PRINT ("%s", "on_prefs_package_add");
-
- sdb_plugin = ANJUTA_PLUGIN_SYMBOL_DB (user_data);
-
- sdb_plugin->session_packages = g_list_prepend (sdb_plugin->session_packages,
- g_strdup (package));
-}
-
-static void
-on_prefs_package_remove (SymbolDBPrefs *sdbp, const gchar *package,
- gpointer user_data)
-{
- SymbolDBPlugin *sdb_plugin;
-
- g_return_if_fail (package != NULL);
-
- sdb_plugin = ANJUTA_PLUGIN_SYMBOL_DB (user_data);
-
- GList *item;
- DEBUG_PRINT ("%s", "on_prefs_package_remove");
- if ((item = g_list_find_custom (sdb_plugin->session_packages, package,
- symbol_db_glist_compare_func)) != NULL)
- {
- sdb_plugin->session_packages = g_list_remove_link (sdb_plugin->session_packages,
- item);
-
- /* ok, now think to the item left alone by its friends... */
- g_list_foreach (item, (GFunc)g_free, NULL);
- g_list_free (item);
- }
-}
-
static void
on_prefs_buffer_update_toggled (SymbolDBPrefs *sdbp, guint value,
gpointer user_data)
@@ -2426,16 +2446,8 @@ ipreferences_merge(IAnjutaPreferences* ipref, AnjutaPreferences* prefs, GError**
sdb_plugin->sdbp = symbol_db_prefs_new (sdb_plugin->sdbs,
sdb_plugin->sdbe_project,
sdb_plugin->sdbe_globals,
- prefs,
- sdb_plugin->session_packages);
+ prefs);
- /* connect the signals to retrieve package modifications */
- g_signal_connect (G_OBJECT (sdb_plugin->sdbp), "package-add",
- G_CALLBACK (on_prefs_package_add),
- sdb_plugin);
- g_signal_connect (G_OBJECT (sdb_plugin->sdbp), "package-remove",
- G_CALLBACK (on_prefs_package_remove),
- sdb_plugin);
g_signal_connect (G_OBJECT (sdb_plugin->sdbp), "buffer-update-toggled",
G_CALLBACK (on_prefs_buffer_update_toggled),
sdb_plugin);
@@ -2473,6 +2485,9 @@ isymbol_manager_create_query (IAnjutaSymbolManager *isymbol_manager,
{
SymbolDBPlugin *sdb_plugin;
SymbolDBQuery *query;
+
+ g_return_val_if_fail (isymbol_manager != NULL, NULL);
+
sdb_plugin = ANJUTA_PLUGIN_SYMBOL_DB (isymbol_manager);
query = symbol_db_query_new (sdb_plugin->sdbe_globals,
@@ -2484,17 +2499,18 @@ static gboolean
isymbol_manager_add_package (IAnjutaSymbolManager *isymbol_manager,
const gchar* pkg_name,
const gchar* pkg_version,
- const GList* files,
+ GList* files,
GError *err)
{
SymbolDBPlugin *sdb_plugin;
- SymbolDBQuery *query;
IAnjutaLanguage *lang_manager;
GPtrArray *files_array;
GList *node;
+
+ g_return_val_if_fail (isymbol_manager != NULL, FALSE);
sdb_plugin = ANJUTA_PLUGIN_SYMBOL_DB (isymbol_manager);
- lang_manager =anjuta_shell_get_interface (ANJUTA_PLUGIN (sdb_plugin)->shell, IAnjutaLanguage,
+ lang_manager = anjuta_shell_get_interface (ANJUTA_PLUGIN (sdb_plugin)->shell, IAnjutaLanguage,
NULL);
if (symbol_db_engine_add_new_project (sdb_plugin->sdbe_globals, NULL, pkg_name,
@@ -2528,6 +2544,92 @@ isymbol_manager_activate_package (IAnjutaSymbolManager *isymbol_manager,
const gchar *pkg_version,
GError *err)
{
+ SymbolDBPlugin *sdb_plugin;
+ GList *versions;
+
+ g_return_val_if_fail (isymbol_manager != NULL, FALSE);
+
+ sdb_plugin = ANJUTA_PLUGIN_SYMBOL_DB (isymbol_manager);
+
+ /* check whether the package already exists in the session packages. */
+ if ((versions = g_hash_table_lookup (sdb_plugin->session_packages, pkg_name)) != NULL)
+ {
+ GList *node;
+
+ /* if the package is already activated return true */
+ node = versions;
+ while (node != NULL)
+ {
+ if (g_strcmp0 (node->data, pkg_version) == 0)
+ return TRUE;
+
+ node = g_list_next (node);
+ }
+
+ /* check in the db: it may have a different version from the one already activated */
+ if (symbol_db_engine_project_exists (sdb_plugin->sdbe_globals, pkg_name,
+ pkg_version) == TRUE)
+ {
+ GList *new_versions;
+
+ /* this is a rare case so the performance playing with glist should not be
+ taken into consideration */
+ new_versions = anjuta_util_glist_strings_dup (versions);
+
+ /* ok, the package version exists in db. Append it to the versions glist */
+ new_versions = g_list_prepend (new_versions, g_strdup (pkg_version));
+
+ /* go ahead and insert it, replacing the old one */
+ g_hash_table_insert (sdb_plugin->session_packages, g_strdup (pkg_name),
+ new_versions);
+
+ return TRUE;
+ }
+
+ /* nothing found on db. This is hopeless */
+ return FALSE;
+ }
+
+ if (symbol_db_engine_project_exists (sdb_plugin->sdbe_globals, pkg_name,
+ pkg_version) == TRUE)
+ {
+ GList *versions = NULL;
+
+ versions = g_list_append (versions, g_strdup (pkg_version));
+ /* ok, package exists in db. Add it to session packages */
+ g_hash_table_insert (sdb_plugin->session_packages,
+ g_strdup (pkg_name),
+ versions);
+ return TRUE;
+ }
+
+ /* user should add a package before activating it. */
+ return FALSE;
+}
+
+static gboolean
+isymbol_manager_add_and_activate_package (IAnjutaSymbolManager *isymbol_manager,
+ const gchar *pkg_name,
+ const gchar *pkg_version,
+ GList *files,
+ GError *err)
+{
+ SymbolDBPlugin *sdb_plugin;
+
+ g_return_val_if_fail (isymbol_manager != NULL, FALSE);
+
+ sdb_plugin = ANJUTA_PLUGIN_SYMBOL_DB (isymbol_manager);
+
+ if (isymbol_manager_add_package (isymbol_manager, pkg_name, pkg_version,
+ files, err) == FALSE)
+ return FALSE;
+
+ if (isymbol_manager_activate_package (isymbol_manager, pkg_name, pkg_version,
+ err) == FALSE)
+ {
+ return FALSE;
+ }
+
return TRUE;
}
@@ -2537,7 +2639,43 @@ isymbol_manager_deactivate_package (IAnjutaSymbolManager *isymbol_manager,
const gchar *pkg_version,
GError *err)
{
+ SymbolDBPlugin *sdb_plugin;
+ GList *versions;
+ GList *node;
+ g_return_val_if_fail (isymbol_manager != NULL, FALSE);
+
+ sdb_plugin = ANJUTA_PLUGIN_SYMBOL_DB (isymbol_manager);
+
+ if ((versions = g_hash_table_lookup (sdb_plugin->session_packages, pkg_name)) == NULL)
+ return FALSE;
+
+ /* we can safely remove the whole list if it's composed by just one element */
+ if (g_list_length (versions) == 1)
+ {
+ g_hash_table_remove (sdb_plugin->session_packages, pkg_name);
+ return TRUE;
+ }
+
+ /* ok, if we reach this point we have a list with more than an element.
+ * Remove one and replace the item in the hash table.
+ */
+ node = versions;
+ while (node != NULL)
+ {
+ if (g_strcmp0 (node->data, pkg_version) == 0)
+ {
+ versions = g_list_remove_link (versions, node);
+ g_free (node->data);
+ g_list_free (node);
+
+ node = versions;
+ continue;
+ }
+
+ node = g_list_next (node);
+ }
+
return TRUE;
}
@@ -2548,6 +2686,7 @@ isymbol_manager_iface_init (IAnjutaSymbolManagerIface *iface)
iface->add_package = isymbol_manager_add_package;
iface->activate_package = isymbol_manager_activate_package;
iface->deactivate_package = isymbol_manager_deactivate_package;
+ iface->add_and_activate_package = isymbol_manager_add_and_activate_package;
}
ANJUTA_PLUGIN_BEGIN (SymbolDBPlugin, symbol_db);
diff --git a/plugins/symbol-db/plugin.h b/plugins/symbol-db/plugin.h
index 53fcae1..fe6aec8 100644
--- a/plugins/symbol-db/plugin.h
+++ b/plugins/symbol-db/plugin.h
@@ -127,7 +127,7 @@ struct _SymbolDBPlugin {
gint files_count_system;
gint files_count_system_done;
gchar *current_scanned_package;
- GList *session_packages;
+ GHashTable *session_packages;
IAnjutaSymbolQuery *search_query;
diff --git a/plugins/symbol-db/symbol-db-engine-core.c b/plugins/symbol-db/symbol-db-engine-core.c
index 703d467..d9eb5f5 100644
--- a/plugins/symbol-db/symbol-db-engine-core.c
+++ b/plugins/symbol-db/symbol-db-engine-core.c
@@ -576,7 +576,7 @@ sdb_engine_get_tuple_id_by_unique_name (SymbolDBEngine * dbe, static_query_type
gda_holder_set_value (param, param_value, NULL);
- /* execute the query with parametes just set */
+ /* execute the query with parameters just set */
data_model = gda_connection_statement_execute_select (priv->db_connection,
(GdaStatement*)stmt,
(GdaSet*)plist, NULL);
@@ -670,7 +670,7 @@ sdb_engine_get_tuple_id_by_unique_name4 (SymbolDBEngine * dbe,
gda_holder_set_value (param, value4, NULL);
- /* execute the query with parametes just set */
+ /* execute the query with parameters just set */
data_model = gda_connection_statement_execute_select (priv->db_connection,
(GdaStatement*)stmt,
(GdaSet*)plist, NULL);
@@ -1667,7 +1667,9 @@ sdb_engine_init (SymbolDBEngine * object)
PREP_QUERY_GET_PROJECT_ID_BY_UNIQUE_NAME,
"SELECT project_id FROM project \
WHERE \
- project_name = ## /* name:'prjname' type:gchararray */ LIMIT 1");
+ project_name = ## /* name:'prjname' type:gchararray */ AND \
+ project_version = ## /* name:'prjversion' type:gchararray */ \
+ LIMIT 1");
STATIC_QUERY_POPULATE_INIT_NODE(sdbe->priv->static_query_list,
PREP_QUERY_UPDATE_PROJECT_ANALYSE_TIME,
@@ -2668,7 +2670,7 @@ symbol_db_engine_add_new_workspace (SymbolDBEngine * dbe,
}
SDB_PARAM_SET_STRING(param, workspace_name);
- /* execute the query with parametes just set */
+ /* execute the query with parameters just set */
if (gda_connection_statement_execute_non_select (priv->db_connection,
(GdaStatement*)stmt,
(GdaSet*)plist, NULL, NULL) == -1)
@@ -2683,32 +2685,75 @@ symbol_db_engine_add_new_workspace (SymbolDBEngine * dbe,
/* ~~~ Thread note: this function locks the mutex ~~~ */
gboolean
-symbol_db_engine_project_exists (SymbolDBEngine * dbe, /*gchar* workspace, */
- const gchar * project_name)
+symbol_db_engine_project_exists (SymbolDBEngine * dbe,
+ const gchar * project_name,
+ const gchar * project_version)
{
SymbolDBEnginePriv *priv;
- gint prj_id;
GValue v = {0};
+ const GdaSet *plist;
+ const GdaStatement *stmt;
+ GdaHolder *param;
+ GdaDataModel *data_model;
priv = dbe->priv;
SDB_LOCK(priv);
g_return_val_if_fail (priv->db_connection != NULL, FALSE);
- SDB_GVALUE_SET_STATIC_STRING(v, project_name);
-
+
/* test the existence of the project in db */
- if ((prj_id = sdb_engine_get_tuple_id_by_unique_name (dbe,
- PREP_QUERY_GET_PROJECT_ID_BY_UNIQUE_NAME,
- "prjname",
- &v)) <= 0)
+ /* get prepared query */
+ if ((stmt = sdb_engine_get_statement_by_query_id (dbe,
+ PREP_QUERY_GET_PROJECT_ID_BY_UNIQUE_NAME)) == NULL)
+ {
+ g_warning ("Query is null");
+ SDB_UNLOCK(priv);
+ return FALSE;
+ }
+
+ plist = sdb_engine_get_query_parameters_list (dbe,
+ PREP_QUERY_GET_PROJECT_ID_BY_UNIQUE_NAME);
+
+ if ((param = gda_set_get_holder ((GdaSet*)plist, "prjname")) == NULL)
+ {
+ g_warning ("sdb_engine_get_tuple_id_by_unique_name: param is NULL "
+ "from pquery!\n");
+ SDB_UNLOCK(priv);
+ return FALSE;
+ }
+
+ SDB_PARAM_SET_STRING (param, project_name);
+
+ if ((param = gda_set_get_holder ((GdaSet*)plist, "prjversion")) == NULL)
+ {
+ g_warning ("sdb_engine_get_tuple_id_by_unique_name: param is NULL "
+ "from pquery!\n");
+ SDB_UNLOCK(priv);
+ return FALSE;
+ }
+
+ SDB_PARAM_SET_STRING (param, project_version);
+
+ /* execute the query with parameters just set */
+ data_model = gda_connection_statement_execute_select (priv->db_connection,
+ (GdaStatement*)stmt,
+ (GdaSet*)plist, NULL);
+
+ if (!GDA_IS_DATA_MODEL (data_model) ||
+ gda_data_model_get_n_rows (GDA_DATA_MODEL (data_model)) <= 0)
{
+ if (data_model != NULL)
+ g_object_unref (data_model);
SDB_UNLOCK(priv);
return FALSE;
}
+ /* we found it and we can return */
+ g_object_unref (data_model);
+
SDB_UNLOCK(priv);
- /* we found it */
+
return TRUE;
}
@@ -2802,7 +2847,7 @@ symbol_db_engine_add_new_project (SymbolDBEngine * dbe, const gchar * workspace,
SDB_PARAM_SET_STRING(param, workspace_name);
- /* execute the query with parametes just set */
+ /* execute the query with parameters just set */
if (gda_connection_statement_execute_non_select (priv->db_connection,
(GdaStatement*)stmt,
(GdaSet*)plist, NULL, NULL) == -1)
@@ -2868,7 +2913,7 @@ sdb_engine_add_new_language (SymbolDBEngine * dbe, const gchar *language)
SDB_PARAM_SET_STRING(param, language);
- /* execute the query with parametes just set */
+ /* execute the query with parameters just set */
if (gda_connection_statement_execute_non_select (priv->db_connection,
(GdaStatement*)stmt,
(GdaSet*)plist, &last_inserted,
@@ -2990,7 +3035,7 @@ sdb_engine_add_new_db_file (SymbolDBEngine * dbe, const gchar * project_name,
SDB_PARAM_SET_INT(param, language_id);
- /* execute the query with parametes just set */
+ /* execute the query with parameters just set */
if (gda_connection_statement_execute_non_select (priv->db_connection,
(GdaStatement*)stmt,
(GdaSet*)plist, NULL,
@@ -3353,7 +3398,7 @@ sdb_engine_add_new_sym_kind (SymbolDBEngine * dbe, const tagEntry * tag_entry)
SDB_PARAM_SET_INT (param, is_container);
- /* execute the query with parametes just set */
+ /* execute the query with parameters just set */
if (gda_connection_statement_execute_non_select(priv->db_connection,
(GdaStatement*)stmt,
(GdaSet*)plist, &last_inserted,
@@ -3442,7 +3487,7 @@ sdb_engine_add_new_sym_access (SymbolDBEngine * dbe, const tagEntry * tag_entry)
SDB_PARAM_SET_STRING (param, access);
- /* execute the query with parametes just set */
+ /* execute the query with parameters just set */
if (gda_connection_statement_execute_non_select (priv->db_connection,
(GdaStatement*)stmt,
(GdaSet*)plist, &last_inserted,
@@ -3527,7 +3572,7 @@ sdb_engine_add_new_sym_implementation (SymbolDBEngine * dbe,
SDB_PARAM_SET_STRING(param, implementation);
- /* execute the query with parametes just set */
+ /* execute the query with parameters just set */
if (gda_connection_statement_execute_non_select (priv->db_connection,
(GdaStatement*)stmt,
(GdaSet*)plist, &last_inserted,
@@ -3593,7 +3638,7 @@ sdb_engine_add_new_heritage (SymbolDBEngine * dbe, gint base_symbol_id,
SDB_PARAM_SET_INT(param, derived_symbol_id);
- /* execute the query with parametes just set */
+ /* execute the query with parameters just set */
if (gda_connection_statement_execute_non_select (priv->db_connection,
(GdaStatement*)stmt,
(GdaSet*)plist, NULL,
@@ -3837,7 +3882,7 @@ sdb_engine_second_pass_update_scope_1 (SymbolDBEngine * dbe,
SDB_PARAM_SET_INT(param, symbol_referer_id);
- /* execute the query with parametes just set */
+ /* execute the query with parameters just set */
gda_connection_statement_execute_non_select (priv->db_connection,
(GdaStatement*)stmt,
(GdaSet*)plist, NULL,
@@ -4531,7 +4576,7 @@ sdb_engine_add_new_symbol (SymbolDBEngine * dbe, const tagEntry * tag_entry,
access_kind_id, implementation_kind_id,
update_flag);
- /* execute the query with parametes just set */
+ /* execute the query with parameters just set */
nrows = gda_connection_statement_execute_non_select (priv->db_connection,
(GdaStatement*)stmt,
(GdaSet*)plist, &last_inserted,
@@ -4995,7 +5040,7 @@ symbol_db_engine_update_project_symbols (SymbolDBEngine *dbe,
SDB_PARAM_SET_STRING(param, project_name);
- /* execute the query with parametes just set */
+ /* execute the query with parameters just set */
GType gtype_array [6] = { G_TYPE_INT,
G_TYPE_STRING,
G_TYPE_INT,
diff --git a/plugins/symbol-db/symbol-db-engine-core.h b/plugins/symbol-db/symbol-db-engine-core.h
index 1d34b97..9f3d685 100644
--- a/plugins/symbol-db/symbol-db-engine-core.h
+++ b/plugins/symbol-db/symbol-db-engine-core.h
@@ -173,7 +173,8 @@ symbol_db_engine_add_new_project (SymbolDBEngine *dbe, const gchar* workspace,
*/
gboolean
symbol_db_engine_project_exists (SymbolDBEngine *dbe, /*gchar* workspace, */
- const gchar* project_name);
+ const gchar* project_name,
+ const gchar* project_version);
/**
diff --git a/plugins/symbol-db/symbol-db-prefs.c b/plugins/symbol-db/symbol-db-prefs.c
index 9e00e82..af766c3 100644
--- a/plugins/symbol-db/symbol-db-prefs.c
+++ b/plugins/symbol-db/symbol-db-prefs.c
@@ -45,8 +45,6 @@ enum {
enum
{
- PACKAGE_ADD,
- PACKAGE_REMOVE,
BUFFER_UPDATE_TOGGLED,
LAST_SIGNAL
};
@@ -63,9 +61,6 @@ struct _SymbolDBPrefsPriv {
SymbolDBEngine *sdbe_project;
SymbolDBEngine *sdbe_globals;
- GList *pkg_list;
- GHashTable *enabled_packages_hash;
-
gint prefs_notify_id;
};
@@ -87,328 +82,19 @@ destroy_parseable_data (ParseableData *pdata)
G_DEFINE_TYPE (SymbolDBPrefs, sdb_prefs, G_TYPE_OBJECT);
-#if 0
-static void
-on_prefs_executable_changed (/*GtkFileChooser *chooser,*/ GtkComboBox *chooser,
- gpointer user_data)
-{
- const gchar *new_file;
- SymbolDBPrefs *sdbp;
- SymbolDBPrefsPriv *priv;
-
- sdbp = SYMBOL_DB_PREFS (user_data);
- priv = sdbp->priv;
-
-/* new_file = gtk_file_chooser_get_filename (chooser);*/
- new_file = gtk_entry_get_text (GTK_ENTRY (chooser));
-
- DEBUG_PRINT ("on_prefs_executable_changed (): new executable selected %s",
- new_file);
- if (new_file != NULL)
- {
- GtkWidget *fchooser;
- fchooser = GTK_WIDGET (gtk_builder_get_object (priv->prefs_bxml, CTAGS_PREFS));
- /*gtk_widget_set_sensitive (fchooser, TRUE);*/
-
- anjuta_preferences_set (priv->prefs, CTAGS_PREFS_KEY,
- new_file);
-
- /* remember to set the new ctags path into various symbol engines */
- symbol_db_engine_set_ctags_path (priv->sdbe_project, new_file);
- symbol_db_engine_set_ctags_path (priv->sdbe_globals, new_file);
- }
-}
-
-
-static void
-on_notify_prefs (AnjutaPreferences* prefs, const gchar* key,
- const gchar* value, gpointer user_data)
-{
- DEBUG_PRINT ("%s", "on_notify_prefs ()");
-}
-#endif
-
-static void
-on_listall_output (AnjutaLauncher * launcher,
- AnjutaLauncherOutputType output_type,
- const gchar * chars, gpointer user_data)
-{
- gchar **lines;
- const gchar *curr_line;
- gint i = 0;
- SymbolDBPrefs *sdbp;
- SymbolDBPrefsPriv *priv;
- GtkListStore *store;
-
- if (output_type == ANJUTA_LAUNCHER_OUTPUT_STDERR)
- {
- /* no way. We don't like errors on stderr... */
- return;
- }
-
- sdbp = SYMBOL_DB_PREFS (user_data);
- priv = sdbp->priv;
-
- store = priv->prefs_list_store;
- lines = g_strsplit (chars, "\n", -1);
-
- while ((curr_line = lines[i++]) != NULL)
- {
- gchar **pkgs;
-
- pkgs = g_strsplit (curr_line, " ", -1);
-
- /* just take the first token as it's the package-name */
- if (pkgs == NULL)
- return;
-
- if (pkgs[0] == NULL) {
- g_strfreev (pkgs);
- continue;
- }
- priv->pkg_list = g_list_prepend (priv->pkg_list, g_strdup (pkgs[0]));
- g_strfreev (pkgs);
- }
-
- g_strfreev (lines);
-}
-
-static void
-on_listall_exit (AnjutaLauncher * launcher, int child_pid,
- int exit_status, gulong time_taken_in_seconds,
- gpointer user_data)
-{
- SymbolDBPrefs *sdbp;
- SymbolDBPrefsPriv *priv;
- GtkListStore *store;
- GList *item;
- GtkWidget *treeview;
-
- sdbp = SYMBOL_DB_PREFS (user_data);
- priv = sdbp->priv;
- store = priv->prefs_list_store;
-
- DEBUG_PRINT ("%s", "on_listall_exit ()");
-
- g_signal_handlers_disconnect_by_func (launcher, on_listall_exit,
- user_data);
-
- treeview = GTK_WIDGET (gtk_builder_get_object (priv->prefs_bxml, "tags_treeview"));
- gtk_widget_set_sensitive (treeview, TRUE);
-
- /* we should have pkg_list filled with packages names
- * It's not enough anyway: we have to sort alphabetically the list.
- * The implementation done before required the single scan of every package,
- * for instance 'pkg-config --cflags pkg_name', but this was really
- * unefficent when a lot of packages were found on /usr/lib/pkg-config.
- * Let then the user click on the toggle checkbox. We'll notify her whether
- * there are no good cflags for that package.
- */
- if (priv->pkg_list == NULL)
- {
- g_warning ("No packages found");
- return;
- }
-
- priv->pkg_list = g_list_sort (priv->pkg_list, symbol_db_glist_compare_func);
- item = priv->pkg_list;
-
- while (item != NULL)
- {
- GtkTreeIter iter;
- gboolean enabled = FALSE;
- /* that's good. We can add the package to the GtkListStore */
- gtk_list_store_append (GTK_LIST_STORE (store), &iter);
-
- /* check if we should enable or not the checkbox */
- if (g_hash_table_lookup (priv->enabled_packages_hash, item->data) == NULL)
- enabled = FALSE;
- else
- enabled = TRUE;
-
- gtk_list_store_set (store, &iter, COLUMN_LOAD, enabled,
- COLUMN_NAME, g_strdup (item->data), -1);
-
- item = item->next;
- }
-}
-
-static void
-on_tag_load_toggled_parseable_cb (SymbolDBSystem *sdbs,
- gboolean is_parseable,
- gpointer user_data)
-{
- GtkWidget *treeview, *prefs_progressbar;
- GtkWindow *prefs_window;
- ParseableData *pdata;
- SymbolDBPrefs *sdbp;
- SymbolDBPrefsPriv *priv;
- const gchar *path_str;
- GtkTreeIter iter;
- GtkTreePath *path;
- GtkListStore *store;
- gboolean enabled;
- gchar *curr_package_name;
-
- pdata = (ParseableData *)user_data;
- path_str = pdata->path_str;
- sdbp = pdata->sdbp;
- priv = sdbp->priv;
-
- DEBUG_PRINT ("on_tag_load_toggled_parseable_cb %d", is_parseable);
- prefs_window = GTK_WINDOW (gtk_builder_get_object (priv->prefs_bxml, "symbol_db_pref_window"));
- treeview = GTK_WIDGET (gtk_builder_get_object (priv->prefs_bxml, "tags_treeview"));
- prefs_progressbar = GTK_WIDGET (gtk_builder_get_object (priv->prefs_bxml, "prefs_progressbar"));
-
- store = priv->prefs_list_store;
- path = gtk_tree_path_new_from_string (path_str);
- gtk_tree_model_get_iter (GTK_TREE_MODEL (store), &iter, path);
- gtk_tree_model_get (GTK_TREE_MODEL (store), &iter,
- COLUMN_LOAD, &enabled,
- COLUMN_NAME, &curr_package_name,
- -1);
-
- if (is_parseable == FALSE)
- {
- GtkWidget *wid = gtk_message_dialog_new (prefs_window, GTK_DIALOG_MODAL,
- GTK_MESSAGE_WARNING,
- GTK_BUTTONS_OK, _("Package is not parseable"));
- gtk_dialog_run (GTK_DIALOG (wid));
- gtk_widget_destroy (wid);
-
- /* we for sure don't want this package on list next time */
- gtk_list_store_set (store, &iter, COLUMN_LOAD, FALSE, -1);
-
- /* emit the package-remove signal */
- g_signal_emit (sdbp, signals[PACKAGE_REMOVE], 0, curr_package_name);
- }
- else
- {
- /* we have a good parseable package. Let's mark the check enabled/disabled */
- enabled = !enabled;
- gtk_list_store_set (store, &iter, COLUMN_LOAD, enabled, -1);
-
- /* good, should we scan the packages? */
- if (enabled == TRUE)
- {
- symbol_db_system_scan_package (priv->sdbs, curr_package_name);
-
- /* emit the package-add signal */
- g_signal_emit (sdbp, signals[PACKAGE_ADD], 0, curr_package_name);
- }
- else
- {
- /* emit the package-remove signal */
- g_signal_emit (sdbp, signals[PACKAGE_REMOVE], 0, curr_package_name);
- }
- }
-
- gtk_widget_set_sensitive (treeview, TRUE);
- gtk_widget_hide (prefs_progressbar);
- gtk_tree_path_free (path);
-
- destroy_parseable_data (pdata);
-}
-
-static void
-on_tag_load_toggled (GtkCellRendererToggle *cell, char *path_str,
- SymbolDBPrefs *sdbp)
-{
- GtkTreeIter iter;
- GtkTreePath *path;
- gchar *curr_package_name;
- GtkListStore *store;
- GtkWidget *prefs_progressbar;
- GtkWidget * treeview;
- ParseableData *pdata;
- SymbolDBPrefsPriv *priv;
-
- priv = sdbp->priv;
-
- DEBUG_PRINT ("%s", "on_tag_load_toggled ()");
-
- store = priv->prefs_list_store;
- path = gtk_tree_path_new_from_string (path_str);
- gtk_tree_model_get_iter (GTK_TREE_MODEL (store), &iter, path);
- gtk_tree_model_get (GTK_TREE_MODEL (store), &iter,
- COLUMN_NAME, &curr_package_name,
- -1);
- gtk_tree_path_free (path);
-
- prefs_progressbar = GTK_WIDGET (gtk_builder_get_object (priv->prefs_bxml, "prefs_progressbar"));
- gtk_widget_show_all (prefs_progressbar);
-
- gtk_progress_bar_set_pulse_step (GTK_PROGRESS_BAR (prefs_progressbar), 1.0);
- gtk_progress_bar_pulse (GTK_PROGRESS_BAR (prefs_progressbar));
-
- treeview = GTK_WIDGET (gtk_builder_get_object (priv->prefs_bxml, "tags_treeview"));
- gtk_widget_set_sensitive (treeview, FALSE);
-
- pdata = g_new0 (ParseableData, 1);
- pdata->sdbp = sdbp;
- pdata->path_str = g_strdup (path_str);
-
- symbol_db_system_is_package_parseable (priv->sdbs, curr_package_name,
- on_tag_load_toggled_parseable_cb,
- pdata);
-}
static void
sdb_prefs_init1 (SymbolDBPrefs *sdbp)
{
SymbolDBPrefsPriv *priv;
-/* GtkWidget *fchooser;*/
-/* gchar *ctags_value;*/
priv = sdbp->priv;
-#if 0
- fchooser = GTK_WIDGET (gtk_builder_get_object (priv->prefs_bxml, CTAGS_PREFS));
-#endif
- /* we will reactivate it after the listall has been finished */
- /*gtk_widget_set_sensitive (fchooser, FALSE);*/
-
anjuta_preferences_add_from_builder (priv->prefs,
priv->prefs_bxml,
BUILDER_ROOT,
_("Symbol Database"),
ICON_FILE);
-#if 0
- ctags_value = anjuta_preferences_get (priv->prefs, CTAGS_PREFS_KEY);
-
- if (ctags_value == NULL || strlen (ctags_value) <= 0)
- {
- ctags_value = g_strdup (CTAGS_PATH);
- }
-
- DEBUG_PRINT ("select ->%s<-", ctags_value);
-
- /*
- * GtkFileChooser support disabled here because it was too slow.
- * Bug #551384 has been filed. Let's see what happens...
- *
- */
-
-
- /* FIXME: wtf?! */
- gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (fchooser), ctags_value);
- gtk_file_chooser_select_filename (GTK_FILE_CHOOSER (fchooser), ctags_value);
-
- g_signal_connect (G_OBJECT (fchooser), "selection-changed",
- G_CALLBACK (on_prefs_executable_changed), sdbp);
-
-
- g_signal_connect (G_OBJECT (fchooser), "changed",
- G_CALLBACK (on_prefs_executable_changed), sdbp);
-
-
- priv->prefs_notify_id = anjuta_preferences_notify_add_string (priv->prefs,
- CTAGS_PREFS_KEY,
- on_notify_prefs,
- priv->prefs, NULL);
- g_free (ctags_value);
-#endif
-
}
static void
@@ -416,19 +102,16 @@ sdb_prefs_init (SymbolDBPrefs *object)
{
SymbolDBPrefs *sdbp;
SymbolDBPrefsPriv *priv;
- GtkWidget *treeview;
- GtkCellRenderer *renderer;
- GtkTreeViewColumn *column;
- gchar* exe_string = NULL;
- gboolean require_scan = FALSE; /* scan for packages */
-
+
sdbp = SYMBOL_DB_PREFS (object);
sdbp->priv = g_new0 (SymbolDBPrefsPriv, 1);
priv = sdbp->priv;
-
- priv->pkg_list = NULL;
-
- DEBUG_PRINT ("%s", "symbol_db_prefs_init ()");
+
+ anjuta_preferences_add_from_builder (priv->prefs,
+ priv->prefs_bxml,
+ BUILDER_ROOT,
+ _("Symbol Database"),
+ ICON_FILE);
if (priv->prefs_bxml == NULL)
{
@@ -440,71 +123,7 @@ sdb_prefs_init (SymbolDBPrefs *object)
g_warning ("Couldn't load builder file: %s", error->message);
g_error_free(error);
}
- }
-
- /* init GtkListStore */
- if (priv->prefs_list_store == NULL)
- {
- priv->prefs_list_store = gtk_list_store_new (COLUMN_MAX, G_TYPE_BOOLEAN,
- G_TYPE_STRING);
- require_scan = TRUE;
}
-
- treeview = GTK_WIDGET (gtk_builder_get_object (priv->prefs_bxml, "tags_treeview"));
- /* on_listall_exit will reactivate this */
- gtk_widget_set_sensitive (treeview, FALSE);
- gtk_tree_view_set_model (GTK_TREE_VIEW (treeview),
- GTK_TREE_MODEL (priv->prefs_list_store));
-
- /* Add the column for stock treeview */
- renderer = gtk_cell_renderer_toggle_new ();
- g_signal_connect (G_OBJECT (renderer), "toggled",
- G_CALLBACK (on_tag_load_toggled), sdbp);
- column = gtk_tree_view_column_new_with_attributes (_("Load"),
- renderer,
- "active",
- COLUMN_LOAD,
- NULL);
- gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column);
-
- renderer = gtk_cell_renderer_text_new ();
- column = gtk_tree_view_column_new_with_attributes (_("API Tags"),
- renderer, "text",
- COLUMN_NAME,
- NULL);
- gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column);
- gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
- gtk_tree_view_set_search_column (GTK_TREE_VIEW (treeview),
- COLUMN_NAME);
-
- /* frame3 show all */
- GtkWidget *frame3;
- frame3 = GTK_WIDGET (gtk_builder_get_object (priv->prefs_bxml, "frame3"));
- gtk_widget_show_all (frame3);
- GtkWidget *prefs_progressbar = GTK_WIDGET (gtk_builder_get_object (priv->prefs_bxml,
- "prefs_progressbar"));
- gtk_widget_hide (prefs_progressbar);
-
- /* listall launcher thing */
- if (require_scan == TRUE)
- {
- priv->pkg_config_launcher = anjuta_launcher_new ();
-
- anjuta_launcher_set_check_passwd_prompt (priv->pkg_config_launcher,
- FALSE);
-
- g_signal_connect (G_OBJECT (priv->pkg_config_launcher), "child-exited",
- G_CALLBACK (on_listall_exit), sdbp);
-
- exe_string = g_strdup ("pkg-config --list-all");
-
- anjuta_launcher_execute (priv->pkg_config_launcher,
- exe_string, on_listall_output,
- sdbp);
- }
-
- /* unrefs unused memory objects */
- g_free (exe_string);
}
static void
@@ -516,31 +135,12 @@ sdb_prefs_finalize (GObject *object)
sdbp = SYMBOL_DB_PREFS (object);
priv = sdbp->priv;
- DEBUG_PRINT ("%s", "symbol_db_prefs_finalize ()");
-
anjuta_preferences_notify_remove(priv->prefs, priv->prefs_notify_id);
anjuta_preferences_remove_page(priv->prefs, _("Symbol Database"));
- if (priv->pkg_config_launcher != NULL)
- g_object_unref (priv->pkg_config_launcher);
- priv->pkg_config_launcher = NULL;
-
- /* free pkg_list */
- g_list_foreach (priv->pkg_list, (GFunc)g_free, NULL);
- g_list_free (priv->pkg_list);
- priv->pkg_list = NULL;
-
if (priv->prefs_bxml != NULL)
g_object_unref (priv->prefs_bxml);
- if (priv->prefs_list_store != NULL)
- g_object_unref (priv->prefs_list_store);
-
- if (priv->enabled_packages_hash)
- {
- g_hash_table_destroy (priv->enabled_packages_hash);
- }
-
G_OBJECT_CLASS (sdb_prefs_parent_class)->finalize (object);
}
@@ -549,26 +149,6 @@ sdb_prefs_class_init (SymbolDBPrefsClass *klass)
{
GObjectClass* object_class = G_OBJECT_CLASS (klass);
- signals[PACKAGE_ADD]
- = g_signal_new ("package-add",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (SymbolDBPrefsClass, package_add),
- NULL, NULL,
- g_cclosure_marshal_VOID__STRING, G_TYPE_NONE,
- 1,
- G_TYPE_STRING);
-
- signals[PACKAGE_REMOVE]
- = g_signal_new ("package-remove",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (SymbolDBPrefsClass, package_remove),
- NULL, NULL,
- g_cclosure_marshal_VOID__STRING, G_TYPE_NONE,
- 1,
- G_TYPE_STRING);
-
signals[BUFFER_UPDATE_TOGGLED]
= g_signal_new ("buffer-update-toggled",
G_OBJECT_CLASS_TYPE (object_class),
@@ -584,8 +164,7 @@ sdb_prefs_class_init (SymbolDBPrefsClass *klass)
SymbolDBPrefs *
symbol_db_prefs_new (SymbolDBSystem *sdbs, SymbolDBEngine *sdbe_project,
- SymbolDBEngine *sdbe_globals, AnjutaPreferences *prefs,
- GList *enabled_packages)
+ SymbolDBEngine *sdbe_globals, AnjutaPreferences *prefs)
{
SymbolDBPrefs *sdbp;
SymbolDBPrefsPriv *priv;
@@ -598,21 +177,7 @@ symbol_db_prefs_new (SymbolDBSystem *sdbs, SymbolDBEngine *sdbe_project,
priv->prefs = prefs;
priv->sdbe_project = sdbe_project;
priv->sdbe_globals = sdbe_globals;
- priv->enabled_packages_hash = g_hash_table_new_full (g_str_hash, g_str_equal,
- g_free, NULL);
- /* we'll convert the list of strings in input into an hash table, so that
- * a lookup there will be done quicker
- */
- GList *item = enabled_packages;
- while (item != NULL)
- {
- g_hash_table_insert (priv->enabled_packages_hash, (gpointer)g_strdup (item->data),
- GINT_TO_POINTER (TRUE));
- item = item->next;
- }
-
- sdb_prefs_init1 (sdbp);
return sdbp;
}
diff --git a/plugins/symbol-db/symbol-db-prefs.h b/plugins/symbol-db/symbol-db-prefs.h
index 5188e4f..54ae886 100644
--- a/plugins/symbol-db/symbol-db-prefs.h
+++ b/plugins/symbol-db/symbol-db-prefs.h
@@ -68,8 +68,7 @@ GType sdb_prefs_get_type (void) G_GNUC_CONST;
SymbolDBPrefs *
symbol_db_prefs_new (SymbolDBSystem *sdbs, SymbolDBEngine *sdbe_project,
- SymbolDBEngine *sdbe_globals, AnjutaPreferences *prefs,
- GList *enabled_packages);
+ SymbolDBEngine *sdbe_globals, AnjutaPreferences *prefs);
G_END_DECLS
diff --git a/plugins/symbol-db/symbol-db-system.c b/plugins/symbol-db/symbol-db-system.c
index 913e9c0..dc9f2e0 100644
--- a/plugins/symbol-db/symbol-db-system.c
+++ b/plugins/symbol-db/symbol-db-system.c
@@ -282,7 +282,8 @@ symbol_db_system_new (SymbolDBPlugin *sdb_plugin,
*/
gboolean
symbol_db_system_is_package_parsed (SymbolDBSystem *sdbs,
- const gchar * package_name)
+ const gchar * package_name,
+ const gchar * package_version)
{
SymbolDBSystemPriv *priv;
@@ -292,7 +293,7 @@ symbol_db_system_is_package_parsed (SymbolDBSystem *sdbs,
priv = sdbs->priv;
return symbol_db_engine_project_exists (priv->sdbe_globals,
- package_name);
+ package_name, package_version);
}
static void
@@ -718,7 +719,7 @@ symbol_db_system_scan_package (SymbolDBSystem *sdbs,
priv = sdbs->priv;
/* does is already exist on db? */
- if (symbol_db_system_is_package_parsed (sdbs, package_name) == TRUE)
+ if (symbol_db_system_is_package_parsed (sdbs, package_name, "1.0") == TRUE)
{
DEBUG_PRINT ("symbol_db_system_scan_package (): no need to scan %s",
package_name);
diff --git a/plugins/symbol-db/symbol-db-system.h b/plugins/symbol-db/symbol-db-system.h
index 3896b89..ab457e9 100644
--- a/plugins/symbol-db/symbol-db-system.h
+++ b/plugins/symbol-db/symbol-db-system.h
@@ -76,8 +76,8 @@ symbol_db_system_new (SymbolDBPlugin *sdb_plugin,
*/
gboolean
symbol_db_system_is_package_parsed (SymbolDBSystem *sdbs,
- const gchar * package_name);
-
+ const gchar * package_name,
+ const gchar * package_version);
/**
* Test whether the package has a good cflags output, i.e. it's parseable.
* This function does not tell us anything about the db. It could be that
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]