imap-message-cache.c revision d8e43743157d05e416eb5d3b45cddb3b3122dc07
9d453f1e8b28983b363b44c49b7cd701a994fd97Nikolai Kondrashov/* Copyright (C) 2002 Timo Sirainen */
8d1dcb6af723f2968410c4b088d06d63d02b4feaPavel Reichl/* It's not very useful to cache lots of messages, as they're mostly wanted
586f512ab8b6e5a03349598846141f43c1d505b8Michal Židek just once. The biggest reason for this cache to exist is to get just the
9d453f1e8b28983b363b44c49b7cd701a994fd97Nikolai Kondrashov latest message. */
8bdb8c0970dc9acb5b0a54dab0bae306ca964944Jakub Hrozek unsigned int uid;
e64696e1fab85c42aaeda65ddf49ee1b7e3f07e1Lukas SlebodnikImapMessageCache *imap_msgcache_alloc(ImapMessageCacheIface *iface)
52ae4eeba9c97c0254a2025ec3b5ffe90588b775Lukas Slebodnikstatic void cached_message_free(CachedMessage *msg)
52ae4eeba9c97c0254a2025ec3b5ffe90588b775Lukas Slebodnikvoid imap_msgcache_clear(ImapMessageCache *cache)
a3bed9df5a47bfc84b82341f0f7e693e2b14a67aLukas Slebodnikvoid imap_msgcache_free(ImapMessageCache *cache)
9d453f1e8b28983b363b44c49b7cd701a994fd97Nikolai Kondrashovstatic CachedMessage *cache_new(ImapMessageCache *cache, unsigned int uid)
9d453f1e8b28983b363b44c49b7cd701a994fd97Nikolai Kondrashov if (cache->messages_count < MAX_CACHED_MESSAGES)
9d453f1e8b28983b363b44c49b7cd701a994fd97Nikolai Kondrashov /* remove the last message from cache */
9d453f1e8b28983b363b44c49b7cd701a994fd97Nikolai Kondrashov pool = pool_create("CachedMessage", DEFAULT_MESSAGE_POOL_SIZE, FALSE);
9d453f1e8b28983b363b44c49b7cd701a994fd97Nikolai Kondrashovstatic CachedMessage *cache_open_or_create(ImapMessageCache *cache,
841bcb5e1f66bb9c41e1884a2ab1dae654def13eLukas Slebodnik unsigned int uid)
9d453f1e8b28983b363b44c49b7cd701a994fd97Nikolai Kondrashov for (; *pos != NULL; pos = &(*pos)->next) {
e64696e1fab85c42aaeda65ddf49ee1b7e3f07e1Lukas Slebodnik /* not found, add it */
e64696e1fab85c42aaeda65ddf49ee1b7e3f07e1Lukas Slebodnik /* move it to first in list */
return msg;
void *context)
return FALSE;
return TRUE;
const char *value;
int failed;
t_push();
TRUE);
value);
FALSE);
msg);
t_pop();
return !failed;
switch (field) {
case IMAP_CACHE_BODY:
case IMAP_CACHE_BODYSTRUCTURE:
case IMAP_CACHE_ENVELOPE:
i_unreached();
return NULL;
return FALSE;
return FALSE;
return FALSE;
return TRUE;
int *cr_skipped)
if (*cr_skipped) {
int size_got;
return FALSE;
if (virtual_skip == 0) {
return FALSE;
if (get_header)
if (get_header)
if (size_got) {
return FALSE;
if (!get_header)
return FALSE;
return TRUE;
return FALSE;
return TRUE;