summaryrefslogtreecommitdiff
path: root/backend/job.cc
diff options
context:
space:
mode:
Diffstat (limited to 'backend/job.cc')
-rw-r--r--backend/job.cc50
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);
}