changeset 6171:635b58fe8287 HEAD

Added mail_index_ext_get_reset_id() which returns the latest reset_id when using transaction views.
author Timo Sirainen <tss@iki.fi>
date Mon, 06 Aug 2007 17:28:55 +0300
parents 808c43283c98
children b31c368b150b
files src/lib-index/mail-index-dummy-view.c src/lib-index/mail-index-transaction-view.c src/lib-index/mail-index-view-private.h src/lib-index/mail-index-view.c src/lib-index/mail-index.h
diffstat 5 files changed, 48 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-index/mail-index-dummy-view.c	Mon Aug 06 17:12:08 2007 +0300
+++ b/src/lib-index/mail-index-dummy-view.c	Mon Aug 06 17:28:55 2007 +0300
@@ -28,6 +28,7 @@
 	NULL,
 	NULL,
 	NULL,
+	NULL,
 	NULL
 };
 
--- a/src/lib-index/mail-index-transaction-view.c	Mon Aug 06 17:12:08 2007 +0300
+++ b/src/lib-index/mail-index-transaction-view.c	Mon Aug 06 17:28:55 2007 +0300
@@ -221,6 +221,23 @@
 					    data_r, data_size_r);
 }
 
+static bool _tview_ext_get_reset_id(struct mail_index_view *view,
+				    uint32_t ext_id, uint32_t *reset_id_r)
+{
+	struct mail_index_view_transaction *tview =
+		(struct mail_index_view_transaction *)view;
+	const uint32_t *reset_id_p;
+
+	if (array_is_created(&tview->t->ext_reset_ids) &&
+	    ext_id < array_count(&tview->t->ext_reset_ids)) {
+		reset_id_p = array_idx(&tview->t->ext_reset_ids, ext_id);
+		*reset_id_r = *reset_id_p;
+		return TRUE;
+	}
+
+	return tview->super->ext_get_reset_id(view, ext_id, reset_id_r);
+}
+
 static struct mail_index_view_vfuncs trans_view_vfuncs = {
 	_tview_close,
         _tview_get_message_count,
@@ -230,7 +247,8 @@
 	_tview_lookup_uid_range,
 	_tview_lookup_first,
 	_tview_lookup_ext_full,
-	_tview_get_header_ext
+	_tview_get_header_ext,
+	_tview_ext_get_reset_id
 };
 
 struct mail_index_view *
--- a/src/lib-index/mail-index-view-private.h	Mon Aug 06 17:12:08 2007 +0300
+++ b/src/lib-index/mail-index-view-private.h	Mon Aug 06 17:28:55 2007 +0300
@@ -31,6 +31,8 @@
 	int (*get_header_ext)(struct mail_index_view *view,
 			      struct mail_index_map *map, uint32_t ext_id,
 			      const void **data_r, size_t *data_size_r);
+	bool (*ext_get_reset_id)(struct mail_index_view *view,
+				 uint32_t ext_id, uint32_t *reset_id_r);
 };
 
 union mail_index_view_module_context {
--- a/src/lib-index/mail-index-view.c	Mon Aug 06 17:12:08 2007 +0300
+++ b/src/lib-index/mail-index-view.c	Mon Aug 06 17:28:55 2007 +0300
@@ -426,6 +426,20 @@
 	return 0;
 }
 
+static bool _view_ext_get_reset_id(struct mail_index_view *view,
+				   uint32_t ext_id, uint32_t *reset_id_r)
+{
+	const struct mail_index_ext *ext;
+	uint32_t idx;
+
+	if (!mail_index_map_get_ext_idx(view->map, ext_id, &idx))
+		return FALSE;
+
+	ext = array_idx(&view->map->extensions, idx);
+	*reset_id_r = ext->reset_id;
+	return TRUE;
+}
+
 void mail_index_view_close(struct mail_index_view **_view)
 {
 	struct mail_index_view *view = *_view;
@@ -589,6 +603,12 @@
 	return view->v.get_header_ext(view, map, ext_id, data_r, data_size_r);
 }
 
+bool mail_index_ext_get_reset_id(struct mail_index_view *view,
+				 uint32_t ext_id, uint32_t *reset_id_r)
+{
+	return view->v.ext_get_reset_id(view, ext_id, reset_id_r);
+}
+
 int mail_index_ext_get_size(struct mail_index_view *view __attr_unused__,
 			    uint32_t ext_id, struct mail_index_map *map,
 			    uint32_t *hdr_size_r, uint16_t *record_size_r,
@@ -629,7 +649,8 @@
 	_view_lookup_uid_range,
 	_view_lookup_first,
 	_view_lookup_ext_full,
-	_view_get_header_ext
+	_view_get_header_ext,
+	_view_ext_get_reset_id
 };
 
 struct mail_index_view *
@@ -669,7 +690,7 @@
 	uint32_t idx;
 
 	if (!mail_index_map_get_ext_idx(view->map, ext_id, &idx))
-		return 0;
+		return NULL;
 
 	return array_idx(&view->map->extensions, idx);
 }
--- a/src/lib-index/mail-index.h	Mon Aug 06 17:12:08 2007 +0300
+++ b/src/lib-index/mail-index.h	Mon Aug 06 17:28:55 2007 +0300
@@ -407,6 +407,9 @@
    clear any existing record or header data. */
 void mail_index_ext_set_reset_id(struct mail_index_transaction *t,
 				 uint32_t ext_id, uint32_t reset_id);
+/* Get the current reset_id for given extension. Returns TRUE if it exists. */
+bool mail_index_ext_get_reset_id(struct mail_index_view *view,
+				 uint32_t ext_id, uint32_t *reset_id_r);
 
 /* Returns extension header. */
 int mail_index_get_header_ext(struct mail_index_view *view, uint32_t ext_id,