int index_mailbox_get_metadata(struct mailbox *box, enum mailbox_metadata_items items, struct mailbox_metadata *metadata_r) { if (!box->opened) { if (mailbox_open(box) < 0) return -1; } if (!box->synced && (items & MAILBOX_METADATA_SYNC_ITEMS) != 0) { if (mailbox_sync(box, MAILBOX_SYNC_FLAG_FAST) < 0) return -1; } if ((items & MAILBOX_METADATA_VIRTUAL_SIZE) != 0) { if (get_metadata_virtual_size(box, metadata_r) < 0) return -1; } if ((items & MAILBOX_METADATA_CACHE_FIELDS) != 0) get_metadata_cache_fields(box, metadata_r); if ((items & MAILBOX_METADATA_PRECACHE_FIELDS) != 0) get_metadata_precache_fields(box, metadata_r); if ((items & MAILBOX_METADATA_BACKEND_NAMESPACE) != 0) { metadata_r->backend_ns_prefix = ""; metadata_r->backend_ns_type = mailbox_list_get_namespace(box->list)->type; } return 0; }
int index_mailbox_get_metadata(struct mailbox *box, enum mailbox_metadata_items items, struct mailbox_metadata *metadata_r) { /* handle items that don't require opening the mailbox */ if ((items & MAILBOX_METADATA_BACKEND_NAMESPACE) != 0) { metadata_r->backend_ns_prefix = ""; metadata_r->backend_ns_type = mailbox_list_get_namespace(box->list)->type; items &= ~MAILBOX_METADATA_BACKEND_NAMESPACE; } if (items == 0) return 0; /* handle items that require opening the mailbox */ if (!box->opened) { if (mailbox_open(box) < 0) return -1; } if (!box->synced && (items & MAILBOX_METADATA_SYNC_ITEMS) != 0) { if (mailbox_sync(box, MAILBOX_SYNC_FLAG_FAST) < 0) return -1; } if ((items & MAILBOX_METADATA_VIRTUAL_SIZE) != 0) { if (index_mailbox_get_virtual_size(box, metadata_r) < 0) return -1; } if ((items & MAILBOX_METADATA_PHYSICAL_SIZE) != 0) { if (index_mailbox_get_physical_size(box, metadata_r) < 0) return -1; } if ((items & MAILBOX_METADATA_FIRST_SAVE_DATE) != 0) { if (index_mailbox_get_first_save_date(box, metadata_r) < 0) return -1; } if ((items & MAILBOX_METADATA_CACHE_FIELDS) != 0) get_metadata_cache_fields(box, metadata_r); if ((items & MAILBOX_METADATA_PRECACHE_FIELDS) != 0) get_metadata_precache_fields(box, metadata_r); return 0; }