123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277 |
- //
- // AutoSaveManager.swift
- // PDF Master
- //
- // Created by tangchao on 2023/11/8.
- //
- import Cocoa
- public let KAutoSaveTimeValueChangedNoti = "KAutoSaveTimeValueChangedNoti"
- class AutoSaveManager: NSObject {
- //APP是否允许进行自动缓存
- var autoSaveEnabled = false
- var timeInterval: CGFloat = 15
- /*
- @interface AutoSaveManager : NSObject
- @property (nonatomic, copy, readonly) NSString *autoSaveFolder;
- @property (nonatomic, strong, readonly) NSMutableArray *originalPaths;//保存的原文件信息
- @property (nonatomic, strong, readonly) NSMutableArray *autoSavePaths;//对应保存的信息
- @property (nonatomic, strong) NSMutableArray *opendPaths;//所有打开的文件信息汇总
- @property (nonatomic, assign) BOOL;
- @property (nonatomic, assign) BOOL autoSaveAlertShow;//防止重复弹出
- @property (nonatomic, assign) BOOL autoSaveDidEndAction;
- @property (nonatomic, assign) BOOL isSaving;//当前是否正在保存
- @property (nonatomic, assign) CGFloat ;
- + (AutoSaveManager *)manager;
- - (void)clearCache;
- - (NSString *)autoSaveWithPath:(NSString *)filePath;
- - (void)removeAutoSavePath:(NSString *)filePath;
- @end
- */
-
- static let manager = AutoSaveManager()
-
- /*
- @interface AutoSaveManager ()
- @property (nonatomic, strong) NSMutableDictionary *infoDict;
- @property (nonatomic, strong, readwrite) NSMutableArray *originalPaths;//保存的原文件信息
- @property (nonatomic, strong, readwrite) NSMutableArray *autoSavePaths;
- @property (nonatomic, copy, readwrite) NSString *autoSaveFolder;
- @end
- @implementation AutoSaveManager
- + (AutoSaveManager *)manager {
- static AutoSaveManager *__manager = nil;
- if (!__manager) {
- __manager = [[super allocWithZone:NULL] init];
- }
- return __manager;
- }
- + (instancetype)allocWithZone:(struct _NSZone *)zone {
- return AutoSaveManager.manager;
- }
- - (id)init {
- self = [super init];
- if (self) {
-
- self.autoSaveEnabled = [[NSUserDefaults standardUserDefaults] boolForKey:@"ComAutoSaveKey"];
-
- if ([[NSUserDefaults standardUserDefaults] floatForKey:@"AutoSaveTimeIntervalKey"]) {
- self.timeInterval = [[NSUserDefaults standardUserDefaults] floatForKey:@"AutoSaveTimeIntervalKey"];
- } else {
- self.timeInterval = 15;
- }
-
- [self loadData];
-
- self.autoSaveDidEndAction = YES;
-
- }
- return self;
- }
- - (void)loadData {
-
- NSString *cachesPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject];
-
- if ([[NSFileManager defaultManager] fileExistsAtPath:[cachesPath stringByAppendingPathComponent:[NSBundle mainBundle].bundleIdentifier]]) {
- cachesPath = [cachesPath stringByAppendingPathComponent:[NSBundle mainBundle].bundleIdentifier];
- }
- cachesPath = [cachesPath stringByAppendingPathComponent:@"autoSaveFolder"];
- if (![[NSFileManager defaultManager] fileExistsAtPath:cachesPath]) {
- [[NSFileManager defaultManager] createDirectoryAtPath:cachesPath withIntermediateDirectories:YES attributes:nil error:nil];
- }
- self.autoSaveFolder = cachesPath;
-
- #if DEBUG
- NSLog(@"autoSaveFolder===%@",cachesPath);
- #endif
-
- NSString *plistPath = [NSString stringWithFormat:@"%@/autoSaveInfo.plist",self.autoSaveFolder];
- NSMutableDictionary *dict = [[NSMutableDictionary alloc] initWithContentsOfFile:plistPath];
- if (dict.allKeys.count == 0) {
- return;
- }
-
- self.infoDict = dict;
-
- if (!self.autoSavePaths) {
- self.autoSavePaths = [[NSMutableArray alloc] init];
- }
-
- if (!self.originalPaths) {
- self.originalPaths = [[NSMutableArray alloc] init];
- }
- [self.originalPaths addObjectsFromArray:dict.allKeys];
-
- self.opendPaths = [[NSMutableArray alloc] init];
-
- NSArray *arr = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:self.autoSaveFolder error:nil];
- for (NSString *fileName in arr) {
- NSString *savedKey = [self.autoSaveFolder stringByAppendingPathComponent:fileName];
- if ([dict.allValues containsObject:savedKey]) {
- [self.autoSavePaths addObject:savedKey];
- }else {
- if ([fileName isEqualToString:@"autoSaveInfo.plist"]) {
-
- } else {
- [[NSFileManager defaultManager] removeItemAtPath:savedKey error:nil];
- }
- }
- }
- }
- #pragma mark - Setter
- - (void)setAutoSaveEnabled:(BOOL)autoSaveEnabled {
- _autoSaveEnabled = autoSaveEnabled;
- [[NSUserDefaults standardUserDefaults] setBool:_autoSaveEnabled forKey:@"ComAutoSaveKey"];
- [[NSUserDefaults standardUserDefaults] synchronize];
- }
- - (void)setTimeInterval:(CGFloat)timeInterval {
- _timeInterval = timeInterval;
-
- [[NSUserDefaults standardUserDefaults] setFloat:_timeInterval forKey:@"AutoSaveTimeIntervalKey"];
- [[NSUserDefaults standardUserDefaults] synchronize];
- }
- - (NSString *)URLEncodedString:(NSString *)string {
- CFStringRef stringRef = CFBridgingRetain(string);
- #pragma clang diagnostic push
- #pragma clang diagnostic ignored "-Wdeprecated-declarations"
- CFStringRef encoded = CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,
- stringRef,
- NULL,
- CFSTR("!*'\"();:@&=+$,/?%#[]% "),
- kCFStringEncodingUTF8);
- #pragma clang diagnostic pop
- CFRelease(stringRef);
- return CFBridgingRelease(encoded);
- }
- - (NSString *)getValidFilePath:(NSString *)oldPath {
- NSFileManager *fileManager = [NSFileManager defaultManager];
- NSDictionary *fileDic = [fileManager attributesOfItemAtPath:oldPath error:nil];
- NSString *fileType = [fileDic objectForKey:NSFileType];
- int i =1;
- NSString *newPath = oldPath;
- while ([fileManager fileExistsAtPath:newPath]) {
- if ([fileType isEqualToString:NSFileTypeDirectory]) {
- newPath = [oldPath stringByAppendingFormat:@"(%d)",i];
- } else {
- NSString *fileExtension = [oldPath pathExtension];
- newPath = [[oldPath stringByDeletingPathExtension] stringByAppendingFormat:@"(%d).%@",i,fileExtension];
- }
- i++;
- }
- return newPath;
- }
- #pragma mark - Public Method
- - (void)clearCache {
- if ([[NSFileManager defaultManager] fileExistsAtPath:self.autoSaveFolder]) {
- [[NSFileManager defaultManager] removeItemAtPath:self.autoSaveFolder error:nil];
- }
- if (![[NSFileManager defaultManager] fileExistsAtPath:self.autoSaveFolder]) {
- [[NSFileManager defaultManager] createDirectoryAtPath:self.autoSaveFolder withIntermediateDirectories:YES attributes:nil error:nil];
- }
- }
- - (NSString *)autoSaveWithPath:(NSString *)filePath {
-
- NSString *autoSaveFolder = self.autoSaveFolder;
-
- NSString *plistPath = [NSString stringWithFormat:@"%@/autoSaveInfo.plist",autoSaveFolder];
- NSString *savePath = [NSString stringWithFormat:@"%@/%@_%@.%@",autoSaveFolder,filePath.lastPathComponent.stringByDeletingPathExtension,@"recovered",filePath.pathExtension];
- if ([[NSFileManager defaultManager] fileExistsAtPath:plistPath]) {
- NSMutableDictionary *dict = [[NSMutableDictionary alloc] initWithContentsOfFile:plistPath];
- if ([dict.allKeys containsObject:filePath]) {
- savePath = [dict valueForKey:filePath];
- }
- if (savePath.length > 0 && filePath.length > 0) {
- if ([dict.allValues containsObject:savePath]) {
- //不同路径下同名文件的保存覆盖的情况处理
- NSArray *values = [[NSArray alloc] initWithArray:dict.allValues];
-
- for (NSString *key in dict.allKeys) {
- NSString *value = [dict objectForKey:key];
- if ([savePath isEqualToString:value] &&
- ![key isEqualToString:filePath]) {
- int count = 1;
- savePath = [NSString stringWithFormat:@"%@/%@_%@(%d).%@",autoSaveFolder,filePath.lastPathComponent.stringByDeletingPathExtension,@"recovered",count,filePath.pathExtension];
- while ([values containsObject:savePath]) {
- count ++;
- savePath = [NSString stringWithFormat:@"%@/%@_%@(%d).%@",autoSaveFolder,filePath.lastPathComponent.stringByDeletingPathExtension,@"recovered",count,filePath.pathExtension];
- }
- }
- }
- }
- [dict setValue:savePath forKey:filePath];
- }
- [dict writeToURL:[NSURL fileURLWithPath:plistPath] error:nil];
- } else {
- NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
- if (savePath.length > 0 && filePath.length > 0) {
- [dict setValue:savePath forKey:filePath];
- }
- [dict writeToURL:[NSURL fileURLWithPath:plistPath] error:nil];
-
- }
- return savePath;
- }
- - (void)removeAutoSavePath:(NSString *)filePath {
-
- NSString *autoSaveFolder = self.autoSaveFolder;
- NSString *plistPath = [NSString stringWithFormat:@"%@/autoSaveInfo.plist",autoSaveFolder];
- if ([[NSFileManager defaultManager] fileExistsAtPath:plistPath]) {
- NSMutableDictionary *dict = [[NSMutableDictionary alloc] initWithContentsOfFile:plistPath];
- if ([dict valueForKey:filePath]) {
- NSString *savePath = [dict valueForKey:filePath];
- if ([[NSFileManager defaultManager] fileExistsAtPath:savePath]) {
- [[NSFileManager defaultManager] removeItemAtPath:savePath error:nil];
- }
- [dict removeObjectForKey:filePath];
- }
-
- if (dict.allKeys.count > 0) {
- [dict writeToURL:[NSURL fileURLWithPath:plistPath] error:nil];
- } else {
- [[NSFileManager defaultManager] removeItemAtPath:plistPath error:nil];
- }
- }
-
- }
- @end
- */
- }
|