summaryrefslogtreecommitdiff
path: root/backends
diff options
context:
space:
mode:
authorCarson Black <uhhadd@gmail.com>2020-03-15 21:34:20 -0400
committerRichard Hughes <richard@hughsie.com>2020-03-23 18:03:03 +0000
commiteba92454d3582fe7b038fe38003f5e24a699d8b0 (patch)
treec9eaff2cf119145ac47d1416c7a883edb78fcbcf /backends
parent19256270c30d90cc3200676b05b632f3e9debfa1 (diff)
Alpm: Updates-changed implementation
Diffstat (limited to 'backends')
-rw-r--r--backends/alpm/pk-alpm-update.c31
1 files changed, 31 insertions, 0 deletions
diff --git a/backends/alpm/pk-alpm-update.c b/backends/alpm/pk-alpm-update.c
index 4b3b13f5a..029a08c8d 100644
--- a/backends/alpm/pk-alpm-update.c
+++ b/backends/alpm/pk-alpm-update.c
@@ -29,6 +29,8 @@
#include <sys/types.h>
#include <utime.h>
#include <errno.h>
+#include <stdio.h>
+#include <syslog.h>
#include "pk-backend-alpm.h"
#include "pk-alpm-error.h"
@@ -420,9 +422,12 @@ pk_backend_get_updates_thread (PkBackendJob *job, GVariant* params, gpointer p)
{
PkBackend *backend = pk_backend_job_get_backend (job);
PkBackendAlpmPrivate *priv = pk_backend_get_user_data (backend);
+ int update_count = 0;
const alpm_list_t *i, *syncdbs;
g_autoptr(GError) error = NULL;
PkBitfield filters = 0;
+ FILE *file;
+ int stored_count;
if (!pk_alpm_update_databases (job, 0, &error)) {
return pk_alpm_error_emit (job, error);
@@ -455,8 +460,34 @@ pk_backend_get_updates_thread (PkBackendJob *job, GVariant* params, gpointer p)
if (pk_bitfield_contain (filters, PK_FILTER_ENUM_NOT_DOWNLOADED) && pk_alpm_update_is_pkg_downloaded (upgrade))
continue;
+ update_count++;
pk_alpm_pkg_emit (job, upgrade, info);
}
+
+ if (g_file_test("/tmp/packagekit-alpm-updates", G_FILE_TEST_EXISTS)) {
+ file = fopen("/tmp/packagekit-alpm-updates", "r");
+
+ if (file != NULL) {
+ fscanf(file, "%d", &stored_count);
+ if (stored_count != update_count) {
+ g_signal_emit_by_name(backend, "updates-changed");
+ }
+ fclose(file);
+ } else {
+ syslog( LOG_DAEMON | LOG_WARNING, "Failed to open file /tmp/packagekit-alpm-updates for reading");
+ g_signal_emit_by_name(backend, "updates-changed");
+ }
+ } else {
+ g_signal_emit_by_name(backend, "updates-changed");
+ }
+
+ file = fopen("/tmp/packagekit-alpm-updates", "w");
+ if (file != NULL) {
+ fprintf(file, "%d", update_count);
+ fclose(file);
+ } else {
+ syslog( LOG_DAEMON | LOG_WARNING, "Failed to open file /tmp/packagekit-alpm-updates for writing");
+ }
}
void