lib: Report progress for combined upgrade operation

Previously, some parts of upgrade didn't report progress and for
others it was possible for the progress meter to restart at 0 part way
through the upgrade because each stage was reported separately.

Fix this by computing the total amount of work that needs to be done
up-front and updating completed work monotonically.
This commit is contained in:
Austin Clements 2014-08-25 13:26:06 -04:00 committed by David Bremner
parent e0635bd003
commit 02fec226fc

View file

@ -1241,6 +1241,19 @@ notmuch_database_upgrade (notmuch_database_t *notmuch,
timer_is_active = TRUE;
}
/* Figure out how much total work we need to do. */
if (new_features &
(NOTMUCH_FEATURE_FILE_TERMS | NOTMUCH_FEATURE_BOOL_FOLDER)) {
notmuch_query_t *query = notmuch_query_create (notmuch, "");
total += notmuch_query_count_messages (query);
notmuch_query_destroy (query);
}
if (new_features & NOTMUCH_FEATURE_DIRECTORY_DOCS) {
t_end = db->allterms_end ("XTIMESTAMP");
for (t = db->allterms_begin ("XTIMESTAMP"); t != t_end; t++)
++total;
}
/* Perform the upgrade in a transaction. */
db->begin_transaction (true);
@ -1256,8 +1269,6 @@ notmuch_database_upgrade (notmuch_database_t *notmuch,
notmuch_message_t *message;
char *filename;
total = notmuch_query_count_messages (query);
for (messages = notmuch_query_search_messages (query);
notmuch_messages_valid (messages);
notmuch_messages_move_to_next (messages))
@ -1340,6 +1351,8 @@ notmuch_database_upgrade (notmuch_database_t *notmuch,
db->delete_document (*p);
}
++count;
}
}