void client_destroy(struct client *client, const char *reason)
{
+ if (client->seen_change_count > 0)
+ client_update_mails(client);
+
if (!client->disconnected) {
if (reason == NULL)
reason = client_get_disconnect_reason(client);
void client_send_storage_error(struct client *client);
bool client_handle_input(struct client *client);
+bool client_update_mails(struct client *client);
void clients_init(void);
void clients_deinit(void);
return search_args;
}
-static bool update_mails(struct client *client)
+bool client_update_mails(struct client *client)
{
struct mail_search_args *search_args;
struct mail_search_context *ctx;
}
mail_free(&mail);
+ client->seen_change_count = 0;
return mailbox_search_deinit(&ctx) == 0;
}
static int cmd_quit(struct client *client, const char *args ATTR_UNUSED)
{
if (client->deleted || client->seen_bitmask != NULL) {
- if (!update_mails(client)) {
+ if (!client_update_mails(client)) {
client_send_storage_error(client);
client_disconnect(client,
"Storage error during logout.");