diff options
Diffstat (limited to 'backend/pkgtools.cc')
| -rw-r--r-- | backend/pkgtools.cc | 182 |
1 files changed, 83 insertions, 99 deletions
diff --git a/backend/pkgtools.cc b/backend/pkgtools.cc index ebbd838..940ce19 100644 --- a/backend/pkgtools.cc +++ b/backend/pkgtools.cc @@ -12,7 +12,7 @@ namespace katja { /** * katja::Pkgtools::download: - * @job: A #PkBackendJob. + * @job_data: A #JobData. * @dest_dir_name: Destination directory. * @pkg_name: Package name. * @@ -20,57 +20,47 @@ namespace katja * * Returns: %TRUE on success, %FALSE otherwise. **/ -bool -Pkgtools::download (JobData *job_data, - char *dest_dir_name, char *pkg_name) noexcept +bool Pkgtools::download(JobData *job_data, char *dest_dir_name, char *pkg_name) noexcept { - char *dest_filename, *source_url; - bool ret = false; - sqlite3_stmt *statement = nullptr; - CURL *curl = nullptr; - - if ((sqlite3_prepare_v2(job_data->db, - "SELECT location, (full_name || '.' || ext) FROM pkglist " - "WHERE name LIKE @name AND repo_order = @repo_order", - -1, - &statement, - nullptr) != SQLITE_OK)) - return false; - - sqlite3_bind_text(statement, 1, pkg_name, -1, SQLITE_TRANSIENT); - sqlite3_bind_int(statement, 2, this->get_order ()); - - if (sqlite3_step(statement) == SQLITE_ROW) - { - dest_filename = g_build_filename(dest_dir_name, sqlite3_column_text(statement, 1), nullptr); - source_url = g_strconcat(this->get_mirror (), - sqlite3_column_text(statement, 0), - "/", - sqlite3_column_text(statement, 1), - nullptr); - - if (!g_file_test(dest_filename, G_FILE_TEST_EXISTS)) - { - if (get_file(&curl, source_url, dest_filename) == CURLE_OK) - { - ret = true; - } - } - else - { - ret = true; - } - - if (curl) - { - curl_easy_cleanup(curl); - } - g_free(source_url); - g_free(dest_filename); - } - sqlite3_finalize(statement); - - return ret; + char *dest_filename, *source_url; + bool ret = false; + sqlite3_stmt *statement = nullptr; + CURL *curl = nullptr; + + if ((sqlite3_prepare_v2(job_data->db, + "SELECT location, (full_name || '.' || ext) FROM pkglist " + "WHERE name LIKE @name AND repo_order = @repo_order", + -1, + &statement, + nullptr) != SQLITE_OK)) + { + return false; + } + sqlite3_bind_text(statement, 1, pkg_name, -1, SQLITE_TRANSIENT); + sqlite3_bind_int(statement, 2, this->get_order()); + + if (sqlite3_step(statement) == SQLITE_ROW) + { + dest_filename = g_build_filename(dest_dir_name, sqlite3_column_text(statement, 1), nullptr); + source_url = g_strconcat(this->get_mirror(), + sqlite3_column_text(statement, 0), + "/", + sqlite3_column_text(statement, 1), + nullptr); + + ret = g_file_test(dest_filename, G_FILE_TEST_EXISTS) + || get_file(&curl, source_url, dest_filename) == CURLE_OK; + + if (curl) + { + curl_easy_cleanup(curl); + } + g_free(source_url); + g_free(dest_filename); + } + sqlite3_finalize(statement); + + return ret; } /** @@ -80,43 +70,42 @@ Pkgtools::download (JobData *job_data, * * Install a package. **/ -void -Pkgtools::install (JobData *job_data, char *pkg_name) noexcept +void Pkgtools::install(JobData *job_data, char *pkg_name) noexcept { - char *pkg_filename, *cmd_line; - sqlite3_stmt *statement = nullptr; - - if ((sqlite3_prepare_v2(job_data->db, - "SELECT (full_name || '.' || ext) FROM pkglist " - "WHERE name LIKE @name AND repo_order = @repo_order", - -1, - &statement, - nullptr) != SQLITE_OK)) - { - return; - } - - sqlite3_bind_text(statement, 1, pkg_name, -1, SQLITE_TRANSIENT); - sqlite3_bind_int(statement, 2, this->get_order ()); - - if (sqlite3_step(statement) == SQLITE_ROW) - { - pkg_filename = g_build_filename(LOCALSTATEDIR, - "cache", - "PackageKit", - "downloads", - sqlite3_column_text(statement, 0), - nullptr); - cmd_line = g_strconcat("/sbin/upgradepkg --install-new ", pkg_filename, nullptr); - g_spawn_command_line_sync(cmd_line, nullptr, nullptr, nullptr, nullptr); - g_free(cmd_line); - - g_free(pkg_filename); - } - sqlite3_finalize(statement); + char *pkg_filename, *cmd_line; + sqlite3_stmt *statement = nullptr; + + if ((sqlite3_prepare_v2(job_data->db, + "SELECT (full_name || '.' || ext) FROM pkglist " + "WHERE name LIKE @name AND repo_order = @repo_order", + -1, + &statement, + nullptr) != SQLITE_OK)) + { + return; + } + + sqlite3_bind_text(statement, 1, pkg_name, -1, SQLITE_TRANSIENT); + sqlite3_bind_int(statement, 2, this->get_order()); + + if (sqlite3_step(statement) == SQLITE_ROW) + { + pkg_filename = g_build_filename(LOCALSTATEDIR, + "cache", + "PackageKit", + "downloads", + sqlite3_column_text(statement, 0), + nullptr); + cmd_line = g_strconcat("/sbin/upgradepkg --install-new ", pkg_filename, nullptr); + g_spawn_command_line_sync(cmd_line, nullptr, nullptr, nullptr, nullptr); + g_free(cmd_line); + + g_free(pkg_filename); + } + sqlite3_finalize(statement); } -Pkgtools::~Pkgtools () noexcept +Pkgtools::~Pkgtools() noexcept { } @@ -127,10 +116,9 @@ Pkgtools::~Pkgtools () noexcept * * Returns: Repository name. **/ -const char * -Pkgtools::get_name () const noexcept +const char *Pkgtools::get_name() const noexcept { - return this->name; + return this->name; } /** @@ -140,10 +128,9 @@ Pkgtools::get_name () const noexcept * * Returns: Repository mirror. **/ -const char * -Pkgtools::get_mirror () const noexcept +const char *Pkgtools::get_mirror() const noexcept { - return this->mirror; + return this->mirror; } /** @@ -153,10 +140,9 @@ Pkgtools::get_mirror () const noexcept * * Returns: Repository order. **/ -guint8 -Pkgtools::get_order () const noexcept +guint8 Pkgtools::get_order() const noexcept { - return this->order; + return this->order; } /** @@ -167,12 +153,10 @@ Pkgtools::get_order () const noexcept * * Returns: %TRUE if the package is blacklisted, %FALSE otherwise. **/ -bool -Pkgtools::is_blacklisted (const char *pkg) const noexcept +bool Pkgtools::is_blacklisted(const char *pkg) const noexcept { - return this->blacklist - && g_regex_match (this->blacklist, - pkg, static_cast<GRegexMatchFlags> (0), nullptr); + return this->blacklist + && g_regex_match (this->blacklist, pkg, static_cast<GRegexMatchFlags>(0), nullptr); } } |
