diff options
Diffstat (limited to 'backend/job.cc')
| -rw-r--r-- | backend/job.cc | 50 |
1 files changed, 11 insertions, 39 deletions
diff --git a/backend/job.cc b/backend/job.cc index 4dcb232..d1c6c81 100644 --- a/backend/job.cc +++ b/backend/job.cc @@ -7,6 +7,8 @@ #include <string> #include "utils.h" +#include <pk-backend.h> +#include <pk-backend-job.h> namespace slack { @@ -25,34 +27,6 @@ filter_package (PkBitfield filters, bool is_installed) return false; } -static std::string -generate_query(PkBitfield filters) -{ - std::string query( - "SELECT (p1.name || ';' || p1.ver || ';' || p1.arch || ';' || r.repo), p1.summary, " - "p1.full_name FROM pkglist AS p1 NATURAL JOIN repos AS r " - "WHERE p1.%s LIKE '%%%q%%' AND p1.ext NOT LIKE 'obsolete' AND p1.repo_order = " - "(SELECT MIN(p2.repo_order) FROM pkglist AS p2 WHERE p2.name = p1.name GROUP BY p2.name)"); - - if (pk_bitfield_contain (filters, PK_FILTER_ENUM_APPLICATION)) - { - query.append( - " AND EXISTS (SELECT filelist.full_name " - "FROM filelist " - "WHERE filelist.full_name = p1.full_name " - "AND filelist.filename LIKE 'usr/share/applications/%%.desktop')"); - } - else if (pk_bitfield_contain (filters, PK_FILTER_ENUM_NOT_APPLICATION)) - { - query.append( - " AND NOT EXISTS (SELECT filelist.full_name " - "FROM filelist " - "WHERE filelist.full_name = p1.full_name " - "AND filelist.filename LIKE 'usr/share/applications/%%.desktop')"); - } - return query; -} - } void @@ -60,16 +34,16 @@ pk_backend_search_thread (PkBackendJob *job, GVariant *params, void *user_data) { auto job_data = reinterpret_cast<slack::JobData *> (pk_backend_job_get_user_data (job)); - pk_backend_job_set_status (job, PK_STATUS_ENUM_QUERY); - pk_backend_job_set_percentage (job, 0); - char **vals; PkBitfield filters; g_variant_get (params, "(t^a&s)", &filters, &vals); char *search = g_strjoinv ("%", vals); - char *query = sqlite3_mprintf (slack::generate_query(filters).c_str(), - user_data, search); + const char *generate_query = "SELECT (p1.name || ';' || p1.ver || ';' || p1.arch || ';' || r.repo), p1.summary, " + "p1.full_name FROM pkglist AS p1 NATURAL JOIN repos AS r " + "WHERE p1.%s LIKE '%%%q%%' AND p1.ext NOT LIKE 'obsolete' AND p1.repo_order = " + "(SELECT MIN(p2.repo_order) FROM pkglist AS p2 WHERE p2.name = p1.name GROUP BY p2.name)"; + char *query = sqlite3_mprintf (generate_query, user_data, search); sqlite3_stmt *stmt; if ((sqlite3_prepare_v2 (job_data->db, query, -1, &stmt, nullptr) == SQLITE_OK)) @@ -77,17 +51,17 @@ pk_backend_search_thread (PkBackendJob *job, GVariant *params, void *user_data) /* Now we're ready to output all packages */ while (sqlite3_step (stmt) == SQLITE_ROW) { - PkInfoEnum info = slack::is_installed ( + slack::Info info = slack::is_installed ( reinterpret_cast<const char *> (sqlite3_column_text (stmt, 2))); - if ((info == PK_INFO_ENUM_INSTALLED || info == PK_INFO_ENUM_UPDATING) + if ((info == slack::Info::installed || info == slack::Info::updating) && slack::filter_package (filters, true)) { - pk_backend_job_package (job, PK_INFO_ENUM_INSTALLED, + pk_backend_job_package (job, slack::Info::installed, reinterpret_cast<const char *> (sqlite3_column_text (stmt, 0)), reinterpret_cast<const char *> (sqlite3_column_text (stmt, 1))); } - else if (info == PK_INFO_ENUM_INSTALLING && slack::filter_package (filters, false)) + else if (info == slack::Info::installing && slack::filter_package (filters, false)) { pk_backend_job_package(job, PK_INFO_ENUM_AVAILABLE, reinterpret_cast<const char *> (sqlite3_column_text (stmt, 0)), @@ -104,6 +78,4 @@ pk_backend_search_thread (PkBackendJob *job, GVariant *params, void *user_data) sqlite3_free (query); g_free (search); - - pk_backend_job_set_percentage (job, 100); } |
