1 /* 2 ** CWCacheManager.h 3 ** 4 ** Copyright (c) 2004-2007 Ludovic Marcotte 5 ** Copyright (C) 2013 The GNUstep team 6 ** 7 ** Author: Ludovic Marcotte <ludovic@Sophos.ca> 8 ** Riccardo Mottola 9 ** 10 ** This library is free software; you can redistribute it and/or 11 ** modify it under the terms of the GNU Lesser General Public 12 ** License as published by the Free Software Foundation; either 13 ** version 2.1 of the License, or (at your option) any later version. 14 ** 15 ** This library is distributed in the hope that it will be useful, 16 ** but WITHOUT ANY WARRANTY; without even the implied warranty of 17 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 18 ** Lesser General Public License for more details. 19 ** 20 ** You should have received a copy of the GNU General Public License 21 ** along with this program. If not, see <http://www.gnu.org/licenses/>. 22 */ 23 24 #ifndef _Pantomime_H_CWCacheManager 25 #define _Pantomime_H_CWCacheManager 26 27 #import <Foundation/NSArray.h> 28 #import <Foundation/NSCoder.h> 29 #import <Foundation/NSString.h> 30 31 #if defined(__APPLE__) && (MAC_OS_X_VERSION_MAX_ALLOWED <= MAC_OS_X_VERSION_10_4) 32 #ifndef NSUInteger 33 #define NSUInteger unsigned int 34 #define NSUIntegerMax UINT_MAX 35 #endif 36 #endif 37 38 // 39 // 40 // 41 typedef struct { 42 unsigned int date; 43 unsigned int flags; 44 long position; // For mbox based cache files 45 unsigned int size; 46 unsigned int imap_uid; // For IMAP 47 char *filename; // For maildir base cache files 48 NSString *pop3_uid; // For POP3 49 NSData *from; 50 NSData *in_reply_to; 51 NSData *message_id; 52 NSData *references; 53 NSData *subject; 54 NSData *to; 55 NSData *cc; 56 } cache_record; 57 58 // 59 // Simple macro used to initialize a record to some 60 // default values. Faster than a memset(). 61 // 62 #define CLEAR_CACHE_RECORD(r) \ 63 r.date = 0; \ 64 r.flags = 0; \ 65 r.position = 0; \ 66 r.size = 0; \ 67 r.imap_uid = 0; \ 68 r.pop3_uid = nil;\ 69 r.from = nil; \ 70 r.in_reply_to = nil; \ 71 r.message_id = nil; \ 72 r.references = nil; \ 73 r.subject = nil; \ 74 r.to = nil; \ 75 r.cc = nil; 76 77 /*! 78 @class CWCacheManager 79 @discussion This class is used to provide a generic superclass for 80 cache management with regard to various CWFolder sub-classes. 81 CWIMAPFolder, CWLocalFolder and CWPOP3Folder can make use of a 82 cache in order to speedup lots of operations. 83 */ 84 @interface CWCacheManager : NSObject 85 { 86 @protected 87 NSMutableArray *_cache; 88 NSString *_path; 89 NSUInteger _count; 90 int _fd; 91 } 92 93 /*! 94 @method initWithPath: 95 @discussion This method is the designated initializer for the 96 CWCacheManager class. 97 @param thePath The complete path where the cache will be eventually 98 saved to. 99 @result A CWCacheManager subclass instance, nil on error. 100 */ 101 - (id) initWithPath: (NSString *) thePath; 102 103 /*! 104 @method path 105 @discussion This method is used to obtain the path where the 106 cache has been loaded for or where it'll be saved to. 107 @result The path. 108 */ 109 - (NSString *) path; 110 111 /*! 112 @method setPath: 113 @discussion This method is used to set the path where the 114 cache will be loaded from or where it'll be saved to. 115 @param thePath The complete path. 116 */ 117 - (void) setPath: (NSString *) thePath; 118 119 /*! 120 @method invalidate 121 @discussion This method is used to invalide all cache entries. 122 */ 123 - (void) invalidate; 124 125 /*! 126 @method synchronize 127 @discussion This method is used to save the cache on disk. 128 If the cache is empty, this method does not 129 write it on disk and returns YES. 130 @result YES on success, NO otherwise. 131 */ 132 - (BOOL) synchronize; 133 134 /*! 135 @method count 136 @discussion This method returns the number of cache_record 137 entries present in the cache. 138 @result The count; 139 */ 140 - (NSUInteger) count; 141 142 @end 143 144 #endif // _Pantomime_H_CWCacheManager 145