Monotone-Parent: a32b67b00b6dfccd212526247098ea8c2df940a9
Monotone-Revision: 2c91fd11e3891c010283e64f368ec9476ac3667f Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2012-03-19T19:24:16 Monotone-Branch: ca.inverse.sogo
This commit is contained in:
parent
d1966f9b5c
commit
03f86ea11f
10
ChangeLog
10
ChangeLog
|
@ -1,3 +1,13 @@
|
||||||
|
2012-03-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||||||
|
|
||||||
|
* OpenChange/SOGoMAPIFSMessage.m (-init): init 2 new ivars:
|
||||||
|
fileSize and lastModificationTime.
|
||||||
|
(-properties): check the current file size and last modification
|
||||||
|
time against cached values and reload the props file if anything
|
||||||
|
changed.
|
||||||
|
(-creationTime, -lastModificationTime): new return type: NSDate
|
||||||
|
instead of NSCalendarDate.
|
||||||
|
|
||||||
2012-03-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
2012-03-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||||||
|
|
||||||
* OpenChange/MAPIStoreGCSFolder.m
|
* OpenChange/MAPIStoreGCSFolder.m
|
||||||
|
|
|
@ -40,8 +40,9 @@
|
||||||
{
|
{
|
||||||
if ((self = [super init]))
|
if ((self = [super init]))
|
||||||
{
|
{
|
||||||
propertiesLoaded = NO;
|
|
||||||
completeFilename = nil;
|
completeFilename = nil;
|
||||||
|
fileSize = 0;
|
||||||
|
lastModificationTime = nil;
|
||||||
}
|
}
|
||||||
|
|
||||||
return self;
|
return self;
|
||||||
|
@ -84,14 +85,66 @@
|
||||||
return completeFilename;
|
return completeFilename;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (BOOL) _readFileChangesDataWithDate: (NSDate **) newLMTime
|
||||||
|
andSize: (NSUInteger *) newFileSize
|
||||||
|
{
|
||||||
|
BOOL rc;
|
||||||
|
NSDictionary *attributes;
|
||||||
|
|
||||||
|
attributes = [[NSFileManager defaultManager]
|
||||||
|
fileAttributesAtPath: [self completeFilename]
|
||||||
|
traverseLink: NO];
|
||||||
|
if (attributes)
|
||||||
|
{
|
||||||
|
*newLMTime = [attributes fileModificationDate];
|
||||||
|
*newFileSize = [attributes fileSize];
|
||||||
|
rc = YES;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
rc = NO;
|
||||||
|
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (BOOL) _checkFileChangesDataWithDate: (NSDate **) newLMTime
|
||||||
|
andSize: (NSUInteger *) newFileSize
|
||||||
|
{
|
||||||
|
BOOL hasChanged = NO;
|
||||||
|
NSDate *lastLMTime;
|
||||||
|
NSUInteger lastFileSize;
|
||||||
|
|
||||||
|
if ([self _readFileChangesDataWithDate: &lastLMTime
|
||||||
|
andSize: &lastFileSize])
|
||||||
|
{
|
||||||
|
if (fileSize != lastFileSize
|
||||||
|
|| ![lastModificationTime isEqual: lastLMTime])
|
||||||
|
{
|
||||||
|
if (lastLMTime)
|
||||||
|
*newLMTime = lastLMTime;
|
||||||
|
if (newFileSize)
|
||||||
|
*newFileSize = lastFileSize;
|
||||||
|
hasChanged = YES;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return hasChanged;
|
||||||
|
}
|
||||||
|
|
||||||
- (NSMutableDictionary *) properties
|
- (NSMutableDictionary *) properties
|
||||||
{
|
{
|
||||||
NSData *content;
|
NSData *content;
|
||||||
NSString *error;
|
NSString *error;
|
||||||
NSPropertyListFormat format;
|
NSPropertyListFormat format;
|
||||||
|
NSDate *lastLMTime;
|
||||||
|
NSUInteger lastFileSize;
|
||||||
|
|
||||||
if (!propertiesLoaded)
|
if ([self _checkFileChangesDataWithDate: &lastLMTime
|
||||||
|
andSize: &lastFileSize])
|
||||||
{
|
{
|
||||||
|
[self logWithFormat: @"file '%@' new or modified: rereading properties",
|
||||||
|
[self completeFilename]];
|
||||||
|
[properties release];
|
||||||
|
properties = nil;
|
||||||
content = [NSData dataWithContentsOfFile: [self completeFilename]];
|
content = [NSData dataWithContentsOfFile: [self completeFilename]];
|
||||||
if (content)
|
if (content)
|
||||||
{
|
{
|
||||||
|
@ -104,8 +157,8 @@
|
||||||
[self logWithFormat: @"an error occurred during deserialization"
|
[self logWithFormat: @"an error occurred during deserialization"
|
||||||
@" of message: '%@'", error];
|
@" of message: '%@'", error];
|
||||||
}
|
}
|
||||||
|
ASSIGN (lastModificationTime, lastLMTime);
|
||||||
propertiesLoaded = YES;
|
fileSize = lastFileSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
return [super properties];
|
return [super properties];
|
||||||
|
@ -114,6 +167,8 @@
|
||||||
- (void) save
|
- (void) save
|
||||||
{
|
{
|
||||||
NSData *content;
|
NSData *content;
|
||||||
|
NSDate *lastLMTime;
|
||||||
|
NSUInteger lastFileSize;
|
||||||
|
|
||||||
[container ensureDirectory];
|
[container ensureDirectory];
|
||||||
|
|
||||||
|
@ -126,12 +181,17 @@
|
||||||
if (![content writeToFile: [self completeFilename] atomically: NO])
|
if (![content writeToFile: [self completeFilename] atomically: NO])
|
||||||
[NSException raise: @"MAPIStoreIOException"
|
[NSException raise: @"MAPIStoreIOException"
|
||||||
format: @"could not save message"];
|
format: @"could not save message"];
|
||||||
|
|
||||||
|
[self _readFileChangesDataWithDate: &lastLMTime
|
||||||
|
andSize: &lastFileSize];
|
||||||
|
ASSIGN (lastModificationTime, lastLMTime);
|
||||||
|
fileSize = lastFileSize;
|
||||||
// [self logWithFormat: @"fs message written to '%@'", [self completeFilename]];
|
// [self logWithFormat: @"fs message written to '%@'", [self completeFilename]];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (NSString *) davEntityTag
|
- (NSString *) davEntityTag
|
||||||
{
|
{
|
||||||
NSCalendarDate *lm;
|
NSDate *lm;
|
||||||
|
|
||||||
lm = [self lastModificationTime];
|
lm = [self lastModificationTime];
|
||||||
|
|
||||||
|
@ -166,12 +226,12 @@
|
||||||
return [attributes objectForKey: key];
|
return [attributes objectForKey: key];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (NSCalendarDate *) creationTime
|
- (NSDate *) creationTime
|
||||||
{
|
{
|
||||||
return [self _fileAttributeForKey: NSFileCreationDate];
|
return [self _fileAttributeForKey: NSFileCreationDate];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (NSCalendarDate *) lastModificationTime
|
- (NSDate *) lastModificationTime
|
||||||
{
|
{
|
||||||
return [self _fileAttributeForKey: NSFileModificationDate];
|
return [self _fileAttributeForKey: NSFileModificationDate];
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue