@end
@implementation PithosSyncDaemon
-@synthesize directoryPath, pithosAccount, containersDictionary, pithos;
+@synthesize directoryPath, containersDictionary, pithos;
@synthesize pithosContainers;
@synthesize lastCompletedSync, remoteObjects, previousRemoteObjects, storedLocalObjectStates, currentLocalObjectStates;
@synthesize pithosStateFilePath, tempDownloadsDirPath, tempTrashDirPath;
- (id)initWithDirectoryPath:(NSString *)aDirectoryPath
pithosAccount:(PithosAccount *)aPithosAccount
- containersDictionary:(NSMutableDictionary *)aContainersDictionary
+ containersDictionary:(NSDictionary *)aContainersDictionary
resetLocalState:(BOOL)resetLocalState {
if ((self = [super init])) {
directoryPath = [aDirectoryPath copy];
pithosAccount = [aPithosAccount retain];
- containersDictionary = [aContainersDictionary retain];
+ containersDictionary = [aContainersDictionary copy];
self.pithos = pithosAccount.pithos;
containersCount = [containersDictionary count];
self.pithosContainers = [NSMutableArray arrayWithCapacity:containersCount];
- for (NSString *containerName in [containersDictionary allKeys]) {
+ for (NSString *containerName in containersDictionary) {
ASIPithosContainer *pithosContainer = [ASIPithosContainer container];
pithosContainer.name = containerName;
[pithosContainers addObject:pithosContainer];
// Remove containers that don't interest us anymore and save
if (!storedLocalObjectStates)
[self loadLocalState];
- for (NSString *containerName in [storedLocalObjectStates allKeys]) {
+ for (NSString *containerName in storedLocalObjectStates) {
if (![containersDictionary objectForKey:containerName]) {
[storedLocalObjectStates removeObjectForKey:containerName];
if (self.tempDownloadsDirPath) {
if (aContainersDictionary && ![aContainersDictionary isEqualToDictionary:containersDictionary]) {
[self resetDaemon];
[containersDictionary release];
- containersDictionary = [aContainersDictionary retain];
+ containersDictionary = [aContainersDictionary copy];
containersCount = [containersDictionary count];
self.pithosContainers = [NSMutableArray arrayWithCapacity:containersCount];
- for (NSString *containerName in [containersDictionary allKeys]) {
+ for (NSString *containerName in aContainersDictionary) {
ASIPithosContainer *pithosContainer = [ASIPithosContainer container];
pithosContainer.name = containerName;
[pithosContainers addObject:pithosContainer];
}
[self resetLocalStateWithAll:NO];
- }
+ }
}
- (void)setPithos:(ASIPithos *)aPithos {
NSFileManager *fileManager = [NSFileManager defaultManager];
BOOL isDirectory;
NSError *error = nil;
- for (NSString *localFilePath in [currentLocalObjectStates allKeys]) {
+ for (NSString *localFilePath in currentLocalObjectStates) {
localState = [currentLocalObjectStates objectForKey:localFilePath];
if (!localState.isDirectory && [hash isEqualToString:localState.hash] &&
[fileManager fileExistsAtPath:localFilePath isDirectory:&isDirectory] && !isDirectory) {
self.currentLocalObjectStates = [NSMutableDictionary dictionary];
for (ASIPithosContainer *pithosContainer in pithosContainers) {
NSString *containerDirectoryPath = [directoryPath stringByAppendingPathComponent:pithosContainer.name];
- NSMutableArray *containerExcludedDirectories = [containersDictionary objectForKey:pithosContainer.name];
+ NSArray *containerExcludedDirectories = [containersDictionary objectForKey:pithosContainer.name];
BOOL containerExludeRootFiles = [containerExcludedDirectories containsObject:@""];
NSMutableDictionary *containerStoredLocalObjectStates = [storedLocalObjectStates objectForKey:pithosContainer.name];
NSDirectoryEnumerator *dirEnumerator = [fileManager enumeratorAtPath:containerDirectoryPath];
// Add an empty stored state for legal new remote objects since last sync
for (ASIPithosContainer *pithosContainer in pithosContainers) {
- NSMutableArray *containerExcludedDirectories = [containersDictionary objectForKey:pithosContainer.name];
+ NSArray *containerExcludedDirectories = [containersDictionary objectForKey:pithosContainer.name];
BOOL containerExludeRootFiles = [containerExcludedDirectories containsObject:@""];
NSMutableDictionary *containerStoredLocalObjectStates = [storedLocalObjectStates objectForKey:pithosContainer.name];
NSMutableDictionary *containerRemoteObjects = [remoteObjects objectForKey:pithosContainer.name];
// These should be identified and skipped
for (ASIPithosContainer *pithosContainer in pithosContainers) {
NSString *containerDirectoryPath = [directoryPath stringByAppendingPathComponent:pithosContainer.name];
- NSMutableArray *containerExcludedDirectories = [containersDictionary objectForKey:pithosContainer.name];
+ NSArray *containerExcludedDirectories = [containersDictionary objectForKey:pithosContainer.name];
BOOL containerExludeRootFiles = [containerExcludedDirectories containsObject:@""];
NSMutableDictionary *containerStoredLocalObjectStates = [storedLocalObjectStates objectForKey:pithosContainer.name];
NSMutableDictionary *containerRemoteObjects = [remoteObjects objectForKey:pithosContainer.name];