/* * Converts a PackageKit package ID to a query ID. Overwrites the contents of * *query_id with said ID. */ bool query_id_from_package_id(const gchar *package_id, struct query_id *query_id) { bool success; gchar **split_package_id; assert(package_id != NULL); assert(query_id != NULL); success = false; split_package_id = pk_package_id_split(package_id); if (split_package_id != NULL) { bool have_name; bool have_version; gchar *name; gchar *version; gchar *arch; gchar *repo; /* We're not allowed to have an empty name or version. */ name = split_package_id[PK_PACKAGE_ID_NAME]; have_name = (name != NULL && name[0] != '\0'); version = split_package_id[PK_PACKAGE_ID_VERSION]; have_version = (version != NULL && version[0] != '\0'); /* * Names and versions are mandatory. Anything else is * optional. */ if (have_name && have_version) { query_id->namever = namever_from_name_and_version(name, version); arch = split_package_id[PK_PACKAGE_ID_ARCH]; query_id->arch = strdup_null_if_empty(arch); repo = split_package_id[PK_PACKAGE_ID_DATA]; query_id->repo = strdup_null_if_empty(repo); success = true; } g_strfreev(split_package_id); } return success; }
/* * Converts a package name or name-version string to a query ID. Overwrites * the contents of *query_id with said ID. */ bool query_id_from_name(const char *name, struct query_id *query_id) { assert(name != NULL); assert(query_id != NULL); query_id->namever = strdup_null_if_empty(name); query_id->arch = NULL; query_id->repo = NULL; return (query_id->namever != NULL); }
static gboolean storage_sql_parse_uri (const gchar *uri, gchar **server, gchar **port, gchar **database, gchar **login, gchar **password, gint *project_id, GError **error) { const gchar *p; gchar *location, *args; gchar *who, *host; gchar **strs; gint i; *server = NULL; *port = NULL; *database = NULL; *login = NULL; *password = NULL; *project_id = -1; if (strncmp (uri, "sql://", 6) != 0 || !strchr (uri, '#')) { g_set_error (error, MRP_ERROR, MRP_ERROR_INVALID_URI, _("Invalid SQL URI (must start with 'sql://' and contain '#').")); return FALSE; } p = uri + 6; strs = g_strsplit (p, "#", 2); location = g_strdup (strs[0]); args = g_strdup (strs[1]); g_strfreev (strs); if (strchr (location, '@')) { strs = g_strsplit (location, "@", 2); who = strdup_null_if_empty (strs[0]); host = strdup_null_if_empty (strs[1]); g_strfreev (strs); } else { who = NULL; host = strdup_null_if_empty (location); } g_free (location); if (who && strchr (who, ':')) { strs = g_strsplit (who, ":", 2); *login = strdup_null_if_empty (strs[0]); *password = strdup_null_if_empty (strs[1]); g_strfreev (strs); } g_free (who); if (host && strchr (host, ':')) { strs = g_strsplit (host, ":", 2); *server = strdup_null_if_empty (strs[0]); *port = strdup_null_if_empty (strs[1]); g_strfreev (strs); g_free (host); } else { *server = host; } strs = g_strsplit (args, "&", 0); i = 0; while (strs[i]) { gchar **arg; arg = g_strsplit (strs[i], "=", 2); if (strcmp (arg[0], "id") == 0) { if (strlen (g_strstrip (arg[1])) > 0) { *project_id = atoi (arg[1]); } else { *project_id = -1; } } else if (strcmp (arg[0], "db") == 0) { *database = strdup_null_if_empty (arg[1]); } g_strfreev (arg); i++; } g_strfreev (strs); /* FIXME: add this back when done with the plugin move. */ if (0 && *project_id == -1) { g_set_error (error, MRP_ERROR, MRP_ERROR_INVALID_URI, _("Invalid SQL URI (invalid project id).")); goto fail; } if (*database == NULL) { g_set_error (error, MRP_ERROR, MRP_ERROR_INVALID_URI, _("Invalid SQL URI (no database name specified).")); goto fail; } return TRUE; fail: g_free (*server); g_free (*port); g_free (*database); g_free (*login); g_free (*password); *server = NULL; *port = NULL; *database = NULL; *login = NULL; *password = NULL; *project_id = -1; return FALSE; }
static gboolean sql_plugin_retrieve_db_values (PlannerPlugin *plugin, const gchar *title, gchar **server, gchar **port, gchar **database, gchar **login, gchar **password) { PlannerApplication *application; gchar *filename; GladeXML *gui; GtkWidget *dialog; gchar *str; gint response; GtkWidget *server_entry; GtkWidget *db_entry; GtkWidget *user_entry; GtkWidget *password_entry; gboolean ret; application = planner_window_get_application (plugin->main_window); filename = mrp_paths_get_glade_dir ("sql.glade"); gui = glade_xml_new (filename, "open_dialog" , NULL); g_free (filename); dialog = glade_xml_get_widget (gui, "open_dialog"); gtk_window_set_title (GTK_WINDOW (dialog), title); server_entry = glade_xml_get_widget (gui, "server_entry"); db_entry = glade_xml_get_widget (gui, "db_entry"); user_entry = glade_xml_get_widget (gui, "user_entry"); password_entry = glade_xml_get_widget (gui, "password_entry"); str = planner_conf_get_string (CONF_SERVER, NULL); if (str) { gtk_entry_set_text (GTK_ENTRY (server_entry), str); g_free (str); } str = planner_conf_get_string (CONF_DATABASE, NULL); if (str) { gtk_entry_set_text (GTK_ENTRY (db_entry), str); g_free (str); } str = planner_conf_get_string (CONF_USERNAME, NULL); if (str) { gtk_entry_set_text (GTK_ENTRY (user_entry), str); g_free (str); } g_object_unref (gui); response = gtk_dialog_run (GTK_DIALOG (dialog)); switch (response) { case GTK_RESPONSE_OK: *server = strdup_null_if_empty (gtk_entry_get_text (GTK_ENTRY (server_entry))); *port = NULL; *database = strdup_null_if_empty (gtk_entry_get_text (GTK_ENTRY (db_entry))); *login = strdup_null_if_empty (gtk_entry_get_text (GTK_ENTRY (user_entry))); *password = strdup_null_if_empty (gtk_entry_get_text (GTK_ENTRY (password_entry))); planner_conf_set_string (CONF_SERVER, *server ? *server : "", NULL); planner_conf_set_string (CONF_DATABASE, *database ? *database : "", NULL); planner_conf_set_string (CONF_USERNAME, *login ? *login : "", NULL); ret = TRUE; break; default: ret = FALSE; break; } gtk_widget_destroy (dialog); return ret; }