Changeset 5074:d10bc7f74089 for imap

Show
Ignore:
Timestamp:
2007-04-05 18:03:05 (20 months ago)
Author:
Brendan Cully <brendan@…>
Branch:
HEAD
Message:

IMAP header cache API improvements.

Location:
imap
Files:
3 modified

Legend:

Unmodified
Added
Removed
  • imap/imap_private.h

    r5073 r5074  
    261261#ifdef USE_HCACHE 
    262262header_cache_t* imap_hcache_open (IMAP_DATA* idata, const char* path); 
     263HEADER* imap_hcache_get (IMAP_DATA* idata, unsigned int uid); 
     264int imap_hcache_put (IMAP_DATA* idata, HEADER* h); 
    263265#endif 
    264266 
  • imap/message.c

    r5073 r5074  
    7979  unsigned int *uidnext = NULL; 
    8080  int evalhc = 0; 
    81   char uid_buf[64]; 
    8281#endif /* USE_HCACHE */ 
    8382 
     
    169168 
    170169        idx = h.sid - 1; 
    171         sprintf(uid_buf, "/%u", h.data->uid); /* XXX --tg 21:41 04-07-11 */ 
    172         uid_validity = (unsigned int*)mutt_hcache_fetch (idata->hcache, uid_buf, &imap_hcache_keylen); 
    173  
    174         if (uid_validity != NULL && *uid_validity == idata->uid_validity) 
     170        ctx->hdrs[idx] = imap_hcache_get (idata, h.data->uid); 
     171        if (ctx->hdrs[idx]) 
    175172        { 
    176           ctx->hdrs[idx] = mutt_hcache_restore((unsigned char *) uid_validity, 0); 
    177173          ctx->hdrs[idx]->index = idx; 
    178174          /* messages which have not been expunged are ACTIVE (borrowed from mh  
     
    195191           * TODO: consider the possibility of a holey cache. */ 
    196192          imap_free_header_data((void**) &h.data); 
    197    
    198         FREE(&uid_validity); 
    199193      } 
    200194      while (rc != IMAP_CMD_OK && mfhrc == -1); 
     
    294288 
    295289#if USE_HCACHE 
    296       sprintf(uid_buf, "/%u", h.data->uid); 
    297       mutt_hcache_store(idata->hcache, uid_buf, ctx->hdrs[idx], idata->uid_validity, &imap_hcache_keylen); 
     290      imap_hcache_put (idata, ctx->hdrs[idx]); 
    298291#endif /* USE_HCACHE */ 
    299292 
  • imap/util.c

    r5073 r5074  
    2929#include "mutt_ssl.h" 
    3030#ifdef USE_HCACHE 
     31#include "message.h" 
    3132#include "hcache.h" 
    3233#endif 
     
    8687 
    8788  return mutt_hcache_open (HeaderCache, cachepath); 
     89} 
     90 
     91HEADER* imap_hcache_get (IMAP_DATA* idata, unsigned int uid) 
     92{ 
     93  char key[16]; 
     94  unsigned int* uv; 
     95  HEADER* h = NULL; 
     96 
     97  sprintf(key, "/%u", uid); 
     98  uv = (unsigned int*)mutt_hcache_fetch (idata->hcache, key, 
     99                                         imap_hcache_keylen); 
     100  if (uv) 
     101  { 
     102    if (*uv == idata->uid_validity) 
     103      h = mutt_hcache_restore ((unsigned char*)uv, NULL); 
     104    FREE (&uv); 
     105  } 
     106 
     107  return h; 
     108} 
     109 
     110int imap_hcache_put (IMAP_DATA* idata, HEADER* h) 
     111{ 
     112  char key[16]; 
     113 
     114  sprintf(key, "/%u", HEADER_DATA (h)->uid); 
     115  return mutt_hcache_store (idata->hcache, key, h, idata->uid_validity, 
     116                            imap_hcache_keylen); 
    88117} 
    89118#endif