Пример #1
0
/*
 * 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;
}
Пример #2
0
/*
 * 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);
}
Пример #3
0
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;
}
Пример #4
0
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;
}