static gboolean backend_repo_enable_thread (PkBackend *backend) { GError *error = NULL; const gchar *repo; gboolean enabled; g_return_val_if_fail (pacman != NULL, FALSE); g_return_val_if_fail (disabled_repos != NULL, FALSE); g_return_val_if_fail (backend != NULL, FALSE); repo = pk_backend_get_string (backend, "repo_id"); enabled = pk_backend_get_bool (backend, "enabled"); g_return_val_if_fail (repo != NULL, FALSE); if (enabled) { /* check that repo is indeed disabled */ if (g_hash_table_remove (disabled_repos, repo)) { /* reload configuration to preserve the correct order */ if (disabled_repos_configure (disabled_repos, &error)) { pk_backend_repo_list_changed (backend); } else { backend_error (backend, error); pk_backend_thread_finished (backend); return FALSE; } } else { pk_backend_error_code (backend, PK_ERROR_ENUM_REPO_NOT_FOUND, "Could not find repo [%s]", repo); pk_backend_thread_finished (backend); return FALSE; } } else { PacmanDatabase *database = pacman_manager_find_sync_database (pacman, repo); if (database != NULL) { if (pacman_manager_unregister_database (pacman, database, &error)) { g_hash_table_insert (disabled_repos, g_strdup (repo), GINT_TO_POINTER (1)); } else { backend_error (backend, error); pk_backend_thread_finished (backend); return FALSE; } } else { pk_backend_error_code (backend, PK_ERROR_ENUM_REPO_NOT_FOUND, "Could not find repo [%s]", repo); pk_backend_thread_finished (backend); return FALSE; } } pk_backend_thread_finished (backend); return TRUE; }
static gboolean pk_backend_repo_enable_thread (PkBackend *self) { const gchar *repo; GError *error = NULL; g_return_val_if_fail (self != NULL, FALSE); g_return_val_if_fail (disabled != NULL, FALSE); repo = pk_backend_get_string (self, "repo_id"); g_return_val_if_fail (repo != NULL, FALSE); if (g_hash_table_remove (disabled, repo)) { /* reload configuration to preserve ordering */ if (disabled_repos_configure (disabled, TRUE, &error)) { pk_backend_repo_list_changed (self); } } else { int code = ALPM_ERR_DB_NOT_NULL; g_set_error (&error, ALPM_ERROR, code, "[%s]: %s", repo, alpm_strerror (code)); } if (error != NULL) { pk_backend_error (self, error); g_error_free (error); } pk_backend_thread_finished (self); return (error == NULL); }
static gboolean pk_backend_repo_disable_thread (PkBackend *self) { const alpm_list_t *i; const gchar *repo; GError *error = NULL; g_return_val_if_fail (self != NULL, FALSE); g_return_val_if_fail (alpm != NULL, FALSE); g_return_val_if_fail (disabled != NULL, FALSE); repo = pk_backend_get_string (self, "repo_id"); g_return_val_if_fail (repo != NULL, FALSE); for (i = alpm_get_syncdbs (alpm); i != NULL; i = i->next) { alpm_db_t *db = (alpm_db_t *) i->data; const gchar *name = alpm_db_get_name (db); if (g_strcmp0 (repo, name) == 0) { if (alpm_db_unregister (db) < 0) { alpm_errno_t errno = alpm_errno (alpm); g_set_error (&error, ALPM_ERROR, errno, "[%s]: %s", repo, alpm_strerror (errno)); } else { g_hash_table_insert (disabled, g_strdup (repo), GINT_TO_POINTER (1)); } break; } } if (i == NULL) { int code = ALPM_ERR_DB_NULL; g_set_error (&error, ALPM_ERROR, code, "[%s]: %s", repo, alpm_strerror (code)); } if (error != NULL) { pk_backend_error (self, error); g_error_free (error); } pk_backend_thread_finished (self); return (error == NULL); }