From d9b3260640d12ec64f42cde961c619cded365f74 Mon Sep 17 00:00:00 2001
From: guinux <nuxgui@gmail.com>
Date: Sat, 19 May 2018 10:20:10 +0200
Subject: [PATCH] refresh files dbs only in background

---
 src/system_daemon.vala |  7 +++++--
 src/transaction.vala   |  5 ++---
 src/tray.vala          |  4 ++--
 src/user_daemon.vala   | 33 ++++++++++++++++++---------------
 4 files changed, 27 insertions(+), 22 deletions(-)

diff --git a/src/system_daemon.vala b/src/system_daemon.vala
index bb0f809b..0eaf9f50 100644
--- a/src/system_daemon.vala
+++ b/src/system_daemon.vala
@@ -451,8 +451,11 @@ namespace Pamac {
 				refresh_finished (false);
 				return;
 			}
-			// update ".files", do not need to know if we succeeded
-			update_dbs (files_handle, force);
+			// only refresh ".files" if force
+			if (force_refresh) {
+				// update ".files", do not need to know if we succeeded
+				update_dbs (files_handle, force);
+			}
 			if (cancellable.is_cancelled ()) {
 				refresh_finished (false);
 			} else if (success) {
diff --git a/src/transaction.vala b/src/transaction.vala
index 47b902e8..2f1960a7 100644
--- a/src/transaction.vala
+++ b/src/transaction.vala
@@ -49,7 +49,7 @@ namespace Pamac {
 		public abstract string[] get_pkg_files (string pkgname) throws Error;
 		public abstract async AURPackageDetails get_aur_details (string pkgname) throws Error;
 		public abstract string[] get_pkg_uninstalled_optdeps (string pkgname) throws Error;
-		public abstract void start_get_updates (bool check_aur_updates) throws Error;
+		public abstract void start_get_updates (bool check_aur_updates, bool refresh_files_dbs) throws Error;
 		[DBus (no_reply = true)]
 		public abstract void quit () throws Error;
 		public signal void emit_get_updates_progress (uint percent);
@@ -793,7 +793,7 @@ namespace Pamac {
 			user_daemon.emit_get_updates_progress.connect (on_emit_get_updates_progress);
 			user_daemon.get_updates_finished.connect (on_get_updates_finished);
 			try {
-				user_daemon.start_get_updates (pamac_config.enable_aur && pamac_config.check_aur_updates);
+				user_daemon.start_get_updates (pamac_config.enable_aur && pamac_config.check_aur_updates, false);
 			} catch (Error e) {
 				stderr.printf ("Error: %s\n", e.message);
 				success = false;
@@ -843,7 +843,6 @@ namespace Pamac {
 
 		void on_emit_get_updates_progress (uint percent) {
 			get_updates_progress (percent);
-			stdout.printf ("%u\n", percent);
 		}
 
 		void on_get_updates_finished (Updates updates) {
diff --git a/src/tray.vala b/src/tray.vala
index 4c7fc4b4..f6174c26 100644
--- a/src/tray.vala
+++ b/src/tray.vala
@@ -29,7 +29,7 @@ namespace Pamac {
 	interface UserDaemon : Object {
 		public abstract void refresh_handle () throws Error;
 		public abstract string get_lockfile () throws Error;
-		public abstract void start_get_updates (bool check_aur_updates) throws Error;
+		public abstract void start_get_updates (bool check_aur_updates, bool refresh_files_dbs) throws Error;
 		[DBus (no_reply = true)]
 		public abstract void quit () throws Error;
 		public signal void get_updates_finished (Updates updates);
@@ -117,7 +117,7 @@ namespace Pamac {
 			var pamac_config = new Pamac.Config ("/etc/pamac.conf");
 			if (pamac_config.refresh_period != 0) {
 				try {
-					daemon.start_get_updates (pamac_config.enable_aur && pamac_config.check_aur_updates);
+					daemon.start_get_updates (pamac_config.enable_aur && pamac_config.check_aur_updates, true);
 				} catch (Error e) {
 					stderr.printf ("Error: %s\n", e.message);
 				}
diff --git a/src/user_daemon.vala b/src/user_daemon.vala
index b054b83b..27e5b5b1 100644
--- a/src/user_daemon.vala
+++ b/src/user_daemon.vala
@@ -88,6 +88,7 @@ namespace Pamac {
 		private AlpmPackage[] repos_updates;
 		private bool check_aur_updates;
 		private bool aur_updates_checked;
+		private bool refresh_files_dbs;
 		private AURPackage[] aur_updates;
 		private HashTable<string, Json.Array> aur_search_results;
 		private HashTable<string, Json.Object> aur_infos;
@@ -1217,7 +1218,7 @@ namespace Pamac {
 			// use a tmp handle
 			var tmp_handle = alpm_config.get_handle (false, true);
 			// refresh tmp dbs
-			// count this step as 45% of the total
+			// count this step as 90% of the total
 			emit_get_updates_progress (0);
 			unowned Alpm.List<unowned Alpm.DB> syncdbs = tmp_handle.syncdbs;
 			size_t dbs_count = syncdbs.length;
@@ -1227,20 +1228,21 @@ namespace Pamac {
 				db.update (0);
 				syncdbs.next ();
 				i++;
-				emit_get_updates_progress ((uint) ((double) i / dbs_count * (double) 45));
+				emit_get_updates_progress ((uint) ((double) i / dbs_count * (double) 90));
 			}
-			// refresh file dbs
-			// count this step as 45% of the total
-			var tmp_files_handle = alpm_config.get_handle (true, true);
-			syncdbs = tmp_files_handle.syncdbs;
-			dbs_count = syncdbs.length;
-			i = 0;
-			while (syncdbs != null) {
-				unowned Alpm.DB db = syncdbs.data;
-				db.update (0);
-				syncdbs.next ();
-				i++;
-				emit_get_updates_progress ((uint) ((double) 45 + (double) i / dbs_count * (double) 45));
+			if (refresh_files_dbs) {
+				// refresh file dbs
+				// do not send progress because it is done in background
+				var tmp_files_handle = alpm_config.get_handle (true, true);
+				syncdbs = tmp_files_handle.syncdbs;
+				dbs_count = syncdbs.length;
+				i = 0;
+				while (syncdbs != null) {
+					unowned Alpm.DB db = syncdbs.data;
+					db.update (0);
+					syncdbs.next ();
+					i++;
+				}
 			}
 			// check updates
 			// count this step as 5% of the total
@@ -1325,8 +1327,9 @@ namespace Pamac {
 			});
 		}
 
-		public void start_get_updates (bool check_aur_updates_) throws Error {
+		public void start_get_updates (bool check_aur_updates_, bool refresh_files_dbs_) throws Error {
 			check_aur_updates = check_aur_updates_;
+			refresh_files_dbs = refresh_files_dbs_;
 			new Thread<int> ("get updates thread", get_updates);
 		}
 
-- 
GitLab