mirror of
https://github.com/TermiT/Flycut.git
synced 2025-11-17 14:38:38 +08:00
Update to MJCloudKitUserDefaultsSync f5787013f14f47055e3ae77eae821a8bbe5428a2.
This commit is contained in:
parent
d43c0b98b8
commit
4ce5b1a2ad
2 changed files with 62 additions and 1 deletions
|
|
@ -59,4 +59,5 @@ static inline MJSyncNotificationType MJSyncNotificationTypeLast() { return MJSyn
|
|||
+(void) addNotificationFor:(MJSyncNotificationType)type withSelector:(SEL)aSelector withTarget:(nullable id)aTarget;
|
||||
+(void) removeNotificationsFor:(MJSyncNotificationType)type forTarget:(nullable id) aTargetadd;
|
||||
+(void) checkCloudKitUpdates;
|
||||
+(NSString *) diagnosticData;
|
||||
@end
|
||||
|
|
|
|||
|
|
@ -69,6 +69,11 @@ static dispatch_queue_t syncQueue = nil;
|
|||
static dispatch_queue_t pollQueue = nil;
|
||||
static dispatch_queue_t startStopQueue = nil;
|
||||
|
||||
// Diagnostic information.
|
||||
static BOOL productionMode = NO;
|
||||
static CKRecord *lastRecordReceived = nil;
|
||||
static CFAbsoluteTime lastReceiveTime;
|
||||
|
||||
@implementation MJCloudKitUserDefaultsSync
|
||||
|
||||
+(void) updateToiCloud:(NSNotification*) notificationObject {
|
||||
|
|
@ -245,6 +250,12 @@ static dispatch_queue_t startStopQueue = nil;
|
|||
// If we had a conflict on the conflict resolution, just give up for now.
|
||||
DLog(@"CloudKit conflict-resolution Save failure: %@", saveError.localizedDescription);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Save counts as receive, since we have seen what we put in there.
|
||||
[self updateLastRecordReceived:savedRecord];
|
||||
|
||||
}
|
||||
|
||||
[self completeUpdateToiCloudWithChanges:changes];
|
||||
}];
|
||||
|
|
@ -256,6 +267,9 @@ static dispatch_queue_t startStopQueue = nil;
|
|||
}
|
||||
else
|
||||
{
|
||||
// Save counts as receive, since we have seen what we put in there.
|
||||
[self updateLastRecordReceived:savedRecord];
|
||||
|
||||
[self sendNotificationsFor:MJSyncNotificationSaveSuccess onKeys:changes];
|
||||
[self completeUpdateToiCloudWithChanges:changes];
|
||||
}
|
||||
|
|
@ -343,6 +357,8 @@ static dispatch_queue_t startStopQueue = nil;
|
|||
DLog(@"CloudKit Fetch failure: %@", error.localizedDescription);
|
||||
}
|
||||
else {
|
||||
[self updateLastRecordReceived:record];
|
||||
|
||||
DLog(@"Updating from iCloud completion");
|
||||
|
||||
// prevent NSUserDefaultsDidChangeNotification from being posted while we update from iCloud
|
||||
|
|
@ -350,7 +366,6 @@ static dispatch_queue_t startStopQueue = nil;
|
|||
name:NSUserDefaultsDidChangeNotification
|
||||
object:nil];
|
||||
|
||||
lastUpdateRecordChangeTagReceived = [[record recordChangeTag] retain];
|
||||
DLog(@"Got record -%@-_-%@-_-%@-_-%@-",[[[record recordID] zoneID] zoneName],[[[record recordID] zoneID] ownerName],[[record recordID] recordName],[record recordChangeTag]);
|
||||
|
||||
__block int additions = 0, modifications = 0;
|
||||
|
|
@ -721,6 +736,8 @@ static dispatch_queue_t startStopQueue = nil;
|
|||
|
||||
// Setup database connections.
|
||||
CKContainer *container = [CKContainer containerWithIdentifier:databaseContainerIdentifier];
|
||||
int environmentValue = ((NSNumber*)[[container valueForKey:@"containerID"] valueForKey:@"environment"]).intValue;
|
||||
productionMode = (1 == environmentValue);
|
||||
publicDB = [container publicCloudDatabase];
|
||||
privateDB = [container privateCloudDatabase];
|
||||
|
||||
|
|
@ -1008,6 +1025,49 @@ static CFAbsoluteTime lastPollPokeTime;
|
|||
});
|
||||
}
|
||||
|
||||
+ (void) updateLastRecordReceived:(CKRecord*)record
|
||||
{
|
||||
if ( lastRecordReceived )
|
||||
[lastRecordReceived release];
|
||||
lastRecordReceived = [record retain];
|
||||
|
||||
if ( lastUpdateRecordChangeTagReceived )
|
||||
[lastUpdateRecordChangeTagReceived release];
|
||||
lastUpdateRecordChangeTagReceived = [[record recordChangeTag] retain];
|
||||
}
|
||||
|
||||
+ (NSString *) diagnosticData {
|
||||
NSString *lastPollPoke = [self cfAbsoluteTimeToString:lastPollPokeTime];
|
||||
NSString *lastReceive = [self cfAbsoluteTimeToString:lastReceiveTime];
|
||||
return [NSString stringWithFormat:@"Observing Activity: %@\nObserving Identity: %@\nRemote Notifications Enabled: %@\nProduction: %@\nToken: %@\nLast Poll: %@\nLast Record: %@\nLast Receive: %@",
|
||||
observingActivity ? @"YES" : @"NO",
|
||||
observingIdentityChanges ? @"YES" : @"NO",
|
||||
remoteNotificationsEnabled ? @"YES" : @"NO",
|
||||
(productionMode ? @"YES" : @"NO"),
|
||||
previousChangeToken ? previousChangeToken : @"n/a",
|
||||
lastPollPoke ? lastPollPoke : @"n/a",
|
||||
lastRecordReceived ? lastRecordReceived.recordChangeTag : @"n/a",
|
||||
lastReceive ? lastReceive : @"n/a"];
|
||||
}
|
||||
|
||||
+ (NSString *) cfAbsoluteTimeToString:(CFAbsoluteTime) value
|
||||
{
|
||||
if ( 0 == value )
|
||||
return nil; // In our case, we know that the uninitialized value will never be the value assigned, so return nil for that.
|
||||
|
||||
CFStringRef dateString = nil;
|
||||
CFDateRef cfDate = CFDateCreate(kCFAllocatorDefault, value);
|
||||
CFDateFormatterRef dateFormatter = CFDateFormatterCreate(kCFAllocatorDefault, CFLocaleCopyCurrent(), kCFDateFormatterFullStyle, kCFDateFormatterFullStyle);
|
||||
dateString = CFDateFormatterCreateStringWithDate(kCFAllocatorDefault, dateFormatter, cfDate);
|
||||
CFRelease(dateFormatter);
|
||||
CFRelease(cfDate);
|
||||
|
||||
if ( !dateString )
|
||||
return nil;
|
||||
|
||||
return [NSString stringWithFormat:@"%@",dateString];
|
||||
}
|
||||
|
||||
+ (void) dealloc {
|
||||
DLog(@"Deallocating");
|
||||
[self stop];
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue