浏览代码

VLCHTTPFileDownloader: Handle name duplicate download

Soomin Lee 6 年之前
父节点
当前提交
2fc331592e
共有 1 个文件被更改,包括 35 次插入2 次删除
  1. 35 2
      Sources/VLCHTTPFileDownloader.m

+ 35 - 2
Sources/VLCHTTPFileDownloader.m

@@ -43,12 +43,45 @@
     [self downloadFileFromURL:url withFileName:nil];
 }
 
+- (NSString *)createPotentialNameFromName:(NSString *)name
+{
+    NSString *documentDirectoryPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
+                                                                          NSUserDomainMask,
+                                                                          YES).firstObject;
+
+    return [[self createPotentialPathFromPath:[documentDirectoryPath
+                                               stringByAppendingPathComponent:name]] lastPathComponent];
+}
+
+- (NSString *)createPotentialPathFromPath:(NSString *)path
+{
+    NSFileManager *fileManager = [NSFileManager defaultManager];
+    NSString *fileName = [path lastPathComponent];
+    NSString *finalFilePath = [path stringByDeletingLastPathComponent];
+
+    if ([fileManager fileExistsAtPath:path]) {
+        NSString *potentialFilename;
+        NSString *fileExtension = [fileName pathExtension];
+        NSString *rawFileName = [fileName stringByDeletingPathExtension];
+        for (NSUInteger x = 1; x < 100; x++) {
+            potentialFilename = [NSString stringWithFormat:@"%@_%lu.%@",
+                                 rawFileName, (unsigned long)x, fileExtension];
+            if (![fileManager fileExistsAtPath:[finalFilePath stringByAppendingPathComponent:potentialFilename]]) {
+                break;
+            }
+        }
+        return [finalFilePath stringByAppendingPathComponent:potentialFilename];
+    }
+    return path;
+}
+
 - (void)downloadFileFromURL:(NSURL *)url withFileName:(NSString*)fileName
 {
     NSArray *searchPaths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
-    NSString *basePath = [searchPaths[0] stringByAppendingPathComponent:@"Upload"];
+    NSString *basePath = [searchPaths.firstObject stringByAppendingPathComponent:@"Upload"];
+
     if (fileName)
-        _fileName = fileName;
+        _fileName = [self createPotentialNameFromName:fileName];
     else
         _fileName = [url.lastPathComponent stringByRemovingPercentEncoding];