1// Copyright 2015-present 650 Industries. All rights reserved. 2#import "EXScopedFileSystemModule.h" 3#import <EXFileSystem/EXFileSystem.h> 4#import "EXUnscopingDataMigrator.h" 5#import "EXEnvironment.h" 6 7@implementation EXScopedFileSystemModule 8 9- (instancetype)initWithExperienceId:(NSString *)experienceId 10{ 11 self = [super initWithExperienceId:experienceId]; 12 return self; 13} 14 15- (NSString *)documentDirectoryForExperienceId:(NSString *)experienceId 16{ 17 return [EXScopedFileSystemModule documentDirectoryForExperienceId:experienceId]; 18} 19 20- (NSString *)cachesDirectoryForExperienceId:(NSString *)experienceId 21{ 22 return [EXScopedFileSystemModule cachesDirectoryForExperienceId:experienceId]; 23} 24 25+ (NSString *)escapedResourceName:(NSString *)name 26{ 27 NSString *charactersToEscape = @"!*'();:@&=+$,/?%#[]"; 28 NSCharacterSet *allowedCharacters = [[NSCharacterSet characterSetWithCharactersInString:charactersToEscape] invertedSet]; 29 return [name stringByAddingPercentEncodingWithAllowedCharacters:allowedCharacters]; 30} 31 32+ (NSString *)generateDocumentDirectoryPath:(NSString *)experienceId 33{ 34 NSString *subdir = [self escapedResourceName:experienceId]; 35 return [[[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject 36 stringByAppendingPathComponent:@"ExponentExperienceData"] 37 stringByAppendingPathComponent:subdir] stringByStandardizingPath]; 38} 39 40+ (NSString *)documentDirectoryForExperienceId:(NSString *)experienceId 41{ 42 if ([EXEnvironment sharedEnvironment].isDetached) { 43 if ([EXUnscopingDataMigrator firstStartAfterUpdate:experienceId]) { 44 [EXUnscopingDataMigrator moveOldFiles:experienceId]; 45 } 46 return [EXFileSystem documentDirectoryForExperienceId:experienceId]; 47 } 48 return [EXScopedFileSystemModule generateDocumentDirectoryPath:experienceId]; 49} 50 51+ (NSString *)cachesDirectoryForExperienceId:(NSString *)experienceId 52{ 53 if ([EXEnvironment sharedEnvironment].isDetached) { 54 return [EXFileSystem cachesDirectoryForExperienceId:experienceId]; 55 } 56 NSString *subdir = [self escapedResourceName:experienceId]; 57 return [[[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).firstObject 58 stringByAppendingPathComponent:@"ExponentExperienceData"] 59 stringByAppendingPathComponent:subdir] stringByStandardizingPath]; 60} 61 62@end 63