|
|
|
@@ -3,14 +3,14 @@
|
|
|
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
|
|
|
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
|
|
|
*/
|
|
|
|
|
#include "config.h"
|
|
|
|
|
#include <dirent.h>
|
|
|
|
|
#include <glib/gstdio.h>
|
|
|
|
|
#include <gio/gio.h>
|
|
|
|
|
#include <cstdint>
|
|
|
|
|
#include <stdlib.h>
|
|
|
|
|
#include <stdio.h>
|
|
|
|
|
#include <iostream>
|
|
|
|
|
#include <zlib.h>
|
|
|
|
|
#include <curl/curl.h>
|
|
|
|
|
#include <pk-backend.h>
|
|
|
|
|
#include <sqlite3.h>
|
|
|
|
|
#include "job.h"
|
|
|
|
|
#include "dl.h"
|
|
|
|
@@ -18,6 +18,8 @@
|
|
|
|
|
#include "slackpkg.h"
|
|
|
|
|
#include "utils.h"
|
|
|
|
|
|
|
|
|
|
using namespace katja;
|
|
|
|
|
|
|
|
|
|
static GSList *repos = nullptr;
|
|
|
|
|
|
|
|
|
|
void pk_backend_initialize(GKeyFile *conf)
|
|
|
|
@@ -150,10 +152,7 @@ void pk_backend_start_job(PkBackendJob *job)
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
pk_backend_job_error_code(job, PK_ERROR_ENUM_NO_CACHE,
|
|
|
|
|
"%s: %s",
|
|
|
|
|
db_filename,
|
|
|
|
|
sqlite3_errmsg(job_data->db));
|
|
|
|
|
std::cerr << db_filename << ": " << sqlite3_errmsg(job_data->db) << std::endl;
|
|
|
|
|
goto out;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -220,10 +219,8 @@ pk_backend_search_thread (PkBackendJob *job, GVariant *params, void *user_data)
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
pk_backend_job_error_code (job, PK_ERROR_ENUM_CANNOT_GET_FILELIST,
|
|
|
|
|
"%s", sqlite3_errmsg (job_data->db));
|
|
|
|
|
std::cerr << sqlite3_errmsg(job_data->db) << std::endl;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
sqlite3_free (query);
|
|
|
|
|
g_free (search);
|
|
|
|
|
}
|
|
|
|
@@ -251,8 +248,6 @@ void pk_backend_search_files(PkBackendJob *job, char **values)
|
|
|
|
|
Info ret;
|
|
|
|
|
auto job_data = static_cast<JobData *> (pk_backend_job_get_user_data(job));
|
|
|
|
|
|
|
|
|
|
pk_backend_job_set_percentage(job, 0);
|
|
|
|
|
|
|
|
|
|
search = g_strjoinv("%", values);
|
|
|
|
|
|
|
|
|
|
query = sqlite3_mprintf("SELECT (p.name || ';' || p.ver || ';' || p.arch || ';' || r.repo), p.summary, "
|
|
|
|
@@ -282,12 +277,10 @@ void pk_backend_search_files(PkBackendJob *job, char **values)
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
pk_backend_job_error_code(job, PK_ERROR_ENUM_CANNOT_GET_FILELIST, "%s", sqlite3_errmsg(job_data->db));
|
|
|
|
|
std::cerr << sqlite3_errmsg(job_data->db) << std::endl;
|
|
|
|
|
}
|
|
|
|
|
sqlite3_free(query);
|
|
|
|
|
g_free(search);
|
|
|
|
|
|
|
|
|
|
pk_backend_job_set_percentage(job, 100);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void pk_backend_get_details(PkBackendJob *job, char **package_ids)
|
|
|
|
@@ -308,7 +301,7 @@ void pk_backend_get_details(PkBackendJob *job, char **package_ids)
|
|
|
|
|
-1,
|
|
|
|
|
&stmt,
|
|
|
|
|
nullptr) != SQLITE_OK)) {
|
|
|
|
|
pk_backend_job_error_code(job, PK_ERROR_ENUM_CANNOT_GET_FILELIST, "%s", sqlite3_errmsg(job_data->db));
|
|
|
|
|
std::cerr << sqlite3_errmsg(job_data->db) << std::endl;
|
|
|
|
|
goto out;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -329,7 +322,7 @@ void pk_backend_get_details(PkBackendJob *job, char **package_ids)
|
|
|
|
|
&err);
|
|
|
|
|
if (err)
|
|
|
|
|
{
|
|
|
|
|
pk_backend_job_error_code(job, PK_ERROR_ENUM_UNKNOWN, "%s", err->message);
|
|
|
|
|
std::cerr << err->message << std::endl;
|
|
|
|
|
g_error_free(err);
|
|
|
|
|
goto out;
|
|
|
|
|
}
|
|
|
|
@@ -377,8 +370,6 @@ void pk_backend_resolve(PkBackendJob *job, char **packages)
|
|
|
|
|
PkInfoEnum ret;
|
|
|
|
|
auto job_data = static_cast<JobData *> (pk_backend_job_get_user_data(job));
|
|
|
|
|
|
|
|
|
|
pk_backend_job_set_percentage(job, 0);
|
|
|
|
|
|
|
|
|
|
if ((sqlite3_prepare_v2(job_data->db,
|
|
|
|
|
"SELECT (p1.name || ';' || p1.ver || ';' || p1.arch || ';' || r.repo), p1.summary, "
|
|
|
|
|
"p1.full_name FROM pkglist AS p1 NATURAL JOIN repos AS r "
|
|
|
|
@@ -412,11 +403,11 @@ void pk_backend_resolve(PkBackendJob *job, char **packages)
|
|
|
|
|
sqlite3_reset(stmt);
|
|
|
|
|
}
|
|
|
|
|
sqlite3_finalize(stmt);
|
|
|
|
|
} else {
|
|
|
|
|
pk_backend_job_error_code(job, PK_ERROR_ENUM_CANNOT_GET_FILELIST, "%s", sqlite3_errmsg(job_data->db));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pk_backend_job_set_percentage(job, 100);
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
std::cerr << sqlite3_errmsg(job_data->db) << std::endl;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void pk_backend_download_packages(PkBackendJob *job, char **package_ids, const char *directory)
|
|
|
|
@@ -433,7 +424,7 @@ void pk_backend_download_packages(PkBackendJob *job, char **package_ids, const c
|
|
|
|
|
&stmt,
|
|
|
|
|
nullptr) != SQLITE_OK))
|
|
|
|
|
{
|
|
|
|
|
pk_backend_job_error_code(job, PK_ERROR_ENUM_CANNOT_GET_FILELIST, "%s", sqlite3_errmsg(job_data->db));
|
|
|
|
|
std::cerr << sqlite3_errmsg(job_data->db) << std::endl;
|
|
|
|
|
goto out;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -496,7 +487,7 @@ void pk_backend_install_packages(PkBackendJob *job, char **package_ids)
|
|
|
|
|
&collection_stmt,
|
|
|
|
|
nullptr) != SQLITE_OK))
|
|
|
|
|
{
|
|
|
|
|
pk_backend_job_error_code(job, PK_ERROR_ENUM_CANNOT_GET_FILELIST, "%s", sqlite3_errmsg(job_data->db));
|
|
|
|
|
std::cerr << sqlite3_errmsg(job_data->db) << std::endl;
|
|
|
|
|
goto out;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -613,7 +604,7 @@ void pk_backend_remove_packages(PkBackendJob *job, char **package_ids)
|
|
|
|
|
|
|
|
|
|
if (err)
|
|
|
|
|
{
|
|
|
|
|
pk_backend_job_error_code(job, PK_ERROR_ENUM_PACKAGE_FAILED_TO_REMOVE, "%s", err->message);
|
|
|
|
|
std::cerr << err->message << std::endl;
|
|
|
|
|
g_error_free(err);
|
|
|
|
|
|
|
|
|
|
return;
|
|
|
|
@@ -643,7 +634,7 @@ void pk_backend_get_updates(PkBackendJob *job)
|
|
|
|
|
&stmt,
|
|
|
|
|
nullptr) != SQLITE_OK))
|
|
|
|
|
{
|
|
|
|
|
pk_backend_job_error_code(job, PK_ERROR_ENUM_CANNOT_GET_FILELIST, "%s", sqlite3_errmsg(job_data->db));
|
|
|
|
|
std::cerr << sqlite3_errmsg(job_data->db) << std::endl;
|
|
|
|
|
goto out;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -656,7 +647,7 @@ void pk_backend_get_updates(PkBackendJob *job)
|
|
|
|
|
g_object_unref(pkg_metadata_dir);
|
|
|
|
|
if (err)
|
|
|
|
|
{
|
|
|
|
|
pk_backend_job_error_code(job, PK_ERROR_ENUM_NO_CACHE, "/var/log/packages: %s", err->message);
|
|
|
|
|
std::cerr << "/var/log/packages: " << err->message << std::endl;
|
|
|
|
|
g_error_free(err);
|
|
|
|
|
goto out;
|
|
|
|
|
}
|
|
|
|
@@ -792,7 +783,7 @@ void pk_backend_refresh_cache(PkBackendJob *job, bool force)
|
|
|
|
|
tmp_dir_name = g_dir_make_tmp("PackageKit.XXXXXX", &err);
|
|
|
|
|
if (!tmp_dir_name)
|
|
|
|
|
{
|
|
|
|
|
pk_backend_job_error_code(job, PK_ERROR_ENUM_INTERNAL_ERROR, "%s", err->message);
|
|
|
|
|
std::cerr << err->message << std::endl;
|
|
|
|
|
g_error_free(err);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
@@ -805,7 +796,7 @@ void pk_backend_refresh_cache(PkBackendJob *job, bool force)
|
|
|
|
|
file_info = g_file_query_info(db_file, "time::modified-usec", G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, nullptr, &err);
|
|
|
|
|
if (err)
|
|
|
|
|
{
|
|
|
|
|
pk_backend_job_error_code(job, PK_ERROR_ENUM_NO_CACHE, "%s: %s", path, err->message);
|
|
|
|
|
std::cerr << path << ": " << err->message;
|
|
|
|
|
g_error_free(err);
|
|
|
|
|
goto out;
|
|
|
|
|
}
|
|
|
|
@@ -816,11 +807,7 @@ void pk_backend_refresh_cache(PkBackendJob *job, bool force)
|
|
|
|
|
nullptr);
|
|
|
|
|
if ((ret != SQLITE_OK) || ((ret = sqlite3_step(stmt)) != SQLITE_ROW))
|
|
|
|
|
{
|
|
|
|
|
pk_backend_job_error_code(job,
|
|
|
|
|
PK_ERROR_ENUM_NO_CACHE,
|
|
|
|
|
"%s: %s",
|
|
|
|
|
path,
|
|
|
|
|
sqlite3_errstr(ret));
|
|
|
|
|
std::cerr << path << ": " << sqlite3_errstr(ret) << std::endl;
|
|
|
|
|
goto out;
|
|
|
|
|
}
|
|
|
|
|
if ((std::uint32_t) sqlite3_column_int(stmt, 0) > g_file_info_get_attribute_uint32(file_info, "time::modified-usec"))
|
|
|
|
@@ -832,7 +819,7 @@ void pk_backend_refresh_cache(PkBackendJob *job, bool force)
|
|
|
|
|
{
|
|
|
|
|
if (sqlite3_exec(job_data->db, "DELETE FROM repos", nullptr, 0, &db_err) != SQLITE_OK)
|
|
|
|
|
{
|
|
|
|
|
pk_backend_job_error_code(job, PK_ERROR_ENUM_INTERNAL_ERROR, "%s", db_err);
|
|
|
|
|
std::cerr << db_err << std::endl;
|
|
|
|
|
sqlite3_free(db_err);
|
|
|
|
|
goto out;
|
|
|
|
|
}
|
|
|
|
|