marinofaggiana 6 éve
szülő
commit
d63aacb5f5
95 módosított fájl, 1649 hozzáadás és 1755 törlés
  1. 1 1
      CHANGELOG.md
  2. 12 12
      Cartfile
  3. 5 5
      Cartfile.resolved
  4. 1 1
      Carthage/Checkouts/CocoaLumberjack/Classes/CLI/CLIColor.h
  5. 1 1
      Carthage/Checkouts/CocoaLumberjack/Classes/CLI/CLIColor.m
  6. 18 18
      Carthage/Checkouts/CocoaLumberjack/Classes/CocoaLumberjack.h
  7. 6 6
      Carthage/Checkouts/CocoaLumberjack/Classes/CocoaLumberjack.swift
  8. 1 1
      Carthage/Checkouts/CocoaLumberjack/Classes/DDASLLogCapture.h
  9. 1 1
      Carthage/Checkouts/CocoaLumberjack/Classes/DDASLLogCapture.m
  10. 1 1
      Carthage/Checkouts/CocoaLumberjack/Classes/DDASLLogger.h
  11. 1 1
      Carthage/Checkouts/CocoaLumberjack/Classes/DDASLLogger.m
  12. 1 1
      Carthage/Checkouts/CocoaLumberjack/Classes/DDAbstractDatabaseLogger.h
  13. 1 1
      Carthage/Checkouts/CocoaLumberjack/Classes/DDAbstractDatabaseLogger.m
  14. 1 1
      Carthage/Checkouts/CocoaLumberjack/Classes/DDAssertMacros.h
  15. 1 1
      Carthage/Checkouts/CocoaLumberjack/Classes/DDFileLogger.h
  16. 23 39
      Carthage/Checkouts/CocoaLumberjack/Classes/DDFileLogger.m
  17. 1 1
      Carthage/Checkouts/CocoaLumberjack/Classes/DDLegacyMacros.h
  18. 1 1
      Carthage/Checkouts/CocoaLumberjack/Classes/DDLog+LOGV.h
  19. 1 1
      Carthage/Checkouts/CocoaLumberjack/Classes/DDLog.h
  20. 52 68
      Carthage/Checkouts/CocoaLumberjack/Classes/DDLog.m
  21. 1 1
      Carthage/Checkouts/CocoaLumberjack/Classes/DDLogMacros.h
  22. 2 14
      Carthage/Checkouts/CocoaLumberjack/Classes/DDOSLogger.h
  23. 17 55
      Carthage/Checkouts/CocoaLumberjack/Classes/DDOSLogger.m
  24. 1 1
      Carthage/Checkouts/CocoaLumberjack/Classes/DDTTYLogger.h
  25. 1 1
      Carthage/Checkouts/CocoaLumberjack/Classes/DDTTYLogger.m
  26. 1 1
      Carthage/Checkouts/CocoaLumberjack/Classes/Extensions/DDContextFilterLogFormatter.h
  27. 1 1
      Carthage/Checkouts/CocoaLumberjack/Classes/Extensions/DDContextFilterLogFormatter.m
  28. 1 1
      Carthage/Checkouts/CocoaLumberjack/Classes/Extensions/DDDispatchQueueLogFormatter.h
  29. 1 1
      Carthage/Checkouts/CocoaLumberjack/Classes/Extensions/DDDispatchQueueLogFormatter.m
  30. 1 1
      Carthage/Checkouts/CocoaLumberjack/Classes/Extensions/DDMultiFormatter.h
  31. 1 1
      Carthage/Checkouts/CocoaLumberjack/Classes/Extensions/DDMultiFormatter.m
  32. 1 1
      Carthage/Checkouts/CocoaLumberjack/CocoaLumberjack.podspec
  33. 1 1
      Carthage/Checkouts/CocoaLumberjack/Framework/Lumberjack/CocoaLumberjack-Info.plist
  34. 1 1
      Carthage/Checkouts/CocoaLumberjack/Framework/Lumberjack/CocoaLumberjack-Prefix.pch
  35. 1 1
      Carthage/Checkouts/CocoaLumberjack/Framework/Lumberjack/CocoaLumberjackSwift-Info.plist
  36. 1 1
      Carthage/Checkouts/CocoaLumberjack/Framework/Lumberjack/CocoaLumberjackSwift.h
  37. 1 1
      Carthage/Checkouts/CocoaLumberjack/Tests/Tests/DDBasicLoggingTests.m
  38. 1 1
      Carthage/Checkouts/CocoaLumberjack/Tests/Tests/DDLogMessageTests.m
  39. 1 1
      Carthage/Checkouts/CocoaLumberjack/Tests/Tests/DDLogTests.m
  40. 1 1
      Carthage/Checkouts/KTVHTTPCache/Framework/Info.plist
  41. 3 11
      Carthage/Checkouts/KTVHTTPCache/KTVHTTPCache.podspec
  42. 2 1
      Carthage/Checkouts/KTVHTTPCache/KTVHTTPCache/Classes/KTVHCCommon/KTVHCError.h
  43. 17 17
      Carthage/Checkouts/KTVHTTPCache/KTVHTTPCache/Classes/KTVHCCommon/KTVHCError.m
  44. 18 11
      Carthage/Checkouts/KTVHTTPCache/KTVHTTPCache/Classes/KTVHCCommon/KTVHCLog.h
  45. 47 48
      Carthage/Checkouts/KTVHTTPCache/KTVHTTPCache/Classes/KTVHCCommon/KTVHCLog.m
  46. 5 6
      Carthage/Checkouts/KTVHTTPCache/KTVHTTPCache/Classes/KTVHCCommon/KTVHCRange.h
  47. 45 38
      Carthage/Checkouts/KTVHTTPCache/KTVHTTPCache/Classes/KTVHCCommon/KTVHCRange.m
  48. 5 6
      Carthage/Checkouts/KTVHTTPCache/KTVHTTPCache/Classes/KTVHCDataStorage/KTVHCDataCacheItem.h
  49. 22 8
      Carthage/Checkouts/KTVHTTPCache/KTVHTTPCache/Classes/KTVHCDataStorage/KTVHCDataCacheItem.m
  50. 2 2
      Carthage/Checkouts/KTVHTTPCache/KTVHTTPCache/Classes/KTVHCDataStorage/KTVHCDataCacheItemZone.h
  51. 10 4
      Carthage/Checkouts/KTVHTTPCache/KTVHTTPCache/Classes/KTVHCDataStorage/KTVHCDataCacheItemZone.m
  52. 17 7
      Carthage/Checkouts/KTVHTTPCache/KTVHTTPCache/Classes/KTVHCDataStorage/KTVHCDataFileSource.h
  53. 58 42
      Carthage/Checkouts/KTVHTTPCache/KTVHTTPCache/Classes/KTVHCDataStorage/KTVHCDataFileSource.m
  54. 12 10
      Carthage/Checkouts/KTVHTTPCache/KTVHTTPCache/Classes/KTVHCDataStorage/KTVHCDataLoader.h
  55. 43 31
      Carthage/Checkouts/KTVHTTPCache/KTVHTTPCache/Classes/KTVHCDataStorage/KTVHCDataLoader.m
  56. 19 9
      Carthage/Checkouts/KTVHTTPCache/KTVHTTPCache/Classes/KTVHCDataStorage/KTVHCDataNetworkSource.h
  57. 131 87
      Carthage/Checkouts/KTVHTTPCache/KTVHTTPCache/Classes/KTVHCDataStorage/KTVHCDataNetworkSource.m
  58. 13 11
      Carthage/Checkouts/KTVHTTPCache/KTVHTTPCache/Classes/KTVHCDataStorage/KTVHCDataReader.h
  59. 100 68
      Carthage/Checkouts/KTVHTTPCache/KTVHTTPCache/Classes/KTVHCDataStorage/KTVHCDataReader.m
  60. 7 4
      Carthage/Checkouts/KTVHTTPCache/KTVHTTPCache/Classes/KTVHCDataStorage/KTVHCDataRequest.h
  61. 19 11
      Carthage/Checkouts/KTVHTTPCache/KTVHTTPCache/Classes/KTVHCDataStorage/KTVHCDataRequest.m
  62. 12 7
      Carthage/Checkouts/KTVHTTPCache/KTVHTTPCache/Classes/KTVHCDataStorage/KTVHCDataResponse.h
  63. 41 11
      Carthage/Checkouts/KTVHTTPCache/KTVHTTPCache/Classes/KTVHCDataStorage/KTVHCDataResponse.m
  64. 20 9
      Carthage/Checkouts/KTVHTTPCache/KTVHTTPCache/Classes/KTVHCDataStorage/KTVHCDataSourceManager.h
  65. 91 121
      Carthage/Checkouts/KTVHTTPCache/KTVHTTPCache/Classes/KTVHCDataStorage/KTVHCDataSourceManager.m
  66. 3 3
      Carthage/Checkouts/KTVHTTPCache/KTVHTTPCache/Classes/KTVHCDataStorage/KTVHCDataStorage.h
  67. 13 11
      Carthage/Checkouts/KTVHTTPCache/KTVHTTPCache/Classes/KTVHCDataStorage/KTVHCDataStorage.m
  68. 21 16
      Carthage/Checkouts/KTVHTTPCache/KTVHTTPCache/Classes/KTVHCDataStorage/KTVHCDataUnit.h
  69. 175 127
      Carthage/Checkouts/KTVHTTPCache/KTVHTTPCache/Classes/KTVHCDataStorage/KTVHCDataUnit.m
  70. 10 8
      Carthage/Checkouts/KTVHTTPCache/KTVHTTPCache/Classes/KTVHCDataStorage/KTVHCDataUnitItem.h
  71. 31 25
      Carthage/Checkouts/KTVHTTPCache/KTVHTTPCache/Classes/KTVHCDataStorage/KTVHCDataUnitItem.m
  72. 1 1
      Carthage/Checkouts/KTVHTTPCache/KTVHTTPCache/Classes/KTVHCDataStorage/KTVHCDataUnitPool.h
  73. 91 71
      Carthage/Checkouts/KTVHTTPCache/KTVHTTPCache/Classes/KTVHCDataStorage/KTVHCDataUnitPool.m
  74. 2 2
      Carthage/Checkouts/KTVHTTPCache/KTVHTTPCache/Classes/KTVHCDataStorage/KTVHCDataUnitQueue.h
  75. 35 20
      Carthage/Checkouts/KTVHTTPCache/KTVHTTPCache/Classes/KTVHCDataStorage/KTVHCDataUnitQueue.m
  76. 10 10
      Carthage/Checkouts/KTVHTTPCache/KTVHTTPCache/Classes/KTVHCDownload/KTVHCDownload.h
  77. 135 118
      Carthage/Checkouts/KTVHTTPCache/KTVHTTPCache/Classes/KTVHCDownload/KTVHCDownload.m
  78. 2 0
      Carthage/Checkouts/KTVHTTPCache/KTVHTTPCache/Classes/KTVHCHTTPServer/KTVHCHTTPConnection.h
  79. 30 8
      Carthage/Checkouts/KTVHTTPCache/KTVHTTPCache/Classes/KTVHCHTTPServer/KTVHCHTTPConnection.m
  80. 2 2
      Carthage/Checkouts/KTVHTTPCache/KTVHTTPCache/Classes/KTVHCHTTPServer/KTVHCHTTPResponse.h
  81. 31 28
      Carthage/Checkouts/KTVHTTPCache/KTVHTTPCache/Classes/KTVHCHTTPServer/KTVHCHTTPResponse.m
  82. 2 2
      Carthage/Checkouts/KTVHTTPCache/KTVHTTPCache/Classes/KTVHCHTTPServer/KTVHCHTTPServer.h
  83. 100 108
      Carthage/Checkouts/KTVHTTPCache/KTVHTTPCache/Classes/KTVHCHTTPServer/KTVHCHTTPServer.m
  84. 8 335
      Carthage/Checkouts/KTVHTTPCache/KTVHTTPCache/KTVHTTPCache.h
  85. 1 1
      Carthage/Checkouts/KTVHTTPCache/LICENSE
  86. 2 2
      Carthage/Checkouts/PDFGenerator/PDFGenerator.podspec
  87. 1 1
      Carthage/Checkouts/SVGKit/Source/DOM classes/Core DOM/DOMGlobalSettings.h
  88. 1 1
      Carthage/Checkouts/SVGKit/Source/DOM classes/SVG-DOM/SVGNumber.h
  89. 1 1
      Carthage/Checkouts/SVGKit/Source/DOM classes/Unported or Partial DOM/SVGElement.h
  90. 1 1
      Carthage/Checkouts/SVGKit/Source/Foundation additions/NSData+NSInputStream.h
  91. 1 1
      Carthage/Checkouts/SVGKit/Source/Foundation additions/NSData+NSInputStream.m
  92. 1 6
      Carthage/Checkouts/SVGKit/Source/UIKit additions/SVGKFastImageView.m
  93. 1 5
      Carthage/Checkouts/SVGKit/Source/UIKit additions/SVGKLayeredImageView.m
  94. 0 2
      Nextcloud.xcodeproj/project.pbxproj
  95. 11 10
      iOSClient/Viewer/NCViewerMedia.swift

+ 1 - 1
CHANGELOG.md

@@ -10,7 +10,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
 - See https://github.com/nextcloud/ios/milestone/46
 - See https://github.com/nextcloud/ios/milestone/46
 
 
 ## [2.23.1] - 2019-03-1
 ## [2.23.1] - 2019-03-1
-- See https://github.com/nextcloud/ios/milestone/45
+- See https://github.com/nextcloud/ios/milestone/46
 
 
 ## [2.23.0] - 2019-02-18
 ## [2.23.0] - 2019-02-18
 - See https://github.com/nextcloud/ios/milestone/45
 - See https://github.com/nextcloud/ios/milestone/45

+ 12 - 12
Cartfile

@@ -1,16 +1,16 @@
-github "tilltue/TLPhotoPicker" == 1.8.3
-github "kishikawakatsumi/UICKeyChainStore" == 2.1.2
+github "tilltue/TLPhotoPicker"
+github "kishikawakatsumi/UICKeyChainStore"
 github "danielsaidi/Sheeeeeeeeet" == 1.2.2
 github "danielsaidi/Sheeeeeeeeet" == 1.2.2
-github "sgr-ksmt/PDFGenerator" == 2.1
-github "MortimerGoro/MGSwipeTableCell" == 1.6.8
-github "dzenbot/DZNEmptyDataSet" == 1.8.1
-github "ealeksandrov/EAIntroView" == 2.12.0
-github "calimarkus/JDStatusBarNotification" == 1.6.0
-github "ChangbaDevs/KTVHTTPCache" == 2.0.0
-github "jdg/MBProgressHUD" == 1.1.0
-github "realm/realm-cocoa" == 3.13.1
-github "SVGKit/SVGKit" == 2.1.0
+github "sgr-ksmt/PDFGenerator" ~> 2.1
+github "MortimerGoro/MGSwipeTableCell"
+github "dzenbot/DZNEmptyDataSet"
+github "ealeksandrov/EAIntroView"
+github "calimarkus/JDStatusBarNotification"
+github "ChangbaDevs/KTVHTTPCache" ~> 1.1.7
+github "jdg/MBProgressHUD" ~> 1.1.0
+github "realm/realm-cocoa"
+github "SVGKit/SVGKit" "2.x"
 github "WeTransfer/WeScan" == 0.9.1
 github "WeTransfer/WeScan" == 0.9.1
-github "malcommac/SwiftRichString" == 2.0.1
+github "malcommac/SwiftRichString"
 github "https://github.com/marinofaggiana/FastScroll" "master"
 github "https://github.com/marinofaggiana/FastScroll" "master"
 github "yannickl/QRCodeReader.swift" >= 10.0.0
 github "yannickl/QRCodeReader.swift" >= 10.0.0

+ 5 - 5
Cartfile.resolved

@@ -1,7 +1,7 @@
-github "ChangbaDevs/KTVHTTPCache" "2.0.0"
-github "CocoaLumberjack/CocoaLumberjack" "3.5.2"
+github "ChangbaDevs/KTVHTTPCache" "1.1.7"
+github "CocoaLumberjack/CocoaLumberjack" "3.5.1"
 github "MortimerGoro/MGSwipeTableCell" "1.6.8"
 github "MortimerGoro/MGSwipeTableCell" "1.6.8"
-github "SVGKit/SVGKit" "2.1.0"
+github "SVGKit/SVGKit" "4b507e48da30711e25d1bcdd19580f25887a2267"
 github "WeTransfer/WeScan" "v0.9.1"
 github "WeTransfer/WeScan" "v0.9.1"
 github "calimarkus/JDStatusBarNotification" "1.6.0"
 github "calimarkus/JDStatusBarNotification" "1.6.0"
 github "danielsaidi/Sheeeeeeeeet" "1.2.2"
 github "danielsaidi/Sheeeeeeeeet" "1.2.2"
@@ -10,9 +10,9 @@ github "ealeksandrov/EAIntroView" "2.12.0"
 github "ealeksandrov/EARestrictedScrollView" "1.1.0"
 github "ealeksandrov/EARestrictedScrollView" "1.1.0"
 github "jdg/MBProgressHUD" "1.1.0"
 github "jdg/MBProgressHUD" "1.1.0"
 github "kishikawakatsumi/UICKeyChainStore" "v2.1.2"
 github "kishikawakatsumi/UICKeyChainStore" "v2.1.2"
-github "malcommac/SwiftRichString" "2.0.1"
+github "malcommac/SwiftRichString" "2.1.0"
 github "marinofaggiana/FastScroll" "81967c2309d29bc2c330d422da612160a30bade8"
 github "marinofaggiana/FastScroll" "81967c2309d29bc2c330d422da612160a30bade8"
 github "realm/realm-cocoa" "v3.13.1"
 github "realm/realm-cocoa" "v3.13.1"
-github "sgr-ksmt/PDFGenerator" "2.1"
+github "sgr-ksmt/PDFGenerator" "2.1.1"
 github "tilltue/TLPhotoPicker" "1.8.3"
 github "tilltue/TLPhotoPicker" "1.8.3"
 github "yannickl/QRCodeReader.swift" "10.0.0"
 github "yannickl/QRCodeReader.swift" "10.0.0"

+ 1 - 1
Carthage/Checkouts/CocoaLumberjack/Classes/CLI/CLIColor.h

@@ -1,6 +1,6 @@
 // Software License Agreement (BSD License)
 // Software License Agreement (BSD License)
 //
 //
-// Copyright (c) 2010-2019, Deusty, LLC
+// Copyright (c) 2010-2018, Deusty, LLC
 // All rights reserved.
 // All rights reserved.
 //
 //
 // Redistribution and use of this software in source and binary forms,
 // Redistribution and use of this software in source and binary forms,

+ 1 - 1
Carthage/Checkouts/CocoaLumberjack/Classes/CLI/CLIColor.m

@@ -1,6 +1,6 @@
 // Software License Agreement (BSD License)
 // Software License Agreement (BSD License)
 //
 //
-// Copyright (c) 2010-2019, Deusty, LLC
+// Copyright (c) 2010-2018, Deusty, LLC
 // All rights reserved.
 // All rights reserved.
 //
 //
 // Redistribution and use of this software in source and binary forms,
 // Redistribution and use of this software in source and binary forms,

+ 18 - 18
Carthage/Checkouts/CocoaLumberjack/Classes/CocoaLumberjack.h

@@ -1,6 +1,6 @@
 // Software License Agreement (BSD License)
 // Software License Agreement (BSD License)
 //
 //
-// Copyright (c) 2010-2019, Deusty, LLC
+// Copyright (c) 2010-2018, Deusty, LLC
 // All rights reserved.
 // All rights reserved.
 //
 //
 // Redistribution and use of this software in source and binary forms,
 // Redistribution and use of this software in source and binary forms,
@@ -71,33 +71,33 @@ FOUNDATION_EXPORT const unsigned char CocoaLumberjackVersionString[];
 #endif
 #endif
 
 
 // Core
 // Core
-#import <CocoaLumberjack/DDLog.h>
+#import "DDLog.h"
 
 
 // Main macros
 // Main macros
-#import <CocoaLumberjack/DDLogMacros.h>
-#import <CocoaLumberjack/DDAssertMacros.h>
+#import "DDLogMacros.h"
+#import "DDAssertMacros.h"
 
 
 // Capture ASL
 // Capture ASL
-#import <CocoaLumberjack/DDASLLogCapture.h>
+#import "DDASLLogCapture.h"
 
 
 // Loggers
 // Loggers
-#import <CocoaLumberjack/DDLoggerNames.h>
+#import "DDLoggerNames.h"
 
 
-#import <CocoaLumberjack/DDTTYLogger.h>
-#import <CocoaLumberjack/DDASLLogger.h>
-#import <CocoaLumberjack/DDFileLogger.h>
-#import <CocoaLumberjack/DDOSLogger.h>
+#import "DDTTYLogger.h"
+#import "DDASLLogger.h"
+#import "DDFileLogger.h"
+#import "DDOSLogger.h"
 
 
 // Extensions
 // Extensions
-#import <CocoaLumberjack/DDContextFilterLogFormatter.h>
-#import <CocoaLumberjack/DDDispatchQueueLogFormatter.h>
-#import <CocoaLumberjack/DDMultiFormatter.h>
-#import <CocoaLumberjack/DDFileLogger+Buffering.h>
+#import "DDContextFilterLogFormatter.h"
+#import "DDDispatchQueueLogFormatter.h"
+#import "DDMultiFormatter.h"
+#import "DDFileLogger+Buffering.h"
 
 
 // CLI
 // CLI
-#import <CocoaLumberjack/CLIColor.h>
+#import "CLIColor.h"
 
 
 // etc
 // etc
-#import <CocoaLumberjack/DDAbstractDatabaseLogger.h>
-#import <CocoaLumberjack/DDLog+LOGV.h>
-#import <CocoaLumberjack/DDLegacyMacros.h>
+#import "DDAbstractDatabaseLogger.h"
+#import "DDLog+LOGV.h"
+#import "DDLegacyMacros.h"

+ 6 - 6
Carthage/Checkouts/CocoaLumberjack/Classes/CocoaLumberjack.swift

@@ -1,6 +1,6 @@
 // Software License Agreement (BSD License)
 // Software License Agreement (BSD License)
 //
 //
-// Copyright (c) 2010-2019, Deusty, LLC
+// Copyright (c) 2010-2018, Deusty, LLC
 // All rights reserved.
 // All rights reserved.
 //
 //
 // Redistribution and use of this software in source and binary forms,
 // Redistribution and use of this software in source and binary forms,
@@ -111,7 +111,7 @@ public func DDLogDebug(_ message: @autoclosure () -> String,
                        tag: Any? = nil,
                        tag: Any? = nil,
                        asynchronous async: Bool = asyncLoggingEnabled,
                        asynchronous async: Bool = asyncLoggingEnabled,
                        ddlog: DDLog = .sharedInstance) {
                        ddlog: DDLog = .sharedInstance) {
-    _DDLogMessage(message(), level: level, flag: .debug, context: context, file: file, function: function, line: line, tag: tag, asynchronous: async, ddlog: ddlog)
+    _DDLogMessage(message, level: level, flag: .debug, context: context, file: file, function: function, line: line, tag: tag, asynchronous: async, ddlog: ddlog)
 }
 }
 
 
 @inlinable
 @inlinable
@@ -124,7 +124,7 @@ public func DDLogInfo(_ message: @autoclosure () -> String,
                       tag: Any? = nil,
                       tag: Any? = nil,
                       asynchronous async: Bool = asyncLoggingEnabled,
                       asynchronous async: Bool = asyncLoggingEnabled,
                       ddlog: DDLog = .sharedInstance) {
                       ddlog: DDLog = .sharedInstance) {
-    _DDLogMessage(message(), level: level, flag: .info, context: context, file: file, function: function, line: line, tag: tag, asynchronous: async, ddlog: ddlog)
+    _DDLogMessage(message, level: level, flag: .info, context: context, file: file, function: function, line: line, tag: tag, asynchronous: async, ddlog: ddlog)
 }
 }
 
 
 @inlinable
 @inlinable
@@ -137,7 +137,7 @@ public func DDLogWarn(_ message: @autoclosure () -> String,
                       tag: Any? = nil,
                       tag: Any? = nil,
                       asynchronous async: Bool = asyncLoggingEnabled,
                       asynchronous async: Bool = asyncLoggingEnabled,
                       ddlog: DDLog = .sharedInstance) {
                       ddlog: DDLog = .sharedInstance) {
-    _DDLogMessage(message(), level: level, flag: .warning, context: context, file: file, function: function, line: line, tag: tag, asynchronous: async, ddlog: ddlog)
+    _DDLogMessage(message, level: level, flag: .warning, context: context, file: file, function: function, line: line, tag: tag, asynchronous: async, ddlog: ddlog)
 }
 }
 
 
 @inlinable
 @inlinable
@@ -150,7 +150,7 @@ public func DDLogVerbose(_ message: @autoclosure () -> String,
                          tag: Any? = nil,
                          tag: Any? = nil,
                          asynchronous async: Bool = asyncLoggingEnabled,
                          asynchronous async: Bool = asyncLoggingEnabled,
                          ddlog: DDLog = .sharedInstance) {
                          ddlog: DDLog = .sharedInstance) {
-    _DDLogMessage(message(), level: level, flag: .verbose, context: context, file: file, function: function, line: line, tag: tag, asynchronous: async, ddlog: ddlog)
+    _DDLogMessage(message, level: level, flag: .verbose, context: context, file: file, function: function, line: line, tag: tag, asynchronous: async, ddlog: ddlog)
 }
 }
 
 
 @inlinable
 @inlinable
@@ -163,7 +163,7 @@ public func DDLogError(_ message: @autoclosure () -> String,
                        tag: Any? = nil,
                        tag: Any? = nil,
                        asynchronous async: Bool = false,
                        asynchronous async: Bool = false,
                        ddlog: DDLog = .sharedInstance) {
                        ddlog: DDLog = .sharedInstance) {
-    _DDLogMessage(message(), level: level, flag: .error, context: context, file: file, function: function, line: line, tag: tag, asynchronous: async, ddlog: ddlog)
+    _DDLogMessage(message, level: level, flag: .error, context: context, file: file, function: function, line: line, tag: tag, asynchronous: async, ddlog: ddlog)
 }
 }
 
 
 /// Returns a String of the current filename, without full path or extension.
 /// Returns a String of the current filename, without full path or extension.

+ 1 - 1
Carthage/Checkouts/CocoaLumberjack/Classes/DDASLLogCapture.h

@@ -1,6 +1,6 @@
 // Software License Agreement (BSD License)
 // Software License Agreement (BSD License)
 //
 //
-// Copyright (c) 2010-2019, Deusty, LLC
+// Copyright (c) 2010-2018, Deusty, LLC
 // All rights reserved.
 // All rights reserved.
 //
 //
 // Redistribution and use of this software in source and binary forms,
 // Redistribution and use of this software in source and binary forms,

+ 1 - 1
Carthage/Checkouts/CocoaLumberjack/Classes/DDASLLogCapture.m

@@ -1,6 +1,6 @@
 // Software License Agreement (BSD License)
 // Software License Agreement (BSD License)
 //
 //
-// Copyright (c) 2010-2019, Deusty, LLC
+// Copyright (c) 2010-2018, Deusty, LLC
 // All rights reserved.
 // All rights reserved.
 //
 //
 // Redistribution and use of this software in source and binary forms,
 // Redistribution and use of this software in source and binary forms,

+ 1 - 1
Carthage/Checkouts/CocoaLumberjack/Classes/DDASLLogger.h

@@ -1,6 +1,6 @@
 // Software License Agreement (BSD License)
 // Software License Agreement (BSD License)
 //
 //
-// Copyright (c) 2010-2019, Deusty, LLC
+// Copyright (c) 2010-2018, Deusty, LLC
 // All rights reserved.
 // All rights reserved.
 //
 //
 // Redistribution and use of this software in source and binary forms,
 // Redistribution and use of this software in source and binary forms,

+ 1 - 1
Carthage/Checkouts/CocoaLumberjack/Classes/DDASLLogger.m

@@ -1,6 +1,6 @@
 // Software License Agreement (BSD License)
 // Software License Agreement (BSD License)
 //
 //
-// Copyright (c) 2010-2019, Deusty, LLC
+// Copyright (c) 2010-2018, Deusty, LLC
 // All rights reserved.
 // All rights reserved.
 //
 //
 // Redistribution and use of this software in source and binary forms,
 // Redistribution and use of this software in source and binary forms,

+ 1 - 1
Carthage/Checkouts/CocoaLumberjack/Classes/DDAbstractDatabaseLogger.h

@@ -1,6 +1,6 @@
 // Software License Agreement (BSD License)
 // Software License Agreement (BSD License)
 //
 //
-// Copyright (c) 2010-2019, Deusty, LLC
+// Copyright (c) 2010-2018, Deusty, LLC
 // All rights reserved.
 // All rights reserved.
 //
 //
 // Redistribution and use of this software in source and binary forms,
 // Redistribution and use of this software in source and binary forms,

+ 1 - 1
Carthage/Checkouts/CocoaLumberjack/Classes/DDAbstractDatabaseLogger.m

@@ -1,6 +1,6 @@
 // Software License Agreement (BSD License)
 // Software License Agreement (BSD License)
 //
 //
-// Copyright (c) 2010-2019, Deusty, LLC
+// Copyright (c) 2010-2018, Deusty, LLC
 // All rights reserved.
 // All rights reserved.
 //
 //
 // Redistribution and use of this software in source and binary forms,
 // Redistribution and use of this software in source and binary forms,

+ 1 - 1
Carthage/Checkouts/CocoaLumberjack/Classes/DDAssertMacros.h

@@ -1,6 +1,6 @@
 // Software License Agreement (BSD License)
 // Software License Agreement (BSD License)
 //
 //
-// Copyright (c) 2010-2019, Deusty, LLC
+// Copyright (c) 2010-2018, Deusty, LLC
 // All rights reserved.
 // All rights reserved.
 //
 //
 // Redistribution and use of this software in source and binary forms,
 // Redistribution and use of this software in source and binary forms,

+ 1 - 1
Carthage/Checkouts/CocoaLumberjack/Classes/DDFileLogger.h

@@ -1,6 +1,6 @@
 // Software License Agreement (BSD License)
 // Software License Agreement (BSD License)
 //
 //
-// Copyright (c) 2010-2019, Deusty, LLC
+// Copyright (c) 2010-2018, Deusty, LLC
 // All rights reserved.
 // All rights reserved.
 //
 //
 // Redistribution and use of this software in source and binary forms,
 // Redistribution and use of this software in source and binary forms,

+ 23 - 39
Carthage/Checkouts/CocoaLumberjack/Classes/DDFileLogger.m

@@ -1,6 +1,6 @@
 // Software License Agreement (BSD License)
 // Software License Agreement (BSD License)
 //
 //
-// Copyright (c) 2010-2019, Deusty, LLC
+// Copyright (c) 2010-2018, Deusty, LLC
 // All rights reserved.
 // All rights reserved.
 //
 //
 // Redistribution and use of this software in source and binary forms,
 // Redistribution and use of this software in source and binary forms,
@@ -1007,55 +1007,39 @@ unsigned long long const kDDDefaultLogFilesDiskQuota   = 20 * 1024 * 1024; // 20
 - (DDLogFileInfo *)lt_currentLogFileInfo {
 - (DDLogFileInfo *)lt_currentLogFileInfo {
     NSAssert([self isOnInternalLoggerQueue], @"lt_ methods should be on logger queue.");
     NSAssert([self isOnInternalLoggerQueue], @"lt_ methods should be on logger queue.");
 
 
-    // Get the current log file info ivar (might be nil).
-    DDLogFileInfo *newCurrentLogFile = _currentLogFileInfo;
-
-    // Check if we're resuming and if so, get the first of the sorted log file infos.
-    BOOL isResuming = newCurrentLogFile == nil;
+    BOOL isResuming = _currentLogFileInfo == nil;
     if (isResuming) {
     if (isResuming) {
         NSArray *sortedLogFileInfos = [_logFileManager sortedLogFileInfos];
         NSArray *sortedLogFileInfos = [_logFileManager sortedLogFileInfos];
-        newCurrentLogFile = sortedLogFileInfos.firstObject;
+        _currentLogFileInfo = sortedLogFileInfos.firstObject;
     }
     }
 
 
-    // Check if the file we've found is still valid. Otherwise create a new one.
-    if (newCurrentLogFile != nil && [self lt_shouldUseLogFile:newCurrentLogFile isResuming:isResuming]) {
-        if (isResuming) {
-            NSLogVerbose(@"DDFileLogger: Resuming logging with file %@", newCurrentLogFile.fileName);
-        }
-        _currentLogFileInfo = newCurrentLogFile;
-    } else {
-        NSString *currentLogFilePath = [_logFileManager createNewLogFile];
-        _currentLogFileInfo = [[DDLogFileInfo alloc] initWithFilePath:currentLogFilePath];
-    }
+    if (_currentLogFileInfo) {
+        BOOL isMostRecentLogArchived = _currentLogFileInfo.isArchived;
+        BOOL forceArchive = _doNotReuseLogFiles && isMostRecentLogArchived == NO;
 
 
-    return _currentLogFileInfo;
-}
+        if (forceArchive || [self lt_shouldLogFileBeArchived:_currentLogFileInfo]) {
+            _currentLogFileInfo.isArchived = YES;
+            NSString *archivedLogFilePath = [_currentLogFileInfo.fileName copy];
+            _currentLogFileInfo = nil;
 
 
-- (BOOL)lt_shouldUseLogFile:(nonnull DDLogFileInfo *)logFileInfo isResuming:(BOOL)isResuming {
-    NSAssert([self isOnInternalLoggerQueue], @"lt_ methods should be on logger queue.");
-    NSParameterAssert(logFileInfo);
-
-    // Check if the log file is archived. We must not use archived log files.
-    if (logFileInfo.isArchived) {
-        return NO;
+            if ([_logFileManager respondsToSelector:@selector(didArchiveLogFile:)]) {
+                dispatch_async(_completionQueue, ^{
+                    [self->_logFileManager didArchiveLogFile:archivedLogFilePath];
+                });
+            }
+        }
     }
     }
 
 
-    // If we're resuming, we need to check if the log file is allowed for reuse or needs to be archived.
-    if (isResuming && (_doNotReuseLogFiles || [self lt_shouldLogFileBeArchived:logFileInfo])) {
-        logFileInfo.isArchived = YES;
-        NSString *archivedLogFilePath = [logFileInfo.fileName copy];
-
-        if ([_logFileManager respondsToSelector:@selector(didArchiveLogFile:)]) {
-            dispatch_async(_completionQueue, ^{
-                [self->_logFileManager didArchiveLogFile:archivedLogFilePath];
-            });
-        }
+    if (isResuming && _currentLogFileInfo) {
+        NSLogVerbose(@"DDFileLogger: Resuming logging with file %@", _currentLogFileInfo.fileName);
+    }
 
 
-        return NO;
+    if (!_currentLogFileInfo) {
+        NSString *currentLogFilePath = [_logFileManager createNewLogFile];
+        _currentLogFileInfo = [[DDLogFileInfo alloc] initWithFilePath:currentLogFilePath];
     }
     }
 
 
-    // All checks have passed. It's valid.
-    return YES;
+    return _currentLogFileInfo;
 }
 }
 
 
 - (void)lt_monitorCurrentLogFileForExternalChanges {
 - (void)lt_monitorCurrentLogFileForExternalChanges {

+ 1 - 1
Carthage/Checkouts/CocoaLumberjack/Classes/DDLegacyMacros.h

@@ -1,6 +1,6 @@
 // Software License Agreement (BSD License)
 // Software License Agreement (BSD License)
 //
 //
-// Copyright (c) 2010-2019, Deusty, LLC
+// Copyright (c) 2010-2018, Deusty, LLC
 // All rights reserved.
 // All rights reserved.
 //
 //
 // Redistribution and use of this software in source and binary forms,
 // Redistribution and use of this software in source and binary forms,

+ 1 - 1
Carthage/Checkouts/CocoaLumberjack/Classes/DDLog+LOGV.h

@@ -1,6 +1,6 @@
 // Software License Agreement (BSD License)
 // Software License Agreement (BSD License)
 //
 //
-// Copyright (c) 2010-2019, Deusty, LLC
+// Copyright (c) 2010-2018, Deusty, LLC
 // All rights reserved.
 // All rights reserved.
 //
 //
 // Redistribution and use of this software in source and binary forms,
 // Redistribution and use of this software in source and binary forms,

+ 1 - 1
Carthage/Checkouts/CocoaLumberjack/Classes/DDLog.h

@@ -1,6 +1,6 @@
 // Software License Agreement (BSD License)
 // Software License Agreement (BSD License)
 //
 //
-// Copyright (c) 2010-2019, Deusty, LLC
+// Copyright (c) 2010-2018, Deusty, LLC
 // All rights reserved.
 // All rights reserved.
 //
 //
 // Redistribution and use of this software in source and binary forms,
 // Redistribution and use of this software in source and binary forms,

+ 52 - 68
Carthage/Checkouts/CocoaLumberjack/Classes/DDLog.m

@@ -1,6 +1,6 @@
 // Software License Agreement (BSD License)
 // Software License Agreement (BSD License)
 //
 //
-// Copyright (c) 2010-2019, Deusty, LLC
+// Copyright (c) 2010-2018, Deusty, LLC
 // All rights reserved.
 // All rights reserved.
 //
 //
 // Redistribution and use of this software in source and binary forms,
 // Redistribution and use of this software in source and binary forms,
@@ -127,12 +127,12 @@ static NSUInteger _numProcessors;
  */
  */
 + (instancetype)sharedInstance {
 + (instancetype)sharedInstance {
     static id sharedInstance = nil;
     static id sharedInstance = nil;
-
+    
     static dispatch_once_t onceToken;
     static dispatch_once_t onceToken;
     dispatch_once(&onceToken, ^{
     dispatch_once(&onceToken, ^{
         sharedInstance = [[self alloc] init];
         sharedInstance = [[self alloc] init];
     });
     });
-
+    
     return sharedInstance;
     return sharedInstance;
 }
 }
 
 
@@ -146,23 +146,23 @@ static NSUInteger _numProcessors;
  **/
  **/
 + (void)initialize {
 + (void)initialize {
     static dispatch_once_t DDLogOnceToken;
     static dispatch_once_t DDLogOnceToken;
-
+    
     dispatch_once(&DDLogOnceToken, ^{
     dispatch_once(&DDLogOnceToken, ^{
         NSLogDebug(@"DDLog: Using grand central dispatch");
         NSLogDebug(@"DDLog: Using grand central dispatch");
-
+        
         _loggingQueue = dispatch_queue_create("cocoa.lumberjack", NULL);
         _loggingQueue = dispatch_queue_create("cocoa.lumberjack", NULL);
         _loggingGroup = dispatch_group_create();
         _loggingGroup = dispatch_group_create();
-
+        
         void *nonNullValue = GlobalLoggingQueueIdentityKey; // Whatever, just not null
         void *nonNullValue = GlobalLoggingQueueIdentityKey; // Whatever, just not null
         dispatch_queue_set_specific(_loggingQueue, GlobalLoggingQueueIdentityKey, nonNullValue, NULL);
         dispatch_queue_set_specific(_loggingQueue, GlobalLoggingQueueIdentityKey, nonNullValue, NULL);
-
+        
         _queueSemaphore = dispatch_semaphore_create(DDLOG_MAX_QUEUE_SIZE);
         _queueSemaphore = dispatch_semaphore_create(DDLOG_MAX_QUEUE_SIZE);
-
+        
         // Figure out how many processors are available.
         // Figure out how many processors are available.
         // This may be used later for an optimization on uniprocessor machines.
         // This may be used later for an optimization on uniprocessor machines.
-
+        
         _numProcessors = MAX([NSProcessInfo processInfo].processorCount, (NSUInteger) 1);
         _numProcessors = MAX([NSProcessInfo processInfo].processorCount, (NSUInteger) 1);
-
+        
         NSLogDebug(@"DDLog: numProcessors = %@", @(_numProcessors));
         NSLogDebug(@"DDLog: numProcessors = %@", @(_numProcessors));
     });
     });
 }
 }
@@ -175,10 +175,10 @@ static NSUInteger _numProcessors;
  */
  */
 - (id)init {
 - (id)init {
     self = [super init];
     self = [super init];
-
+    
     if (self) {
     if (self) {
         self._loggers = [[NSMutableArray alloc] initWithCapacity:4];
         self._loggers = [[NSMutableArray alloc] initWithCapacity:4];
-
+        
 #if TARGET_OS_IOS
 #if TARGET_OS_IOS
         NSString *notificationName = UIApplicationWillTerminateNotification;
         NSString *notificationName = UIApplicationWillTerminateNotification;
 #else
 #else
@@ -199,9 +199,9 @@ static NSUInteger _numProcessors;
                 [weakSelf applicationWillTerminate:nil];
                 [weakSelf applicationWillTerminate:nil];
             });
             });
         }
         }
-
+        
 #endif /* if TARGET_OS_IOS */
 #endif /* if TARGET_OS_IOS */
-
+        
         if (notificationName) {
         if (notificationName) {
             [[NSNotificationCenter defaultCenter] addObserver:self
             [[NSNotificationCenter defaultCenter] addObserver:self
                                                      selector:@selector(applicationWillTerminate:)
                                                      selector:@selector(applicationWillTerminate:)
@@ -209,7 +209,7 @@ static NSUInteger _numProcessors;
                                                        object:nil];
                                                        object:nil];
         }
         }
     }
     }
-
+    
     return self;
     return self;
 }
 }
 
 
@@ -248,7 +248,7 @@ static NSUInteger _numProcessors;
     if (!logger) {
     if (!logger) {
         return;
         return;
     }
     }
-
+    
     dispatch_async(_loggingQueue, ^{ @autoreleasepool {
     dispatch_async(_loggingQueue, ^{ @autoreleasepool {
         [self lt_addLogger:logger level:level];
         [self lt_addLogger:logger level:level];
     } });
     } });
@@ -262,7 +262,7 @@ static NSUInteger _numProcessors;
     if (!logger) {
     if (!logger) {
         return;
         return;
     }
     }
-
+    
     dispatch_async(_loggingQueue, ^{ @autoreleasepool {
     dispatch_async(_loggingQueue, ^{ @autoreleasepool {
         [self lt_removeLogger:logger];
         [self lt_removeLogger:logger];
     } });
     } });
@@ -284,11 +284,11 @@ static NSUInteger _numProcessors;
 
 
 - (NSArray<id<DDLogger>> *)allLoggers {
 - (NSArray<id<DDLogger>> *)allLoggers {
     __block NSArray *theLoggers;
     __block NSArray *theLoggers;
-
+    
     dispatch_sync(_loggingQueue, ^{ @autoreleasepool {
     dispatch_sync(_loggingQueue, ^{ @autoreleasepool {
         theLoggers = [self lt_allLoggers];
         theLoggers = [self lt_allLoggers];
     } });
     } });
-
+    
     return theLoggers;
     return theLoggers;
 }
 }
 
 
@@ -298,11 +298,11 @@ static NSUInteger _numProcessors;
 
 
 - (NSArray<DDLoggerInformation *> *)allLoggersWithLevel {
 - (NSArray<DDLoggerInformation *> *)allLoggersWithLevel {
     __block NSArray *theLoggersWithLevel;
     __block NSArray *theLoggersWithLevel;
-
+    
     dispatch_sync(_loggingQueue, ^{ @autoreleasepool {
     dispatch_sync(_loggingQueue, ^{ @autoreleasepool {
         theLoggersWithLevel = [self lt_allLoggersWithLevel];
         theLoggersWithLevel = [self lt_allLoggersWithLevel];
     } });
     } });
-
+    
     return theLoggersWithLevel;
     return theLoggersWithLevel;
 }
 }
 
 
@@ -378,16 +378,16 @@ static NSUInteger _numProcessors;
         tag:(id)tag
         tag:(id)tag
      format:(NSString *)format, ... {
      format:(NSString *)format, ... {
     va_list args;
     va_list args;
-
+    
     if (format) {
     if (format) {
         va_start(args, format);
         va_start(args, format);
-
+        
         NSString *message = [[NSString alloc] initWithFormat:format arguments:args];
         NSString *message = [[NSString alloc] initWithFormat:format arguments:args];
-
+        
         va_end(args);
         va_end(args);
-
+        
         va_start(args, format);
         va_start(args, format);
-
+        
         [self log:asynchronous
         [self log:asynchronous
           message:message
           message:message
             level:level
             level:level
@@ -397,7 +397,7 @@ static NSUInteger _numProcessors;
          function:function
          function:function
              line:line
              line:line
               tag:tag];
               tag:tag];
-
+        
         va_end(args);
         va_end(args);
     }
     }
 }
 }
@@ -412,16 +412,16 @@ static NSUInteger _numProcessors;
         tag:(id)tag
         tag:(id)tag
      format:(NSString *)format, ... {
      format:(NSString *)format, ... {
     va_list args;
     va_list args;
-
+    
     if (format) {
     if (format) {
         va_start(args, format);
         va_start(args, format);
-
+        
         NSString *message = [[NSString alloc] initWithFormat:format arguments:args];
         NSString *message = [[NSString alloc] initWithFormat:format arguments:args];
-
+        
         va_end(args);
         va_end(args);
-
+        
         va_start(args, format);
         va_start(args, format);
-
+        
         [self log:asynchronous
         [self log:asynchronous
           message:message
           message:message
             level:level
             level:level
@@ -431,7 +431,7 @@ static NSUInteger _numProcessors;
          function:function
          function:function
              line:line
              line:line
               tag:tag];
               tag:tag];
-
+        
         va_end(args);
         va_end(args);
     }
     }
 }
 }
@@ -504,7 +504,7 @@ static NSUInteger _numProcessors;
                                                                  tag:tag
                                                                  tag:tag
                                                              options:(DDLogMessageOptions)0
                                                              options:(DDLogMessageOptions)0
                                                            timestamp:nil];
                                                            timestamp:nil];
-
+    
     [self queueLogMessage:logMessage asynchronously:asynchronous];
     [self queueLogMessage:logMessage asynchronously:asynchronous];
 }
 }
 
 
@@ -753,19 +753,19 @@ static NSUInteger _numProcessors;
             break;
             break;
         }
         }
     }
     }
-
+    
     if (loggerNode == nil) {
     if (loggerNode == nil) {
         NSLogDebug(@"DDLog: Request to remove logger which wasn't added");
         NSLogDebug(@"DDLog: Request to remove logger which wasn't added");
         return;
         return;
     }
     }
-
+    
     // Notify logger
     // Notify logger
     if ([logger respondsToSelector:@selector(willRemoveLogger)]) {
     if ([logger respondsToSelector:@selector(willRemoveLogger)]) {
         dispatch_async(loggerNode->_loggerQueue, ^{ @autoreleasepool {
         dispatch_async(loggerNode->_loggerQueue, ^{ @autoreleasepool {
             [logger willRemoveLogger];
             [logger willRemoveLogger];
         } });
         } });
     }
     }
-
+    
     // Remove from loggers array
     // Remove from loggers array
     [self._loggers removeObject:loggerNode];
     [self._loggers removeObject:loggerNode];
 }
 }
@@ -773,7 +773,7 @@ static NSUInteger _numProcessors;
 - (void)lt_removeAllLoggers {
 - (void)lt_removeAllLoggers {
     NSAssert(dispatch_get_specific(GlobalLoggingQueueIdentityKey),
     NSAssert(dispatch_get_specific(GlobalLoggingQueueIdentityKey),
              @"This method should only be run on the logging thread/queue");
              @"This method should only be run on the logging thread/queue");
-
+    
     // Notify all loggers
     // Notify all loggers
     for (DDLoggerNode *loggerNode in self._loggers) {
     for (DDLoggerNode *loggerNode in self._loggers) {
         if ([loggerNode->_logger respondsToSelector:@selector(willRemoveLogger)]) {
         if ([loggerNode->_logger respondsToSelector:@selector(willRemoveLogger)]) {
@@ -782,7 +782,7 @@ static NSUInteger _numProcessors;
             } });
             } });
         }
         }
     }
     }
-
+    
     // Remove all loggers from array
     // Remove all loggers from array
 
 
     [self._loggers removeAllObjects];
     [self._loggers removeAllObjects];
@@ -804,14 +804,14 @@ static NSUInteger _numProcessors;
 - (NSArray *)lt_allLoggersWithLevel {
 - (NSArray *)lt_allLoggersWithLevel {
     NSAssert(dispatch_get_specific(GlobalLoggingQueueIdentityKey),
     NSAssert(dispatch_get_specific(GlobalLoggingQueueIdentityKey),
              @"This method should only be run on the logging thread/queue");
              @"This method should only be run on the logging thread/queue");
-
+    
     NSMutableArray *theLoggersWithLevel = [NSMutableArray new];
     NSMutableArray *theLoggersWithLevel = [NSMutableArray new];
-
+    
     for (DDLoggerNode *loggerNode in self._loggers) {
     for (DDLoggerNode *loggerNode in self._loggers) {
         [theLoggersWithLevel addObject:[DDLoggerInformation informationWithLogger:loggerNode->_logger
         [theLoggersWithLevel addObject:[DDLoggerInformation informationWithLogger:loggerNode->_logger
                                                                          andLevel:loggerNode->_level]];
                                                                          andLevel:loggerNode->_level]];
     }
     }
-
+    
     return [theLoggersWithLevel copy];
     return [theLoggersWithLevel copy];
 }
 }
 
 
@@ -835,39 +835,23 @@ static NSUInteger _numProcessors;
             if (!(logMessage->_flag & loggerNode->_level)) {
             if (!(logMessage->_flag & loggerNode->_level)) {
                 continue;
                 continue;
             }
             }
-
+            
             dispatch_group_async(_loggingGroup, loggerNode->_loggerQueue, ^{ @autoreleasepool {
             dispatch_group_async(_loggingGroup, loggerNode->_loggerQueue, ^{ @autoreleasepool {
                 [loggerNode->_logger logMessage:logMessage];
                 [loggerNode->_logger logMessage:logMessage];
             } });
             } });
         }
         }
-
+        
         dispatch_group_wait(_loggingGroup, DISPATCH_TIME_FOREVER);
         dispatch_group_wait(_loggingGroup, DISPATCH_TIME_FOREVER);
     } else {
     } else {
         // Execute each logger serially, each within its own queue.
         // Execute each logger serially, each within its own queue.
-
+        
         for (DDLoggerNode *loggerNode in self._loggers) {
         for (DDLoggerNode *loggerNode in self._loggers) {
             // skip the loggers that shouldn't write this message based on the log level
             // skip the loggers that shouldn't write this message based on the log level
 
 
             if (!(logMessage->_flag & loggerNode->_level)) {
             if (!(logMessage->_flag & loggerNode->_level)) {
                 continue;
                 continue;
             }
             }
-
-#if DD_DEBUG
-            // we must assure that we aren not on loggerNode->_loggerQueue.
-            if (loggerNode->_loggerQueue == NULL) {
-              // tell that we can't dispatch logger node on queue that is NULL.
-              NSLogDebug(@"DDLog: current node has loggerQueue == NULL");
-            }
-            else {
-              dispatch_async(loggerNode->_loggerQueue, ^{
-                if (dispatch_get_specific(GlobalLoggingQueueIdentityKey)) {
-                  // tell that we somehow on logging queue?
-                  NSLogDebug(@"DDLog: current node has loggerQueue == globalLoggingQueue");
-                }
-              });
-            }
-#endif
-            // next, we must check that node is OK.
+            
             dispatch_sync(loggerNode->_loggerQueue, ^{ @autoreleasepool {
             dispatch_sync(loggerNode->_loggerQueue, ^{ @autoreleasepool {
                 [loggerNode->_logger logMessage:logMessage];
                 [loggerNode->_logger logMessage:logMessage];
             } });
             } });
@@ -896,10 +880,10 @@ static NSUInteger _numProcessors;
     //
     //
     // Now we need to propagate the flush request to any loggers that implement the flush method.
     // Now we need to propagate the flush request to any loggers that implement the flush method.
     // This is designed for loggers that buffer IO.
     // This is designed for loggers that buffer IO.
-
+    
     NSAssert(dispatch_get_specific(GlobalLoggingQueueIdentityKey),
     NSAssert(dispatch_get_specific(GlobalLoggingQueueIdentityKey),
              @"This method should only be run on the logging thread/queue");
              @"This method should only be run on the logging thread/queue");
-
+    
     for (DDLoggerNode *loggerNode in self._loggers) {
     for (DDLoggerNode *loggerNode in self._loggers) {
         if ([loggerNode->_logger respondsToSelector:@selector(flush)]) {
         if ([loggerNode->_logger respondsToSelector:@selector(flush)]) {
             dispatch_group_async(_loggingGroup, loggerNode->_loggerQueue, ^{ @autoreleasepool {
             dispatch_group_async(_loggingGroup, loggerNode->_loggerQueue, ^{ @autoreleasepool {
@@ -907,7 +891,7 @@ static NSUInteger _numProcessors;
             } });
             } });
         }
         }
     }
     }
-
+    
     dispatch_group_wait(_loggingGroup, DISPATCH_TIME_FOREVER);
     dispatch_group_wait(_loggingGroup, DISPATCH_TIME_FOREVER);
 }
 }
 
 
@@ -1068,7 +1052,7 @@ NSString * __nullable DDExtractFileNameWithoutExtension(const char *filePath, BO
         {
         {
             _fileName = [_fileName substringToIndex:dotLocation];
             _fileName = [_fileName substringToIndex:dotLocation];
         }
         }
-
+        
         // Try to get the current queue's label
         // Try to get the current queue's label
         _queueLabel = [[NSString alloc] initWithFormat:@"%s", dispatch_queue_get_label(DISPATCH_CURRENT_QUEUE_LABEL)];
         _queueLabel = [[NSString alloc] initWithFormat:@"%s", dispatch_queue_get_label(DISPATCH_CURRENT_QUEUE_LABEL)];
     }
     }
@@ -1077,7 +1061,7 @@ NSString * __nullable DDExtractFileNameWithoutExtension(const char *filePath, BO
 
 
 - (id)copyWithZone:(NSZone * __attribute__((unused)))zone {
 - (id)copyWithZone:(NSZone * __attribute__((unused)))zone {
     DDLogMessage *newMessage = [DDLogMessage new];
     DDLogMessage *newMessage = [DDLogMessage new];
-
+    
     newMessage->_message = _message;
     newMessage->_message = _message;
     newMessage->_level = _level;
     newMessage->_level = _level;
     newMessage->_flag = _flag;
     newMessage->_flag = _flag;
@@ -1232,7 +1216,7 @@ NSString * __nullable DDExtractFileNameWithoutExtension(const char *filePath, BO
                 }
                 }
 
 
                 self->_logFormatter = logFormatter;
                 self->_logFormatter = logFormatter;
-
+ 
                 if ([self->_logFormatter respondsToSelector:@selector(didAddToLogger:inQueue:)]) {
                 if ([self->_logFormatter respondsToSelector:@selector(didAddToLogger:inQueue:)]) {
                     [self->_logFormatter didAddToLogger:self inQueue:self->_loggerQueue];
                     [self->_logFormatter didAddToLogger:self inQueue:self->_loggerQueue];
                 } else if ([self->_logFormatter respondsToSelector:@selector(didAddToLogger:)]) {
                 } else if ([self->_logFormatter respondsToSelector:@selector(didAddToLogger:)]) {

+ 1 - 1
Carthage/Checkouts/CocoaLumberjack/Classes/DDLogMacros.h

@@ -1,6 +1,6 @@
 // Software License Agreement (BSD License)
 // Software License Agreement (BSD License)
 //
 //
-// Copyright (c) 2010-2019, Deusty, LLC
+// Copyright (c) 2010-2018, Deusty, LLC
 // All rights reserved.
 // All rights reserved.
 //
 //
 // Redistribution and use of this software in source and binary forms,
 // Redistribution and use of this software in source and binary forms,

+ 2 - 14
Carthage/Checkouts/CocoaLumberjack/Classes/DDOSLogger.h

@@ -1,6 +1,6 @@
 // Software License Agreement (BSD License)
 // Software License Agreement (BSD License)
 //
 //
-// Copyright (c) 2010-2019, Deusty, LLC
+// Copyright (c) 2010-2018, Deusty, LLC
 // All rights reserved.
 // All rights reserved.
 //
 //
 // Redistribution and use of this software in source and binary forms,
 // Redistribution and use of this software in source and binary forms,
@@ -31,20 +31,8 @@ API_AVAILABLE(macos(10.12), ios(10.0), watchos(3.0), tvos(10.0))
 /**
 /**
  *  Singleton method
  *  Singleton method
  *
  *
- *  @return the shared instance with OS_LOG_DEFAULT.
+ *  @return the shared instance
  */
  */
 @property (class, readonly, strong) DDOSLogger *sharedInstance;
 @property (class, readonly, strong) DDOSLogger *sharedInstance;
 
 
-/**
- Designed initializer
- 
- @param subsystem Desired subsystem in log. Consider "org.example"
- @param category Desired category in log. Consider "Point of interests."
- @return New instance of DDOSLogger.
- 
- @discussion This method accepts parameters of type (String, String)?
- If both parameters are nil, this method will return logger wrapper for `OS_LOG_DEFAULT`.
- If both parameters are not nil, it will return logger wrapper for `os_log_create(subsystem, category)`
- */
-- (instancetype)initWithSubsystem:(NSString *)subsystem category:(NSString *)category NS_DESIGNATED_INITIALIZER;
 @end
 @end

+ 17 - 55
Carthage/Checkouts/CocoaLumberjack/Classes/DDOSLogger.m

@@ -1,6 +1,6 @@
 // Software License Agreement (BSD License)
 // Software License Agreement (BSD License)
 //
 //
-// Copyright (c) 2010-2019, Deusty, LLC
+// Copyright (c) 2010-2018, Deusty, LLC
 // All rights reserved.
 // All rights reserved.
 //
 //
 // Redistribution and use of this software in source and binary forms,
 // Redistribution and use of this software in source and binary forms,
@@ -17,41 +17,10 @@
 
 
 #import <os/log.h>
 #import <os/log.h>
 
 
-@interface DDOSLogger () {
-    NSString *_subsystem;
-    NSString *_category;
-}
-@property (copy, nonatomic, readonly) NSString *subsystem;
-@property (copy, nonatomic, readonly) NSString *category;
-@property (strong, nonatomic, readwrite) os_log_t  logger;
-@end
-
 @implementation DDOSLogger
 @implementation DDOSLogger
 
 
-@synthesize subsystem = _subsystem;
-@synthesize category = _category;
-
-#pragma mark - Initialization
-
-/**
- * Assertion
- * Swift: (String, String)?
- */
-- (instancetype)initWithSubsystem:(NSString *)subsystem category:(NSString *)category {
-    NSAssert((subsystem == nil) == (category == nil), @"Either both subsystem and category or neither can be nil.");
-    if (self = [super init]) {
-        _subsystem = [subsystem copy];
-        _category = [category copy];
-    }
-    return self;
-}
-
 static DDOSLogger *sharedInstance;
 static DDOSLogger *sharedInstance;
 
 
-- (instancetype)init {
-    return [self initWithSubsystem:nil category:nil];
-}
-
 + (instancetype)sharedInstance {
 + (instancetype)sharedInstance {
     static dispatch_once_t DDOSLoggerOnceToken;
     static dispatch_once_t DDOSLoggerOnceToken;
 
 
@@ -62,54 +31,46 @@ static DDOSLogger *sharedInstance;
     return sharedInstance;
     return sharedInstance;
 }
 }
 
 
-#pragma mark - os_log
-
-- (os_log_t)getLogger {
-    if (self.subsystem == nil || self.category == nil) {
-        return OS_LOG_DEFAULT;
+- (instancetype)init {
+    if (sharedInstance != nil) {
+        return nil;
     }
     }
-    __auto_type subdomain = self.subsystem.UTF8String;
-    __auto_type category = self.category.UTF8String;
-    return os_log_create(subdomain, category);
-}
 
 
-- (os_log_t)logger {
-    if (_logger == nil)  {
-        _logger = [self getLogger];
+    if (self = [super init]) {
+        return self;
     }
     }
-    return _logger;
-}
 
 
-#pragma mark - DDLogger
+    return nil;
+}
 
 
 - (void)logMessage:(DDLogMessage *)logMessage {
 - (void)logMessage:(DDLogMessage *)logMessage {
     // Skip captured log messages
     // Skip captured log messages
     if ([logMessage->_fileName isEqualToString:@"DDASLLogCapture"]) {
     if ([logMessage->_fileName isEqualToString:@"DDASLLogCapture"]) {
         return;
         return;
     }
     }
-
+    
     if(@available(iOS 10.0, macOS 10.12, tvOS 10.0, watchOS 3.0, *)) {
     if(@available(iOS 10.0, macOS 10.12, tvOS 10.0, watchOS 3.0, *)) {
-
+        
         NSString * message = _logFormatter ? [_logFormatter formatLogMessage:logMessage] : logMessage->_message;
         NSString * message = _logFormatter ? [_logFormatter formatLogMessage:logMessage] : logMessage->_message;
-        if (message != nil) {
+        if (message) {
             const char *msg = [message UTF8String];
             const char *msg = [message UTF8String];
-            __auto_type logger = [self logger];
+            
             switch (logMessage->_flag) {
             switch (logMessage->_flag) {
                 case DDLogFlagError     :
                 case DDLogFlagError     :
-                    os_log_error(logger, "%{public}s", msg);
+                    os_log_error(OS_LOG_DEFAULT, "%{public}s", msg);
                     break;
                     break;
                 case DDLogFlagWarning   :
                 case DDLogFlagWarning   :
                 case DDLogFlagInfo      :
                 case DDLogFlagInfo      :
-                    os_log_info(logger, "%{public}s", msg);
+                    os_log_info(OS_LOG_DEFAULT, "%{public}s", msg);
                     break;
                     break;
                 case DDLogFlagDebug     :
                 case DDLogFlagDebug     :
                 case DDLogFlagVerbose   :
                 case DDLogFlagVerbose   :
                 default                 :
                 default                 :
-                    os_log_debug(logger, "%{public}s", msg);
+                    os_log_debug(OS_LOG_DEFAULT, "%{public}s", msg);
                     break;
                     break;
             }
             }
         }
         }
-
+        
     }
     }
 
 
 }
 }
@@ -117,4 +78,5 @@ static DDOSLogger *sharedInstance;
 - (DDLoggerName)loggerName {
 - (DDLoggerName)loggerName {
     return DDLoggerNameOS;
     return DDLoggerNameOS;
 }
 }
+
 @end
 @end

+ 1 - 1
Carthage/Checkouts/CocoaLumberjack/Classes/DDTTYLogger.h

@@ -1,6 +1,6 @@
 // Software License Agreement (BSD License)
 // Software License Agreement (BSD License)
 //
 //
-// Copyright (c) 2010-2019, Deusty, LLC
+// Copyright (c) 2010-2018, Deusty, LLC
 // All rights reserved.
 // All rights reserved.
 //
 //
 // Redistribution and use of this software in source and binary forms,
 // Redistribution and use of this software in source and binary forms,

+ 1 - 1
Carthage/Checkouts/CocoaLumberjack/Classes/DDTTYLogger.m

@@ -1,6 +1,6 @@
 // Software License Agreement (BSD License)
 // Software License Agreement (BSD License)
 //
 //
-// Copyright (c) 2010-2019, Deusty, LLC
+// Copyright (c) 2010-2018, Deusty, LLC
 // All rights reserved.
 // All rights reserved.
 //
 //
 // Redistribution and use of this software in source and binary forms,
 // Redistribution and use of this software in source and binary forms,

+ 1 - 1
Carthage/Checkouts/CocoaLumberjack/Classes/Extensions/DDContextFilterLogFormatter.h

@@ -1,6 +1,6 @@
 // Software License Agreement (BSD License)
 // Software License Agreement (BSD License)
 //
 //
-// Copyright (c) 2010-2019, Deusty, LLC
+// Copyright (c) 2010-2018, Deusty, LLC
 // All rights reserved.
 // All rights reserved.
 //
 //
 // Redistribution and use of this software in source and binary forms,
 // Redistribution and use of this software in source and binary forms,

+ 1 - 1
Carthage/Checkouts/CocoaLumberjack/Classes/Extensions/DDContextFilterLogFormatter.m

@@ -1,6 +1,6 @@
 // Software License Agreement (BSD License)
 // Software License Agreement (BSD License)
 //
 //
-// Copyright (c) 2010-2019, Deusty, LLC
+// Copyright (c) 2010-2018, Deusty, LLC
 // All rights reserved.
 // All rights reserved.
 //
 //
 // Redistribution and use of this software in source and binary forms,
 // Redistribution and use of this software in source and binary forms,

+ 1 - 1
Carthage/Checkouts/CocoaLumberjack/Classes/Extensions/DDDispatchQueueLogFormatter.h

@@ -1,6 +1,6 @@
 // Software License Agreement (BSD License)
 // Software License Agreement (BSD License)
 //
 //
-// Copyright (c) 2010-2019, Deusty, LLC
+// Copyright (c) 2010-2018, Deusty, LLC
 // All rights reserved.
 // All rights reserved.
 //
 //
 // Redistribution and use of this software in source and binary forms,
 // Redistribution and use of this software in source and binary forms,

+ 1 - 1
Carthage/Checkouts/CocoaLumberjack/Classes/Extensions/DDDispatchQueueLogFormatter.m

@@ -1,6 +1,6 @@
 // Software License Agreement (BSD License)
 // Software License Agreement (BSD License)
 //
 //
-// Copyright (c) 2010-2019, Deusty, LLC
+// Copyright (c) 2010-2018, Deusty, LLC
 // All rights reserved.
 // All rights reserved.
 //
 //
 // Redistribution and use of this software in source and binary forms,
 // Redistribution and use of this software in source and binary forms,

+ 1 - 1
Carthage/Checkouts/CocoaLumberjack/Classes/Extensions/DDMultiFormatter.h

@@ -1,6 +1,6 @@
 // Software License Agreement (BSD License)
 // Software License Agreement (BSD License)
 //
 //
-// Copyright (c) 2010-2019, Deusty, LLC
+// Copyright (c) 2010-2018, Deusty, LLC
 // All rights reserved.
 // All rights reserved.
 //
 //
 // Redistribution and use of this software in source and binary forms,
 // Redistribution and use of this software in source and binary forms,

+ 1 - 1
Carthage/Checkouts/CocoaLumberjack/Classes/Extensions/DDMultiFormatter.m

@@ -1,6 +1,6 @@
 // Software License Agreement (BSD License)
 // Software License Agreement (BSD License)
 //
 //
-// Copyright (c) 2010-2019, Deusty, LLC
+// Copyright (c) 2010-2018, Deusty, LLC
 // All rights reserved.
 // All rights reserved.
 //
 //
 // Redistribution and use of this software in source and binary forms,
 // Redistribution and use of this software in source and binary forms,

+ 1 - 1
Carthage/Checkouts/CocoaLumberjack/CocoaLumberjack.podspec

@@ -2,7 +2,7 @@
 Pod::Spec.new do |s|
 Pod::Spec.new do |s|
 
 
   s.name     = 'CocoaLumberjack'
   s.name     = 'CocoaLumberjack'
-  s.version  = '3.5.2'
+  s.version  = '3.5.1'
   s.license  = 'BSD'
   s.license  = 'BSD'
   s.summary  = 'A fast & simple, yet powerful & flexible logging framework for Mac and iOS.'
   s.summary  = 'A fast & simple, yet powerful & flexible logging framework for Mac and iOS.'
   s.homepage = 'https://github.com/CocoaLumberjack/CocoaLumberjack'
   s.homepage = 'https://github.com/CocoaLumberjack/CocoaLumberjack'

+ 1 - 1
Carthage/Checkouts/CocoaLumberjack/Framework/Lumberjack/CocoaLumberjack-Info.plist

@@ -17,7 +17,7 @@
 	<key>CFBundlePackageType</key>
 	<key>CFBundlePackageType</key>
 	<string>FMWK</string>
 	<string>FMWK</string>
 	<key>CFBundleShortVersionString</key>
 	<key>CFBundleShortVersionString</key>
-	<string>3.5.2</string>
+	<string>3.5.1</string>
 	<key>CFBundleSignature</key>
 	<key>CFBundleSignature</key>
 	<string>????</string>
 	<string>????</string>
 	<key>CFBundleVersion</key>
 	<key>CFBundleVersion</key>

+ 1 - 1
Carthage/Checkouts/CocoaLumberjack/Framework/Lumberjack/CocoaLumberjack-Prefix.pch

@@ -1,6 +1,6 @@
 // Software License Agreement (BSD License)
 // Software License Agreement (BSD License)
 //
 //
-// Copyright (c) 2010-2019, Deusty, LLC
+// Copyright (c) 2010-2018, Deusty, LLC
 // All rights reserved.
 // All rights reserved.
 //
 //
 // Redistribution and use of this software in source and binary forms,
 // Redistribution and use of this software in source and binary forms,

+ 1 - 1
Carthage/Checkouts/CocoaLumberjack/Framework/Lumberjack/CocoaLumberjackSwift-Info.plist

@@ -17,7 +17,7 @@
 	<key>CFBundlePackageType</key>
 	<key>CFBundlePackageType</key>
 	<string>FMWK</string>
 	<string>FMWK</string>
 	<key>CFBundleShortVersionString</key>
 	<key>CFBundleShortVersionString</key>
-	<string>3.5.2</string>
+	<string>3.5.1</string>
 	<key>CFBundleSignature</key>
 	<key>CFBundleSignature</key>
 	<string>????</string>
 	<string>????</string>
 	<key>CFBundleVersion</key>
 	<key>CFBundleVersion</key>

+ 1 - 1
Carthage/Checkouts/CocoaLumberjack/Framework/Lumberjack/CocoaLumberjackSwift.h

@@ -1,6 +1,6 @@
 // Software License Agreement (BSD License)
 // Software License Agreement (BSD License)
 //
 //
-// Copyright (c) 2010-2019, Deusty, LLC
+// Copyright (c) 2010-2018, Deusty, LLC
 // All rights reserved.
 // All rights reserved.
 //
 //
 // Redistribution and use of this software in source and binary forms,
 // Redistribution and use of this software in source and binary forms,

+ 1 - 1
Carthage/Checkouts/CocoaLumberjack/Tests/Tests/DDBasicLoggingTests.m

@@ -1,6 +1,6 @@
 // Software License Agreement (BSD License)
 // Software License Agreement (BSD License)
 //
 //
-// Copyright (c) 2010-2019, Deusty, LLC
+// Copyright (c) 2010-2018, Deusty, LLC
 // All rights reserved.
 // All rights reserved.
 //
 //
 // Redistribution and use of this software in source and binary forms,
 // Redistribution and use of this software in source and binary forms,

+ 1 - 1
Carthage/Checkouts/CocoaLumberjack/Tests/Tests/DDLogMessageTests.m

@@ -1,6 +1,6 @@
 // Software License Agreement (BSD License)
 // Software License Agreement (BSD License)
 //
 //
-// Copyright (c) 2010-2019, Deusty, LLC
+// Copyright (c) 2010-2018, Deusty, LLC
 // All rights reserved.
 // All rights reserved.
 //
 //
 // Redistribution and use of this software in source and binary forms,
 // Redistribution and use of this software in source and binary forms,

+ 1 - 1
Carthage/Checkouts/CocoaLumberjack/Tests/Tests/DDLogTests.m

@@ -1,6 +1,6 @@
 // Software License Agreement (BSD License)
 // Software License Agreement (BSD License)
 //
 //
-// Copyright (c) 2010-2019, Deusty, LLC
+// Copyright (c) 2010-2018, Deusty, LLC
 // All rights reserved.
 // All rights reserved.
 //
 //
 // Redistribution and use of this software in source and binary forms,
 // Redistribution and use of this software in source and binary forms,

+ 1 - 1
Carthage/Checkouts/KTVHTTPCache/Framework/Info.plist

@@ -15,7 +15,7 @@
 	<key>CFBundlePackageType</key>
 	<key>CFBundlePackageType</key>
 	<string>FMWK</string>
 	<string>FMWK</string>
 	<key>CFBundleShortVersionString</key>
 	<key>CFBundleShortVersionString</key>
-	<string>2.0.0</string>
+	<string>1.1.7</string>
 	<key>CFBundleVersion</key>
 	<key>CFBundleVersion</key>
 	<string>$(CURRENT_PROJECT_VERSION)</string>
 	<string>$(CURRENT_PROJECT_VERSION)</string>
 	<key>LSApplicationCategoryType</key>
 	<key>LSApplicationCategoryType</key>

+ 3 - 11
Carthage/Checkouts/KTVHTTPCache/KTVHTTPCache.podspec

@@ -1,7 +1,7 @@
 Pod::Spec.new do |s|
 Pod::Spec.new do |s|
   s.name                = "KTVHTTPCache"
   s.name                = "KTVHTTPCache"
-  s.version             = "2.0.0"
-  s.summary             = "A powerful media cache framework."
+  s.version             = "1.1.7"
+  s.summary             = "A media cache framework from Changba iOS Team."
   s.homepage            = "https://github.com/ChangbaDevs/KTVHTTPCache"
   s.homepage            = "https://github.com/ChangbaDevs/KTVHTTPCache"
   s.license             = { :type => "MIT", :file => "LICENSE" }
   s.license             = { :type => "MIT", :file => "LICENSE" }
   s.author              = { "Single" => "libobjc@gmail.com" }
   s.author              = { "Single" => "libobjc@gmail.com" }
@@ -9,15 +9,7 @@ Pod::Spec.new do |s|
   s.platform            = :ios, "8.0"
   s.platform            = :ios, "8.0"
   s.source              = { :git => "https://github.com/ChangbaDevs/KTVHTTPCache.git", :tag => "#{s.version}" }
   s.source              = { :git => "https://github.com/ChangbaDevs/KTVHTTPCache.git", :tag => "#{s.version}" }
   s.source_files        = "KTVHTTPCache", "KTVHTTPCache/**/*.{h,m}"
   s.source_files        = "KTVHTTPCache", "KTVHTTPCache/**/*.{h,m}"
-  s.public_header_files =
-                          "KTVHTTPCache/KTVHTTPCache.h",
-                          "KTVHTTPCache/Classes/KTVHCCommon/KTVHCRange.h",
-                          "KTVHTTPCache/Classes/KTVHCDataStorage/KTVHCDataReader.h",
-                          "KTVHTTPCache/Classes/KTVHCDataStorage/KTVHCDataLoader.h",
-                          "KTVHTTPCache/Classes/KTVHCDataStorage/KTVHCDataRequest.h",
-                          "KTVHTTPCache/Classes/KTVHCDataStorage/KTVHCDataResponse.h",
-                          "KTVHTTPCache/Classes/KTVHCDataStorage/KTVHCDataCacheItem.h",
-                          "KTVHTTPCache/Classes/KTVHCDataStorage/KTVHCDataCacheItemZone.h"
+  s.public_header_files = "KTVHTTPCache/**/*.h"
   s.frameworks          = "UIKit", "Foundation"
   s.frameworks          = "UIKit", "Foundation"
   s.requires_arc        = true
   s.requires_arc        = true
   s.dependency 'KTVCocoaHTTPServer'
   s.dependency 'KTVCocoaHTTPServer'

+ 2 - 1
Carthage/Checkouts/KTVHTTPCache/KTVHTTPCache/Classes/KTVHCCommon/KTVHCError.h

@@ -8,7 +8,8 @@
 
 
 #import <Foundation/Foundation.h>
 #import <Foundation/Foundation.h>
 
 
-typedef NS_ENUM(NSInteger, KTVHCErrorCode) {
+typedef NS_ENUM(NSInteger, KTVHCErrorCode)
+{
     KTVHCErrorCodeResponseUnavailable  = -192700,
     KTVHCErrorCodeResponseUnavailable  = -192700,
     KTVHCErrorCodeUnsupportContentType = -192701,
     KTVHCErrorCodeUnsupportContentType = -192701,
     KTVHCErrorCodeNotEnoughDiskSpace   = -192702,
     KTVHCErrorCodeNotEnoughDiskSpace   = -192702,

+ 17 - 17
Carthage/Checkouts/KTVHTTPCache/KTVHTTPCache/Classes/KTVHCCommon/KTVHCError.m

@@ -18,7 +18,7 @@ NSString * const KTVHCErrorUserInfoKeyResponse = @"KTVHCErrorUserInfoKeyResponse
                                  request:(NSURLRequest *)request
                                  request:(NSURLRequest *)request
                                 response:(NSURLResponse *)response
                                 response:(NSURLResponse *)response
 {
 {
-    NSMutableDictionary *userInfo = [NSMutableDictionary dictionary];
+    NSMutableDictionary * userInfo = [NSMutableDictionary dictionary];
     if (URL) {
     if (URL) {
         [userInfo setObject:URL forKey:KTVHCErrorUserInfoKeyURL];
         [userInfo setObject:URL forKey:KTVHCErrorUserInfoKeyURL];
     }
     }
@@ -28,9 +28,9 @@ NSString * const KTVHCErrorUserInfoKeyResponse = @"KTVHCErrorUserInfoKeyResponse
     if (response) {
     if (response) {
         [userInfo setObject:response forKey:KTVHCErrorUserInfoKeyResponse];
         [userInfo setObject:response forKey:KTVHCErrorUserInfoKeyResponse];
     }
     }
-    NSError *error = [NSError errorWithDomain:@"KTVHTTPCache error"
-                                         code:KTVHCErrorCodeResponseUnavailable
-                                     userInfo:userInfo];
+    NSError * error = [NSError errorWithDomain:@"KTVHTTPCache error"
+                                          code:KTVHCErrorCodeResponseUnavailable
+                                      userInfo:userInfo];
     return error;
     return error;
 }
 }
 
 
@@ -38,7 +38,7 @@ NSString * const KTVHCErrorUserInfoKeyResponse = @"KTVHCErrorUserInfoKeyResponse
                                   request:(NSURLRequest *)request
                                   request:(NSURLRequest *)request
                                  response:(NSURLResponse *)response
                                  response:(NSURLResponse *)response
 {
 {
-    NSMutableDictionary *userInfo = [NSMutableDictionary dictionary];
+    NSMutableDictionary * userInfo = [NSMutableDictionary dictionary];
     if (URL) {
     if (URL) {
         [userInfo setObject:URL forKey:KTVHCErrorUserInfoKeyURL];
         [userInfo setObject:URL forKey:KTVHCErrorUserInfoKeyURL];
     }
     }
@@ -48,9 +48,9 @@ NSString * const KTVHCErrorUserInfoKeyResponse = @"KTVHCErrorUserInfoKeyResponse
     if (response) {
     if (response) {
         [userInfo setObject:response forKey:KTVHCErrorUserInfoKeyResponse];
         [userInfo setObject:response forKey:KTVHCErrorUserInfoKeyResponse];
     }
     }
-    NSError *error = [NSError errorWithDomain:@"KTVHTTPCache error"
-                                         code:KTVHCErrorCodeUnsupportContentType
-                                     userInfo:userInfo];
+    NSError * error = [NSError errorWithDomain:@"KTVHTTPCache error"
+                                          code:KTVHCErrorCodeUnsupportContentType
+                                      userInfo:userInfo];
     return error;
     return error;
 }
 }
 
 
@@ -59,20 +59,20 @@ NSString * const KTVHCErrorUserInfoKeyResponse = @"KTVHCErrorUserInfoKeyResponse
                        totalCacheLength:(long long)totalCacheLength
                        totalCacheLength:(long long)totalCacheLength
                          maxCacheLength:(long long)maxCacheLength
                          maxCacheLength:(long long)maxCacheLength
 {
 {
-    NSError *error = [NSError errorWithDomain:@"KTVHTTPCache error"
-                                         code:KTVHCErrorCodeNotEnoughDiskSpace
-                                     userInfo:@{@"totlaContentLength" : @(totlaContentLength),
-                                                @"currentContentLength" : @(currentContentLength),
-                                                @"totalCacheLength" : @(totalCacheLength),
-                                                @"maxCacheLength" : @(maxCacheLength)}];
+    NSError * error = [NSError errorWithDomain:@"KTVHTTPCache error"
+                                          code:KTVHCErrorCodeNotEnoughDiskSpace
+                                      userInfo:@{@"totlaContentLength" : @(totlaContentLength),
+                                                 @"currentContentLength" : @(currentContentLength),
+                                                 @"totalCacheLength" : @(totalCacheLength),
+                                                 @"maxCacheLength" : @(maxCacheLength)}];
     return error;
     return error;
 }
 }
 
 
 + (NSError *)errorForException:(NSException *)exception
 + (NSError *)errorForException:(NSException *)exception
 {
 {
-    NSError *error = [NSError errorWithDomain:@"KTVHTTPCache error"
-                                        code:KTVHCErrorCodeException
-                                    userInfo:exception.userInfo];
+    NSError * error = [NSError errorWithDomain:@"KTVHTTPCache error"
+                                          code:KTVHCErrorCodeException
+                                      userInfo:exception.userInfo];
     return error;
     return error;
 }
 }
 
 

+ 18 - 11
Carthage/Checkouts/KTVHTTPCache/KTVHTTPCache/Classes/KTVHCCommon/KTVHCLog.h

@@ -28,7 +28,10 @@ KTVHCLogEnable(Common,            YES, YES)
  */
  */
 KTVHCLogEnable(HTTPServer,        YES, YES)
 KTVHCLogEnable(HTTPServer,        YES, YES)
 KTVHCLogEnable(HTTPConnection,    YES, YES)
 KTVHCLogEnable(HTTPConnection,    YES, YES)
+KTVHCLogEnable(HTTPRequest,       YES, YES)
 KTVHCLogEnable(HTTPResponse,      YES, YES)
 KTVHCLogEnable(HTTPResponse,      YES, YES)
+KTVHCLogEnable(HTTPResponsePing,  YES, YES)
+KTVHCLogEnable(HTTPURL,           YES, YES)
 
 
 /**
 /**
  *  Data Storage
  *  Data Storage
@@ -45,6 +48,7 @@ KTVHCLogEnable(DataUnitPool,      YES, YES)
 KTVHCLogEnable(DataUnitQueue,     YES, YES)
 KTVHCLogEnable(DataUnitQueue,     YES, YES)
 
 
 KTVHCLogEnable(DataSourceManager, YES, YES)
 KTVHCLogEnable(DataSourceManager, YES, YES)
+KTVHCLogEnable(DataSourceQueue,   YES, YES)
 KTVHCLogEnable(DataFileSource,    YES, YES)
 KTVHCLogEnable(DataFileSource,    YES, YES)
 KTVHCLogEnable(DataNetworkSource, YES, YES)
 KTVHCLogEnable(DataNetworkSource, YES, YES)
 
 
@@ -65,8 +69,8 @@ KTVHCLogEnable(Dealloc,           YES, YES)
 #define KTVHCLogging(target, console_log_enable, record_log_enable, ...)            \
 #define KTVHCLogging(target, console_log_enable, record_log_enable, ...)            \
 if (([KTVHCLog log].consoleLogEnable && console_log_enable) || ([KTVHCLog log].recordLogEnable && record_log_enable))       \
 if (([KTVHCLog log].consoleLogEnable && console_log_enable) || ([KTVHCLog log].recordLogEnable && record_log_enable))       \
 {                                                                                   \
 {                                                                                   \
-    NSString *va_args = [NSString stringWithFormat:__VA_ARGS__];                    \
-    NSString *log = [NSString stringWithFormat:@"%@  :   %@", target, va_args];     \
+    NSString * va_args = [NSString stringWithFormat:__VA_ARGS__];                   \
+    NSString * log = [NSString stringWithFormat:@"%@  :   %@", target, va_args];    \
     if ([KTVHCLog log].recordLogEnable && record_log_enable) {                      \
     if ([KTVHCLog log].recordLogEnable && record_log_enable) {                      \
         [[KTVHCLog log] addRecordLog:log];                                          \
         [[KTVHCLog log] addRecordLog:log];                                          \
     }                                                                               \
     }                                                                               \
@@ -79,14 +83,17 @@ if (([KTVHCLog log].consoleLogEnable && console_log_enable) || ([KTVHCLog log].r
 /**
 /**
  *  Common
  *  Common
  */
  */
-#define KTVHCLogCommon(...)                 KTVHCLogging(@"KTVHCMacro           ", KTVHCLogEnableValueConsoleLog(Common),            KTVHCLogEnableValueRecordLog(Common),            ##__VA_ARGS__)
+#define KTVHCLogCommon(...)                 KTVHCLogging(@"KTVHCCommon           ", KTVHCLogEnableValueConsoleLog(Common),            KTVHCLogEnableValueRecordLog(Common),            ##__VA_ARGS__)
 
 
 /**
 /**
  *  HTTP Server
  *  HTTP Server
  */
  */
 #define KTVHCLogHTTPServer(...)             KTVHCLogging(@"KTVHCHTTPServer       ", KTVHCLogEnableValueConsoleLog(HTTPServer),        KTVHCLogEnableValueRecordLog(HTTPServer),        ##__VA_ARGS__)
 #define KTVHCLogHTTPServer(...)             KTVHCLogging(@"KTVHCHTTPServer       ", KTVHCLogEnableValueConsoleLog(HTTPServer),        KTVHCLogEnableValueRecordLog(HTTPServer),        ##__VA_ARGS__)
 #define KTVHCLogHTTPConnection(...)         KTVHCLogging(@"KTVHCHTTPConnection   ", KTVHCLogEnableValueConsoleLog(HTTPConnection),    KTVHCLogEnableValueRecordLog(HTTPConnection),    ##__VA_ARGS__)
 #define KTVHCLogHTTPConnection(...)         KTVHCLogging(@"KTVHCHTTPConnection   ", KTVHCLogEnableValueConsoleLog(HTTPConnection),    KTVHCLogEnableValueRecordLog(HTTPConnection),    ##__VA_ARGS__)
+#define KTVHCLogHTTPRequest(...)            KTVHCLogging(@"KTVHCHTTPRequest      ", KTVHCLogEnableValueConsoleLog(HTTPRequest),       KTVHCLogEnableValueRecordLog(HTTPRequest),       ##__VA_ARGS__)
 #define KTVHCLogHTTPResponse(...)           KTVHCLogging(@"KTVHCHTTPResponse     ", KTVHCLogEnableValueConsoleLog(HTTPResponse),      KTVHCLogEnableValueRecordLog(HTTPResponse),      ##__VA_ARGS__)
 #define KTVHCLogHTTPResponse(...)           KTVHCLogging(@"KTVHCHTTPResponse     ", KTVHCLogEnableValueConsoleLog(HTTPResponse),      KTVHCLogEnableValueRecordLog(HTTPResponse),      ##__VA_ARGS__)
+#define KTVHCLogHTTPResponsePing(...)       KTVHCLogging(@"KTVHCHTTPPingResponse ", KTVHCLogEnableValueConsoleLog(HTTPResponsePing),  KTVHCLogEnableValueRecordLog(HTTPResponsePing),  ##__VA_ARGS__)
+#define KTVHCLogHTTPURL(...)                KTVHCLogging(@"KTVHCHTTPURL          ", KTVHCLogEnableValueConsoleLog(HTTPURL),           KTVHCLogEnableValueRecordLog(HTTPURL),           ##__VA_ARGS__)
 
 
 /**
 /**
  *  Data Storage
  *  Data Storage
@@ -103,6 +110,7 @@ if (([KTVHCLog log].consoleLogEnable && console_log_enable) || ([KTVHCLog log].r
 #define KTVHCLogDataUnitQueue(...)          KTVHCLogging(@"KTVHCDataUnitQueue    ", KTVHCLogEnableValueConsoleLog(DataUnitQueue),     KTVHCLogEnableValueRecordLog(DataUnitQueue),     ##__VA_ARGS__)
 #define KTVHCLogDataUnitQueue(...)          KTVHCLogging(@"KTVHCDataUnitQueue    ", KTVHCLogEnableValueConsoleLog(DataUnitQueue),     KTVHCLogEnableValueRecordLog(DataUnitQueue),     ##__VA_ARGS__)
 
 
 #define KTVHCLogDataSourceManager(...)      KTVHCLogging(@"KTVHCDataSourceManager", KTVHCLogEnableValueConsoleLog(DataSourceManager), KTVHCLogEnableValueRecordLog(DataSourceManager), ##__VA_ARGS__)
 #define KTVHCLogDataSourceManager(...)      KTVHCLogging(@"KTVHCDataSourceManager", KTVHCLogEnableValueConsoleLog(DataSourceManager), KTVHCLogEnableValueRecordLog(DataSourceManager), ##__VA_ARGS__)
+#define KTVHCLogDataSourceQueue(...)        KTVHCLogging(@"KTVHCDataSourceQueue  ", KTVHCLogEnableValueConsoleLog(DataSourceQueue),   KTVHCLogEnableValueRecordLog(DataSourceQueue),   ##__VA_ARGS__)
 #define KTVHCLogDataFileSource(...)         KTVHCLogging(@"KTVHCDataFileSource   ", KTVHCLogEnableValueConsoleLog(DataFileSource),    KTVHCLogEnableValueRecordLog(DataFileSource),    ##__VA_ARGS__)
 #define KTVHCLogDataFileSource(...)         KTVHCLogging(@"KTVHCDataFileSource   ", KTVHCLogEnableValueConsoleLog(DataFileSource),    KTVHCLogEnableValueRecordLog(DataFileSource),    ##__VA_ARGS__)
 #define KTVHCLogDataNetworkSource(...)      KTVHCLogging(@"KTVHCDataNetworkSource", KTVHCLogEnableValueConsoleLog(DataNetworkSource), KTVHCLogEnableValueRecordLog(DataNetworkSource), ##__VA_ARGS__)
 #define KTVHCLogDataNetworkSource(...)      KTVHCLogging(@"KTVHCDataNetworkSource", KTVHCLogEnableValueConsoleLog(DataNetworkSource), KTVHCLogEnableValueRecordLog(DataNetworkSource), ##__VA_ARGS__)
 
 
@@ -128,25 +136,24 @@ if (([KTVHCLog log].consoleLogEnable && console_log_enable) || ([KTVHCLog log].r
  *  DEBUG   : default is NO.
  *  DEBUG   : default is NO.
  *  RELEASE : default is NO.
  *  RELEASE : default is NO.
  */
  */
-@property (nonatomic) BOOL consoleLogEnable;
+@property (nonatomic, assign) BOOL consoleLogEnable;
 
 
 /**
 /**
  *  DEBUG   : default is NO.
  *  DEBUG   : default is NO.
  *  RELEASE : default is NO.
  *  RELEASE : default is NO.
  */
  */
-@property (nonatomic) BOOL recordLogEnable;
+@property (nonatomic, assign) BOOL recordLogEnable;
 
 
 - (void)addRecordLog:(NSString *)log;
 - (void)addRecordLog:(NSString *)log;
 
 
-- (NSURL *)recordLogFileURL;
-- (void)deleteRecordLogFile;
+- (NSString *)recordLogFilePath;
+- (void)deleteRecordLog;
 
 
 /**
 /**
  *  Error
  *  Error
  */
  */
-- (void)addError:(NSError *)error forURL:(NSURL *)URL;
-- (NSDictionary<NSURL *, NSError *> *)errors;
-- (NSError *)errorForURL:(NSURL *)URL;
-- (void)cleanErrorForURL:(NSURL *)URL;
+- (NSError *)lastError;
+- (NSArray <NSError *> *)allErrors;
+- (void)addError:(NSError *)error;
 
 
 @end
 @end

+ 47 - 48
Carthage/Checkouts/KTVHTTPCache/KTVHTTPCache/Classes/KTVHCCommon/KTVHCLog.m

@@ -7,15 +7,15 @@
 //
 //
 
 
 #import "KTVHCLog.h"
 #import "KTVHCLog.h"
-#import "KTVHCPathTool.h"
+#import "KTVHCPathTools.h"
 
 
 #import <UIKit/UIKit.h>
 #import <UIKit/UIKit.h>
 
 
 @interface KTVHCLog ()
 @interface KTVHCLog ()
 
 
-@property (nonatomic, strong) NSLock *lock;
-@property (nonatomic, strong) NSFileHandle *writingHandle;
-@property (nonatomic, strong) NSMutableDictionary<NSURL *, NSError *> *internalErrors;
+@property (nonatomic, strong) NSLock * lock;
+@property (nonatomic, strong) NSFileHandle * writingHandle;
+@property (nonatomic, strong) NSMutableArray <NSError *> * internalErrors;
 
 
 @end
 @end
 
 
@@ -23,7 +23,7 @@
 
 
 + (instancetype)log
 + (instancetype)log
 {
 {
-    static KTVHCLog *obj = nil;
+    static KTVHCLog * obj = nil;
     static dispatch_once_t onceToken;
     static dispatch_once_t onceToken;
     dispatch_once(&onceToken, ^{
     dispatch_once(&onceToken, ^{
         obj = [[self alloc] init];
         obj = [[self alloc] init];
@@ -33,49 +33,54 @@
 
 
 - (instancetype)init
 - (instancetype)init
 {
 {
-    if (self = [super init]) {
+    if (self = [super init])
+    {
         self.consoleLogEnable = NO;
         self.consoleLogEnable = NO;
         self.recordLogEnable = NO;
         self.recordLogEnable = NO;
         self.lock = [[NSLock alloc] init];
         self.lock = [[NSLock alloc] init];
-        self.internalErrors = [NSMutableDictionary dictionary];
+        self.internalErrors = [NSMutableArray array];
     }
     }
     return self;
     return self;
 }
 }
 
 
 - (void)addRecordLog:(NSString *)log
 - (void)addRecordLog:(NSString *)log
 {
 {
-    if (!self.recordLogEnable) {
+    if (!self.recordLogEnable)
+    {
         return;
         return;
     }
     }
-    if (log.length <= 0) {
+    if (log.length <= 0)
+    {
         return;
         return;
     }
     }
     [self.lock lock];
     [self.lock lock];
-    NSString *string = [NSString stringWithFormat:@"%@  %@\n", [NSDate date], log];
-    NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];
-    if (!self.writingHandle) {
-        [KTVHCPathTool deleteFileAtPath:[KTVHCPathTool logPath]];
-        [KTVHCPathTool createFileAtPath:[KTVHCPathTool logPath]];
-        self.writingHandle = [NSFileHandle fileHandleForWritingAtPath:[KTVHCPathTool logPath]];
+    NSString * string = [NSString stringWithFormat:@"%@  %@\n", [NSDate date], log];
+    NSData * data = [string dataUsingEncoding:NSUTF8StringEncoding];
+    if (!self.writingHandle)
+    {
+        [KTVHCPathTools deleteFileAtPath:[KTVHCPathTools logPath]];
+        [KTVHCPathTools createFileAtPath:[KTVHCPathTools logPath]];
+        self.writingHandle = [NSFileHandle fileHandleForWritingAtPath:[KTVHCPathTools logPath]];
         [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationWillTerminate:) name:UIApplicationWillTerminateNotification object:nil];
         [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationWillTerminate:) name:UIApplicationWillTerminateNotification object:nil];
     }
     }
     [self.writingHandle writeData:data];
     [self.writingHandle writeData:data];
     [self.lock unlock];
     [self.lock unlock];
 }
 }
 
 
-- (NSURL *)recordLogFileURL
+- (NSString *)recordLogFilePath
 {
 {
-    NSURL *URL = nil;
+    NSString * path = nil;
     [self.lock lock];
     [self.lock lock];
-    long long size = [KTVHCPathTool sizeAtPath:[KTVHCPathTool logPath]];
-    if (size > 0) {
-        URL = [NSURL fileURLWithPath:[KTVHCPathTool logPath]];
+    long long size = [KTVHCPathTools sizeOfItemAtPath:[KTVHCPathTools logPath]];
+    if (size > 0)
+    {
+        path = [KTVHCPathTools logPath];
     }
     }
     [self.lock unlock];
     [self.lock unlock];
-    return URL;
+    return path;
 }
 }
 
 
-- (void)deleteRecordLogFile
+- (void)deleteRecordLog
 {
 {
     [self.lock lock];
     [self.lock lock];
     [self.writingHandle synchronizeFile];
     [self.writingHandle synchronizeFile];
@@ -85,47 +90,41 @@
     [self.lock unlock];
     [self.lock unlock];
 }
 }
 
 
-- (void)addError:(NSError *)error forURL:(NSURL *)URL
+- (NSError *)lastError
 {
 {
-    if (!URL || ![error isKindOfClass:[NSError class]]) {
-        return;
+    if (self.internalErrors.count > 0)
+    {
+        return self.internalErrors.lastObject;
     }
     }
-    [self.lock lock];
-    [self.internalErrors setObject:error forKey:URL];
-    [self.lock unlock];
+    return nil;
 }
 }
 
 
-- (NSDictionary<NSURL *,NSError *> *)errors
+- (NSArray<NSError *> *)allErrors
 {
 {
-    [self.lock lock];
-    NSDictionary<NSURL *,NSError *> *ret = [self.internalErrors copy];
-    [self.lock unlock];
-    return ret;
-}
-
-- (NSError *)errorForURL:(NSURL *)URL
-{
-    if (!URL) {
-        return nil;
+    if (self.internalErrors.count > 0)
+    {
+        return [self.internalErrors copy];
     }
     }
-    [self.lock lock];
-    NSError *ret = [self.internalErrors objectForKey:URL];
-    [self.lock unlock];
-    return ret;
+    return nil;
 }
 }
 
 
-- (void)cleanErrorForURL:(NSURL *)URL
+- (void)addError:(NSError *)error
 {
 {
-    [self.lock lock];
-    [self.internalErrors removeObjectForKey:URL];
-    [self.lock unlock];
+    if (error && [error isKindOfClass:[NSError class]])
+    {
+        if (self.internalErrors.count >= 20)
+        {
+            [self.internalErrors removeObjectAtIndex:0];
+        }
+        [self.internalErrors addObject:error];
+    }
 }
 }
 
 
 #pragma mark - UIApplicationWillTerminateNotification
 #pragma mark - UIApplicationWillTerminateNotification
 
 
 - (void)applicationWillTerminate:(NSNotification *)notification
 - (void)applicationWillTerminate:(NSNotification *)notification
 {
 {
-    [self deleteRecordLogFile];
+    [self deleteRecordLog];
 }
 }
 
 
 @end
 @end

+ 5 - 6
Carthage/Checkouts/KTVHTTPCache/KTVHTTPCache/Classes/KTVHCCommon/KTVHCRange.h

@@ -21,15 +21,14 @@ BOOL KTVHCRangeIsInvaild(KTVHCRange range);
 BOOL KTVHCEqualRanges(KTVHCRange range1, KTVHCRange range2);
 BOOL KTVHCEqualRanges(KTVHCRange range1, KTVHCRange range2);
 long long KTVHCRangeGetLength(KTVHCRange range);
 long long KTVHCRangeGetLength(KTVHCRange range);
 NSString * KTVHCStringFromRange(KTVHCRange range);
 NSString * KTVHCStringFromRange(KTVHCRange range);
-NSDictionary * KTVHCRangeFillToRequestHeaders(KTVHCRange range, NSDictionary *eaders);
-NSDictionary * KTVHCRangeFillToRequestHeadersIfNeeded(KTVHCRange range, NSDictionary *headers);
-NSDictionary * KTVHCRangeFillToResponseHeaders(KTVHCRange range, NSDictionary *headers, long long totalLength);
+NSDictionary * KTVHCRangeFillToRequestHeaders(KTVHCRange range, NSDictionary * headers);
+NSDictionary * KTVHCRangeFillToResponseHeaders(KTVHCRange range, NSDictionary * headers, long long totalLength);
 
 
 KTVHCRange KTVHCMakeRange(long long start, long long end);
 KTVHCRange KTVHCMakeRange(long long start, long long end);
 KTVHCRange KTVHCRangeZero(void);
 KTVHCRange KTVHCRangeZero(void);
 KTVHCRange KTVHCRangeFull(void);
 KTVHCRange KTVHCRangeFull(void);
 KTVHCRange KTVHCRangeInvaild(void);
 KTVHCRange KTVHCRangeInvaild(void);
-KTVHCRange KTVHCRangeWithSeparateValue(NSString *value);
-KTVHCRange KTVHCRangeWithRequestHeaderValue(NSString *value);
-KTVHCRange KTVHCRangeWithResponseHeaderValue(NSString *value, long long *totalLength);
+KTVHCRange KTVHCRangeWithSeparateValue(NSString * value);
+KTVHCRange KTVHCRangeWithRequestHeaderValue(NSString * value);
+KTVHCRange KTVHCRangeWithResponseHeaderValue(NSString * value, long long * totalLength);
 KTVHCRange KTVHCRangeWithEnsureLength(KTVHCRange range, long long ensureLength);
 KTVHCRange KTVHCRangeWithEnsureLength(KTVHCRange range, long long ensureLength);

+ 45 - 38
Carthage/Checkouts/KTVHTTPCache/KTVHTTPCache/Classes/KTVHCCommon/KTVHCRange.m

@@ -30,48 +30,43 @@ BOOL KTVHCEqualRanges(KTVHCRange range1, KTVHCRange range2)
 
 
 long long KTVHCRangeGetLength(KTVHCRange range)
 long long KTVHCRangeGetLength(KTVHCRange range)
 {
 {
-    if (range.start == KTVHCNotFound || range.end == KTVHCNotFound) {
+    if (range.start == KTVHCNotFound || range.end == KTVHCNotFound)
+    {
         return KTVHCNotFound;
         return KTVHCNotFound;
     }
     }
     return range.end - range.start + 1;
     return range.end - range.start + 1;
 }
 }
 
 
-NSString *KTVHCStringFromRange(KTVHCRange range)
+NSString * KTVHCStringFromRange(KTVHCRange range)
 {
 {
     return [NSString stringWithFormat:@"Range : {%lld, %lld}", range.start, range.end];
     return [NSString stringWithFormat:@"Range : {%lld, %lld}", range.start, range.end];
 }
 }
 
 
-NSString *KTVHCRangeGetHeaderString(KTVHCRange range)
+NSString * KTVHCRangeGetHeaderString(KTVHCRange range)
 {
 {
-    NSMutableString *string = [NSMutableString stringWithFormat:@"bytes="];
-    if (range.start != KTVHCNotFound) {
+    NSMutableString * string = [NSMutableString stringWithFormat:@"bytes="];
+    if (range.start != KTVHCNotFound)
+    {
         [string appendFormat:@"%lld", range.start];
         [string appendFormat:@"%lld", range.start];
     }
     }
     [string appendFormat:@"-"];
     [string appendFormat:@"-"];
-    if (range.end != KTVHCNotFound) {
+    if (range.end != KTVHCNotFound)
+    {
         [string appendFormat:@"%lld", range.end];
         [string appendFormat:@"%lld", range.end];
     }
     }
     return [string copy];
     return [string copy];
 }
 }
 
 
-NSDictionary *KTVHCRangeFillToRequestHeaders(KTVHCRange range, NSDictionary *headers)
+NSDictionary * KTVHCRangeFillToRequestHeaders(KTVHCRange range, NSDictionary * headers)
 {
 {
-    NSMutableDictionary *ret = [NSMutableDictionary dictionaryWithDictionary:headers];
+    NSMutableDictionary * ret = [NSMutableDictionary dictionaryWithDictionary:headers];
     [ret setObject:KTVHCRangeGetHeaderString(range) forKey:@"Range"];
     [ret setObject:KTVHCRangeGetHeaderString(range) forKey:@"Range"];
     return ret;
     return ret;
 }
 }
 
 
-NSDictionary *KTVHCRangeFillToRequestHeadersIfNeeded(KTVHCRange range, NSDictionary *headers)
+NSDictionary * KTVHCRangeFillToResponseHeaders(KTVHCRange range, NSDictionary * headers, long long totalLength)
 {
 {
-    if ([headers objectForKey:@"Range"]) {
-        return headers;
-    }
-    return KTVHCRangeFillToRequestHeaders(range, headers);
-}
-
-NSDictionary *KTVHCRangeFillToResponseHeaders(KTVHCRange range, NSDictionary *headers, long long totalLength)
-{
-    NSMutableDictionary *ret = [NSMutableDictionary dictionaryWithDictionary:headers];
+    NSMutableDictionary * ret = [NSMutableDictionary dictionaryWithDictionary:headers];
     long long currentLength = KTVHCRangeGetLength(range);
     long long currentLength = KTVHCRangeGetLength(range);
     [ret setObject:[NSString stringWithFormat:@"%lld", currentLength] forKey:@"Content-Length"];
     [ret setObject:[NSString stringWithFormat:@"%lld", currentLength] forKey:@"Content-Length"];
     [ret setObject:[NSString stringWithFormat:@"bytes %lld-%lld/%lld", range.start, range.end, totalLength] forKey:@"Content-Range"];
     [ret setObject:[NSString stringWithFormat:@"bytes %lld-%lld/%lld", range.start, range.end, totalLength] forKey:@"Content-Range"];
@@ -99,27 +94,35 @@ KTVHCRange KTVHCRangeInvaild()
     return KTVHCMakeRange(KTVHCNotFound, KTVHCNotFound);
     return KTVHCMakeRange(KTVHCNotFound, KTVHCNotFound);
 }
 }
 
 
-KTVHCRange KTVHCRangeWithSeparateValue(NSString *value)
+KTVHCRange KTVHCRangeWithSeparateValue(NSString * value)
 {
 {
     KTVHCRange range = KTVHCRangeInvaild();
     KTVHCRange range = KTVHCRangeInvaild();
-    if (value.length > 0) {
-        NSArray *components = [value componentsSeparatedByString:@","];
-        if (components.count == 1) {
+    if (value.length > 0)
+    {
+        NSArray * components = [value componentsSeparatedByString:@","];
+        if (components.count == 1)
+        {
             components = [components.firstObject componentsSeparatedByString:@"-"];
             components = [components.firstObject componentsSeparatedByString:@"-"];
-            if (components.count == 2) {
-                NSString *startString = [components objectAtIndex:0];
+            if (components.count == 2)
+            {
+                NSString * startString = [components objectAtIndex:0];
                 NSInteger startValue = [startString integerValue];
                 NSInteger startValue = [startString integerValue];
-                NSString *endString = [components objectAtIndex:1];
+                NSString * endString = [components objectAtIndex:1];
                 NSInteger endValue = [endString integerValue];
                 NSInteger endValue = [endString integerValue];
-                if (startString.length && (startValue >= 0) && endString.length && (endValue >= startValue)) {
+                if (startString.length && (startValue >= 0) && endString.length && (endValue >= startValue))
+                {
                     // The second 500 bytes: "500-999"
                     // The second 500 bytes: "500-999"
                     range.start = startValue;
                     range.start = startValue;
                     range.end = endValue;
                     range.end = endValue;
-                } else if (startString.length && (startValue >= 0)) {
+                }
+                else if (startString.length && (startValue >= 0))
+                {
                     // The bytes after 9500 bytes: "9500-"
                     // The bytes after 9500 bytes: "9500-"
                     range.start = startValue;
                     range.start = startValue;
                     range.end = KTVHCNotFound;
                     range.end = KTVHCNotFound;
-                } else if (endString.length && (endValue > 0)) {
+                }
+                else if (endString.length && (endValue > 0))
+                {
                     // The final 500 bytes: "-500"
                     // The final 500 bytes: "-500"
                     range.start = KTVHCNotFound;
                     range.start = KTVHCNotFound;
                     range.end = endValue;
                     range.end = endValue;
@@ -130,24 +133,27 @@ KTVHCRange KTVHCRangeWithSeparateValue(NSString *value)
     return range;
     return range;
 }
 }
 
 
-KTVHCRange KTVHCRangeWithRequestHeaderValue(NSString *value)
+KTVHCRange KTVHCRangeWithRequestHeaderValue(NSString * value)
 {
 {
-    if ([value hasPrefix:@"bytes="]) {
-        NSString *rangeString = [value substringFromIndex:6];
+    if ([value hasPrefix:@"bytes="])
+    {
+        NSString * rangeString = [value substringFromIndex:6];
         return KTVHCRangeWithSeparateValue(rangeString);
         return KTVHCRangeWithSeparateValue(rangeString);
     }
     }
     return KTVHCRangeInvaild();
     return KTVHCRangeInvaild();
 }
 }
 
 
-KTVHCRange KTVHCRangeWithResponseHeaderValue(NSString *value, long long *totalLength)
+KTVHCRange KTVHCRangeWithResponseHeaderValue(NSString * value, long long * totalLength)
 {
 {
-    if ([value hasPrefix:@"bytes "]) {
+    if ([value hasPrefix:@"bytes "])
+    {
         value = [value stringByReplacingOccurrencesOfString:@"bytes " withString:@""];
         value = [value stringByReplacingOccurrencesOfString:@"bytes " withString:@""];
         NSRange range = [value rangeOfString:@"/"];
         NSRange range = [value rangeOfString:@"/"];
-        if (range.location != NSNotFound) {
-            NSString *rangeString = [value substringToIndex:range.location];
-            NSString *totalLengthString = [value substringFromIndex:range.location + range.length];
-            *totalLength = totalLengthString.longLongValue;
+        if (range.location != NSNotFound)
+        {
+            NSString * rangeString = [value substringToIndex:range.location];
+            NSString * totalLengthString = [value substringFromIndex:range.location + range.length];
+            * totalLength = totalLengthString.longLongValue;
             return KTVHCRangeWithSeparateValue(rangeString);
             return KTVHCRangeWithSeparateValue(rangeString);
         }
         }
     }
     }
@@ -156,7 +162,8 @@ KTVHCRange KTVHCRangeWithResponseHeaderValue(NSString *value, long long *totalLe
 
 
 KTVHCRange KTVHCRangeWithEnsureLength(KTVHCRange range, long long ensureLength)
 KTVHCRange KTVHCRangeWithEnsureLength(KTVHCRange range, long long ensureLength)
 {
 {
-    if (range.end == KTVHCNotFound && ensureLength > 0) {
+    if (range.end == KTVHCNotFound && ensureLength > 0)
+    {
         return KTVHCMakeRange(range.start, ensureLength - 1);
         return KTVHCMakeRange(range.start, ensureLength - 1);
     }
     }
     return range;
     return range;

+ 5 - 6
Carthage/Checkouts/KTVHTTPCache/KTVHTTPCache/Classes/KTVHCDataStorage/KTVHCDataCacheItem.h

@@ -15,11 +15,10 @@
 + (instancetype)new NS_UNAVAILABLE;
 + (instancetype)new NS_UNAVAILABLE;
 - (instancetype)init NS_UNAVAILABLE;
 - (instancetype)init NS_UNAVAILABLE;
 
 
-@property (nonatomic, copy, readonly) NSURL *URL;
-@property (nonatomic, copy, readonly) NSArray<KTVHCDataCacheItemZone *> *zones;
-
-@property (nonatomic, readonly) long long totalLength;
-@property (nonatomic, readonly) long long cacheLength;
-@property (nonatomic, readonly) long long vaildLength;
+@property (nonatomic, copy, readonly) NSURL * URL;
+@property (nonatomic, assign, readonly) long long totalLength;
+@property (nonatomic, assign, readonly) long long cacheLength;
+@property (nonatomic, assign, readonly) long long vaildLength;
+@property (nonatomic, copy, readonly) NSArray <KTVHCDataCacheItemZone *> * zones;
 
 
 @end
 @end

+ 22 - 8
Carthage/Checkouts/KTVHTTPCache/KTVHTTPCache/Classes/KTVHCDataStorage/KTVHCDataCacheItem.m

@@ -7,22 +7,36 @@
 //
 //
 
 
 #import "KTVHCDataCacheItem.h"
 #import "KTVHCDataCacheItem.h"
-#import "KTVHCData+Internal.h"
+#import "KTVHCDataPrivate.h"
 
 
 @implementation KTVHCDataCacheItem
 @implementation KTVHCDataCacheItem
 
 
++ (instancetype)itemWithURL:(NSURL *)URL
+                totalLength:(long long)totalLength
+                cacheLength:(long long)cacheLength
+                vaildLength:(long long)vaildLength
+                      zones:(NSArray <KTVHCDataCacheItemZone *> *)zones
+{
+    return [[self alloc] initWithURL:URL
+                         totalLength:totalLength
+                         cacheLength:cacheLength
+                         vaildLength:vaildLength
+                               zones:zones];
+}
+
 - (instancetype)initWithURL:(NSURL *)URL
 - (instancetype)initWithURL:(NSURL *)URL
-                      zones:(NSArray<KTVHCDataCacheItemZone *> *)zones
                 totalLength:(long long)totalLength
                 totalLength:(long long)totalLength
                 cacheLength:(long long)cacheLength
                 cacheLength:(long long)cacheLength
                 vaildLength:(long long)vaildLength
                 vaildLength:(long long)vaildLength
+                      zones:(NSArray <KTVHCDataCacheItemZone *> *)zones
 {
 {
-    if (self = [super init]) {
-        self->_URL = [URL copy];
-        self->_zones = [zones copy];
-        self->_totalLength = totalLength;
-        self->_cacheLength = cacheLength;
-        self->_vaildLength = vaildLength;
+    if (self = [super init])
+    {
+        _URL = URL;
+        _totalLength = totalLength;
+        _cacheLength = cacheLength;
+        _vaildLength = vaildLength;
+        _zones = zones;
     }
     }
     return self;
     return self;
 }
 }

+ 2 - 2
Carthage/Checkouts/KTVHTTPCache/KTVHTTPCache/Classes/KTVHCDataStorage/KTVHCDataCacheItemZone.h

@@ -13,7 +13,7 @@
 + (instancetype)new NS_UNAVAILABLE;
 + (instancetype)new NS_UNAVAILABLE;
 - (instancetype)init NS_UNAVAILABLE;
 - (instancetype)init NS_UNAVAILABLE;
 
 
-@property (nonatomic, readonly) long long offset;
-@property (nonatomic, readonly) long long length;
+@property (nonatomic, assign, readonly) long long offset;
+@property (nonatomic, assign, readonly) long long length;
 
 
 @end
 @end

+ 10 - 4
Carthage/Checkouts/KTVHTTPCache/KTVHTTPCache/Classes/KTVHCDataStorage/KTVHCDataCacheItemZone.m

@@ -7,15 +7,21 @@
 //
 //
 
 
 #import "KTVHCDataCacheItemZone.h"
 #import "KTVHCDataCacheItemZone.h"
-#import "KTVHCData+Internal.h"
+#import "KTVHCDataPrivate.h"
 
 
 @implementation KTVHCDataCacheItemZone
 @implementation KTVHCDataCacheItemZone
 
 
++ (instancetype)itemZoneWithOffset:(long long)offset length:(long long)length
+{
+    return [[self alloc] initWithOffset:offset length:length];
+}
+
 - (instancetype)initWithOffset:(long long)offset length:(long long)length
 - (instancetype)initWithOffset:(long long)offset length:(long long)length
 {
 {
-    if (self = [super init]) {
-        self->_offset = offset;
-        self->_length = length;
+    if (self = [super init])
+    {
+        _offset = offset;
+        _length = length;
     }
     }
     return self;
     return self;
 }
 }

+ 17 - 7
Carthage/Checkouts/KTVHTTPCache/KTVHTTPCache/Classes/KTVHCDataStorage/KTVHCDataFileSource.h

@@ -7,26 +7,36 @@
 //
 //
 
 
 #import <Foundation/Foundation.h>
 #import <Foundation/Foundation.h>
-#import "KTVHCDataSource.h"
+#import "KTVHCDataSourceProtocol.h"
 
 
 @class KTVHCDataFileSource;
 @class KTVHCDataFileSource;
 
 
 @protocol KTVHCDataFileSourceDelegate <NSObject>
 @protocol KTVHCDataFileSourceDelegate <NSObject>
 
 
-- (void)ktv_fileSourceDidPrepare:(KTVHCDataFileSource *)fileSource;
-- (void)ktv_fileSource:(KTVHCDataFileSource *)fileSource didFailWithError:(NSError *)error;
+- (void)fileSourceDidPrepared:(KTVHCDataFileSource *)fileSource;
+- (void)fileSource:(KTVHCDataFileSource *)fileSource didFailed:(NSError *)error;
 
 
 @end
 @end
 
 
-@interface KTVHCDataFileSource : NSObject <KTVHCDataSource>
+@interface KTVHCDataFileSource : NSObject <KTVHCDataSourceProtocol>
 
 
 + (instancetype)new NS_UNAVAILABLE;
 + (instancetype)new NS_UNAVAILABLE;
 - (instancetype)init NS_UNAVAILABLE;
 - (instancetype)init NS_UNAVAILABLE;
 
 
-- (instancetype)initWithPath:(NSString *)path range:(KTVHCRange)range readRange:(KTVHCRange)readRange NS_DESIGNATED_INITIALIZER;
+- (instancetype)initWithPath:(NSString *)path range:(KTVHCRange)range readRange:(KTVHCRange)readRange;
 
 
-@property (nonatomic, copy, readonly) NSString *path;
-@property (nonatomic, readonly) KTVHCRange readRange;
+@property (nonatomic, copy, readonly) NSString * path;
+@property (nonatomic, assign, readonly) KTVHCRange range;
+@property (nonatomic, assign, readonly) KTVHCRange readRange;
+
+@property (nonatomic, assign, readonly) BOOL didPrepared;
+@property (nonatomic, assign, readonly) BOOL didFinished;
+@property (nonatomic, assign, readonly) BOOL didClosed;
+
+- (void)prepare;
+- (void)close;
+
+- (NSData *)readDataOfLength:(NSUInteger)length;
 
 
 @property (nonatomic, weak, readonly) id<KTVHCDataFileSourceDelegate> delegate;
 @property (nonatomic, weak, readonly) id<KTVHCDataFileSourceDelegate> delegate;
 @property (nonatomic, strong, readonly) dispatch_queue_t delegateQueue;
 @property (nonatomic, strong, readonly) dispatch_queue_t delegateQueue;

+ 58 - 42
Carthage/Checkouts/KTVHTTPCache/KTVHTTPCache/Classes/KTVHCDataStorage/KTVHCDataFileSource.m

@@ -13,28 +13,23 @@
 
 
 @interface KTVHCDataFileSource () <NSLocking>
 @interface KTVHCDataFileSource () <NSLocking>
 
 
-@property (nonatomic, strong) NSLock *coreLock;
-@property (nonatomic, strong) NSFileHandle *readingHandle;
+@property (nonatomic, strong) NSError * error;
+@property (nonatomic, strong) NSLock * coreLock;
+@property (nonatomic, strong) NSFileHandle * readingHandle;
+@property (nonatomic, assign) long long readedLength;
 
 
 @end
 @end
 
 
 @implementation KTVHCDataFileSource
 @implementation KTVHCDataFileSource
 
 
-@synthesize error = _error;
-@synthesize range = _range;
-@synthesize closed = _closed;
-@synthesize prepared = _prepared;
-@synthesize finished = _finished;
-@synthesize readedLength = _readedLength;
-
 - (instancetype)initWithPath:(NSString *)path range:(KTVHCRange)range readRange:(KTVHCRange)readRange
 - (instancetype)initWithPath:(NSString *)path range:(KTVHCRange)range readRange:(KTVHCRange)readRange
 {
 {
     if (self = [super init])
     if (self = [super init])
     {
     {
         KTVHCLogAlloc(self);
         KTVHCLogAlloc(self);
-        self->_path = path;
-        self->_range = range;
-        self->_readRange = readRange;
+        _path = path;
+        _range = range;
+        _readRange = readRange;
         KTVHCLogDataFileSource(@"%p, Create file source\npath : %@\nrange : %@\nreadRange : %@", self, path, KTVHCStringFromRange(range), KTVHCStringFromRange(readRange));
         KTVHCLogDataFileSource(@"%p, Create file source\npath : %@\nrange : %@\nreadRange : %@", self, path, KTVHCStringFromRange(range), KTVHCStringFromRange(readRange));
     }
     }
     return self;
     return self;
@@ -48,25 +43,30 @@
 - (void)prepare
 - (void)prepare
 {
 {
     [self lock];
     [self lock];
-    if (self.isPrepared) {
+    if (self.didPrepared)
+    {
         [self unlock];
         [self unlock];
         return;
         return;
     }
     }
     KTVHCLogDataFileSource(@"%p, Call prepare", self);
     KTVHCLogDataFileSource(@"%p, Call prepare", self);
     self.readingHandle = [NSFileHandle fileHandleForReadingAtPath:self.path];
     self.readingHandle = [NSFileHandle fileHandleForReadingAtPath:self.path];
-    @try {
+    @try
+    {
         [self.readingHandle seekToFileOffset:self.readRange.start];
         [self.readingHandle seekToFileOffset:self.readRange.start];
-        self->_prepared = YES;
-        if ([self.delegate respondsToSelector:@selector(ktv_fileSourceDidPrepare:)]) {
+        _didPrepared = YES;
+        if ([self.delegate respondsToSelector:@selector(fileSourceDidPrepared:)])
+        {
             KTVHCLogDataFileSource(@"%p, Callback for prepared - Begin", self);
             KTVHCLogDataFileSource(@"%p, Callback for prepared - Begin", self);
             [KTVHCDataCallback callbackWithQueue:self.delegateQueue block:^{
             [KTVHCDataCallback callbackWithQueue:self.delegateQueue block:^{
                 KTVHCLogDataFileSource(@"%p, Callback for prepared - End", self);
                 KTVHCLogDataFileSource(@"%p, Callback for prepared - End", self);
-                [self.delegate ktv_fileSourceDidPrepare:self];
+                [self.delegate fileSourceDidPrepared:self];
             }];
             }];
         }
         }
-    } @catch (NSException *exception) {
+    }
+    @catch (NSException * exception)
+    {
         KTVHCLogDataFileSource(@"%p, Seek file exception\nname : %@\nreason : %@\nuserInfo : %@", self, exception.name, exception.reason, exception.userInfo);
         KTVHCLogDataFileSource(@"%p, Seek file exception\nname : %@\nreason : %@\nuserInfo : %@", self, exception.name, exception.reason, exception.userInfo);
-        NSError *error = [KTVHCError errorForException:exception];
+        NSError * error = [KTVHCError errorForException:exception];
         [self callbackForFailed:error];
         [self callbackForFailed:error];
     }
     }
     [self unlock];
     [self unlock];
@@ -75,11 +75,12 @@
 - (void)close
 - (void)close
 {
 {
     [self lock];
     [self lock];
-    if (self.isClosed) {
+    if (self.didClosed)
+    {
         [self unlock];
         [self unlock];
         return;
         return;
     }
     }
-    self->_closed = YES;
+    _didClosed = YES;
     KTVHCLogDataFileSource(@"%p, Call close", self);
     KTVHCLogDataFileSource(@"%p, Call close", self);
     [self destoryReadingHandle];
     [self destoryReadingHandle];
     [self unlock];
     [self unlock];
@@ -88,31 +89,38 @@
 - (NSData *)readDataOfLength:(NSUInteger)length
 - (NSData *)readDataOfLength:(NSUInteger)length
 {
 {
     [self lock];
     [self lock];
-    if (self.isClosed) {
+    if (self.didClosed)
+    {
         [self unlock];
         [self unlock];
         return nil;
         return nil;
     }
     }
-    if (self.isFinished) {
+    if (self.didFinished)
+    {
         [self unlock];
         [self unlock];
         return nil;
         return nil;
     }
     }
-    NSData *data = nil;
-    @try {
+    NSData * data = nil;
+    @try
+    {
         long long readLength = KTVHCRangeGetLength(self.readRange);
         long long readLength = KTVHCRangeGetLength(self.readRange);
         length = (NSUInteger)MIN(readLength - self.readedLength, length);
         length = (NSUInteger)MIN(readLength - self.readedLength, length);
         data = [self.readingHandle readDataOfLength:length];
         data = [self.readingHandle readDataOfLength:length];
-        self->_readedLength += data.length;
-        if (data.length > 0) {
+        if (data.length > 0)
+        {
+            self.readedLength += data.length;
             KTVHCLogDataFileSource(@"%p, Read data : %lld, %lld, %lld", self, (long long)data.length, self.readedLength, readLength);
             KTVHCLogDataFileSource(@"%p, Read data : %lld, %lld, %lld", self, (long long)data.length, self.readedLength, readLength);
         }
         }
-        if (self.readedLength >= readLength) {
+        if (self.readedLength >= readLength)
+        {
             KTVHCLogDataFileSource(@"%p, Read data did finished", self);
             KTVHCLogDataFileSource(@"%p, Read data did finished", self);
             [self destoryReadingHandle];
             [self destoryReadingHandle];
-            self->_finished = YES;
+            _didFinished = YES;
         }
         }
-    } @catch (NSException *exception) {
+    }
+    @catch (NSException * exception)
+    {
         KTVHCLogDataFileSource(@"%p, Read exception\nname : %@\nreason : %@\nuserInfo : %@", self, exception.name, exception.reason, exception.userInfo);
         KTVHCLogDataFileSource(@"%p, Read exception\nname : %@\nreason : %@\nuserInfo : %@", self, exception.name, exception.reason, exception.userInfo);
-        NSError *error = [KTVHCError errorForException:exception];
+        NSError * error = [KTVHCError errorForException:exception];
         [self callbackForFailed:error];
         [self callbackForFailed:error];
     }
     }
     [self unlock];
     [self unlock];
@@ -121,10 +129,14 @@
 
 
 - (void)destoryReadingHandle
 - (void)destoryReadingHandle
 {
 {
-    if (self.readingHandle) {
-        @try {
+    if (self.readingHandle)
+    {
+        @try
+        {
             [self.readingHandle closeFile];
             [self.readingHandle closeFile];
-        } @catch (NSException *exception) {
+        }
+        @catch (NSException * exception)
+        {
             KTVHCLogDataFileSource(@"%p, Close exception\nname : %@\nreason : %@\nuserInfo : %@", self, exception.name, exception.reason, exception.userInfo);
             KTVHCLogDataFileSource(@"%p, Close exception\nname : %@\nreason : %@\nuserInfo : %@", self, exception.name, exception.reason, exception.userInfo);
         }
         }
         self.readingHandle = nil;
         self.readingHandle = nil;
@@ -133,31 +145,35 @@
 
 
 - (void)callbackForFailed:(NSError *)error
 - (void)callbackForFailed:(NSError *)error
 {
 {
-    if (!error) {
+    if (!error)
+    {
         return;
         return;
     }
     }
-    if (self.error) {
+    if (self.error)
+    {
         return;
         return;
     }
     }
-    self->_error = error;
-    if ([self.delegate respondsToSelector:@selector(ktv_fileSource:didFailWithError:)]) {
+    self.error = error;
+    if ([self.delegate respondsToSelector:@selector(fileSource:didFailed:)])
+    {
         KTVHCLogDataFileSource(@"%p, Callback for prepared - Begin", self);
         KTVHCLogDataFileSource(@"%p, Callback for prepared - Begin", self);
         [KTVHCDataCallback callbackWithQueue:self.delegateQueue block:^{
         [KTVHCDataCallback callbackWithQueue:self.delegateQueue block:^{
             KTVHCLogDataFileSource(@"%p, Callback for prepared - End", self);
             KTVHCLogDataFileSource(@"%p, Callback for prepared - End", self);
-            [self.delegate ktv_fileSource:self didFailWithError:self.error];
+            [self.delegate fileSource:self didFailed:self.error];
         }];
         }];
     }
     }
 }
 }
 
 
 - (void)setDelegate:(id <KTVHCDataFileSourceDelegate>)delegate delegateQueue:(dispatch_queue_t)delegateQueue
 - (void)setDelegate:(id <KTVHCDataFileSourceDelegate>)delegate delegateQueue:(dispatch_queue_t)delegateQueue
 {
 {
-    self->_delegate = delegate;
-    self->_delegateQueue = delegateQueue;
+    _delegate = delegate;
+    _delegateQueue = delegateQueue;
 }
 }
 
 
 - (void)lock
 - (void)lock
 {
 {
-    if (!self.coreLock) {
+    if (!self.coreLock)
+    {
         self.coreLock = [[NSLock alloc] init];
         self.coreLock = [[NSLock alloc] init];
     }
     }
     [self.coreLock lock];
     [self.coreLock lock];

+ 12 - 10
Carthage/Checkouts/KTVHTTPCache/KTVHTTPCache/Classes/KTVHCDataStorage/KTVHCDataLoader.h

@@ -14,9 +14,9 @@
 
 
 @protocol KTVHCDataLoaderDelegate <NSObject>
 @protocol KTVHCDataLoaderDelegate <NSObject>
 
 
-- (void)ktv_loaderDidFinish:(KTVHCDataLoader *)loader;
-- (void)ktv_loader:(KTVHCDataLoader *)loader didFailWithError:(NSError *)error;
-- (void)ktv_loader:(KTVHCDataLoader *)loader didChangeProgress:(double)progress;
+- (void)loaderDidFinished:(KTVHCDataLoader *)loader;
+- (void)loader:(KTVHCDataLoader *)loader didFailed:(NSError *)error;
+- (void)loader:(KTVHCDataLoader *)loader didChangeProgress:(double)progress;
 
 
 @end
 @end
 
 
@@ -25,19 +25,21 @@
 + (instancetype)new NS_UNAVAILABLE;
 + (instancetype)new NS_UNAVAILABLE;
 - (instancetype)init NS_UNAVAILABLE;
 - (instancetype)init NS_UNAVAILABLE;
 
 
++ (instancetype)loaderWithRequest:(KTVHCDataRequest *)request;
+
 @property (nonatomic, weak) id <KTVHCDataLoaderDelegate> delegate;
 @property (nonatomic, weak) id <KTVHCDataLoaderDelegate> delegate;
+
 @property (nonatomic, strong) id object;
 @property (nonatomic, strong) id object;
 
 
-@property (nonatomic, strong, readonly) KTVHCDataRequest *request;
-@property (nonatomic, strong, readonly) KTVHCDataResponse *response;
+@property (nonatomic, strong, readonly) KTVHCDataRequest * request;
+@property (nonatomic, strong, readonly) KTVHCDataResponse * response;
 
 
-@property (nonatomic, copy, readonly) NSError *error;
+@property (nonatomic, strong, readonly) NSError * error;
 
 
-@property (nonatomic, readonly, getter=isFinished) BOOL finished;
-@property (nonatomic, readonly, getter=isClosed) BOOL closed;
+@property (nonatomic, assign, readonly) BOOL didClosed;
+@property (nonatomic, assign, readonly) BOOL didFinished;
 
 
-@property (nonatomic, readonly) long long loadedLength;
-@property (nonatomic, readonly) double progress;
+@property (nonatomic, assign, readonly) double progress;
 
 
 - (void)prepare;
 - (void)prepare;
 - (void)close;
 - (void)close;

+ 43 - 31
Carthage/Checkouts/KTVHTTPCache/KTVHTTPCache/Classes/KTVHCDataStorage/KTVHCDataLoader.m

@@ -7,22 +7,29 @@
 //
 //
 
 
 #import "KTVHCDataLoader.h"
 #import "KTVHCDataLoader.h"
-#import "KTVHCData+Internal.h"
+#import "KTVHCDataReader.h"
+#import "KTVHCDataResponse.h"
 #import "KTVHCLog.h"
 #import "KTVHCLog.h"
 
 
 @interface KTVHCDataLoader () <KTVHCDataReaderDelegate>
 @interface KTVHCDataLoader () <KTVHCDataReaderDelegate>
 
 
-@property (nonatomic, strong) KTVHCDataReader *reader;
+@property (nonatomic, strong) KTVHCDataReader * reader;
 
 
 @end
 @end
 
 
 @implementation KTVHCDataLoader
 @implementation KTVHCDataLoader
 
 
++ (instancetype)loaderWithRequest:(KTVHCDataRequest *)request
+{
+    return [[self alloc] initWithRequest:request];
+}
+
 - (instancetype)initWithRequest:(KTVHCDataRequest *)request
 - (instancetype)initWithRequest:(KTVHCDataRequest *)request
 {
 {
-    if (self = [super init]) {
+    if (self = [super init])
+    {
         KTVHCLogAlloc(self);
         KTVHCLogAlloc(self);
-        self.reader = [[KTVHCDataReader alloc] initWithRequest:request];
+        self.reader = [KTVHCDataReader readerWithRequest:request];
         self.reader.delegate = self;
         self.reader.delegate = self;
         KTVHCLogDataLoader(@"%p, Create loader\norignalRequest : %@\nreader : %@", self, request, self.reader);
         KTVHCLogDataLoader(@"%p, Create loader\norignalRequest : %@\nreader : %@", self, request, self.reader);
     }
     }
@@ -63,60 +70,65 @@
     return self.reader.error;
     return self.reader.error;
 }
 }
 
 
-- (BOOL)isFinished
+- (BOOL)didClosed
 {
 {
-    return self.reader.isFinished;
+    return self.reader.didClosed;
 }
 }
 
 
-- (BOOL)isClosed
+- (BOOL)didFinished
 {
 {
-    return self.reader.isClosed;
+    return self.reader.didFinished;
 }
 }
 
 
 #pragma mark - KTVHCDataReaderDelegate
 #pragma mark - KTVHCDataReaderDelegate
 
 
-- (void)ktv_readerDidPrepare:(KTVHCDataReader *)reader
+- (void)readerDidPrepared:(KTVHCDataReader *)reader
 {
 {
     [self readData];
     [self readData];
 }
 }
 
 
-- (void)ktv_readerHasAvailableData:(KTVHCDataReader *)reader
+- (void)readerHasAvailableData:(KTVHCDataReader *)reader
 {
 {
     [self readData];
     [self readData];
 }
 }
 
 
-- (void)ktv_reader:(KTVHCDataReader *)reader didFailWithError:(NSError *)error
+- (void)reader:(KTVHCDataReader *)reader didFailed:(NSError *)error
 {
 {
     KTVHCLogDataLoader(@"%p, Callback for failed", self);
     KTVHCLogDataLoader(@"%p, Callback for failed", self);
-    if ([self.delegate respondsToSelector:@selector(ktv_loader:didFailWithError:)]) {
-        [self.delegate ktv_loader:self didFailWithError:error];
+    if ([self.delegate respondsToSelector:@selector(loader:didFailed:)])
+    {
+        [self.delegate loader:self didFailed:error];
     }
     }
 }
 }
 
 
 - (void)readData
 - (void)readData
 {
 {
-    while (YES) {
-        @autoreleasepool {
-            NSData *data = [self.reader readDataOfLength:1024 * 1024 * 1];
-            if (self.reader.isFinished) {
-                self->_loadedLength = self.reader.readedLength;
-                self->_progress = 1.0f;
-                if ([self.delegate respondsToSelector:@selector(ktv_loader:didChangeProgress:)]) {
-                    [self.delegate ktv_loader:self didChangeProgress:self.progress];
+    while (YES)
+    {
+        @autoreleasepool
+        {
+            NSData * data = [self.reader readDataOfLength:1024 * 1024 * 1];
+            if (self.reader.didFinished)
+            {
+                _progress = 1.0f;
+                if ([self.delegate respondsToSelector:@selector(loader:didChangeProgress:)])
+                {
+                    [self.delegate loader:self didChangeProgress:_progress];
                 }
                 }
                 KTVHCLogDataLoader(@"%p, Callback finished", self);
                 KTVHCLogDataLoader(@"%p, Callback finished", self);
-                if ([self.delegate respondsToSelector:@selector(ktv_loaderDidFinish:)]) {
-                    [self.delegate ktv_loaderDidFinish:self];
+                if ([self.delegate respondsToSelector:@selector(loaderDidFinished:)])
+                {
+                    [self.delegate loaderDidFinished:self];
                 }
                 }
-            } else if (data) {
-                self->_loadedLength = self.reader.readedLength;
-                if (self.response.contentLength > 0) {
-                    self->_progress = (double)self.reader.readedLength / (double)self.response.contentLength;
-                }
-                if ([self.delegate respondsToSelector:@selector(ktv_loader:didChangeProgress:)]) {
-                    [self.delegate ktv_loader:self didChangeProgress:self.progress];
+            }
+            else if (data)
+            {
+                _progress = (double)self.reader.readOffset / (double)self.response.currentLength;
+                if ([self.delegate respondsToSelector:@selector(loader:didChangeProgress:)])
+                {
+                    [self.delegate loader:self didChangeProgress:_progress];
                 }
                 }
-                KTVHCLogDataLoader(@"%p, read data progress %f", self, self.progress);
+                KTVHCLogDataLoader(@"%p, read data progress %f", self, _progress);
                 continue;
                 continue;
             }
             }
             KTVHCLogDataLoader(@"%p, read data break", self);
             KTVHCLogDataLoader(@"%p, read data break", self);

+ 19 - 9
Carthage/Checkouts/KTVHTTPCache/KTVHTTPCache/Classes/KTVHCDataStorage/KTVHCDataNetworkSource.h

@@ -7,7 +7,7 @@
 //
 //
 
 
 #import <Foundation/Foundation.h>
 #import <Foundation/Foundation.h>
-#import "KTVHCDataSource.h"
+#import "KTVHCDataSourceProtocol.h"
 #import "KTVHCDataRequest.h"
 #import "KTVHCDataRequest.h"
 #import "KTVHCDataResponse.h"
 #import "KTVHCDataResponse.h"
 
 
@@ -15,22 +15,32 @@
 
 
 @protocol KTVHCDataNetworkSourceDelegate <NSObject>
 @protocol KTVHCDataNetworkSourceDelegate <NSObject>
 
 
-- (void)ktv_networkSourceDidPrepare:(KTVHCDataNetworkSource *)networkSource;
-- (void)ktv_networkSourceHasAvailableData:(KTVHCDataNetworkSource *)networkSource;
-- (void)ktv_networkSourceDidFinisheDownload:(KTVHCDataNetworkSource *)networkSource;
-- (void)ktv_networkSource:(KTVHCDataNetworkSource *)networkSource didFailWithError:(NSError *)error;
+- (void)networkSourceDidPrepared:(KTVHCDataNetworkSource *)networkSource;
+- (void)networkSourceHasAvailableData:(KTVHCDataNetworkSource *)networkSource;
+- (void)networkSourceDidFinishedDownload:(KTVHCDataNetworkSource *)networkSource;
+- (void)networkSource:(KTVHCDataNetworkSource *)networkSource didFailed:(NSError *)error;
 
 
 @end
 @end
 
 
-@interface KTVHCDataNetworkSource : NSObject <KTVHCDataSource>
+@interface KTVHCDataNetworkSource : NSObject <KTVHCDataSourceProtocol>
 
 
 + (instancetype)new NS_UNAVAILABLE;
 + (instancetype)new NS_UNAVAILABLE;
 - (instancetype)init NS_UNAVAILABLE;
 - (instancetype)init NS_UNAVAILABLE;
 
 
-- (instancetype)initWithRequest:(KTVHCDataRequest *)reqeust NS_DESIGNATED_INITIALIZER;
+- (instancetype)initWithRequest:(KTVHCDataRequest *)reqeust;
 
 
-@property (nonatomic, strong, readonly) KTVHCDataRequest *request;
-@property (nonatomic, strong, readonly) KTVHCDataResponse *response;
+@property (nonatomic, strong, readonly) KTVHCDataRequest * request;
+@property (nonatomic, strong, readonly) KTVHCDataResponse * response;
+@property (nonatomic, assign, readonly) KTVHCRange range;
+
+@property (nonatomic, assign, readonly) BOOL didPrepared;
+@property (nonatomic, assign, readonly) BOOL didFinished;
+@property (nonatomic, assign, readonly) BOOL didClosed;
+
+- (void)prepare;
+- (void)close;
+
+- (NSData *)readDataOfLength:(NSUInteger)length;
 
 
 @property (nonatomic, weak, readonly) id<KTVHCDataNetworkSourceDelegate> delegate;
 @property (nonatomic, weak, readonly) id<KTVHCDataNetworkSourceDelegate> delegate;
 @property (nonatomic, strong, readonly) dispatch_queue_t delegateQueue;
 @property (nonatomic, strong, readonly) dispatch_queue_t delegateQueue;

+ 131 - 87
Carthage/Checkouts/KTVHTTPCache/KTVHTTPCache/Classes/KTVHCDataStorage/KTVHCDataNetworkSource.m

@@ -9,42 +9,37 @@
 #import "KTVHCDataNetworkSource.h"
 #import "KTVHCDataNetworkSource.h"
 #import "KTVHCDataUnitPool.h"
 #import "KTVHCDataUnitPool.h"
 #import "KTVHCDataCallback.h"
 #import "KTVHCDataCallback.h"
-#import "KTVHCPathTool.h"
+#import "KTVHCPathTools.h"
 #import "KTVHCDownload.h"
 #import "KTVHCDownload.h"
 #import "KTVHCError.h"
 #import "KTVHCError.h"
 #import "KTVHCLog.h"
 #import "KTVHCLog.h"
 
 
 @interface KTVHCDataNetworkSource () <NSLocking, KTVHCDownloadDelegate>
 @interface KTVHCDataNetworkSource () <NSLocking, KTVHCDownloadDelegate>
 
 
-@property (nonatomic, strong) NSLock *coreLock;
-@property (nonatomic, strong) NSFileHandle *readingHandle;
-@property (nonatomic, strong) NSFileHandle *writingHandle;
-@property (nonatomic, strong) KTVHCDataUnitItem *unitItem;
-@property (nonatomic, strong) NSURLSessionTask *downlaodTask;
+@property (nonatomic, strong) NSError * error;
+@property (nonatomic, strong) NSLock * coreLock;
+@property (nonatomic, assign) long long downloadLength;
+@property (nonatomic, assign) long long downloadReadedLength;
+@property (nonatomic, assign) BOOL downloadDidCallComplete;
+@property (nonatomic, assign) BOOL needCallHasAvailableData;
+@property (nonatomic, assign) BOOL didCalledPrepare;
 
 
-@property (nonatomic) long long downloadLength;
-@property (nonatomic) BOOL downloadCalledComplete;
-@property (nonatomic) BOOL callHasAvailableData;
-@property (nonatomic) BOOL calledPrepare;
+@property (nonatomic, strong) KTVHCDataUnitItem * unitItem;
+@property (nonatomic, strong) NSFileHandle * readingHandle;
+@property (nonatomic, strong) NSFileHandle * writingHandle;
+@property (nonatomic, assign) NSURLSessionTask * downlaodTask;
 
 
 @end
 @end
 
 
 @implementation KTVHCDataNetworkSource
 @implementation KTVHCDataNetworkSource
 
 
-@synthesize error = _error;
-@synthesize range = _range;
-@synthesize closed = _closed;
-@synthesize prepared = _prepared;
-@synthesize finished = _finished;
-@synthesize readedLength = _readedLength;
-
 - (instancetype)initWithRequest:(KTVHCDataRequest *)reqeust
 - (instancetype)initWithRequest:(KTVHCDataRequest *)reqeust
 {
 {
     if (self = [super init])
     if (self = [super init])
     {
     {
         KTVHCLogAlloc(self);
         KTVHCLogAlloc(self);
-        self->_request = reqeust;
-        self->_range = reqeust.range;
+        _request = reqeust;
+        _range = reqeust.range;
         KTVHCLogDataNetworkSource(@"%p, Create network source\nrequest : %@\nrange : %@", self, self.request, KTVHCStringFromRange(self.range));
         KTVHCLogDataNetworkSource(@"%p, Create network source\nrequest : %@\nrange : %@", self, self.request, KTVHCStringFromRange(self.range));
     }
     }
     return self;
     return self;
@@ -53,21 +48,23 @@
 - (void)dealloc
 - (void)dealloc
 {
 {
     KTVHCLogDealloc(self);
     KTVHCLogDealloc(self);
-    KTVHCLogDataNetworkSource(@"%p, Destory network source\nError : %@\ndownloadLength : %lld\nreadedLength : %lld", self, self.error, self.downloadLength, self.readedLength);
+    KTVHCLogDataNetworkSource(@"%p, Destory network source\nError : %@\ndownloadLength : %lld\nreadedLength : %lld", self, self.error, self.downloadLength, self.downloadReadedLength);
 }
 }
 
 
 - (void)prepare
 - (void)prepare
 {
 {
     [self lock];
     [self lock];
-    if (self.isClosed) {
+    if (self.didClosed)
+    {
         [self unlock];
         [self unlock];
         return;
         return;
     }
     }
-    if (self.calledPrepare) {
+    if (self.didCalledPrepare)
+    {
         [self unlock];
         [self unlock];
         return;
         return;
     }
     }
-    self->_calledPrepare = YES;
+    _didCalledPrepare = YES;
     KTVHCLogDataNetworkSource(@"%p, Call prepare", self);
     KTVHCLogDataNetworkSource(@"%p, Call prepare", self);
     self.downlaodTask = [[KTVHCDownload download] downloadWithRequest:self.request delegate:self];
     self.downlaodTask = [[KTVHCDownload download] downloadWithRequest:self.request delegate:self];
     [self unlock];
     [self unlock];
@@ -76,13 +73,15 @@
 - (void)close
 - (void)close
 {
 {
     [self lock];
     [self lock];
-    if (self.isClosed) {
+    if (self.didClosed)
+    {
         [self unlock];
         [self unlock];
         return;
         return;
     }
     }
-    self->_closed = YES;
+    _didClosed = YES;
     KTVHCLogDataNetworkSource(@"%p, Call close", self);
     KTVHCLogDataNetworkSource(@"%p, Call close", self);
-    if (!self.downloadCalledComplete) {
+    if (!self.downloadDidCallComplete)
+    {
         KTVHCLogDataNetworkSource(@"%p, Cancel download task", self);
         KTVHCLogDataNetworkSource(@"%p, Cancel download task", self);
         [self.downlaodTask cancel];
         [self.downlaodTask cancel];
         self.downlaodTask = nil;
         self.downlaodTask = nil;
@@ -95,34 +94,43 @@
 - (NSData *)readDataOfLength:(NSUInteger)length
 - (NSData *)readDataOfLength:(NSUInteger)length
 {
 {
     [self lock];
     [self lock];
-    if (self.isClosed || self.isFinished || self.error) {
+    if (self.didClosed || self.didFinished || self.error)
+    {
         [self unlock];
         [self unlock];
         return nil;
         return nil;
     }
     }
-    if (self.readedLength >= self.downloadLength) {
-        if (self.downloadCalledComplete) {
-            KTVHCLogDataNetworkSource(@"%p, Read data failed\ndownloadLength : %lld\nreadedLength : %lld", self, self.readedLength, self.downloadLength);
+    if (self.downloadReadedLength >= self.downloadLength)
+    {
+        if (self.downloadDidCallComplete)
+        {
+            KTVHCLogDataNetworkSource(@"%p, Read data failed\ndownloadLength : %lld\nreadedLength : %lld", self, self.downloadReadedLength, self.downloadLength);
             [self destoryReadingHandle];
             [self destoryReadingHandle];
-        } else {
+        }
+        else
+        {
             KTVHCLogDataNetworkSource(@"%p, Read data wait callback", self);
             KTVHCLogDataNetworkSource(@"%p, Read data wait callback", self);
-            self.callHasAvailableData = YES;
+            self.needCallHasAvailableData = YES;
         }
         }
         [self unlock];
         [self unlock];
         return nil;
         return nil;
     }
     }
-    NSData *data = nil;
-    @try {
-        data = [self.readingHandle readDataOfLength:(NSUInteger)MIN(self.downloadLength - self.readedLength, length)];
-        self->_readedLength += data.length;
-        KTVHCLogDataNetworkSource(@"%p, Read data\nLength : %lld\ndownloadLength : %lld\nreadedLength : %lld", self, (long long)data.length, self.readedLength, self.downloadLength);
-        if (self.readedLength >= KTVHCRangeGetLength(self.response.contentRange)) {
-            self->_finished = YES;
+    NSData * data = nil;
+    @try
+    {
+        data = [self.readingHandle readDataOfLength:(NSUInteger)MIN(self.downloadLength - self.downloadReadedLength, length)];
+        self.downloadReadedLength += data.length;
+        KTVHCLogDataNetworkSource(@"%p, Read data\nLength : %lld\ndownloadLength : %lld\nreadedLength : %lld", self, (long long)data.length, self.downloadReadedLength, self.downloadLength);
+        if (self.downloadReadedLength >= KTVHCRangeGetLength(self.response.range))
+        {
+            _didFinished = YES;
             KTVHCLogDataNetworkSource(@"%p, Read data did finished", self);
             KTVHCLogDataNetworkSource(@"%p, Read data did finished", self);
             [self destoryReadingHandle];
             [self destoryReadingHandle];
         }
         }
-    } @catch (NSException *exception) {
+    }
+    @catch (NSException * exception)
+    {
         KTVHCLogDataFileSource(@"%p, Read exception\nname : %@\nreason : %@\nuserInfo : %@", self, exception.name, exception.reason, exception.userInfo);
         KTVHCLogDataFileSource(@"%p, Read exception\nname : %@\nreason : %@\nuserInfo : %@", self, exception.name, exception.reason, exception.userInfo);
-        NSError *error = [KTVHCError errorForException:exception];
+        NSError * error = [KTVHCError errorForException:exception];
         [self callbackForFailed:error];
         [self callbackForFailed:error];
     }
     }
     [self unlock];
     [self unlock];
@@ -131,49 +139,63 @@
 
 
 - (void)setDelegate:(id <KTVHCDataNetworkSourceDelegate>)delegate delegateQueue:(dispatch_queue_t)delegateQueue
 - (void)setDelegate:(id <KTVHCDataNetworkSourceDelegate>)delegate delegateQueue:(dispatch_queue_t)delegateQueue
 {
 {
-    self->_delegate = delegate;
-    self->_delegateQueue = delegateQueue;
+    _delegate = delegate;
+    _delegateQueue = delegateQueue;
 }
 }
 
 
-- (void)ktv_download:(KTVHCDownload *)download didCompleteWithError:(NSError *)error
+- (void)download:(KTVHCDownload *)download didCompleteWithError:(NSError *)error
 {
 {
     [self lock];
     [self lock];
-    self.downloadCalledComplete = YES;
+    self.downloadDidCallComplete = YES;
     [self destoryWritingHandle];
     [self destoryWritingHandle];
-    if (self.isClosed) {
+    if (self.didClosed)
+    {
         KTVHCLogDataNetworkSource(@"%p, Complete but did closed\nError : %@", self, error);
         KTVHCLogDataNetworkSource(@"%p, Complete but did closed\nError : %@", self, error);
-    } else if (self.error) {
+    }
+    else if (self.error)
+    {
         KTVHCLogDataNetworkSource(@"%p, Complete but did failed\nself.error : %@\nerror : %@", self, self.error, error);
         KTVHCLogDataNetworkSource(@"%p, Complete but did failed\nself.error : %@\nerror : %@", self, self.error, error);
-    } else if (error) {
-        if (error.code != NSURLErrorCancelled) {
+    }
+    else if (error)
+    {
+        if (error.code != NSURLErrorCancelled)
+        {
             [self callbackForFailed:error];
             [self callbackForFailed:error];
-        } else {
+        }
+        else
+        {
             KTVHCLogDataNetworkSource(@"%p, Complete with cancel\nError : %@", self, error);
             KTVHCLogDataNetworkSource(@"%p, Complete with cancel\nError : %@", self, error);
         }
         }
-    } else if (self.downloadLength >= KTVHCRangeGetLength(self.response.contentRange)) {
+    }
+    else if (self.downloadLength >= KTVHCRangeGetLength(self.response.range))
+    {
         KTVHCLogDataNetworkSource(@"%p, Complete and finisehed", self);
         KTVHCLogDataNetworkSource(@"%p, Complete and finisehed", self);
-        if ([self.delegate respondsToSelector:@selector(ktv_networkSourceDidFinisheDownload:)]) {
+        if ([self.delegate respondsToSelector:@selector(networkSourceDidFinishedDownload:)])
+        {
             [KTVHCDataCallback callbackWithQueue:self.delegateQueue block:^{
             [KTVHCDataCallback callbackWithQueue:self.delegateQueue block:^{
-                [self.delegate ktv_networkSourceDidFinisheDownload:self];
+                [self.delegate networkSourceDidFinishedDownload:self];
             }];
             }];
         }
         }
-    } else {
+    }
+    else
+    {
         KTVHCLogDataNetworkSource(@"%p, Complete but not finisehed\ndownloadLength : %lld", self, self.downloadLength);
         KTVHCLogDataNetworkSource(@"%p, Complete but not finisehed\ndownloadLength : %lld", self, self.downloadLength);
     }
     }
     [self unlock];
     [self unlock];
 }
 }
 
 
-- (void)ktv_download:(KTVHCDownload *)download didReceiveResponse:(KTVHCDataResponse *)response
+- (void)download:(KTVHCDownload *)download didReceiveResponse:(KTVHCDataResponse *)response
 {
 {
     [self lock];
     [self lock];
-    if (self.isClosed || self.error) {
+    if (self.didClosed || self.error)
+    {
         [self unlock];
         [self unlock];
         return;
         return;
     }
     }
-    self->_response = response;
-    NSString *path = [KTVHCPathTool filePathWithURL:self.request.URL offset:self.request.range.start];
+    _response = response;
+    NSString * path = [KTVHCPathTools unitItemPathWithURL:self.request.URL offset:self.request.range.start];
     self.unitItem = [[KTVHCDataUnitItem alloc] initWithPath:path offset:self.request.range.start];
     self.unitItem = [[KTVHCDataUnitItem alloc] initWithPath:path offset:self.request.range.start];
-    KTVHCDataUnit *unit = [[KTVHCDataUnitPool pool] unitWithURL:self.request.URL];
+    KTVHCDataUnit * unit = [[KTVHCDataUnitPool pool] unitWithURL:self.request.URL];
     [unit insertUnitItem:self.unitItem];
     [unit insertUnitItem:self.unitItem];
     KTVHCLogDataNetworkSource(@"%p, Receive response\nResponse : %@\nUnit : %@\nUnitItem : %@", self, response, unit, self.unitItem);
     KTVHCLogDataNetworkSource(@"%p, Receive response\nResponse : %@\nUnit : %@\nUnitItem : %@", self, response, unit, self.unitItem);
     [unit workingRelease];
     [unit workingRelease];
@@ -183,24 +205,29 @@
     [self unlock];
     [self unlock];
 }
 }
 
 
-- (void)ktv_download:(KTVHCDownload *)download didReceiveData:(NSData *)data
+- (void)download:(KTVHCDownload *)download didReceiveData:(NSData *)data
 {
 {
     [self lock];
     [self lock];
-    if (self.isClosed || self.error) {
+    if (self.didClosed || self.error)
+    {
         [self unlock];
         [self unlock];
         return;
         return;
     }
     }
-    @try {
+    @try
+    {
         [self.writingHandle writeData:data];
         [self.writingHandle writeData:data];
         self.downloadLength += data.length;
         self.downloadLength += data.length;
-        [self.unitItem updateLength:self.downloadLength];
+        [self.unitItem setLength:self.downloadLength];
         KTVHCLogDataNetworkSource(@"%p, Receive data : %lld, %lld, %lld", self, (long long)data.length, self.downloadLength, self.unitItem.length);
         KTVHCLogDataNetworkSource(@"%p, Receive data : %lld, %lld, %lld", self, (long long)data.length, self.downloadLength, self.unitItem.length);
         [self callbackForHasAvailableData];
         [self callbackForHasAvailableData];
-    } @catch (NSException *exception) {
-        NSError *error = [KTVHCError errorForException:exception];
+    }
+    @catch (NSException * exception)
+    {
+        NSError * error = [KTVHCError errorForException:exception];
         KTVHCLogDataNetworkSource(@"%p, write exception\nError : %@", self, error);
         KTVHCLogDataNetworkSource(@"%p, write exception\nError : %@", self, error);
         [self callbackForFailed:error];
         [self callbackForFailed:error];
-        if (!self.downloadCalledComplete) {
+        if (!self.downloadDidCallComplete)
+        {
             KTVHCLogDataNetworkSource(@"%p, Cancel download task when write exception", self);
             KTVHCLogDataNetworkSource(@"%p, Cancel download task when write exception", self);
             [self.downlaodTask cancel];
             [self.downlaodTask cancel];
             self.downlaodTask = nil;
             self.downlaodTask = nil;
@@ -211,10 +238,14 @@
 
 
 - (void)destoryReadingHandle
 - (void)destoryReadingHandle
 {
 {
-    if (self.readingHandle) {
-        @try {
+    if (self.readingHandle)
+    {
+        @try
+        {
             [self.readingHandle closeFile];
             [self.readingHandle closeFile];
-        } @catch (NSException *exception) {
+        }
+        @catch (NSException * exception)
+        {
             KTVHCLogDataFileSource(@"%p, Close reading handle exception\nname : %@\nreason : %@\nuserInfo : %@", self, exception.name, exception.reason, exception.userInfo);
             KTVHCLogDataFileSource(@"%p, Close reading handle exception\nname : %@\nreason : %@\nuserInfo : %@", self, exception.name, exception.reason, exception.userInfo);
         }
         }
         self.readingHandle = nil;
         self.readingHandle = nil;
@@ -223,11 +254,15 @@
 
 
 - (void)destoryWritingHandle
 - (void)destoryWritingHandle
 {
 {
-    if (self.writingHandle) {
-        @try {
+    if (self.writingHandle)
+    {
+        @try
+        {
             [self.writingHandle synchronizeFile];
             [self.writingHandle synchronizeFile];
             [self.writingHandle closeFile];
             [self.writingHandle closeFile];
-        } @catch (NSException *exception) {
+        }
+        @catch (NSException * exception)
+        {
             KTVHCLogDataFileSource(@"%p, Close writing handle exception\nname : %@\nreason : %@\nuserInfo : %@", self, exception.name, exception.reason, exception.userInfo);
             KTVHCLogDataFileSource(@"%p, Close writing handle exception\nname : %@\nreason : %@\nuserInfo : %@", self, exception.name, exception.reason, exception.userInfo);
         }
         }
         self.writingHandle = nil;
         self.writingHandle = nil;
@@ -236,57 +271,66 @@
 
 
 - (void)callbackForPrepared
 - (void)callbackForPrepared
 {
 {
-    if (self.isClosed) {
+    if (self.didClosed)
+    {
         return;
         return;
     }
     }
-    if (self.isPrepared) {
+    if (self.didPrepared)
+    {
         return;
         return;
     }
     }
-    self->_prepared = YES;
-    if ([self.delegate respondsToSelector:@selector(ktv_networkSourceDidPrepare:)]) {
+    _didPrepared = YES;
+    if ([self.delegate respondsToSelector:@selector(networkSourceDidPrepared:)])
+    {
         KTVHCLogDataNetworkSource(@"%p, Callback for prepared - Begin", self);
         KTVHCLogDataNetworkSource(@"%p, Callback for prepared - Begin", self);
         [KTVHCDataCallback callbackWithQueue:self.delegateQueue block:^{
         [KTVHCDataCallback callbackWithQueue:self.delegateQueue block:^{
             KTVHCLogDataNetworkSource(@"%p, Callback for prepared - End", self);
             KTVHCLogDataNetworkSource(@"%p, Callback for prepared - End", self);
-            [self.delegate ktv_networkSourceDidPrepare:self];
+            [self.delegate networkSourceDidPrepared:self];
         }];
         }];
     }
     }
 }
 }
 
 
 - (void)callbackForHasAvailableData
 - (void)callbackForHasAvailableData
 {
 {
-    if (self.isClosed) {
+    if (self.didClosed)
+    {
         return;
         return;
     }
     }
-    if (!self.callHasAvailableData) {
+    if (!self.needCallHasAvailableData)
+    {
         return;
         return;
     }
     }
-    self.callHasAvailableData = NO;
-    if ([self.delegate respondsToSelector:@selector(ktv_networkSourceHasAvailableData:)]) {
+    self.needCallHasAvailableData = NO;
+    if ([self.delegate respondsToSelector:@selector(networkSourceHasAvailableData:)])
+    {
         KTVHCLogDataNetworkSource(@"%p, Callback for has available data - Begin", self);
         KTVHCLogDataNetworkSource(@"%p, Callback for has available data - Begin", self);
         [KTVHCDataCallback callbackWithQueue:self.delegateQueue block:^{
         [KTVHCDataCallback callbackWithQueue:self.delegateQueue block:^{
             KTVHCLogDataNetworkSource(@"%p, Callback for has available data - End", self);
             KTVHCLogDataNetworkSource(@"%p, Callback for has available data - End", self);
-            [self.delegate ktv_networkSourceHasAvailableData:self];
+            [self.delegate networkSourceHasAvailableData:self];
         }];
         }];
     }
     }
 }
 }
 
 
 - (void)callbackForFailed:(NSError *)error
 - (void)callbackForFailed:(NSError *)error
 {
 {
-    if (self.isClosed || !error || self.error) {
+    if (self.didClosed || !error || self.error)
+    {
         return;
         return;
     }
     }
-    self->_error = error;
+    self.error = error;
     KTVHCLogDataNetworkSource(@"%p, Callback for failed\nError : %@", self, self.error);
     KTVHCLogDataNetworkSource(@"%p, Callback for failed\nError : %@", self, self.error);
-    if ([self.delegate respondsToSelector:@selector(ktv_networkSource:didFailWithError:)]) {
+    if ([self.delegate respondsToSelector:@selector(networkSource:didFailed:)])
+    {
         [KTVHCDataCallback callbackWithQueue:self.delegateQueue block:^{
         [KTVHCDataCallback callbackWithQueue:self.delegateQueue block:^{
-            [self.delegate ktv_networkSource:self didFailWithError:self.error];
+            [self.delegate networkSource:self didFailed:self.error];
         }];
         }];
     }
     }
 }
 }
 
 
 - (void)lock
 - (void)lock
 {
 {
-    if (!self.coreLock) {
+    if (!self.coreLock)
+    {
         self.coreLock = [[NSLock alloc] init];
         self.coreLock = [[NSLock alloc] init];
     }
     }
     [self.coreLock lock];
     [self.coreLock lock];

+ 13 - 11
Carthage/Checkouts/KTVHTTPCache/KTVHTTPCache/Classes/KTVHCDataStorage/KTVHCDataReader.h

@@ -14,9 +14,9 @@
 
 
 @protocol KTVHCDataReaderDelegate <NSObject>
 @protocol KTVHCDataReaderDelegate <NSObject>
 
 
-- (void)ktv_readerDidPrepare:(KTVHCDataReader *)reader;
-- (void)ktv_readerHasAvailableData:(KTVHCDataReader *)reader;
-- (void)ktv_reader:(KTVHCDataReader *)reader didFailWithError:(NSError *)error;
+- (void)readerDidPrepared:(KTVHCDataReader *)reader;
+- (void)readerHasAvailableData:(KTVHCDataReader *)reader;
+- (void)reader:(KTVHCDataReader *)reader didFailed:(NSError *)error;
 
 
 @end
 @end
 
 
@@ -25,20 +25,22 @@
 + (instancetype)new NS_UNAVAILABLE;
 + (instancetype)new NS_UNAVAILABLE;
 - (instancetype)init NS_UNAVAILABLE;
 - (instancetype)init NS_UNAVAILABLE;
 
 
++ (instancetype)readerWithRequest:(KTVHCDataRequest *)request;
+
 @property (nonatomic, weak) id <KTVHCDataReaderDelegate> delegate;
 @property (nonatomic, weak) id <KTVHCDataReaderDelegate> delegate;
+
 @property (nonatomic, strong) id object;
 @property (nonatomic, strong) id object;
 
 
-@property (nonatomic, strong, readonly) KTVHCDataRequest *request;
-@property (nonatomic, strong, readonly) KTVHCDataResponse *response;
+@property (nonatomic, strong, readonly) KTVHCDataRequest * request;
+@property (nonatomic, strong, readonly) KTVHCDataResponse * response;
 
 
-@property (nonatomic, copy, readonly) NSError *error;
+@property (nonatomic, strong, readonly) NSError * error;
 
 
-@property (nonatomic, readonly, getter=isPrepared) BOOL prepared;
-@property (nonatomic, readonly, getter=isFinished) BOOL finished;
-@property (nonatomic, readonly, getter=isClosed) BOOL closed;
+@property (nonatomic, assign, readonly) BOOL didClosed;
+@property (nonatomic, assign, readonly) BOOL didPrepared;
+@property (nonatomic, assign, readonly) BOOL didFinished;
 
 
-@property (nonatomic, readonly) long long readedLength;
-@property (nonatomic, readonly) double progress;
+@property (nonatomic, assign, readonly) long long readOffset;
 
 
 - (void)prepare;
 - (void)prepare;
 - (void)close;
 - (void)close;

+ 100 - 68
Carthage/Checkouts/KTVHTTPCache/KTVHTTPCache/Classes/KTVHCDataStorage/KTVHCDataReader.m

@@ -7,7 +7,6 @@
 //
 //
 
 
 #import "KTVHCDataReader.h"
 #import "KTVHCDataReader.h"
-#import "KTVHCData+Internal.h"
 #import "KTVHCDataSourceManager.h"
 #import "KTVHCDataSourceManager.h"
 #import "KTVHCDataUnitPool.h"
 #import "KTVHCDataUnitPool.h"
 #import "KTVHCDataCallback.h"
 #import "KTVHCDataCallback.h"
@@ -15,23 +14,31 @@
 
 
 @interface KTVHCDataReader () <KTVHCDataSourceManagerDelegate>
 @interface KTVHCDataReader () <KTVHCDataSourceManagerDelegate>
 
 
-@property (nonatomic, strong) KTVHCDataUnit *unit;
-@property (nonatomic, strong) NSRecursiveLock *coreLock;
+@property (nonatomic, strong) NSRecursiveLock * coreLock;
 @property (nonatomic, strong) dispatch_queue_t delegateQueue;
 @property (nonatomic, strong) dispatch_queue_t delegateQueue;
 @property (nonatomic, strong) dispatch_queue_t internalDelegateQueue;
 @property (nonatomic, strong) dispatch_queue_t internalDelegateQueue;
-@property (nonatomic, strong) KTVHCDataSourceManager *sourceManager;
-@property (nonatomic) BOOL calledPrepare;
+@property (nonatomic, assign) BOOL didCalledPrepare;
+
+@property (nonatomic, strong) KTVHCDataUnit * unit;
+@property (nonatomic, strong) KTVHCDataSourceManager * sourceManager;
 
 
 @end
 @end
 
 
 @implementation KTVHCDataReader
 @implementation KTVHCDataReader
 
 
++ (instancetype)readerWithRequest:(KTVHCDataRequest *)request
+{
+    return [[self alloc] initWithRequest:request];
+}
+
 - (instancetype)initWithRequest:(KTVHCDataRequest *)request
 - (instancetype)initWithRequest:(KTVHCDataRequest *)request
 {
 {
-    if (self = [super init]) {
+    if (self = [super init])
+    {
         KTVHCLogAlloc(self);
         KTVHCLogAlloc(self);
         self.unit = [[KTVHCDataUnitPool pool] unitWithURL:request.URL];
         self.unit = [[KTVHCDataUnitPool pool] unitWithURL:request.URL];
-        self->_request = [request newRequestWithTotalLength:self.unit.totalLength];
+        _request = [request requestWithTotalLength:self.unit.totalLength];
+        [self.unit updateRequestHeaders:self.request.headers];
         self.delegateQueue = dispatch_queue_create("KTVHCDataReader_delegateQueue", DISPATCH_QUEUE_SERIAL);
         self.delegateQueue = dispatch_queue_create("KTVHCDataReader_delegateQueue", DISPATCH_QUEUE_SERIAL);
         self.internalDelegateQueue = dispatch_queue_create("KTVHCDataReader_internalDelegateQueue", DISPATCH_QUEUE_SERIAL);
         self.internalDelegateQueue = dispatch_queue_create("KTVHCDataReader_internalDelegateQueue", DISPATCH_QUEUE_SERIAL);
         KTVHCLogDataReader(@"%p, Create reader\norignalRequest : %@\nfinalRequest : %@\nUnit : %@", self, request, self.request, self.unit);
         KTVHCLogDataReader(@"%p, Create reader\norignalRequest : %@\nfinalRequest : %@\nUnit : %@", self, request, self.request, self.unit);
@@ -43,21 +50,23 @@
 {
 {
     KTVHCLogDealloc(self);
     KTVHCLogDealloc(self);
     [self close];
     [self close];
-    KTVHCLogDataReader(@"%p, Destory reader\nError : %@\nreadOffset : %lld", self, self.error, self.readedLength);
+    KTVHCLogDataReader(@"%p, Destory reader\nError : %@\nreadOffset : %lld", self, self.error, self.readOffset);
 }
 }
 
 
 - (void)prepare
 - (void)prepare
 {
 {
     [self lock];
     [self lock];
-    if (self.isClosed) {
+    if (self.didClosed)
+    {
         [self unlock];
         [self unlock];
         return;
         return;
     }
     }
-    if (self.calledPrepare) {
+    if (self.didCalledPrepare)
+    {
         [self unlock];
         [self unlock];
         return;
         return;
     }
     }
-    self->_calledPrepare = YES;
+    _didCalledPrepare = YES;
     KTVHCLogDataReader(@"%p, Call prepare", self);
     KTVHCLogDataReader(@"%p, Call prepare", self);
     [self prepareSourceManager];
     [self prepareSourceManager];
     [self unlock];
     [self unlock];
@@ -66,11 +75,12 @@
 - (void)close
 - (void)close
 {
 {
     [self lock];
     [self lock];
-    if (self.isClosed) {
+    if (self.didClosed)
+    {
         [self unlock];
         [self unlock];
         return;
         return;
     }
     }
-    self->_closed = YES;
+    _didClosed = YES;
     KTVHCLogDataReader(@"%p, Call close", self);
     KTVHCLogDataReader(@"%p, Call close", self);
     [self.sourceManager close];
     [self.sourceManager close];
     [self.unit workingRelease];
     [self.unit workingRelease];
@@ -81,29 +91,28 @@
 - (NSData *)readDataOfLength:(NSUInteger)length
 - (NSData *)readDataOfLength:(NSUInteger)length
 {
 {
     [self lock];
     [self lock];
-    if (self.isClosed) {
+    if (self.didClosed)
+    {
         [self unlock];
         [self unlock];
         return nil;
         return nil;
     }
     }
-    if (self.isFinished) {
+    if (self.didFinished)
+    {
         [self unlock];
         [self unlock];
         return nil;
         return nil;
     }
     }
-    if (self.error) {
+    if (self.error)
+    {
         [self unlock];
         [self unlock];
         return nil;
         return nil;
     }
     }
-    NSData *data = [self.sourceManager readDataOfLength:length];
-    if (data.length > 0) {
-        self->_readedLength += data.length;
-        if (self.response.contentLength > 0) {
-            self->_progress = (double)self.readedLength / (double)self.response.contentLength;
-        }
-    }
+    NSData * data = [self.sourceManager readDataOfLength:length];;
+    _readOffset += data.length;
     KTVHCLogDataReader(@"%p, Read data : %lld", self, (long long)data.length);
     KTVHCLogDataReader(@"%p, Read data : %lld", self, (long long)data.length);
-    if (self.sourceManager.isFinished) {
+    if (self.sourceManager.didFinished)
+    {
         KTVHCLogDataReader(@"%p, Read data did finished", self);
         KTVHCLogDataReader(@"%p, Read data did finished", self);
-        self->_finished = YES;
+        _didFinished = YES;
         [self close];
         [self close];
     }
     }
     [self unlock];
     [self unlock];
@@ -112,30 +121,35 @@
 
 
 - (void)prepareSourceManager
 - (void)prepareSourceManager
 {
 {
-    NSMutableArray<KTVHCDataFileSource *> *fileSources = [NSMutableArray array];
-    NSMutableArray<KTVHCDataNetworkSource *> *networkSources = [NSMutableArray array];
+    self.sourceManager = [[KTVHCDataSourceManager alloc] initWithDelegate:self delegateQueue:self.internalDelegateQueue];
+    NSMutableArray <KTVHCDataFileSource *> * fileSources = [NSMutableArray array];
+    NSMutableArray <KTVHCDataNetworkSource *> * networkSources = [NSMutableArray array];
     long long min = self.request.range.start;
     long long min = self.request.range.start;
     long long max = self.request.range.end;
     long long max = self.request.range.end;
-    NSArray *unitItems = self.unit.unitItems;
-    for (KTVHCDataUnitItem *item in unitItems) {
+    NSArray * unitItems = self.unit.unitItems;
+    for (KTVHCDataUnitItem * item in unitItems)
+    {
         long long itemMin = item.offset;
         long long itemMin = item.offset;
         long long itemMax = item.offset + item.length - 1;
         long long itemMax = item.offset + item.length - 1;
-        if (itemMax < min || itemMin > max) {
+        if (itemMax < min || itemMin > max)
+        {
             continue;
             continue;
         }
         }
-        if (min > itemMin) {
+        if (min > itemMin)
+        {
             itemMin = min;
             itemMin = min;
         }
         }
-        if (max < itemMax) {
+        if (max < itemMax)
+        {
             itemMax = max;
             itemMax = max;
         }
         }
         min = itemMax + 1;
         min = itemMax + 1;
         KTVHCRange range = KTVHCMakeRange(item.offset, item.offset + item.length - 1);
         KTVHCRange range = KTVHCMakeRange(item.offset, item.offset + item.length - 1);
         KTVHCRange readRange = KTVHCMakeRange(itemMin - item.offset, itemMax - item.offset);
         KTVHCRange readRange = KTVHCMakeRange(itemMin - item.offset, itemMax - item.offset);
-        KTVHCDataFileSource *source = [[KTVHCDataFileSource alloc] initWithPath:item.absolutePath range:range readRange:readRange];
+        KTVHCDataFileSource * source = [[KTVHCDataFileSource alloc] initWithPath:item.absolutePath range:range readRange:readRange];
         [fileSources addObject:source];
         [fileSources addObject:source];
     }
     }
-    [fileSources sortUsingComparator:^NSComparisonResult(KTVHCDataFileSource *obj1, KTVHCDataFileSource *obj2) {
+    [fileSources sortUsingComparator:^NSComparisonResult(KTVHCDataFileSource * obj1, KTVHCDataFileSource * obj2) {
         if (obj1.range.start < obj2.range.start) {
         if (obj1.range.start < obj2.range.start) {
             return NSOrderedAscending;
             return NSOrderedAscending;
         }
         }
@@ -143,12 +157,14 @@
     }];
     }];
     long long offset = self.request.range.start;
     long long offset = self.request.range.start;
     long long length = KTVHCRangeIsFull(self.request.range) ? KTVHCRangeGetLength(self.request.range) : (self.request.range.end - offset + 1);
     long long length = KTVHCRangeIsFull(self.request.range) ? KTVHCRangeGetLength(self.request.range) : (self.request.range.end - offset + 1);
-    for (KTVHCDataFileSource *obj in fileSources) {
+    for (KTVHCDataFileSource * obj in fileSources)
+    {
         long long delta = obj.range.start + obj.readRange.start - offset;
         long long delta = obj.range.start + obj.readRange.start - offset;
-        if (delta > 0) {
+        if (delta > 0)
+        {
             KTVHCRange range = KTVHCMakeRange(offset, offset + delta - 1);
             KTVHCRange range = KTVHCMakeRange(offset, offset + delta - 1);
-            KTVHCDataRequest *request = [self.request newRequestWithRange:range];
-            KTVHCDataNetworkSource *source = [[KTVHCDataNetworkSource alloc] initWithRequest:request];
+            KTVHCDataRequest * request = [self.request requestWithRange:range];
+            KTVHCDataNetworkSource * source = [[KTVHCDataNetworkSource alloc] initWithRequest:request];
             [networkSources addObject:source];
             [networkSources addObject:source];
             offset += delta;
             offset += delta;
             length -= delta;
             length -= delta;
@@ -156,27 +172,32 @@
         offset += KTVHCRangeGetLength(obj.readRange);
         offset += KTVHCRangeGetLength(obj.readRange);
         length -= KTVHCRangeGetLength(obj.readRange);
         length -= KTVHCRangeGetLength(obj.readRange);
     }
     }
-    if (length > 0) {
+    if (length > 0)
+    {
         KTVHCRange range = KTVHCMakeRange(offset, self.request.range.end);
         KTVHCRange range = KTVHCMakeRange(offset, self.request.range.end);
-        KTVHCDataRequest *request = [self.request newRequestWithRange:range];
-        KTVHCDataNetworkSource *source = [[KTVHCDataNetworkSource alloc] initWithRequest:request];
+        KTVHCDataRequest * request = [self.request requestWithRange:range];
+        KTVHCDataNetworkSource * source = [[KTVHCDataNetworkSource alloc] initWithRequest:request];
         [networkSources addObject:source];
         [networkSources addObject:source];
     }
     }
-    NSMutableArray<id<KTVHCDataSource>> *sources = [NSMutableArray array];
-    [sources addObjectsFromArray:fileSources];
-    [sources addObjectsFromArray:networkSources];
-    self.sourceManager = [[KTVHCDataSourceManager alloc] initWithSources:sources delegate:self delegateQueue:self.internalDelegateQueue];
+    for (KTVHCDataFileSource * obj in fileSources)
+    {
+        [self.sourceManager putSource:obj];
+    }
+    for (KTVHCDataNetworkSource * obj in networkSources)
+    {
+        [self.sourceManager putSource:obj];
+    }
     [self.sourceManager prepare];
     [self.sourceManager prepare];
 }
 }
 
 
-- (void)ktv_sourceManagerDidPrepare:(KTVHCDataSourceManager *)sourceManager
+- (void)sourceManagerDidPrepared:(KTVHCDataSourceManager *)sourceManager
 {
 {
     [self lock];
     [self lock];
     [self callbackForPrepared];
     [self callbackForPrepared];
     [self unlock];
     [self unlock];
 }
 }
 
 
-- (void)ktv_sourceManager:(KTVHCDataSourceManager *)sourceManager didReceiveResponse:(KTVHCDataResponse *)response
+- (void)sourceManager:(KTVHCDataSourceManager *)sourceManager didReceiveResponse:(KTVHCDataResponse *)response
 {
 {
     [self lock];
     [self lock];
     [self.unit updateResponseHeaders:response.headers totalLength:response.totalLength];
     [self.unit updateResponseHeaders:response.headers totalLength:response.totalLength];
@@ -184,45 +205,51 @@
     [self unlock];
     [self unlock];
 }
 }
 
 
-- (void)ktv_sourceManagerHasAvailableData:(KTVHCDataSourceManager *)sourceManager
+- (void)sourceManagerHasAvailableData:(KTVHCDataSourceManager *)sourceManager
 {
 {
     [self lock];
     [self lock];
-    if (self.isClosed) {
+    if (self.didClosed)
+    {
         [self unlock];
         [self unlock];
         return;
         return;
     }
     }
-    if ([self.delegate respondsToSelector:@selector(ktv_readerHasAvailableData:)]) {
+    if ([self.delegate respondsToSelector:@selector(readerHasAvailableData:)])
+    {
         KTVHCLogDataReader(@"%p, Callback for has available data - Begin", self);
         KTVHCLogDataReader(@"%p, Callback for has available data - Begin", self);
         [KTVHCDataCallback callbackWithQueue:self.delegateQueue block:^{
         [KTVHCDataCallback callbackWithQueue:self.delegateQueue block:^{
             KTVHCLogDataReader(@"%p, Callback for has available data - End", self);
             KTVHCLogDataReader(@"%p, Callback for has available data - End", self);
-            [self.delegate ktv_readerHasAvailableData:self];
+            [self.delegate readerHasAvailableData:self];
         }];
         }];
     }
     }
     [self unlock];
     [self unlock];
 }
 }
 
 
-- (void)ktv_sourceManager:(KTVHCDataSourceManager *)sourceManager didFailWithError:(NSError *)error
+- (void)sourceManager:(KTVHCDataSourceManager *)sourceManager didFailed:(NSError *)error
 {
 {
-    if (!error) {
+    if (!error)
+    {
         return;
         return;
     }
     }
     [self lock];
     [self lock];
-    if (self.isClosed) {
+    if (self.didClosed)
+    {
         [self unlock];
         [self unlock];
         return;
         return;
     }
     }
-    if (self.error) {
+    if (self.error)
+    {
         [self unlock];
         [self unlock];
         return;
         return;
     }
     }
-    self->_error = error;
+    _error = error;
     [self close];
     [self close];
-    [[KTVHCLog log] addError:self.error forURL:self.request.URL];
-    if ([self.delegate respondsToSelector:@selector(ktv_reader:didFailWithError:)]) {
+    [[KTVHCLog log] addError:self.error];
+    if ([self.delegate respondsToSelector:@selector(reader:didFailed:)])
+    {
         KTVHCLogDataReader(@"%p, Callback for failed - Begin\nError : %@", self, self.error);
         KTVHCLogDataReader(@"%p, Callback for failed - Begin\nError : %@", self, self.error);
         [KTVHCDataCallback callbackWithQueue:self.delegateQueue block:^{
         [KTVHCDataCallback callbackWithQueue:self.delegateQueue block:^{
             KTVHCLogDataReader(@"%p, Callback for failed - End", self);
             KTVHCLogDataReader(@"%p, Callback for failed - End", self);
-            [self.delegate ktv_reader:self didFailWithError:self.error];
+            [self.delegate reader:self didFailed:self.error];
         }];
         }];
     }
     }
     [self unlock];
     [self unlock];
@@ -230,24 +257,28 @@
 
 
 - (void)callbackForPrepared
 - (void)callbackForPrepared
 {
 {
-    if (self.isClosed) {
+    if (self.didClosed)
+    {
         return;
         return;
     }
     }
-    if (self.isPrepared) {
+    if (self.didPrepared)
+    {
         return;
         return;
     }
     }
-    if (self.sourceManager.isPrepared && self.unit.totalLength > 0) {
+    if (self.sourceManager.didPrepared && self.unit.totalLength > 0)
+    {
         long long totalLength = self.unit.totalLength;
         long long totalLength = self.unit.totalLength;
         KTVHCRange range = KTVHCRangeWithEnsureLength(self.request.range, totalLength);
         KTVHCRange range = KTVHCRangeWithEnsureLength(self.request.range, totalLength);
-        NSDictionary *headers = KTVHCRangeFillToResponseHeaders(range, self.unit.responseHeaders, totalLength);
-        self->_response = [[KTVHCDataResponse alloc] initWithURL:self.request.URL headers:headers];
-        self->_prepared = YES;
+        NSDictionary * headers = KTVHCRangeFillToResponseHeaders(range, self.unit.responseHeaders, totalLength);
+        _response = [[KTVHCDataResponse alloc] initWithURL:self.request.URL headers:headers];
+        _didPrepared = YES;
         KTVHCLogDataReader(@"%p, Reader did prepared\nResponse : %@", self, self.response);
         KTVHCLogDataReader(@"%p, Reader did prepared\nResponse : %@", self, self.response);
-        if ([self.delegate respondsToSelector:@selector(ktv_readerDidPrepare:)]) {
+        if ([self.delegate respondsToSelector:@selector(readerDidPrepared:)])
+        {
             KTVHCLogDataReader(@"%p, Callback for prepared - Begin", self);
             KTVHCLogDataReader(@"%p, Callback for prepared - Begin", self);
             [KTVHCDataCallback callbackWithQueue:self.delegateQueue block:^{
             [KTVHCDataCallback callbackWithQueue:self.delegateQueue block:^{
                 KTVHCLogDataReader(@"%p, Callback for prepared - End", self);
                 KTVHCLogDataReader(@"%p, Callback for prepared - End", self);
-                [self.delegate ktv_readerDidPrepare:self];
+                [self.delegate readerDidPrepared:self];
             }];
             }];
         }
         }
     }
     }
@@ -255,7 +286,8 @@
 
 
 - (void)lock
 - (void)lock
 {
 {
-    if (!self.coreLock) {
+    if (!self.coreLock)
+    {
         self.coreLock = [[NSRecursiveLock alloc] init];
         self.coreLock = [[NSRecursiveLock alloc] init];
     }
     }
     [self.coreLock lock];
     [self.coreLock lock];

+ 7 - 4
Carthage/Checkouts/KTVHTTPCache/KTVHTTPCache/Classes/KTVHCDataStorage/KTVHCDataRequest.h

@@ -14,10 +14,13 @@
 + (instancetype)new NS_UNAVAILABLE;
 + (instancetype)new NS_UNAVAILABLE;
 - (instancetype)init NS_UNAVAILABLE;
 - (instancetype)init NS_UNAVAILABLE;
 
 
-- (instancetype)initWithURL:(NSURL *)URL headers:(NSDictionary *)headers NS_DESIGNATED_INITIALIZER;
+- (instancetype)initWithURL:(NSURL *)URL headers:(NSDictionary *)headers;
 
 
-@property (nonatomic, copy, readonly) NSURL *URL;
-@property (nonatomic, copy, readonly) NSDictionary *headers;
-@property (nonatomic, readonly) KTVHCRange range;
+@property (nonatomic, copy, readonly) NSURL * URL;
+@property (nonatomic, copy, readonly) NSDictionary * headers;
+@property (nonatomic, assign, readonly) KTVHCRange range;
+
+- (KTVHCDataRequest *)requestWithRange:(KTVHCRange)range;
+- (KTVHCDataRequest *)requestWithTotalLength:(long long)totalLength;
 
 
 @end
 @end

+ 19 - 11
Carthage/Checkouts/KTVHTTPCache/KTVHTTPCache/Classes/KTVHCDataStorage/KTVHCDataRequest.m

@@ -7,18 +7,22 @@
 //
 //
 
 
 #import "KTVHCDataRequest.h"
 #import "KTVHCDataRequest.h"
-#import "KTVHCData+Internal.h"
 #import "KTVHCLog.h"
 #import "KTVHCLog.h"
 
 
 @implementation KTVHCDataRequest
 @implementation KTVHCDataRequest
 
 
 - (instancetype)initWithURL:(NSURL *)URL headers:(NSDictionary *)headers
 - (instancetype)initWithURL:(NSURL *)URL headers:(NSDictionary *)headers
 {
 {
-    if (self = [super init]) {
+    if (self = [super init])
+    {
         KTVHCLogAlloc(self);
         KTVHCLogAlloc(self);
-        self->_URL = URL;
-        self->_headers = KTVHCRangeFillToRequestHeadersIfNeeded(KTVHCRangeFull(), headers);
-        self->_range = KTVHCRangeWithRequestHeaderValue([self.headers objectForKey:@"Range"]);
+        _URL = URL;
+        if (![headers objectForKey:@"Range"]) {
+            _headers = KTVHCRangeFillToRequestHeaders(KTVHCRangeFull(), headers);
+        } else {
+            _headers = headers;
+        }
+        _range = KTVHCRangeWithRequestHeaderValue([_headers objectForKey:@"Range"]);
         KTVHCLogDataRequest(@"%p Create data request\nURL : %@\nHeaders : %@\nRange : %@", self, self.URL, self.headers, KTVHCStringFromRange(self.range));
         KTVHCLogDataRequest(@"%p Create data request\nURL : %@\nHeaders : %@\nRange : %@", self, self.URL, self.headers, KTVHCStringFromRange(self.range));
     }
     }
     return self;
     return self;
@@ -29,17 +33,21 @@
     KTVHCLogDealloc(self);
     KTVHCLogDealloc(self);
 }
 }
 
 
-- (KTVHCDataRequest *)newRequestWithRange:(KTVHCRange)range
+- (KTVHCDataRequest *)requestWithRange:(KTVHCRange)range
 {
 {
-    NSDictionary *headers = KTVHCRangeFillToRequestHeaders(range, self.headers);
-    KTVHCDataRequest *obj = [[KTVHCDataRequest alloc] initWithURL:self.URL headers:headers];
-    return obj;
+    if (!KTVHCEqualRanges(self.range, range))
+    {
+        NSDictionary * headers = KTVHCRangeFillToRequestHeaders(range, self.headers);
+        KTVHCDataRequest * obj = [[KTVHCDataRequest alloc] initWithURL:self.URL headers:headers];
+        return obj;
+    }
+    return self;
 }
 }
 
 
-- (KTVHCDataRequest *)newRequestWithTotalLength:(long long)totalLength
+- (KTVHCDataRequest *)requestWithTotalLength:(long long)totalLength
 {
 {
     KTVHCRange range = KTVHCRangeWithEnsureLength(self.range, totalLength);
     KTVHCRange range = KTVHCRangeWithEnsureLength(self.range, totalLength);
-    return [self newRequestWithRange:range];
+    return [self requestWithRange:range];
 }
 }
 
 
 @end
 @end

+ 12 - 7
Carthage/Checkouts/KTVHTTPCache/KTVHTTPCache/Classes/KTVHCDataStorage/KTVHCDataResponse.h

@@ -14,12 +14,17 @@
 + (instancetype)new NS_UNAVAILABLE;
 + (instancetype)new NS_UNAVAILABLE;
 - (instancetype)init NS_UNAVAILABLE;
 - (instancetype)init NS_UNAVAILABLE;
 
 
-@property (nonatomic, copy, readonly) NSURL *URL;
-@property (nonatomic, copy, readonly) NSDictionary *headers;
-@property (nonatomic, copy, readonly) NSString *contentType;
-@property (nonatomic, copy, readonly) NSString *contentRangeString;
-@property (nonatomic, readonly) KTVHCRange contentRange;
-@property (nonatomic, readonly) long long contentLength;
-@property (nonatomic, readonly) long long totalLength;
+- (instancetype)initWithURL:(NSURL *)URL headers:(NSDictionary *)headers;
+
+@property (nonatomic, copy, readonly) NSURL * URL;
+@property (nonatomic, copy, readonly) NSDictionary * headers;
+@property (nonatomic, copy, readonly) NSDictionary * headersWithoutRangeAndLength;
+
+@property (nonatomic, copy, readonly) NSString * contentType;
+@property (nonatomic, assign, readonly) KTVHCRange range;
+@property (nonatomic, assign, readonly) long long totalLength;
+@property (nonatomic, assign, readonly) long long currentLength;
+
+- (KTVHCDataResponse *)responseWithRange:(KTVHCRange)range;
 
 
 @end
 @end

+ 41 - 11
Carthage/Checkouts/KTVHTTPCache/KTVHTTPCache/Classes/KTVHCDataStorage/KTVHCDataResponse.m

@@ -7,22 +7,27 @@
 //
 //
 
 
 #import "KTVHCDataResponse.h"
 #import "KTVHCDataResponse.h"
-#import "KTVHCData+Internal.h"
 #import "KTVHCLog.h"
 #import "KTVHCLog.h"
 
 
 @implementation KTVHCDataResponse
 @implementation KTVHCDataResponse
 
 
 - (instancetype)initWithURL:(NSURL *)URL headers:(NSDictionary *)headers
 - (instancetype)initWithURL:(NSURL *)URL headers:(NSDictionary *)headers
 {
 {
-    if (self = [super init]) {
+    if (self = [super init])
+    {
         KTVHCLogAlloc(self);
         KTVHCLogAlloc(self);
-        self->_URL = URL;
-        self->_headers = headers;
-        self->_contentType = [self headerValueWithKey:@"Content-Type"];
-        self->_contentRangeString = [self headerValueWithKey:@"Content-Range"];
-        self->_contentLength = [self headerValueWithKey:@"Content-Length"].longLongValue;
-        self->_contentRange = KTVHCRangeWithResponseHeaderValue(self.contentRangeString, &self->_totalLength);
-        KTVHCLogDataResponse(@"%p Create data response\nURL : %@\nHeaders : %@\ncontentType : %@\ntotalLength : %lld\ncurrentLength : %lld", self, self.URL, self.headers, self.contentType, self.totalLength, self.contentLength);
+        _URL = URL;
+        _headers = headers;
+        NSMutableDictionary * headersWithoutRangeAndLength = [headers mutableCopy];
+        for (NSString * key in [self withoutHeaderKeys])
+        {
+            [headersWithoutRangeAndLength removeObjectForKey:key];
+        }
+        _headersWithoutRangeAndLength = [headersWithoutRangeAndLength copy];
+        _contentType = [self headerValueWithKey:@"Content-Type"];
+        _currentLength = [self headerValueWithKey:@"Content-Length"].longLongValue;
+        _range = KTVHCRangeWithResponseHeaderValue([self headerValueWithKey:@"Content-Range"], &_totalLength);
+        KTVHCLogDataResponse(@"%p Create data response\nURL : %@\nHeaders : %@\nheadersWithoutRangeAndLength : %@\ncontentType : %@\ntotalLength : %lld\ncurrentLength : %lld", self, self.URL, self.headers, self.headersWithoutRangeAndLength, self.contentType, self.totalLength, self.currentLength);
     }
     }
     return self;
     return self;
 }
 }
@@ -34,11 +39,36 @@
 
 
 - (NSString *)headerValueWithKey:(NSString *)key
 - (NSString *)headerValueWithKey:(NSString *)key
 {
 {
-    NSString *value = [self.headers objectForKey:key];
-    if (!value) {
+    NSString * value = [self.headers objectForKey:key];
+    if (!value)
+    {
         value = [self.headers objectForKey:[key lowercaseString]];
         value = [self.headers objectForKey:[key lowercaseString]];
     }
     }
     return value;
     return value;
 }
 }
 
 
+- (NSArray <NSString *> *)withoutHeaderKeys
+{
+    static NSArray * obj = nil;
+    static dispatch_once_t onceToken;
+    dispatch_once(&onceToken, ^{
+        obj = @[@"Content-Length",
+                @"content-length",
+                @"Content-Range",
+                @"content-range"];
+    });
+    return obj;
+}
+
+- (KTVHCDataResponse *)responseWithRange:(KTVHCRange)range
+{
+    if (!KTVHCEqualRanges(self.range, range))
+    {
+        NSDictionary * headers = KTVHCRangeFillToResponseHeaders(range, self.headers, self.totalLength);
+        KTVHCDataResponse * obj = [[KTVHCDataResponse alloc] initWithURL:self.URL headers:headers];
+        return obj;
+    }
+    return self;
+}
+
 @end
 @end

+ 20 - 9
Carthage/Checkouts/KTVHTTPCache/KTVHTTPCache/Classes/KTVHCDataStorage/KTVHCDataSourceManager.h

@@ -7,30 +7,41 @@
 //
 //
 
 
 #import <Foundation/Foundation.h>
 #import <Foundation/Foundation.h>
-#import "KTVHCDataNetworkSource.h"
 #import "KTVHCDataFileSource.h"
 #import "KTVHCDataFileSource.h"
+#import "KTVHCDataNetworkSource.h"
 
 
 @class KTVHCDataSourceManager;
 @class KTVHCDataSourceManager;
 
 
 @protocol KTVHCDataSourceManagerDelegate <NSObject>
 @protocol KTVHCDataSourceManagerDelegate <NSObject>
 
 
-- (void)ktv_sourceManagerDidPrepare:(KTVHCDataSourceManager *)sourceManager;
-- (void)ktv_sourceManagerHasAvailableData:(KTVHCDataSourceManager *)sourceManager;
-- (void)ktv_sourceManager:(KTVHCDataSourceManager *)sourceManager didFailWithError:(NSError *)error;
-- (void)ktv_sourceManager:(KTVHCDataSourceManager *)sourceManager didReceiveResponse:(KTVHCDataResponse *)response;
+- (void)sourceManagerDidPrepared:(KTVHCDataSourceManager *)sourceManager;
+- (void)sourceManagerHasAvailableData:(KTVHCDataSourceManager *)sourceManager;
+- (void)sourceManager:(KTVHCDataSourceManager *)sourceManager didFailed:(NSError *)error;
+- (void)sourceManager:(KTVHCDataSourceManager *)sourceManager didReceiveResponse:(KTVHCDataResponse *)response;
 
 
 @end
 @end
 
 
-@interface KTVHCDataSourceManager : NSObject <KTVHCDataSource>
+@interface KTVHCDataSourceManager : NSObject
 
 
 + (instancetype)new NS_UNAVAILABLE;
 + (instancetype)new NS_UNAVAILABLE;
 - (instancetype)init NS_UNAVAILABLE;
 - (instancetype)init NS_UNAVAILABLE;
 
 
-- (instancetype)initWithSources:(NSArray<id<KTVHCDataSource>> *)sources
-                       delegate:(id <KTVHCDataSourceManagerDelegate>)delegate
-                  delegateQueue:(dispatch_queue_t)delegateQueue NS_DESIGNATED_INITIALIZER;
+- (instancetype)initWithDelegate:(id <KTVHCDataSourceManagerDelegate>)delegate delegateQueue:(dispatch_queue_t)delegateQueue;
 
 
 @property (nonatomic, weak, readonly) id <KTVHCDataSourceManagerDelegate> delegate;
 @property (nonatomic, weak, readonly) id <KTVHCDataSourceManagerDelegate> delegate;
 @property (nonatomic, strong, readonly) dispatch_queue_t delegateQueue;
 @property (nonatomic, strong, readonly) dispatch_queue_t delegateQueue;
 
 
+@property (nonatomic, strong, readonly) NSError * error;
+
+@property (nonatomic, assign, readonly) BOOL didClosed;
+@property (nonatomic, assign, readonly) BOOL didPrepared;
+@property (nonatomic, assign, readonly) BOOL didFinished;
+
+- (void)putSource:(id<KTVHCDataSourceProtocol>)source;
+
+- (void)prepare;
+- (void)close;
+
+- (NSData *)readDataOfLength:(NSUInteger)length;
+
 @end
 @end

+ 91 - 121
Carthage/Checkouts/KTVHTTPCache/KTVHTTPCache/Classes/KTVHCDataStorage/KTVHCDataSourceManager.m

@@ -7,36 +7,32 @@
 //
 //
 
 
 #import "KTVHCDataSourceManager.h"
 #import "KTVHCDataSourceManager.h"
+#import "KTVHCDataSourceQueue.h"
 #import "KTVHCDataCallback.h"
 #import "KTVHCDataCallback.h"
 #import "KTVHCLog.h"
 #import "KTVHCLog.h"
 
 
 @interface KTVHCDataSourceManager () <NSLocking, KTVHCDataFileSourceDelegate, KTVHCDataNetworkSourceDelegate>
 @interface KTVHCDataSourceManager () <NSLocking, KTVHCDataFileSourceDelegate, KTVHCDataNetworkSourceDelegate>
 
 
-@property (nonatomic, strong) NSLock *coreLock;
-@property (nonatomic, strong) id <KTVHCDataSource> currentSource;
-@property (nonatomic, strong) KTVHCDataNetworkSource *currentNetworkSource;
-@property (nonatomic, strong) NSMutableArray<id<KTVHCDataSource>> *sources;
-@property (nonatomic) BOOL calledPrepare;
-@property (nonatomic) BOOL calledReceiveResponse;
+@property (nonatomic, strong) NSLock * coreLock;
+@property (nonatomic, assign) BOOL didCalledPrepare;
+@property (nonatomic, assign) BOOL didCalledReceiveResponse;
+
+@property (nonatomic, strong) KTVHCDataSourceQueue * sourceQueue;
+@property (nonatomic, strong) id <KTVHCDataSourceProtocol> currentSource;
+@property (nonatomic, strong) KTVHCDataNetworkSource * currentNetworkSource;
 
 
 @end
 @end
 
 
 @implementation KTVHCDataSourceManager
 @implementation KTVHCDataSourceManager
 
 
-@synthesize error = _error;
-@synthesize range = _range;
-@synthesize closed = _closed;
-@synthesize prepared = _prepared;
-@synthesize finished = _finished;
-@synthesize readedLength = _readedLength;
-
-- (instancetype)initWithSources:(NSArray<id<KTVHCDataSource>> *)sources delegate:(id<KTVHCDataSourceManagerDelegate>)delegate delegateQueue:(dispatch_queue_t)delegateQueue
+- (instancetype)initWithDelegate:(id <KTVHCDataSourceManagerDelegate>)delegate delegateQueue:(dispatch_queue_t)delegateQueue
 {
 {
-    if (self = [super init]) {
+    if (self = [super init])
+    {
         KTVHCLogAlloc(self);
         KTVHCLogAlloc(self);
-        self->_sources = [sources mutableCopy];
-        self->_delegate = delegate;
-        self->_delegateQueue = delegateQueue;
+        _delegate = delegate;
+        _delegateQueue = delegateQueue;
+        self.sourceQueue = [KTVHCDataSourceQueue sourceQueue];
     }
     }
     return self;
     return self;
 }
 }
@@ -47,141 +43,108 @@
     KTVHCLogDataReader(@"%p, Destory reader\nError : %@\ncurrentSource : %@\ncurrentNetworkSource : %@", self, self.error, self.currentSource, self.currentNetworkSource);
     KTVHCLogDataReader(@"%p, Destory reader\nError : %@\ncurrentSource : %@\ncurrentNetworkSource : %@", self, self.error, self.currentSource, self.currentNetworkSource);
 }
 }
 
 
+- (void)putSource:(id<KTVHCDataSourceProtocol>)source
+{
+    KTVHCLogDataSourceManager(@"%p, Put source : %@", self, source);
+    [self.sourceQueue putSource:source];
+}
+
 - (void)prepare
 - (void)prepare
 {
 {
     [self lock];
     [self lock];
-    if (self.isClosed) {
+    if (self.didClosed)
+    {
         [self unlock];
         [self unlock];
         return;
         return;
     }
     }
-    if (self.calledPrepare) {
+    if (self.didCalledPrepare)
+    {
         [self unlock];
         [self unlock];
         return;
         return;
     }
     }
-    self->_calledPrepare = YES;
+    _didCalledPrepare = YES;
     KTVHCLogDataSourceManager(@"%p, Call prepare", self);
     KTVHCLogDataSourceManager(@"%p, Call prepare", self);
-    KTVHCLogDataSourceManager(@"%p, Sort sources - Begin\nSources : %@", self, self.sources);
-    [self.sources sortUsingComparator:^NSComparisonResult(id <KTVHCDataSource> obj1, id <KTVHCDataSource> obj2) {
-        if (obj1.range.start < obj2.range.start) {
-            return NSOrderedAscending;
-        }
-        return NSOrderedDescending;
-    }];
-    KTVHCLogDataSourceManager(@"%p, Sort sources - End  \nSources : %@", self, self.sources);
-    for (id <KTVHCDataSource> obj in self.sources) {
-        if ([obj isKindOfClass:[KTVHCDataFileSource class]]) {
-            KTVHCDataFileSource *source = (KTVHCDataFileSource *)obj;
-            [source setDelegate:self delegateQueue:self.delegateQueue];
-        }
-        else if ([obj isKindOfClass:[KTVHCDataNetworkSource class]]) {
-            KTVHCDataNetworkSource *source = (KTVHCDataNetworkSource *)obj;
-            [source setDelegate:self delegateQueue:self.delegateQueue];
-        }
-    }
-    self.currentSource = self.sources.firstObject;
-    for (id<KTVHCDataSource> obj in self.sources) {
-        if ([obj isKindOfClass:[KTVHCDataNetworkSource class]]) {
-            self.currentNetworkSource = obj;
-            break;
-        }
-    }
+    [self.sourceQueue sortSources];
+    [self.sourceQueue setAllSourceDelegate:self delegateQueue:self.delegateQueue];
+    self.currentSource = [self.sourceQueue firstSource];
+    self.currentNetworkSource = [self.sourceQueue firstNetworkSource];
     KTVHCLogDataSourceManager(@"%p, Sort source\ncurrentSource : %@\ncurrentNetworkSource : %@", self, self.currentSource, self.currentNetworkSource);
     KTVHCLogDataSourceManager(@"%p, Sort source\ncurrentSource : %@\ncurrentNetworkSource : %@", self, self.currentSource, self.currentNetworkSource);
     [self.currentSource prepare];
     [self.currentSource prepare];
-    [self.currentNetworkSource prepare];
+    if (self.currentSource != self.currentNetworkSource)
+    {
+        [self.currentNetworkSource prepare];
+    }
     [self unlock];
     [self unlock];
 }
 }
 
 
 - (void)close
 - (void)close
 {
 {
     [self lock];
     [self lock];
-    if (self.isClosed) {
+    if (self.didClosed)
+    {
         [self unlock];
         [self unlock];
         return;
         return;
     }
     }
-    self->_closed = YES;
+    _didClosed = YES;
     KTVHCLogDataSourceManager(@"%p, Call close", self);
     KTVHCLogDataSourceManager(@"%p, Call close", self);
-    for (id <KTVHCDataSource> obj in self.sources) {
-        [obj close];
-    }
+    [self.sourceQueue closeAllSource];
     [self unlock];
     [self unlock];
 }
 }
 
 
 - (NSData *)readDataOfLength:(NSUInteger)length
 - (NSData *)readDataOfLength:(NSUInteger)length
 {
 {
     [self lock];
     [self lock];
-    if (self.isClosed) {
+    if (self.didClosed)
+    {
         [self unlock];
         [self unlock];
         return nil;
         return nil;
     }
     }
-    if (self.isFinished) {
+    if (self.didFinished)
+    {
         [self unlock];
         [self unlock];
         return nil;
         return nil;
     }
     }
-    if (self.error) {
+    if (self.error)
+    {
         [self unlock];
         [self unlock];
         return nil;
         return nil;
     }
     }
-    NSData *data = [self.currentSource readDataOfLength:length];
-    self->_readedLength += data.length;
+    NSData * data = [self.currentSource readDataOfLength:length];
     KTVHCLogDataSourceManager(@"%p, Read data : %lld", self, (long long)data.length);
     KTVHCLogDataSourceManager(@"%p, Read data : %lld", self, (long long)data.length);
-    if (self.currentSource.isFinished) {
-        self.currentSource = [self nextSource];
-        if (self.currentSource) {
+    if (self.currentSource.didFinished)
+    {
+        self.currentSource = [self.sourceQueue nextSource:self.currentSource];
+        if (self.currentSource)
+        {
             KTVHCLogDataSourceManager(@"%p, Switch to next source, %@", self, self.currentSource);
             KTVHCLogDataSourceManager(@"%p, Switch to next source, %@", self, self.currentSource);
-            if ([self.currentSource isKindOfClass:[KTVHCDataFileSource class]]) {
+            if ([self.currentSource isKindOfClass:[KTVHCDataFileSource class]])
+            {
                 [self.currentSource prepare];
                 [self.currentSource prepare];
             }
             }
-        } else {
+        }
+        else
+        {
             KTVHCLogDataSourceManager(@"%p, Read data did finished", self);
             KTVHCLogDataSourceManager(@"%p, Read data did finished", self);
-            self->_finished = YES;
+            _didFinished = YES;
         }
         }
     }
     }
     [self unlock];
     [self unlock];
     return data;
     return data;
 }
 }
 
 
-- (id<KTVHCDataSource>)nextSource
-{
-    NSUInteger index = [self.sources indexOfObject:self.currentSource] + 1;
-    if (index < self.sources.count) {
-        KTVHCLogDataSourceManager(@"%p, Fetch next source : %@", self, [self.sources objectAtIndex:index]);
-        return [self.sources objectAtIndex:index];
-    }
-    KTVHCLogDataSourceManager(@"%p, Fetch netxt source failed", self);
-    return nil;
-}
-
-- (KTVHCDataNetworkSource *)nextNetworkSource
-{
-    NSUInteger index = [self.sources indexOfObject:self.currentNetworkSource] + 1;
-    for (; index < self.sources.count; index++) {
-        id <KTVHCDataSource> obj = [self.sources objectAtIndex:index];
-        if ([obj isKindOfClass:[KTVHCDataNetworkSource class]]) {
-            KTVHCLogDataSourceManager(@"%p, Fetch next network source : %@", self, obj);
-            return obj;
-        }
-    }
-    KTVHCLogDataSourceManager(@"%p, Fetch netxt network source failed", self);
-    return nil;
-}
-
-#pragma mark - KTVHCDataFileSourceDelegate
-
-- (void)ktv_fileSourceDidPrepare:(KTVHCDataFileSource *)fileSource
+- (void)fileSourceDidPrepared:(KTVHCDataFileSource *)fileSource
 {
 {
     [self lock];
     [self lock];
     [self callbackForPrepared];
     [self callbackForPrepared];
     [self unlock];
     [self unlock];
 }
 }
 
 
-- (void)ktv_fileSource:(KTVHCDataFileSource *)fileSource didFailWithError:(NSError *)error
+- (void)fileSource:(KTVHCDataFileSource *)fileSource didFailed:(NSError *)error
 {
 {
     [self callbackForFailed:error];
     [self callbackForFailed:error];
 }
 }
 
 
-#pragma mark - KTVHCDataNetworkSourceDelegate
-
-- (void)ktv_networkSourceDidPrepare:(KTVHCDataNetworkSource *)networkSource
+- (void)networkSourceDidPrepared:(KTVHCDataNetworkSource *)networkSource
 {
 {
     [self lock];
     [self lock];
     [self callbackForPrepared];
     [self callbackForPrepared];
@@ -189,98 +152,105 @@
     [self unlock];
     [self unlock];
 }
 }
 
 
-- (void)ktv_networkSourceHasAvailableData:(KTVHCDataNetworkSource *)networkSource
+- (void)networkSourceHasAvailableData:(KTVHCDataNetworkSource *)networkSource
 {
 {
     [self lock];
     [self lock];
-    if ([self.delegate respondsToSelector:@selector(ktv_sourceManagerHasAvailableData:)]) {
+    if ([self.delegate respondsToSelector:@selector(sourceManagerHasAvailableData:)])
+    {
         KTVHCLogDataSourceManager(@"%p, Callback for has available data - Begin\nSource : %@", self, networkSource);
         KTVHCLogDataSourceManager(@"%p, Callback for has available data - Begin\nSource : %@", self, networkSource);
         [KTVHCDataCallback callbackWithQueue:self.delegateQueue block:^{
         [KTVHCDataCallback callbackWithQueue:self.delegateQueue block:^{
             KTVHCLogDataSourceManager(@"%p, Callback for has available data - End", self);
             KTVHCLogDataSourceManager(@"%p, Callback for has available data - End", self);
-            [self.delegate ktv_sourceManagerHasAvailableData:self];
+            [self.delegate sourceManagerHasAvailableData:self];
         }];
         }];
     }
     }
     [self unlock];
     [self unlock];
 }
 }
 
 
-- (void)ktv_networkSourceDidFinisheDownload:(KTVHCDataNetworkSource *)networkSource
+- (void)networkSourceDidFinishedDownload:(KTVHCDataNetworkSource *)networkSource
 {
 {
     [self lock];
     [self lock];
-    self.currentNetworkSource = [self nextNetworkSource];
+    self.currentNetworkSource = [self.sourceQueue nextNetworkSource:self.currentNetworkSource];
     [self.currentNetworkSource prepare];
     [self.currentNetworkSource prepare];
     [self unlock];
     [self unlock];
 }
 }
 
 
-- (void)ktv_networkSource:(KTVHCDataNetworkSource *)networkSource didFailWithError:(NSError *)error
+- (void)networkSource:(KTVHCDataNetworkSource *)networkSource didFailed:(NSError *)error
 {
 {
     [self callbackForFailed:error];
     [self callbackForFailed:error];
 }
 }
 
 
-#pragma mark - Callback
-
 - (void)callbackForPrepared
 - (void)callbackForPrepared
 {
 {
-    if (self.isClosed) {
+    if (self.didClosed)
+    {
         return;
         return;
     }
     }
-    if (self.isPrepared) {
+    if (self.didPrepared)
+    {
         return;
         return;
     }
     }
-    self->_prepared = YES;
-    if ([self.delegate respondsToSelector:@selector(ktv_sourceManagerDidPrepare:)]) {
+    _didPrepared = YES;
+    if ([self.delegate respondsToSelector:@selector(sourceManagerDidPrepared:)])
+    {
         KTVHCLogDataSourceManager(@"%p, Callback for prepared - Begin", self);
         KTVHCLogDataSourceManager(@"%p, Callback for prepared - Begin", self);
         [KTVHCDataCallback callbackWithQueue:self.delegateQueue block:^{
         [KTVHCDataCallback callbackWithQueue:self.delegateQueue block:^{
             KTVHCLogDataSourceManager(@"%p, Callback for prepared - End", self);
             KTVHCLogDataSourceManager(@"%p, Callback for prepared - End", self);
-            [self.delegate ktv_sourceManagerDidPrepare:self];
+            [self.delegate sourceManagerDidPrepared:self];
         }];
         }];
     }
     }
 }
 }
 
 
 - (void)callbackForReceiveResponse:(KTVHCDataResponse *)response
 - (void)callbackForReceiveResponse:(KTVHCDataResponse *)response
 {
 {
-    if (self.isClosed) {
+    if (self.didClosed)
+    {
         return;
         return;
     }
     }
-    if (self.calledReceiveResponse) {
+    if (self.didCalledReceiveResponse)
+    {
         return;
         return;
     }
     }
-    self->_calledReceiveResponse = YES;
-    if ([self.delegate respondsToSelector:@selector(ktv_sourceManager:didReceiveResponse:)]) {
+    _didCalledReceiveResponse = YES;
+    if ([self.delegate respondsToSelector:@selector(sourceManager:didReceiveResponse:)])
+    {
         KTVHCLogDataSourceManager(@"%p, Callback for did receive response - End", self);
         KTVHCLogDataSourceManager(@"%p, Callback for did receive response - End", self);
         [KTVHCDataCallback callbackWithQueue:self.delegateQueue block:^{
         [KTVHCDataCallback callbackWithQueue:self.delegateQueue block:^{
             KTVHCLogDataSourceManager(@"%p, Callback for did receive response - End", self);
             KTVHCLogDataSourceManager(@"%p, Callback for did receive response - End", self);
-            [self.delegate ktv_sourceManager:self didReceiveResponse:response];
+            [self.delegate sourceManager:self didReceiveResponse:response];
         }];
         }];
     }
     }
 }
 }
 
 
 - (void)callbackForFailed:(NSError *)error
 - (void)callbackForFailed:(NSError *)error
 {
 {
-    if (!error) {
+    if (!error)
+    {
         return;
         return;
     }
     }
     [self lock];
     [self lock];
-    if (self.isClosed) {
+    if (self.didClosed)
+    {
         [self unlock];
         [self unlock];
         return;
         return;
     }
     }
-    if (self.error) {
+    if (self.error)
+    {
         [self unlock];
         [self unlock];
         return;
         return;
     }
     }
-    self->_error = error;
+    _error = error;
     KTVHCLogDataSourceManager(@"failure, %d", (int)self.error.code);
     KTVHCLogDataSourceManager(@"failure, %d", (int)self.error.code);
-    if (self.error && [self.delegate respondsToSelector:@selector(ktv_sourceManager:didFailWithError:)]) {
+    if (self.error && [self.delegate respondsToSelector:@selector(sourceManager:didFailed:)])
+    {
         KTVHCLogDataSourceManager(@"%p, Callback for network source failed - Begin\nError : %@", self, self.error);
         KTVHCLogDataSourceManager(@"%p, Callback for network source failed - Begin\nError : %@", self, self.error);
         [KTVHCDataCallback callbackWithQueue:self.delegateQueue block:^{
         [KTVHCDataCallback callbackWithQueue:self.delegateQueue block:^{
             KTVHCLogDataSourceManager(@"%p, Callback for network source failed - End", self);
             KTVHCLogDataSourceManager(@"%p, Callback for network source failed - End", self);
-            [self.delegate ktv_sourceManager:self didFailWithError:self.error];
+            [self.delegate sourceManager:self didFailed:self.error];
         }];
         }];
     }
     }
     [self unlock];
     [self unlock];
 }
 }
 
 
-#pragma mark - NSLocking
-
 - (void)lock
 - (void)lock
 {
 {
     if (!self.coreLock) {
     if (!self.coreLock) {

+ 3 - 3
Carthage/Checkouts/KTVHTTPCache/KTVHTTPCache/Classes/KTVHCDataStorage/KTVHCDataStorage.h

@@ -23,7 +23,7 @@
 /**
 /**
  *  Return file path if the content did finished cache.
  *  Return file path if the content did finished cache.
  */
  */
-- (NSURL *)completeFileURLWithURL:(NSURL *)URL;
+- (NSURL *)completeFileURLIfExistedWithURL:(NSURL *)URL;
 
 
 /**
 /**
  *  Reader for certain request.
  *  Reader for certain request.
@@ -39,12 +39,12 @@
  *  Get cache item.
  *  Get cache item.
  */
  */
 - (KTVHCDataCacheItem *)cacheItemWithURL:(NSURL *)URL;
 - (KTVHCDataCacheItem *)cacheItemWithURL:(NSURL *)URL;
-- (NSArray<KTVHCDataCacheItem *> *)allCacheItems;
+- (NSArray <KTVHCDataCacheItem *> *)allCacheItems;
 
 
 /**
 /**
  *  Get cache length.
  *  Get cache length.
  */
  */
-@property (nonatomic) long long maxCacheLength;     // Default is 500M.
+@property (nonatomic, assign) long long maxCacheLength;     // Default is 500M.
 - (long long)totalCacheLength;
 - (long long)totalCacheLength;
 
 
 /**
 /**

+ 13 - 11
Carthage/Checkouts/KTVHTTPCache/KTVHTTPCache/Classes/KTVHCDataStorage/KTVHCDataStorage.m

@@ -7,7 +7,6 @@
 //
 //
 
 
 #import "KTVHCDataStorage.h"
 #import "KTVHCDataStorage.h"
-#import "KTVHCData+Internal.h"
 #import "KTVHCDataUnitPool.h"
 #import "KTVHCDataUnitPool.h"
 #import "KTVHCLog.h"
 #import "KTVHCLog.h"
 
 
@@ -15,7 +14,7 @@
 
 
 + (instancetype)storage
 + (instancetype)storage
 {
 {
-    static KTVHCDataStorage *obj = nil;
+    static KTVHCDataStorage * obj = nil;
     static dispatch_once_t onceToken;
     static dispatch_once_t onceToken;
     dispatch_once(&onceToken, ^{
     dispatch_once(&onceToken, ^{
         obj = [[self alloc] init];
         obj = [[self alloc] init];
@@ -25,37 +24,40 @@
 
 
 - (instancetype)init
 - (instancetype)init
 {
 {
-    if (self = [super init]) {
+    if (self = [super init])
+    {
         self.maxCacheLength = 500 * 1024 * 1024;
         self.maxCacheLength = 500 * 1024 * 1024;
     }
     }
     return self;
     return self;
 }
 }
 
 
-- (NSURL *)completeFileURLWithURL:(NSURL *)URL
+- (NSURL *)completeFileURLIfExistedWithURL:(NSURL *)URL
 {
 {
-    KTVHCDataUnit *unit = [[KTVHCDataUnitPool pool] unitWithURL:URL];
-    NSURL *completeURL = unit.completeURL;
+    KTVHCDataUnit * unit = [[KTVHCDataUnitPool pool] unitWithURL:URL];
+    NSURL * fileURL = unit.fileURL;
     [unit workingRelease];
     [unit workingRelease];
-    return completeURL;
+    return fileURL;
 }
 }
 
 
 - (KTVHCDataReader *)readerWithRequest:(KTVHCDataRequest *)request
 - (KTVHCDataReader *)readerWithRequest:(KTVHCDataRequest *)request
 {
 {
-    if (!request || request.URL.absoluteString.length <= 0) {
+    if (!request || request.URL.absoluteString.length <= 0)
+    {
         KTVHCLogDataStorage(@"Invaild reader request, %@", request.URL);
         KTVHCLogDataStorage(@"Invaild reader request, %@", request.URL);
         return nil;
         return nil;
     }
     }
-    KTVHCDataReader *reader = [[KTVHCDataReader alloc] initWithRequest:request];
+    KTVHCDataReader * reader = [KTVHCDataReader readerWithRequest:request];
     return reader;
     return reader;
 }
 }
 
 
 - (KTVHCDataLoader *)loaderWithRequest:(KTVHCDataRequest *)request
 - (KTVHCDataLoader *)loaderWithRequest:(KTVHCDataRequest *)request
 {
 {
-    if (!request || request.URL.absoluteString.length <= 0) {
+    if (!request || request.URL.absoluteString.length <= 0)
+    {
         KTVHCLogDataStorage(@"Invaild loader request, %@", request.URL);
         KTVHCLogDataStorage(@"Invaild loader request, %@", request.URL);
         return nil;
         return nil;
     }
     }
-    KTVHCDataLoader *loader = [[KTVHCDataLoader alloc] initWithRequest:request];
+    KTVHCDataLoader * loader = [KTVHCDataLoader loaderWithRequest:request];
     return loader;
     return loader;
 }
 }
 
 

+ 21 - 16
Carthage/Checkouts/KTVHTTPCache/KTVHTTPCache/Classes/KTVHCDataStorage/KTVHCDataUnit.h

@@ -11,9 +11,9 @@
 
 
 @class KTVHCDataUnit;
 @class KTVHCDataUnit;
 
 
-@protocol KTVHCDataUnitDelegate <NSObject>
+@protocol KTVHCDataUnitFileDelegate <NSObject>
 
 
-- (void)ktv_unitDidChangeMetadata:(KTVHCDataUnit *)unit;
+- (void)unitShouldRearchive:(KTVHCDataUnit *)unit;
 
 
 @end
 @end
 
 
@@ -22,35 +22,40 @@
 + (instancetype)new NS_UNAVAILABLE;
 + (instancetype)new NS_UNAVAILABLE;
 - (instancetype)init NS_UNAVAILABLE;
 - (instancetype)init NS_UNAVAILABLE;
 
 
-- (instancetype)initWithURL:(NSURL *)URL;
++ (instancetype)unitWithURL:(NSURL *)URL;
 
 
-@property (nonatomic, copy, readonly) NSError *error;
+@property (nonatomic, assign, readonly) BOOL valid;
 
 
-@property (nonatomic, copy, readonly) NSURL *URL;
-@property (nonatomic, copy, readonly) NSURL *completeURL;
-@property (nonatomic, copy, readonly) NSString *key;       // Unique Identifier.
-@property (nonatomic, copy, readonly) NSDictionary *responseHeaders;
-@property (nonatomic, readonly) NSTimeInterval createTimeInterval;
-@property (nonatomic, readonly) NSTimeInterval lastItemCreateInterval;
-@property (nonatomic, readonly) long long totalLength;
-@property (nonatomic, readonly) long long cacheLength;
-@property (nonatomic, readonly) long long validLength;
+@property (nonatomic, copy, readonly) NSURL * URL;
+@property (nonatomic, copy, readonly) NSURL * fileURL;
+@property (nonatomic, copy, readonly) NSString * key;       // Unique Identifier.
+
+@property (nonatomic, assign, readonly) NSTimeInterval createTimeInterval;
+@property (nonatomic, assign, readonly) NSTimeInterval lastItemCreateInterval;
+
+@property (nonatomic, copy, readonly) NSDictionary * requestHeaders;
+@property (nonatomic, copy, readonly) NSDictionary * responseHeaders;
+
+@property (nonatomic, assign, readonly) long long totalLength;
+@property (nonatomic, assign, readonly) long long cacheLength;
+@property (nonatomic, assign, readonly) long long validLength;
 
 
 /**
 /**
  *  Unit Item
  *  Unit Item
  */
  */
-- (NSArray<KTVHCDataUnitItem *> *)unitItems;
+- (NSArray <KTVHCDataUnitItem *> *)unitItems;
 - (void)insertUnitItem:(KTVHCDataUnitItem *)unitItem;
 - (void)insertUnitItem:(KTVHCDataUnitItem *)unitItem;
 
 
 /**
 /**
  *  Info Sync
  *  Info Sync
  */
  */
+- (void)updateRequestHeaders:(NSDictionary *)requestHeaders;
 - (void)updateResponseHeaders:(NSDictionary *)responseHeaders totalLength:(long long)totalLength;
 - (void)updateResponseHeaders:(NSDictionary *)responseHeaders totalLength:(long long)totalLength;
 
 
 /**
 /**
  *  Working
  *  Working
  */
  */
-@property (nonatomic, readonly) NSInteger workingCount;
+@property (nonatomic, assign, readonly) NSInteger workingCount;
 
 
 - (void)workingRetain;
 - (void)workingRetain;
 - (void)workingRelease;
 - (void)workingRelease;
@@ -58,7 +63,7 @@
 /**
 /**
  *  File Control
  *  File Control
  */
  */
-@property (nonatomic, weak) id <KTVHCDataUnitDelegate> delegate;
+@property (nonatomic, weak) id <KTVHCDataUnitFileDelegate> fileDelegate;
 
 
 - (void)deleteFiles;
 - (void)deleteFiles;
 
 

+ 175 - 127
Carthage/Checkouts/KTVHTTPCache/KTVHTTPCache/Classes/KTVHCDataStorage/KTVHCDataUnit.m

@@ -7,49 +7,61 @@
 //
 //
 
 
 #import "KTVHCDataUnit.h"
 #import "KTVHCDataUnit.h"
-#import "KTVHCPathTool.h"
-#import "KTVHCURLTool.h"
-#import "KTVHCError.h"
+#import "KTVHCURLTools.h"
+#import "KTVHCPathTools.h"
 #import "KTVHCLog.h"
 #import "KTVHCLog.h"
 
 
 @interface KTVHCDataUnit ()
 @interface KTVHCDataUnit ()
 
 
-@property (nonatomic, strong) NSRecursiveLock *coreLock;
-@property (nonatomic, strong) NSMutableArray<KTVHCDataUnitItem *> *unitItemsInternal;
-@property (nonatomic, strong) NSMutableArray<NSArray<KTVHCDataUnitItem *> *> *lockingUnitItems;
+@property (nonatomic, strong) NSRecursiveLock * coreLock;
+@property (nonatomic, strong) NSMutableArray <KTVHCDataUnitItem *> * unitItemsInternal;
+@property (nonatomic, strong) NSMutableArray <NSArray <KTVHCDataUnitItem *> *> * lockingUnitItems;
 
 
 @end
 @end
 
 
 @implementation KTVHCDataUnit
 @implementation KTVHCDataUnit
 
 
++ (instancetype)unitWithURL:(NSURL *)URL
+{
+    return [[self alloc] initWithURL:URL];
+}
+
 - (instancetype)initWithURL:(NSURL *)URL
 - (instancetype)initWithURL:(NSURL *)URL
 {
 {
-    if (self = [super init]) {
-        self->_URL = [URL copy];
-        self->_key = [[KTVHCURLTool tool] keyWithURL:self.URL];
-        self->_createTimeInterval = [NSDate date].timeIntervalSince1970;
-        [self commonInit];
+    if (self = [super init])
+    {
+        KTVHCLogAlloc(self);
+        _URL = URL;
+        _key = [KTVHCURLTools keyWithURL:self.URL];
+        _createTimeInterval = [NSDate date].timeIntervalSince1970;
+        _valid = YES;
+        [self prepare];
     }
     }
     return self;
     return self;
 }
 }
 
 
 - (instancetype)initWithCoder:(NSCoder *)aDecoder
 - (instancetype)initWithCoder:(NSCoder *)aDecoder
 {
 {
-    if (self = [super init]) {
+    if (self = [super init])
+    {
+        KTVHCLogAlloc(self);
         @try {
         @try {
-            self->_URL = [NSURL URLWithString:[aDecoder decodeObjectForKey:@"URLString"]];
-            self->_key = [aDecoder decodeObjectForKey:@"uniqueIdentifier"];
-        } @catch (NSException *exception) {
-            self->_error = [KTVHCError errorForException:exception];
+            _URL = [NSURL URLWithString:[aDecoder decodeObjectForKey:@"URLString"]];
+            _key = [aDecoder decodeObjectForKey:@"uniqueIdentifier"];
+            _valid = YES;
+        } @catch (NSException * exception) {
+            _valid = NO;
         }
         }
         @try {
         @try {
-            self->_createTimeInterval = [[aDecoder decodeObjectForKey:@"createTimeInterval"] doubleValue];
-            self->_responseHeaders = [aDecoder decodeObjectForKey:@"responseHeaderFields"];
-            self->_totalLength = [[aDecoder decodeObjectForKey:@"totalContentLength"] longLongValue];
-            self->_unitItemsInternal = [[aDecoder decodeObjectForKey:@"unitItems"] mutableCopy];
-            [self commonInit];
-        } @catch (NSException *exception) {
-            self->_error = [KTVHCError errorForException:exception];
+            _createTimeInterval = [[aDecoder decodeObjectForKey:@"createTimeInterval"] doubleValue];
+            _requestHeaders = [aDecoder decodeObjectForKey:@"requestHeaderFields"];
+            _responseHeaders = [aDecoder decodeObjectForKey:@"responseHeaderFields"];
+            _totalLength = [[aDecoder decodeObjectForKey:@"totalContentLength"] longLongValue];
+            self.unitItemsInternal = [aDecoder decodeObjectForKey:@"unitItems"];
+            [self prepare];
+            _valid = _valid && YES;
+        } @catch (NSException * exception) {
+            _valid = NO;
         }
         }
     }
     }
     return self;
     return self;
@@ -61,6 +73,7 @@
     [aCoder encodeObject:self.URL.absoluteString forKey:@"URLString"];
     [aCoder encodeObject:self.URL.absoluteString forKey:@"URLString"];
     [aCoder encodeObject:self.key forKey:@"uniqueIdentifier"];
     [aCoder encodeObject:self.key forKey:@"uniqueIdentifier"];
     [aCoder encodeObject:@(self.createTimeInterval) forKey:@"createTimeInterval"];
     [aCoder encodeObject:@(self.createTimeInterval) forKey:@"createTimeInterval"];
+    [aCoder encodeObject:self.requestHeaders forKey:@"requestHeaderFields"];
     [aCoder encodeObject:self.responseHeaders forKey:@"responseHeaderFields"];
     [aCoder encodeObject:self.responseHeaders forKey:@"responseHeaderFields"];
     [aCoder encodeObject:@(self.totalLength) forKey:@"totalContentLength"];
     [aCoder encodeObject:@(self.totalLength) forKey:@"totalContentLength"];
     [aCoder encodeObject:self.unitItemsInternal forKey:@"unitItems"];
     [aCoder encodeObject:self.unitItemsInternal forKey:@"unitItems"];
@@ -72,53 +85,63 @@
     KTVHCLogDealloc(self);
     KTVHCLogDealloc(self);
 }
 }
 
 
-- (void)commonInit
+- (void)prepare
 {
 {
-    KTVHCLogAlloc(self);
     [self lock];
     [self lock];
-    if (!self.unitItemsInternal) {
+    if (!self.unitItemsInternal)
+    {
         self.unitItemsInternal = [NSMutableArray array];
         self.unitItemsInternal = [NSMutableArray array];
     }
     }
-    NSMutableArray *removal = [NSMutableArray array];
-    for (KTVHCDataUnitItem *obj in self.unitItemsInternal) {
-        if (obj.length == 0) {
-            [KTVHCPathTool deleteFileAtPath:obj.absolutePath];
-            [removal addObject:obj];
+    if (self.unitItemsInternal.count > 0)
+    {
+        NSMutableArray * removeArray = [NSMutableArray array];
+        for (KTVHCDataUnitItem * obj in self.unitItemsInternal)
+        {
+            if (obj.length <= 0)
+            {
+                [KTVHCPathTools deleteFileAtPath:obj.absolutePath];
+                [removeArray addObject:obj];
+            }
         }
         }
+        [self.unitItemsInternal removeObjectsInArray:removeArray];
+        [removeArray removeAllObjects];
+        [self sortUnitItems];
     }
     }
-    [self.unitItemsInternal removeObjectsInArray:removal];
-    [self sortUnitItems];
-    KTVHCLogDataUnit(@"%p, Create Unit\nURL : %@\nkey : %@\ntimeInterval : %@\ntotalLength : %lld\ncacheLength : %lld\nvaildLength : %lld\nresponseHeaders : %@\nunitItems : %@", self, self.URL, self.key, [NSDate dateWithTimeIntervalSince1970:self.createTimeInterval], self.totalLength, self.cacheLength, self.validLength, self.responseHeaders, self.unitItemsInternal);
+    KTVHCLogDataUnit(@"%p, Create Unit\nURL : %@\nkey : %@\ntimeInterval : %@\ntotalLength : %lld\ncacheLength : %lld\nvaildLength : %lld\nrequestHeaders : %@\nresponseHeaders : %@\nunitItems : %@", self, self.URL, self.key, [NSDate dateWithTimeIntervalSince1970:self.createTimeInterval], self.totalLength, self.cacheLength, self.validLength, self.requestHeaders, self.responseHeaders, self.unitItemsInternal);
     [self unlock];
     [self unlock];
 }
 }
 
 
 - (void)sortUnitItems
 - (void)sortUnitItems
 {
 {
     [self lock];
     [self lock];
-    KTVHCLogDataUnit(@"%p, Sort unitItems - Begin\n%@", self, self.unitItemsInternal);
-    [self.unitItemsInternal sortUsingComparator:^NSComparisonResult(KTVHCDataUnitItem *obj1, KTVHCDataUnitItem *obj2) {
+    KTVHCLogDataSourceQueue(@"%p, Sort unitItems - Begin\n%@", self, self.unitItemsInternal);
+    [self.unitItemsInternal sortUsingComparator:^NSComparisonResult(KTVHCDataUnitItem * obj1, KTVHCDataUnitItem * obj2) {
         NSComparisonResult result = NSOrderedDescending;
         NSComparisonResult result = NSOrderedDescending;
-        if (obj1.offset < obj2.offset) {
+        if (obj1.offset < obj2.offset)
+        {
             result = NSOrderedAscending;
             result = NSOrderedAscending;
-        } else if ((obj1.offset == obj2.offset) && (obj1.length > obj2.length)) {
+        }
+        else if ((obj1.offset == obj2.offset) && (obj1.length > obj2.length))
+        {
             result = NSOrderedAscending;
             result = NSOrderedAscending;
         }
         }
         return result;
         return result;
     }];
     }];
-    KTVHCLogDataUnit(@"%p, Sort unitItems - End  \n%@", self, self.unitItemsInternal);
+    KTVHCLogDataSourceQueue(@"%p, Sort unitItems - End  \n%@", self, self.unitItemsInternal);
     [self unlock];
     [self unlock];
 }
 }
 
 
-- (NSArray<KTVHCDataUnitItem *> *)unitItems
+- (NSArray <KTVHCDataUnitItem *> *)unitItems
 {
 {
     [self lock];
     [self lock];
-    NSMutableArray *objs = [NSMutableArray array];
-    for (KTVHCDataUnitItem *obj in self.unitItemsInternal) {
+    NSMutableArray * objs = [NSMutableArray array];
+    for (KTVHCDataUnitItem * obj in self.unitItemsInternal)
+    {
         [objs addObject:[obj copy]];
         [objs addObject:[obj copy]];
     }
     }
-    KTVHCLogDataUnit(@"%p, Get unitItems\n%@", self, self.unitItemsInternal);
+    KTVHCLogDataSourceQueue(@"%p, Get unitItems\n%@", self, self.unitItemsInternal);
     [self unlock];
     [self unlock];
-    return objs;
+    return [objs copy];
 }
 }
 
 
 - (void)insertUnitItem:(KTVHCDataUnitItem *)unitItem
 - (void)insertUnitItem:(KTVHCDataUnitItem *)unitItem
@@ -128,58 +151,48 @@
     [self sortUnitItems];
     [self sortUnitItems];
     KTVHCLogDataUnit(@"%p, Insert unitItem, %@", self, unitItem);
     KTVHCLogDataUnit(@"%p, Insert unitItem, %@", self, unitItem);
     [self unlock];
     [self unlock];
-    [self.delegate ktv_unitDidChangeMetadata:self];
+    [self.fileDelegate unitShouldRearchive:self];
+}
+
+- (void)updateRequestHeaders:(NSDictionary *)requestHeaders
+{
+    [self lock];
+    _requestHeaders = requestHeaders;
+    KTVHCLogDataUnit(@"%p, Update requestHeaders\n%@", self, self.requestHeaders);
+    [self unlock];
+    [self.fileDelegate unitShouldRearchive:self];
 }
 }
 
 
 - (void)updateResponseHeaders:(NSDictionary *)responseHeaders totalLength:(long long)totalLength
 - (void)updateResponseHeaders:(NSDictionary *)responseHeaders totalLength:(long long)totalLength
 {
 {
     [self lock];
     [self lock];
-    BOOL needs = NO;
-    static NSArray *whiteList = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        whiteList = @[@"Accept-Ranges",
-                      @"Connection",
-                      @"Content-Type",
-                      @"Server"];
-    });
-    NSMutableDictionary *headers = [NSMutableDictionary dictionary];
-    for (NSString *key in whiteList) {
-        NSString *value = [responseHeaders objectForKey:key];
-        if (value) {
-            [headers setObject:value forKey:key];
-        }
-    }
-    if (self.totalLength != totalLength || ![self.responseHeaders isEqualToDictionary:headers]) {
-        self->_responseHeaders = headers;
-        self->_totalLength = totalLength;
-        needs = YES;
-    }
+    _responseHeaders = responseHeaders;
+    _totalLength = totalLength;
     KTVHCLogDataUnit(@"%p, Update responseHeaders\ntotalLength : %lld\n%@", self, self.totalLength, self.responseHeaders);
     KTVHCLogDataUnit(@"%p, Update responseHeaders\ntotalLength : %lld\n%@", self, self.totalLength, self.responseHeaders);
     [self unlock];
     [self unlock];
-    if (needs) {
-        [self.delegate ktv_unitDidChangeMetadata:self];
-    }
+    [self.fileDelegate unitShouldRearchive:self];
 }
 }
 
 
-- (NSURL *)completeURL
+- (NSURL *)fileURL
 {
 {
     [self lock];
     [self lock];
-    NSURL *completeURL = nil;
-    KTVHCDataUnitItem *item = self.unitItemsInternal.firstObject;
-    if (item.offset == 0 && item.length > 0 && item.length == self.totalLength) {
-        completeURL = [NSURL fileURLWithPath:item.absolutePath];
-        KTVHCLogDataUnit(@"%p, Get file path\n%@", self, completeURL);
+    NSURL * fileURL = nil;
+    KTVHCDataUnitItem * item = self.unitItemsInternal.firstObject;
+    if (item.offset == 0 && item.length > 0 && item.length == self.totalLength)
+    {
+        fileURL = [NSURL fileURLWithPath:item.absolutePath];
+        KTVHCLogDataUnit(@"%p, Get file path\n%@", self, fileURL);
     }
     }
     [self unlock];
     [self unlock];
-    return completeURL;
+    return fileURL;
 }
 }
 
 
 - (long long)cacheLength
 - (long long)cacheLength
 {
 {
     [self lock];
     [self lock];
     long long length = 0;
     long long length = 0;
-    for (KTVHCDataUnitItem *obj in self.unitItemsInternal) {
+    for (KTVHCDataUnitItem * obj in self.unitItemsInternal)
+    {
         length += obj.length;
         length += obj.length;
     }
     }
     [self unlock];
     [self unlock];
@@ -191,7 +204,8 @@
     [self lock];
     [self lock];
     long long offset = 0;
     long long offset = 0;
     long long length = 0;
     long long length = 0;
-    for (KTVHCDataUnitItem *obj in self.unitItemsInternal) {
+    for (KTVHCDataUnitItem * obj in self.unitItemsInternal)
+    {
         long long invalidLength = MAX(offset - obj.offset, 0);
         long long invalidLength = MAX(offset - obj.offset, 0);
         long long vaildLength = MAX(obj.length - invalidLength, 0);
         long long vaildLength = MAX(obj.length - invalidLength, 0);
         offset = MAX(offset, obj.offset + obj.length);
         offset = MAX(offset, obj.offset + obj.length);
@@ -205,8 +219,10 @@
 {
 {
     [self lock];
     [self lock];
     NSTimeInterval timeInterval = self.createTimeInterval;
     NSTimeInterval timeInterval = self.createTimeInterval;
-    for (KTVHCDataUnitItem *obj in self.unitItemsInternal) {
-        if (obj.createTimeInterval > timeInterval) {
+    for (KTVHCDataUnitItem * obj in self.unitItemsInternal)
+    {
+        if (obj.createTimeInterval > timeInterval)
+        {
             timeInterval = obj.createTimeInterval;
             timeInterval = obj.createTimeInterval;
         }
         }
     }
     }
@@ -217,31 +233,37 @@
 - (void)workingRetain
 - (void)workingRetain
 {
 {
     [self lock];
     [self lock];
-    self->_workingCount += 1;
+    _workingCount++;
     KTVHCLogDataUnit(@"%p, Working retain  : %ld", self, (long)self.workingCount);
     KTVHCLogDataUnit(@"%p, Working retain  : %ld", self, (long)self.workingCount);
     [self unlock];
     [self unlock];
 }
 }
 
 
 - (void)workingRelease
 - (void)workingRelease
 {
 {
+    BOOL mergeSuccess = NO;
     [self lock];
     [self lock];
-    self->_workingCount -= 1;
+    _workingCount--;
     KTVHCLogDataUnit(@"%p, Working release : %ld", self, (long)self.workingCount);
     KTVHCLogDataUnit(@"%p, Working release : %ld", self, (long)self.workingCount);
-    BOOL needs = [self mergeFilesIfNeeded];
+    if (self.workingCount <= 0)
+    {
+        mergeSuccess = [self mergeFilesIfNeeded];
+    }
     [self unlock];
     [self unlock];
-    if (needs) {
-        [self.delegate ktv_unitDidChangeMetadata:self];
+    if (mergeSuccess)
+    {
+        [self.fileDelegate unitShouldRearchive:self];
     }
     }
 }
 }
 
 
 - (void)deleteFiles
 - (void)deleteFiles
 {
 {
-    if (!self.URL) {
+    if (!self.URL)
+    {
         return;
         return;
     }
     }
     [self lock];
     [self lock];
-    NSString *path = [KTVHCPathTool directoryPathWithURL:self.URL];
-    [KTVHCPathTool deleteDirectoryAtPath:path];
+    NSString * path = [KTVHCPathTools directoryPathWithURL:self.URL];
+    [KTVHCPathTools deleteDirectoryAtPath:path];
     KTVHCLogDataUnit(@"%p, Delete files", self);
     KTVHCLogDataUnit(@"%p, Delete files", self);
     [self unlock];
     [self unlock];
 }
 }
@@ -249,56 +271,72 @@
 - (BOOL)mergeFilesIfNeeded
 - (BOOL)mergeFilesIfNeeded
 {
 {
     [self lock];
     [self lock];
-    if (self.workingCount > 0 || self.totalLength == 0 || self.unitItemsInternal.count == 0) {
+    if (self.workingCount > 0 || self.totalLength <= 0 || self.unitItemsInternal.count <= 0)
+    {
         [self unlock];
         [self unlock];
         return NO;
         return NO;
     }
     }
-    NSString *path = [KTVHCPathTool completeFilePathWithURL:self.URL];
-    if ([self.unitItemsInternal.firstObject.absolutePath isEqualToString:path]) {
+    NSString * path = [KTVHCPathTools completeFilePathWithURL:self.URL];
+    if ([self.unitItemsInternal.firstObject.absolutePath isEqualToString:path])
+    {
         [self unlock];
         [self unlock];
         return NO;
         return NO;
     }
     }
-    if (self.totalLength != self.validLength) {
+    if (self.totalLength != self.validLength)
+    {
         [self unlock];
         [self unlock];
         return NO;
         return NO;
     }
     }
-    NSError *error = nil;
+    BOOL failed = NO;
     long long offset = 0;
     long long offset = 0;
-    [KTVHCPathTool deleteFileAtPath:path];
-    [KTVHCPathTool createFileAtPath:path];
-    NSFileHandle *writingHandle = [NSFileHandle fileHandleForWritingAtPath:path];
-    for (KTVHCDataUnitItem *obj in self.unitItemsInternal) {
-        if (error) {
+    [KTVHCPathTools deleteFileAtPath:path];
+    [KTVHCPathTools createFileAtPath:path];
+    NSFileHandle * writingHandle = [NSFileHandle fileHandleForWritingAtPath:path];
+    for (KTVHCDataUnitItem * obj in self.unitItemsInternal)
+    {
+        if (failed)
+        {
             break;
             break;
         }
         }
         NSAssert(offset >= obj.offset, @"invaild unit item.");
         NSAssert(offset >= obj.offset, @"invaild unit item.");
-        if (offset >= (obj.offset + obj.length)) {
+        if (offset >= (obj.offset + obj.length))
+        {
             KTVHCLogDataUnit(@"%p, Merge files continue", self);
             KTVHCLogDataUnit(@"%p, Merge files continue", self);
             continue;
             continue;
         }
         }
-        NSFileHandle *readingHandle = [NSFileHandle fileHandleForReadingAtPath:obj.absolutePath];
-        @try {
+        NSFileHandle * readingHandle = [NSFileHandle fileHandleForReadingAtPath:obj.absolutePath];
+        @try
+        {
             [readingHandle seekToFileOffset:offset - obj.offset];
             [readingHandle seekToFileOffset:offset - obj.offset];
-        } @catch (NSException *exception) {
+        }
+        @catch (NSException * exception)
+        {
             KTVHCLogDataUnit(@"%p, Merge files seek exception\n%@", self, exception);
             KTVHCLogDataUnit(@"%p, Merge files seek exception\n%@", self, exception);
-            error = [KTVHCError errorForException:exception];
+            failed = YES;
         }
         }
-        if (error) {
+        if (failed)
+        {
             break;
             break;
         }
         }
-        while (!error) {
-            @autoreleasepool {
-                NSData *data = [readingHandle readDataOfLength:1024 * 1024 * 1];
-                if (data.length == 0) {
+        while (!failed)
+        {
+            @autoreleasepool
+            {
+                NSData * data = [readingHandle readDataOfLength:1024 * 1024 * 1];
+                if (data.length <= 0)
+                {
                     KTVHCLogDataUnit(@"%p, Merge files break", self);
                     KTVHCLogDataUnit(@"%p, Merge files break", self);
                     break;
                     break;
                 }
                 }
                 KTVHCLogDataUnit(@"%p, Merge write data : %lld", self, (long long)data.length);
                 KTVHCLogDataUnit(@"%p, Merge write data : %lld", self, (long long)data.length);
-                @try {
+                @try
+                {
                     [writingHandle writeData:data];
                     [writingHandle writeData:data];
-                } @catch (NSException *exception) {
+                }
+                @catch (NSException * exception)
+                {
                     KTVHCLogDataUnit(@"%p, Merge files write exception\n%@", self, exception);
                     KTVHCLogDataUnit(@"%p, Merge files write exception\n%@", self, exception);
-                    error = [KTVHCError errorForException:exception];
+                    failed = YES;
                 }
                 }
             }
             }
         }
         }
@@ -306,23 +344,28 @@
         offset = obj.offset + obj.length;
         offset = obj.offset + obj.length;
         KTVHCLogDataUnit(@"%p, Merge next : %lld", self, offset);
         KTVHCLogDataUnit(@"%p, Merge next : %lld", self, offset);
     }
     }
-    @try {
+    @try
+    {
         [writingHandle synchronizeFile];
         [writingHandle synchronizeFile];
         [writingHandle closeFile];
         [writingHandle closeFile];
-    } @catch (NSException *exception) {
-        KTVHCLogDataUnit(@"%p, Merge files close exception, %@", self, exception);
-        error = [KTVHCError errorForException:exception];
+    }
+    @catch (NSException * exception)
+    {
+        KTVHCLogDataUnit(@"%p, Merge files close exception, %d\n%@", self, failed, exception);
+        failed = YES;
     }
     }
     KTVHCLogDataUnit(@"%p, Merge finished\ntotalLength : %lld\noffset : %lld", self, self.totalLength, offset);
     KTVHCLogDataUnit(@"%p, Merge finished\ntotalLength : %lld\noffset : %lld", self, self.totalLength, offset);
-    if (error || [KTVHCPathTool sizeAtPath:path] != self.totalLength) {
-        [KTVHCPathTool deleteFileAtPath:path];
+    if (failed || [KTVHCPathTools sizeOfItemAtPath:path] != self.totalLength)
+    {
+        [KTVHCPathTools deleteFileAtPath:path];
         [self unlock];
         [self unlock];
         return NO;
         return NO;
     }
     }
     KTVHCLogDataUnit(@"%p, Merge replace items", self);
     KTVHCLogDataUnit(@"%p, Merge replace items", self);
-    KTVHCDataUnitItem *item = [[KTVHCDataUnitItem alloc] initWithPath:path];
-    for (KTVHCDataUnitItem *obj in self.unitItemsInternal) {
-        [KTVHCPathTool deleteFileAtPath:obj.absolutePath];
+    KTVHCDataUnitItem * item = [[KTVHCDataUnitItem alloc] initWithPath:path offset:0];
+    for (KTVHCDataUnitItem * obj in self.unitItemsInternal)
+    {
+        [KTVHCPathTools deleteFileAtPath:obj.absolutePath];
     }
     }
     [self.unitItemsInternal removeAllObjects];
     [self.unitItemsInternal removeAllObjects];
     [self.unitItemsInternal addObject:item];
     [self.unitItemsInternal addObject:item];
@@ -332,28 +375,33 @@
 
 
 - (void)lock
 - (void)lock
 {
 {
-    if (!self.coreLock) {
+    if (!self.coreLock)
+    {
         self.coreLock = [[NSRecursiveLock alloc] init];
         self.coreLock = [[NSRecursiveLock alloc] init];
     }
     }
     [self.coreLock lock];
     [self.coreLock lock];
-    if (!self.lockingUnitItems) {
+    if (!self.lockingUnitItems)
+    {
         self.lockingUnitItems = [NSMutableArray array];
         self.lockingUnitItems = [NSMutableArray array];
     }
     }
-    NSArray<KTVHCDataUnitItem *> *objs = [NSArray arrayWithArray:self.unitItemsInternal];
+    NSArray <KTVHCDataUnitItem *> * objs = [NSArray arrayWithArray:self.unitItemsInternal];
     [self.lockingUnitItems addObject:objs];
     [self.lockingUnitItems addObject:objs];
-    for (KTVHCDataUnitItem *obj in objs) {
+    for (KTVHCDataUnitItem * obj in objs)
+    {
         [obj lock];
         [obj lock];
     }
     }
 }
 }
 
 
 - (void)unlock
 - (void)unlock
 {
 {
-    NSArray<KTVHCDataUnitItem *> *objs = self.lockingUnitItems.lastObject;
+    NSArray <KTVHCDataUnitItem *> * objs = self.lockingUnitItems.lastObject;
     [self.lockingUnitItems removeLastObject];
     [self.lockingUnitItems removeLastObject];
-    if (self.lockingUnitItems.count <= 0) {
+    if (self.lockingUnitItems.count <= 0)
+    {
         self.lockingUnitItems = nil;
         self.lockingUnitItems = nil;
     }
     }
-    for (KTVHCDataUnitItem *obj in objs) {
+    for (KTVHCDataUnitItem * obj in objs)
+    {
         [obj unlock];
         [obj unlock];
     }
     }
     [self.coreLock unlock];
     [self.coreLock unlock];

+ 10 - 8
Carthage/Checkouts/KTVHTTPCache/KTVHTTPCache/Classes/KTVHCDataStorage/KTVHCDataUnitItem.h

@@ -11,16 +11,18 @@
 @interface KTVHCDataUnitItem : NSObject <NSCopying, NSCoding, NSLocking>
 @interface KTVHCDataUnitItem : NSObject <NSCopying, NSCoding, NSLocking>
 
 
 + (instancetype)new NS_UNAVAILABLE;
 + (instancetype)new NS_UNAVAILABLE;
+- (instancetype)init NS_UNAVAILABLE;
 
 
-- (instancetype)initWithPath:(NSString *)path;
-- (instancetype)initWithPath:(NSString *)path offset:(uint64_t)offset;
+- (instancetype)initWithPath:(NSString *)path offset:(long long)offset;
 
 
-@property (nonatomic, copy, readonly) NSString *relativePath;
-@property (nonatomic, copy, readonly) NSString *absolutePath;
-@property (nonatomic, readonly) NSTimeInterval createTimeInterval;
-@property (nonatomic, readonly) long long offset;
-@property (nonatomic, readonly) long long length;
+@property (nonatomic, assign, readonly) NSTimeInterval createTimeInterval;
 
 
-- (void)updateLength:(long long)length;
+@property (nonatomic, copy, readonly) NSString * relativePath;
+@property (nonatomic, copy, readonly) NSString * absolutePath;
+
+@property (nonatomic, assign, readonly) long long offset;
+@property (nonatomic, assign, readonly) long long length;
+
+- (void)setLength:(long long)length;
 
 
 @end
 @end

+ 31 - 25
Carthage/Checkouts/KTVHTTPCache/KTVHTTPCache/Classes/KTVHCDataStorage/KTVHCDataUnitItem.m

@@ -7,12 +7,12 @@
 //
 //
 
 
 #import "KTVHCDataUnitItem.h"
 #import "KTVHCDataUnitItem.h"
-#import "KTVHCPathTool.h"
+#import "KTVHCPathTools.h"
 #import "KTVHCLog.h"
 #import "KTVHCLog.h"
 
 
 @interface KTVHCDataUnitItem ()
 @interface KTVHCDataUnitItem ()
 
 
-@property (nonatomic, strong) NSRecursiveLock *coreLock;
+@property (nonatomic, strong) NSRecursiveLock * coreLock;
 
 
 @end
 @end
 
 
@@ -21,7 +21,7 @@
 - (id)copyWithZone:(NSZone *)zone
 - (id)copyWithZone:(NSZone *)zone
 {
 {
     [self lock];
     [self lock];
-    KTVHCDataUnitItem *obj = [[KTVHCDataUnitItem alloc] init];
+    KTVHCDataUnitItem * obj = [[KTVHCDataUnitItem alloc] initForCopy];
     obj->_relativePath = self.relativePath;
     obj->_relativePath = self.relativePath;
     obj->_absolutePath = self.absolutePath;
     obj->_absolutePath = self.absolutePath;
     obj->_createTimeInterval = self.createTimeInterval;
     obj->_createTimeInterval = self.createTimeInterval;
@@ -31,33 +31,37 @@
     return obj;
     return obj;
 }
 }
 
 
-- (instancetype)initWithPath:(NSString *)path
+- (instancetype)initForCopy
 {
 {
-    return [self initWithPath:path offset:0];
+    if (self = [super init])
+    {
+        
+    }
+    return self;
 }
 }
 
 
-- (instancetype)initWithPath:(NSString *)path offset:(uint64_t)offset
+- (instancetype)initWithPath:(NSString *)path offset:(long long)offset
 {
 {
-    if (self = [super init]) {
-        self->_createTimeInterval = [NSDate date].timeIntervalSince1970;
-        self->_relativePath = [KTVHCPathTool converToRelativePath:path];
-        self->_absolutePath = [KTVHCPathTool converToAbsoultePath:path];
-        self->_offset = offset;
-        self->_length = [KTVHCPathTool sizeAtPath:self.absolutePath];
-        [self commonInit];
+    if (self = [super init])
+    {
+        KTVHCLogAlloc(self);
+        _createTimeInterval = [NSDate date].timeIntervalSince1970;
+        _relativePath = [KTVHCPathTools relativePathWithAbsoultePath:path];
+        _offset = offset;
+        [self prepare];
     }
     }
     return self;
     return self;
 }
 }
 
 
 - (instancetype)initWithCoder:(NSCoder *)aDecoder
 - (instancetype)initWithCoder:(NSCoder *)aDecoder
 {
 {
-    if (self = [super init]) {
-        self->_createTimeInterval = [[aDecoder decodeObjectForKey:@"createTimeInterval"] doubleValue];
-        self->_relativePath = [aDecoder decodeObjectForKey:@"relativePath"];
-        self->_absolutePath = [KTVHCPathTool converToAbsoultePath:self.relativePath];
-        self->_offset = [[aDecoder decodeObjectForKey:@"offset"] longLongValue];
-        self->_length = [KTVHCPathTool sizeAtPath:self.absolutePath];
-        [self commonInit];
+    if (self = [super init])
+    {
+        KTVHCLogAlloc(self);
+        _createTimeInterval = [[aDecoder decodeObjectForKey:@"createTimeInterval"] doubleValue];
+        _relativePath = [aDecoder decodeObjectForKey:@"relativePath"];
+        _offset = [[aDecoder decodeObjectForKey:@"offset"] longLongValue];
+        [self prepare];
     }
     }
     return self;
     return self;
 }
 }
@@ -74,23 +78,25 @@
     KTVHCLogDealloc(self);
     KTVHCLogDealloc(self);
 }
 }
 
 
-- (void)commonInit
+- (void)prepare
 {
 {
-    KTVHCLogAlloc(self);
+    _absolutePath = [KTVHCPathTools absoultePathWithRelativePath:self.relativePath];
+    self.length = [KTVHCPathTools sizeOfItemAtPath:self.absolutePath];
     KTVHCLogDataUnitItem(@"%p, Create Unit Item\nabsolutePath : %@\nrelativePath : %@\nOffset : %lld\nLength : %lld", self, self.absolutePath, self.relativePath, self.offset, self.length);
     KTVHCLogDataUnitItem(@"%p, Create Unit Item\nabsolutePath : %@\nrelativePath : %@\nOffset : %lld\nLength : %lld", self, self.absolutePath, self.relativePath, self.offset, self.length);
 }
 }
 
 
-- (void)updateLength:(long long)length
+- (void)setLength:(long long)length
 {
 {
     [self lock];
     [self lock];
-    self->_length = length;
+    _length = length;
     KTVHCLogDataUnitItem(@"%p, Set length : %lld", self, length);
     KTVHCLogDataUnitItem(@"%p, Set length : %lld", self, length);
     [self unlock];
     [self unlock];
 }
 }
 
 
 - (void)lock
 - (void)lock
 {
 {
-    if (!self.coreLock) {
+    if (!self.coreLock)
+    {
         self.coreLock = [[NSRecursiveLock alloc] init];
         self.coreLock = [[NSRecursiveLock alloc] init];
     }
     }
     [self.coreLock lock];
     [self.coreLock lock];

+ 1 - 1
Carthage/Checkouts/KTVHTTPCache/KTVHTTPCache/Classes/KTVHCDataStorage/KTVHCDataUnitPool.h

@@ -21,7 +21,7 @@
 
 
 - (long long)totalCacheLength;
 - (long long)totalCacheLength;
 
 
-- (NSArray<KTVHCDataCacheItem *> *)allCacheItem;
+- (NSArray <KTVHCDataCacheItem *> *)allCacheItem;
 - (KTVHCDataCacheItem *)cacheItemWithURL:(NSURL *)URL;
 - (KTVHCDataCacheItem *)cacheItemWithURL:(NSURL *)URL;
 
 
 - (void)deleteUnitWithURL:(NSURL *)URL;
 - (void)deleteUnitWithURL:(NSURL *)URL;

+ 91 - 71
Carthage/Checkouts/KTVHTTPCache/KTVHTTPCache/Classes/KTVHCDataStorage/KTVHCDataUnitPool.m

@@ -8,20 +8,20 @@
 
 
 #import "KTVHCDataUnitPool.h"
 #import "KTVHCDataUnitPool.h"
 #import "KTVHCDataUnitQueue.h"
 #import "KTVHCDataUnitQueue.h"
-#import "KTVHCData+Internal.h"
-#import "KTVHCPathTool.h"
-#import "KTVHCURLTool.h"
+#import "KTVHCDataPrivate.h"
+#import "KTVHCPathTools.h"
+#import "KTVHCURLTools.h"
 #import "KTVHCLog.h"
 #import "KTVHCLog.h"
 
 
 #import <UIKit/UIKit.h>
 #import <UIKit/UIKit.h>
 
 
-@interface KTVHCDataUnitPool () <NSLocking, KTVHCDataUnitDelegate>
+@interface KTVHCDataUnitPool () <NSLocking, KTVHCDataUnitFileDelegate>
 
 
-@property (nonatomic, strong) NSRecursiveLock *coreLock;
-@property (nonatomic, strong) KTVHCDataUnitQueue *unitQueue;
+@property (nonatomic, strong) NSRecursiveLock * coreLock;
+@property (nonatomic, strong) KTVHCDataUnitQueue * unitQueue;
+@property (nonatomic, assign) int64_t expectArchiveIndex;
+@property (nonatomic, assign) int64_t actualArchiveIndex;
 @property (nonatomic, strong) dispatch_queue_t archiveQueue;
 @property (nonatomic, strong) dispatch_queue_t archiveQueue;
-@property (nonatomic) int64_t expectArchiveIndex;
-@property (nonatomic) int64_t actualArchiveIndex;
 
 
 @end
 @end
 
 
@@ -29,7 +29,7 @@
 
 
 + (instancetype)pool
 + (instancetype)pool
 {
 {
-    static KTVHCDataUnitPool *obj = nil;
+    static KTVHCDataUnitPool * obj = nil;
     static dispatch_once_t onceToken;
     static dispatch_once_t onceToken;
     dispatch_once(&onceToken, ^{
     dispatch_once(&onceToken, ^{
         obj = [[self alloc] init];
         obj = [[self alloc] init];
@@ -39,10 +39,12 @@
 
 
 - (instancetype)init
 - (instancetype)init
 {
 {
-    if (self = [super init]) {
-        self.unitQueue = [[KTVHCDataUnitQueue alloc] initWithPath:[KTVHCPathTool archivePath]];
-        for (KTVHCDataUnit *obj in self.unitQueue.allUnits) {
-            obj.delegate = self;
+    if (self = [super init])
+    {
+        self.unitQueue = [KTVHCDataUnitQueue queueWithPath:[KTVHCPathTools archivePath]];
+        for (KTVHCDataUnit * obj in self.unitQueue.allUnits)
+        {
+            obj.fileDelegate = self;
         }
         }
         [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationWillTerminate:) name:UIApplicationWillTerminateNotification object:nil];
         [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationWillTerminate:) name:UIApplicationWillTerminateNotification object:nil];
         [[NSNotificationCenter defaultCenter]  addObserver:self selector:@selector(applicationDidEnterBackground:) name:UIApplicationDidEnterBackgroundNotification object:nil];
         [[NSNotificationCenter defaultCenter]  addObserver:self selector:@selector(applicationDidEnterBackground:) name:UIApplicationDidEnterBackgroundNotification object:nil];
@@ -59,15 +61,17 @@
 
 
 - (KTVHCDataUnit *)unitWithURL:(NSURL *)URL
 - (KTVHCDataUnit *)unitWithURL:(NSURL *)URL
 {
 {
-    if (URL.absoluteString.length <= 0) {
+    if (URL.absoluteString.length <= 0)
+    {
         return nil;
         return nil;
     }
     }
     [self lock];
     [self lock];
-    NSString *key = [[KTVHCURLTool tool] keyWithURL:URL];
-    KTVHCDataUnit *unit = [self.unitQueue unitWithKey:key];
-    if (!unit) {
-        unit = [[KTVHCDataUnit alloc] initWithURL:URL];
-        unit.delegate = self;
+    NSString * key = [KTVHCURLTools keyWithURL:URL];
+    KTVHCDataUnit * unit = [self.unitQueue unitWithKey:key];
+    if (!unit)
+    {
+        unit = [KTVHCDataUnit unitWithURL:URL];
+        unit.fileDelegate = self;
         KTVHCLogDataUnitPool(@"%p, Insert Unit, %@", self, unit);
         KTVHCLogDataUnitPool(@"%p, Insert Unit, %@", self, unit);
         [self.unitQueue putUnit:unit];
         [self.unitQueue putUnit:unit];
         [self setNeedsArchive];
         [self setNeedsArchive];
@@ -81,8 +85,9 @@
 {
 {
     [self lock];
     [self lock];
     long long length = 0;
     long long length = 0;
-    NSArray<KTVHCDataUnit *> *units = [self.unitQueue allUnits];
-    for (KTVHCDataUnit *obj in units) {
+    NSArray <KTVHCDataUnit *> * units = [self.unitQueue allUnits];
+    for (KTVHCDataUnit * obj in units)
+    {
         length += obj.cacheLength;
         length += obj.cacheLength;
     }
     }
     [self unlock];
     [self unlock];
@@ -91,45 +96,48 @@
 
 
 - (KTVHCDataCacheItem *)cacheItemWithURL:(NSURL *)URL
 - (KTVHCDataCacheItem *)cacheItemWithURL:(NSURL *)URL
 {
 {
-    if (URL.absoluteString.length <= 0) {
+    if (URL.absoluteString.length <= 0)
+    {
         return nil;
         return nil;
     }
     }
     [self lock];
     [self lock];
-    KTVHCDataCacheItem *cacheItem = nil;
-    NSString *key = [[KTVHCURLTool tool] keyWithURL:URL];
-    KTVHCDataUnit *obj = [self.unitQueue unitWithKey:key];
-    if (obj) {
-        NSArray *items = obj.unitItems;
-        NSMutableArray *zones = [NSMutableArray array];
-        for (KTVHCDataUnitItem *item in items) {
-            KTVHCDataCacheItemZone *zone = [[KTVHCDataCacheItemZone alloc] initWithOffset:item.offset length:item.length];
-            [zones addObject:zone];
+    KTVHCDataCacheItem * cacheItem = nil;
+    NSString * key = [KTVHCURLTools keyWithURL:URL];
+    KTVHCDataUnit * obj = [self.unitQueue unitWithKey:key];
+    if (obj)
+    {
+        NSArray * items = obj.unitItems;
+        NSMutableArray * itemZones = [NSMutableArray array];
+        for (KTVHCDataUnitItem * unitItem in items)
+        {
+            KTVHCDataCacheItemZone * itemZone = [KTVHCDataCacheItemZone itemZoneWithOffset:unitItem.offset length:unitItem.length];
+            [itemZones addObject:itemZone];
         }
         }
-        if (zones.count == 0) {
-            zones = nil;
+        if (itemZones.count <= 0)
+        {
+            itemZones = nil;
         }
         }
-        cacheItem = [[KTVHCDataCacheItem alloc] initWithURL:obj.URL
-                                                      zones:zones
-                                                totalLength:obj.totalLength
-                                                cacheLength:obj.cacheLength
-                                                vaildLength:obj.validLength];
+        cacheItem = [KTVHCDataCacheItem itemWithURL:obj.URL totalLength:obj.totalLength cacheLength:obj.cacheLength vaildLength:obj.validLength zones:itemZones];
     }
     }
     [self unlock];
     [self unlock];
     return cacheItem;
     return cacheItem;
 }
 }
 
 
-- (NSArray<KTVHCDataCacheItem *> *)allCacheItem
+- (NSArray <KTVHCDataCacheItem *> *)allCacheItem
 {
 {
     [self lock];
     [self lock];
-    NSMutableArray *cacheItems = [NSMutableArray array];
-    NSArray<KTVHCDataUnit *> *units = [self.unitQueue allUnits];
-    for (KTVHCDataUnit *obj in units) {
-        KTVHCDataCacheItem *cacheItem = [self cacheItemWithURL:obj.URL];
-        if (cacheItem) {
+    NSMutableArray * cacheItems = [NSMutableArray array];
+    NSArray <KTVHCDataUnit *> * units = [self.unitQueue allUnits];
+    for (KTVHCDataUnit * obj in units)
+    {
+        KTVHCDataCacheItem * cacheItem = [self cacheItemWithURL:obj.URL];
+        if (cacheItem)
+        {
             [cacheItems addObject:cacheItem];
             [cacheItems addObject:cacheItem];
         }
         }
     }
     }
-    if (cacheItems.count == 0) {
+    if (cacheItems.count <= 0)
+    {
         cacheItems = nil;
         cacheItems = nil;
     }
     }
     [self unlock];
     [self unlock];
@@ -138,13 +146,15 @@
 
 
 - (void)deleteUnitWithURL:(NSURL *)URL
 - (void)deleteUnitWithURL:(NSURL *)URL
 {
 {
-    if (URL.absoluteString.length <= 0) {
+    if (URL.absoluteString.length <= 0)
+    {
         return;
         return;
     }
     }
     [self lock];
     [self lock];
-    NSString *key = [[KTVHCURLTool tool] keyWithURL:URL];
-    KTVHCDataUnit *obj = [self.unitQueue unitWithKey:key];
-    if (obj && obj.workingCount <= 0) {
+    NSString * key = [KTVHCURLTools keyWithURL:URL];
+    KTVHCDataUnit * obj = [self.unitQueue unitWithKey:key];
+    if (obj && obj.workingCount <= 0)
+    {
         KTVHCLogDataUnit(@"%p, Delete Unit\nUnit : %@\nFunc : %s", self, obj, __func__);
         KTVHCLogDataUnit(@"%p, Delete Unit\nUnit : %@\nFunc : %s", self, obj, __func__);
         [obj deleteFiles];
         [obj deleteFiles];
         [self.unitQueue popUnit:obj];
         [self.unitQueue popUnit:obj];
@@ -155,14 +165,15 @@
 
 
 - (void)deleteUnitsWithLength:(long long)length
 - (void)deleteUnitsWithLength:(long long)length
 {
 {
-    if (length <= 0) {
+    if (length <= 0)
+    {
         return;
         return;
     }
     }
     [self lock];
     [self lock];
     BOOL needArchive = NO;
     BOOL needArchive = NO;
     long long currentLength = 0;
     long long currentLength = 0;
-    NSArray<KTVHCDataUnit *> *units = [self.unitQueue allUnits];
-    [units sortedArrayUsingComparator:^NSComparisonResult(KTVHCDataUnit *obj1, KTVHCDataUnit *obj2) {
+    NSArray <KTVHCDataUnit *> * units = [self.unitQueue allUnits];
+    [units sortedArrayUsingComparator:^NSComparisonResult(KTVHCDataUnit * obj1, KTVHCDataUnit * obj2) {
         NSComparisonResult result = NSOrderedDescending;
         NSComparisonResult result = NSOrderedDescending;
         [obj1 lock];
         [obj1 lock];
         [obj2 lock];
         [obj2 lock];
@@ -177,8 +188,10 @@
         [obj2 unlock];
         [obj2 unlock];
         return result;
         return result;
     }];
     }];
-    for (KTVHCDataUnit *obj in units) {
-        if (obj.workingCount <= 0) {
+    for (KTVHCDataUnit * obj in units)
+    {
+        if (obj.workingCount <= 0)
+        {
             [obj lock];
             [obj lock];
             currentLength += obj.cacheLength;
             currentLength += obj.cacheLength;
             KTVHCLogDataUnit(@"%p, Delete Unit\nUnit : %@\nFunc : %s", self, obj, __func__);
             KTVHCLogDataUnit(@"%p, Delete Unit\nUnit : %@\nFunc : %s", self, obj, __func__);
@@ -187,11 +200,13 @@
             [self.unitQueue popUnit:obj];
             [self.unitQueue popUnit:obj];
             needArchive = YES;
             needArchive = YES;
         }
         }
-        if (currentLength >= length) {
+        if (currentLength >= length)
+        {
             break;
             break;
         }
         }
     }
     }
-    if (needArchive) {
+    if (needArchive)
+    {
         [self setNeedsArchive];
         [self setNeedsArchive];
     }
     }
     [self unlock];
     [self unlock];
@@ -201,33 +216,43 @@
 {
 {
     [self lock];
     [self lock];
     BOOL needArchive = NO;
     BOOL needArchive = NO;
-    NSArray<KTVHCDataUnit *> *units = [self.unitQueue allUnits];
-    for (KTVHCDataUnit *obj in units) {
-        if (obj.workingCount <= 0) {
+    NSArray <KTVHCDataUnit *> * units = [self.unitQueue allUnits];
+    for (KTVHCDataUnit * obj in units)
+    {
+        if (obj.workingCount <= 0)
+        {
             KTVHCLogDataUnit(@"%p, Delete Unit\nUnit : %@\nFunc : %s", self, obj, __func__);
             KTVHCLogDataUnit(@"%p, Delete Unit\nUnit : %@\nFunc : %s", self, obj, __func__);
             [obj deleteFiles];
             [obj deleteFiles];
             [self.unitQueue popUnit:obj];
             [self.unitQueue popUnit:obj];
             needArchive = YES;
             needArchive = YES;
         }
         }
     }
     }
-    if (needArchive) {
+    if (needArchive)
+    {
         [self setNeedsArchive];
         [self setNeedsArchive];
     }
     }
     [self unlock];
     [self unlock];
 }
 }
 
 
+- (void)unitShouldRearchive:(KTVHCDataUnit *)unit
+{
+    [self setNeedsArchive];
+}
+
 - (void)setNeedsArchive
 - (void)setNeedsArchive
 {
 {
     [self lock];
     [self lock];
     self.expectArchiveIndex += 1;
     self.expectArchiveIndex += 1;
     int64_t expectArchiveIndex = self.expectArchiveIndex;
     int64_t expectArchiveIndex = self.expectArchiveIndex;
     [self unlock];
     [self unlock];
-    if (!self.archiveQueue) {
+    if (!self.archiveQueue)
+    {
         self.archiveQueue = dispatch_queue_create("KTVHTTPCache-archiveQueue", DISPATCH_QUEUE_SERIAL);
         self.archiveQueue = dispatch_queue_create("KTVHTTPCache-archiveQueue", DISPATCH_QUEUE_SERIAL);
     }
     }
     dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3.0 * NSEC_PER_SEC)), self.archiveQueue, ^{
     dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3.0 * NSEC_PER_SEC)), self.archiveQueue, ^{
         [self lock];
         [self lock];
-        if (self.expectArchiveIndex == expectArchiveIndex) {
+        if (self.expectArchiveIndex == expectArchiveIndex)
+        {
             [self archiveIfNeeded];
             [self archiveIfNeeded];
         }
         }
         [self unlock];
         [self unlock];
@@ -237,20 +262,14 @@
 - (void)archiveIfNeeded
 - (void)archiveIfNeeded
 {
 {
     [self lock];
     [self lock];
-    if (self.actualArchiveIndex != self.expectArchiveIndex) {
+    if (self.actualArchiveIndex != self.expectArchiveIndex)
+    {
         self.actualArchiveIndex = self.expectArchiveIndex;
         self.actualArchiveIndex = self.expectArchiveIndex;
         [self.unitQueue archive];
         [self.unitQueue archive];
     }
     }
     [self unlock];
     [self unlock];
 }
 }
 
 
-#pragma mark - KTVHCDataUnitDelegate
-
-- (void)ktv_unitDidChangeMetadata:(KTVHCDataUnit *)unit
-{
-    [self setNeedsArchive];
-}
-
 #pragma mark - UIApplicationWillTerminateNotification
 #pragma mark - UIApplicationWillTerminateNotification
 
 
 - (void)applicationWillTerminate:(NSNotification *)notification
 - (void)applicationWillTerminate:(NSNotification *)notification
@@ -272,7 +291,8 @@
 
 
 - (void)lock
 - (void)lock
 {
 {
-    if (!self.coreLock) {
+    if (!self.coreLock)
+    {
         self.coreLock = [[NSRecursiveLock alloc] init];
         self.coreLock = [[NSRecursiveLock alloc] init];
     }
     }
     [self.coreLock lock];
     [self.coreLock lock];

+ 2 - 2
Carthage/Checkouts/KTVHTTPCache/KTVHTTPCache/Classes/KTVHCDataStorage/KTVHCDataUnitQueue.h

@@ -14,9 +14,9 @@
 + (instancetype)new NS_UNAVAILABLE;
 + (instancetype)new NS_UNAVAILABLE;
 - (instancetype)init NS_UNAVAILABLE;
 - (instancetype)init NS_UNAVAILABLE;
 
 
-- (instancetype)initWithPath:(NSString *)path NS_DESIGNATED_INITIALIZER;
++ (instancetype)queueWithPath:(NSString *)path;
 
 
-- (NSArray<KTVHCDataUnit *> *)allUnits;
+- (NSArray <KTVHCDataUnit *> *)allUnits;
 - (KTVHCDataUnit *)unitWithKey:(NSString *)key;
 - (KTVHCDataUnit *)unitWithKey:(NSString *)key;
 
 
 - (void)putUnit:(KTVHCDataUnit *)unit;
 - (void)putUnit:(KTVHCDataUnit *)unit;

+ 35 - 20
Carthage/Checkouts/KTVHTTPCache/KTVHTTPCache/Classes/KTVHCDataStorage/KTVHCDataUnitQueue.m

@@ -11,51 +11,62 @@
 
 
 @interface KTVHCDataUnitQueue ()
 @interface KTVHCDataUnitQueue ()
 
 
-@property (nonatomic, copy) NSString *path;
-@property (nonatomic, strong) NSMutableArray<KTVHCDataUnit *> *unitArray;
+@property (nonatomic, copy) NSString * path;
+@property (nonatomic, strong) NSMutableArray <KTVHCDataUnit *> * unitArray;
 
 
 @end
 @end
 
 
 @implementation KTVHCDataUnitQueue
 @implementation KTVHCDataUnitQueue
 
 
++ (instancetype)queueWithPath:(NSString *)path
+{
+    return [[self alloc] initWithPath:path];
+}
+
 - (instancetype)initWithPath:(NSString *)path
 - (instancetype)initWithPath:(NSString *)path
 {
 {
-    if (self = [super init]) {
+    if (self = [super init])
+    {
         self.path = path;
         self.path = path;
-        NSMutableArray *unitArray = nil;
+        NSMutableArray * unitArray = nil;
         @try {
         @try {
             unitArray = [NSKeyedUnarchiver unarchiveObjectWithFile:self.path];
             unitArray = [NSKeyedUnarchiver unarchiveObjectWithFile:self.path];
-        } @catch (NSException *exception) {
+        } @catch (NSException * exception) {
             KTVHCLogDataUnitQueue(@"%p, Init exception\nname : %@\breason : %@\nuserInfo : %@", self, exception.name, exception.reason, exception.userInfo);
             KTVHCLogDataUnitQueue(@"%p, Init exception\nname : %@\breason : %@\nuserInfo : %@", self, exception.name, exception.reason, exception.userInfo);
         }
         }
         self.unitArray = [NSMutableArray array];
         self.unitArray = [NSMutableArray array];
-        for (KTVHCDataUnit *obj in unitArray) {
-            if (obj.error) {
-                [obj deleteFiles];
-            } else {
+        for (KTVHCDataUnit * obj in unitArray) {
+            if (obj.valid) {
                 [self.unitArray addObject:obj];
                 [self.unitArray addObject:obj];
+            } else {
+                [obj deleteFiles];
             }
             }
         }
         }
     }
     }
     return self;
     return self;
 }
 }
 
 
-- (NSArray<KTVHCDataUnit *> *)allUnits
+- (NSArray <KTVHCDataUnit *> *)allUnits
 {
 {
-    if (self.unitArray.count <= 0) {
+    if (self.unitArray.count <= 0)
+    {
         return nil;
         return nil;
     }
     }
-    return [self.unitArray copy];
+    NSArray <KTVHCDataUnit *> * units = [self.unitArray copy];
+    return units;
 }
 }
 
 
 - (KTVHCDataUnit *)unitWithKey:(NSString *)key
 - (KTVHCDataUnit *)unitWithKey:(NSString *)key
 {
 {
-    if (key.length <= 0) {
+    if (key.length <= 0)
+    {
         return nil;
         return nil;
     }
     }
-    KTVHCDataUnit *unit = nil;
-    for (KTVHCDataUnit *obj in self.unitArray) {
-        if ([obj.key isEqualToString:key]) {
+    KTVHCDataUnit * unit = nil;
+    for (KTVHCDataUnit * obj in self.unitArray)
+    {
+        if ([obj.key isEqualToString:key])
+        {
             unit = obj;
             unit = obj;
             break;
             break;
         }
         }
@@ -65,20 +76,24 @@
 
 
 - (void)putUnit:(KTVHCDataUnit *)unit
 - (void)putUnit:(KTVHCDataUnit *)unit
 {
 {
-    if (!unit) {
+    if (!unit)
+    {
         return;
         return;
     }
     }
-    if (![self.unitArray containsObject:unit]) {
+    if (![self.unitArray containsObject:unit])
+    {
         [self.unitArray addObject:unit];
         [self.unitArray addObject:unit];
     }
     }
 }
 }
 
 
 - (void)popUnit:(KTVHCDataUnit *)unit
 - (void)popUnit:(KTVHCDataUnit *)unit
 {
 {
-    if (!unit) {
+    if (!unit)
+    {
         return;
         return;
     }
     }
-    if ([self.unitArray containsObject:unit]) {
+    if ([self.unitArray containsObject:unit])
+    {
         [self.unitArray removeObject:unit];
         [self.unitArray removeObject:unit];
     }
     }
 }
 }

+ 10 - 10
Carthage/Checkouts/KTVHTTPCache/KTVHTTPCache/Classes/KTVHCDownload/KTVHCDownload.h

@@ -7,9 +7,9 @@
 //
 //
 
 
 #import <Foundation/Foundation.h>
 #import <Foundation/Foundation.h>
-#import "KTVHCDataResponse.h"
 #import "KTVHCDataRequest.h"
 #import "KTVHCDataRequest.h"
-#import "KTVHCMacro.h"
+#import "KTVHCDataResponse.h"
+#import "KTVHCCommon.h"
 
 
 KTVHTTPCACHE_EXTERN NSString * const KTVHCContentTypeVideo;
 KTVHTTPCACHE_EXTERN NSString * const KTVHCContentTypeVideo;
 KTVHTTPCACHE_EXTERN NSString * const KTVHCContentTypeAudio;
 KTVHTTPCACHE_EXTERN NSString * const KTVHCContentTypeAudio;
@@ -21,9 +21,9 @@ KTVHTTPCACHE_EXTERN NSString * const KTVHCContentTypeBinaryOctetStream;
 
 
 @protocol KTVHCDownloadDelegate <NSObject>
 @protocol KTVHCDownloadDelegate <NSObject>
 
 
-- (void)ktv_download:(KTVHCDownload *)download didCompleteWithError:(NSError *)error;
-- (void)ktv_download:(KTVHCDownload *)download didReceiveResponse:(KTVHCDataResponse *)response;
-- (void)ktv_download:(KTVHCDownload *)download didReceiveData:(NSData *)data;
+- (void)download:(KTVHCDownload *)download didCompleteWithError:(NSError *)error;
+- (void)download:(KTVHCDownload *)download didReceiveResponse:(KTVHCDataResponse *)response;
+- (void)download:(KTVHCDownload *)download didReceiveData:(NSData *)data;
 
 
 @end
 @end
 
 
@@ -34,19 +34,19 @@ KTVHTTPCACHE_EXTERN NSString * const KTVHCContentTypeBinaryOctetStream;
 
 
 + (instancetype)download;
 + (instancetype)download;
 
 
-@property (nonatomic) NSTimeInterval timeoutInterval;
+@property (nonatomic, assign) NSTimeInterval timeoutInterval;
 
 
 /**
 /**
  *  Header Fields
  *  Header Fields
  */
  */
-@property (nonatomic, copy) NSArray<NSString *> *whitelistHeaderKeys;
-@property (nonatomic, copy) NSDictionary<NSString *, NSString *> *additionalHeaders;
+@property (nonatomic, copy) NSArray <NSString *> * whitelistHeaderKeys;
+@property (nonatomic, copy) NSDictionary <NSString *, NSString *> * additionalHeaders;
 
 
 /**
 /**
  *  Content-Type
  *  Content-Type
  */
  */
-@property (nonatomic, copy) NSArray<NSString *> *acceptableContentTypes;
-@property (nonatomic, copy) BOOL (^unacceptableContentTypeDisposer)(NSURL *URL, NSString *contentType);
+@property (nonatomic, copy) NSArray <NSString *> * acceptContentTypes;
+@property (nonatomic, copy) BOOL (^unsupportContentTypeFilter)(NSURL * URL, NSString * contentType);
 
 
 - (NSURLSessionTask *)downloadWithRequest:(KTVHCDataRequest *)request delegate:(id<KTVHCDownloadDelegate>)delegate;
 - (NSURLSessionTask *)downloadWithRequest:(KTVHCDataRequest *)request delegate:(id<KTVHCDownloadDelegate>)delegate;
 
 

+ 135 - 118
Carthage/Checkouts/KTVHTTPCache/KTVHTTPCache/Classes/KTVHCDownload/KTVHCDownload.m

@@ -7,7 +7,6 @@
 //
 //
 
 
 #import "KTVHCDownload.h"
 #import "KTVHCDownload.h"
-#import "KTVHCData+Internal.h"
 #import "KTVHCDataUnitPool.h"
 #import "KTVHCDataUnitPool.h"
 #import "KTVHCDataStorage.h"
 #import "KTVHCDataStorage.h"
 #import "KTVHCError.h"
 #import "KTVHCError.h"
@@ -23,14 +22,13 @@ NSString * const KTVHCContentTypeBinaryOctetStream      = @"binary/octet-stream"
 
 
 @interface KTVHCDownload () <NSURLSessionDataDelegate, NSLocking>
 @interface KTVHCDownload () <NSURLSessionDataDelegate, NSLocking>
 
 
-@property (nonatomic, strong) NSLock *coreLock;
-@property (nonatomic, strong) NSURLSession *session;
-@property (nonatomic, strong) NSOperationQueue *sessionDelegateQueue;
-@property (nonatomic, strong) NSURLSessionConfiguration *sessionConfiguration;
-@property (nonatomic, strong) NSMutableDictionary<NSURLSessionTask *, NSError *> *errorDictionary;
-@property (nonatomic, strong) NSMutableDictionary<NSURLSessionTask *, KTVHCDataRequest *> *requestDictionary;
-@property (nonatomic, strong) NSMutableDictionary<NSURLSessionTask *, id<KTVHCDownloadDelegate>> *delegateDictionary;
-@property (nonatomic) UIBackgroundTaskIdentifier backgroundTask;
+@property (nonatomic, strong) NSLock * coreLock;
+@property (nonatomic, strong) NSURLSession * session;
+@property (nonatomic, strong) NSOperationQueue * sessionDelegateQueue;
+@property (nonatomic, strong) NSURLSessionConfiguration * sessionConfiguration;
+@property (nonatomic, strong) NSMutableDictionary <NSURLSessionTask *, NSError *> * errorDictionary;
+@property (nonatomic, strong) NSMutableDictionary <NSURLSessionTask *, KTVHCDataRequest *> * requestDictionary;
+@property (nonatomic, strong) NSMutableDictionary <NSURLSessionTask *, id<KTVHCDownloadDelegate>> * delegateDictionary;
 
 
 @end
 @end
 
 
@@ -38,7 +36,7 @@ NSString * const KTVHCContentTypeBinaryOctetStream      = @"binary/octet-stream"
 
 
 + (instancetype)download
 + (instancetype)download
 {
 {
-    static KTVHCDownload *obj = nil;
+    static KTVHCDownload * obj = nil;
     static dispatch_once_t onceToken;
     static dispatch_once_t onceToken;
     dispatch_once(&onceToken, ^{
     dispatch_once(&onceToken, ^{
         obj = [[self alloc] init];
         obj = [[self alloc] init];
@@ -48,10 +46,10 @@ NSString * const KTVHCContentTypeBinaryOctetStream      = @"binary/octet-stream"
 
 
 - (instancetype)init
 - (instancetype)init
 {
 {
-    if (self = [super init]) {
+    if (self = [super init])
+    {
         KTVHCLogAlloc(self);
         KTVHCLogAlloc(self);
         self.timeoutInterval = 30.0f;
         self.timeoutInterval = 30.0f;
-        self.backgroundTask = UIBackgroundTaskInvalid;
         self.errorDictionary = [NSMutableDictionary dictionary];
         self.errorDictionary = [NSMutableDictionary dictionary];
         self.requestDictionary = [NSMutableDictionary dictionary];
         self.requestDictionary = [NSMutableDictionary dictionary];
         self.delegateDictionary = [NSMutableDictionary dictionary];
         self.delegateDictionary = [NSMutableDictionary dictionary];
@@ -63,11 +61,11 @@ NSString * const KTVHCContentTypeBinaryOctetStream      = @"binary/octet-stream"
         self.session = [NSURLSession sessionWithConfiguration:self.sessionConfiguration
         self.session = [NSURLSession sessionWithConfiguration:self.sessionConfiguration
                                                      delegate:self
                                                      delegate:self
                                                 delegateQueue:self.sessionDelegateQueue];
                                                 delegateQueue:self.sessionDelegateQueue];
-        self.acceptableContentTypes = @[KTVHCContentTypeVideo,
-                                        KTVHCContentTypeAudio,
-                                        KTVHCContentTypeApplicationMPEG4,
-                                        KTVHCContentTypeApplicationOctetStream,
-                                        KTVHCContentTypeBinaryOctetStream];
+        self.acceptContentTypes = @[KTVHCContentTypeVideo,
+                                    KTVHCContentTypeAudio,
+                                    KTVHCContentTypeApplicationMPEG4,
+                                    KTVHCContentTypeApplicationOctetStream,
+                                    KTVHCContentTypeBinaryOctetStream];
         [[NSNotificationCenter defaultCenter] addObserver:self
         [[NSNotificationCenter defaultCenter] addObserver:self
                                                  selector:@selector(applicationDidEnterBackground:)
                                                  selector:@selector(applicationDidEnterBackground:)
                                                      name:UIApplicationDidEnterBackgroundNotification
                                                      name:UIApplicationDidEnterBackgroundNotification
@@ -83,45 +81,43 @@ NSString * const KTVHCContentTypeBinaryOctetStream      = @"binary/octet-stream"
 - (void)dealloc
 - (void)dealloc
 {
 {
     KTVHCLogDealloc(self);
     KTVHCLogDealloc(self);
-    [[NSNotificationCenter defaultCenter] removeObserver:self];
 }
 }
 
 
-- (NSArray<NSString *> *)availableHeaderKeys
+- (NSArray <NSString *> *)availableHeaderKeys
 {
 {
-    static NSArray<NSString *> *obj = nil;
+    static NSArray <NSString *> * availableHeaderKeys = nil;
     static dispatch_once_t onceToken;
     static dispatch_once_t onceToken;
     dispatch_once(&onceToken, ^{
     dispatch_once(&onceToken, ^{
-        obj = @[@"User-Agent",
-                @"Connection",
-                @"Accept",
-                @"Accept-Encoding",
-                @"Accept-Language",
-                @"Range"];
+        availableHeaderKeys = @[@"User-Agent",
+                                @"Connection",
+                                @"Accept",
+                                @"Accept-Encoding",
+                                @"Accept-Language",
+                                @"Range"];
     });
     });
-    return obj;
+    return availableHeaderKeys;
 }
 }
 
 
 - (NSURLSessionTask *)downloadWithRequest:(KTVHCDataRequest *)request delegate:(id<KTVHCDownloadDelegate>)delegate
 - (NSURLSessionTask *)downloadWithRequest:(KTVHCDataRequest *)request delegate:(id<KTVHCDownloadDelegate>)delegate
 {
 {
     [self lock];
     [self lock];
-    NSMutableURLRequest *mRequest = [NSMutableURLRequest requestWithURL:request.URL];
-    mRequest.timeoutInterval = self.timeoutInterval;
-    mRequest.cachePolicy = NSURLRequestReloadIgnoringCacheData;
-    [request.headers enumerateKeysAndObjectsUsingBlock:^(NSString *key, NSString *obj, BOOL *stop) {
-        if ([self.availableHeaderKeys containsObject:key] ||
-            [self.whitelistHeaderKeys containsObject:key]) {
-            [mRequest setValue:obj forHTTPHeaderField:key];
+    NSMutableURLRequest * HTTPRequest = [NSMutableURLRequest requestWithURL:request.URL];
+    [request.headers enumerateKeysAndObjectsUsingBlock:^(NSString * key, NSString * obj, BOOL * stop) {
+        if ([[self availableHeaderKeys] containsObject:key] || [self.whitelistHeaderKeys containsObject:key]) {
+            [HTTPRequest setValue:obj forHTTPHeaderField:key];
         }
         }
     }];
     }];
-    [self.additionalHeaders enumerateKeysAndObjectsUsingBlock:^(NSString *key, NSString *obj, BOOL *stop) {
-        [mRequest setValue:obj forHTTPHeaderField:key];
+    HTTPRequest.timeoutInterval = self.timeoutInterval;
+    HTTPRequest.cachePolicy = NSURLRequestReloadIgnoringCacheData;
+    [self.additionalHeaders enumerateKeysAndObjectsUsingBlock:^(NSString * _Nonnull key, NSString * _Nonnull obj, BOOL * _Nonnull stop) {
+        [HTTPRequest setValue:obj forHTTPHeaderField:key];
     }];
     }];
-    NSURLSessionDataTask *task = [self.session dataTaskWithRequest:mRequest];
+    NSURLSessionDataTask * task = [self.session dataTaskWithRequest:HTTPRequest];
+    task.priority = 1.0;
     [self.requestDictionary setObject:request forKey:task];
     [self.requestDictionary setObject:request forKey:task];
     [self.delegateDictionary setObject:delegate forKey:task];
     [self.delegateDictionary setObject:delegate forKey:task];
-    task.priority = 1.0;
+    KTVHCLogDownload(@"%p, Add Request\nrequest : %@\nURL : %@\nheaders : %@\nHTTPRequest headers : %@\nCount : %d", self, request, request.URL, request.headers, HTTPRequest.allHTTPHeaderFields, (int)self.delegateDictionary.count);
     [task resume];
     [task resume];
-    KTVHCLogDownload(@"%p, Add Request\nrequest : %@\nURL : %@\nheaders : %@\nHTTPRequest headers : %@\nCount : %d", self, request, request.URL, request.headers, mRequest.allHTTPHeaderFields, (int)self.delegateDictionary.count);
     [self unlock];
     [self unlock];
     return task;
     return task;
 }
 }
@@ -130,84 +126,92 @@ NSString * const KTVHCContentTypeBinaryOctetStream      = @"binary/octet-stream"
 {
 {
     [self lock];
     [self lock];
     KTVHCLogDownload(@"%p, Complete\nError : %@", self, error);
     KTVHCLogDownload(@"%p, Complete\nError : %@", self, error);
-    if ([self.errorDictionary objectForKey:task]) {
-        error = [self.errorDictionary objectForKey:task];
+    id <KTVHCDownloadDelegate> delegate = [self.delegateDictionary objectForKey:task];
+    NSError * cancelError = [self.errorDictionary objectForKey:task];
+    if (cancelError)
+    {
+        error = cancelError;
     }
     }
-    id<KTVHCDownloadDelegate> delegate = [self.delegateDictionary objectForKey:task];
-    [delegate ktv_download:self didCompleteWithError:error];
+    [delegate download:self didCompleteWithError:error];
     [self.delegateDictionary removeObjectForKey:task];
     [self.delegateDictionary removeObjectForKey:task];
     [self.requestDictionary removeObjectForKey:task];
     [self.requestDictionary removeObjectForKey:task];
     [self.errorDictionary removeObjectForKey:task];
     [self.errorDictionary removeObjectForKey:task];
-    if (self.delegateDictionary.count <= 0) {
-        [self endBackgroundTaskDelay];
+    if (self.delegateDictionary.count <= 0)
+    {
+        [self cleanBackgroundTaskAsync];
     }
     }
     [self unlock];
     [self unlock];
 }
 }
 
 
-- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)task didReceiveResponse:(NSHTTPURLResponse *)response completionHandler:(void (^)(NSURLSessionResponseDisposition))completionHandler
+- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveResponse:(NSURLResponse *)response completionHandler:(void (^)(NSURLSessionResponseDisposition))completionHandler
 {
 {
     [self lock];
     [self lock];
-    KTVHCDataRequest *dataRequest = [self.requestDictionary objectForKey:task];
-    KTVHCDataResponse *dataResponse = [[KTVHCDataResponse alloc] initWithURL:dataRequest.URL headers:response.allHeaderFields];
-    KTVHCLogDownload(@"%p, Receive response\nrequest : %@\nresponse : %@\nHTTPResponse : %@", self, dataRequest, dataResponse, response.allHeaderFields);
-    NSError *error = nil;
-    if (!error) {
-        if (response.statusCode > 400) {
-            error = [KTVHCError errorForResponseUnavailable:task.currentRequest.URL
-                                                    request:task.currentRequest
-                                                   response:task.response];
+    NSHTTPURLResponse * HTTPResponse = (NSHTTPURLResponse *)response;
+    KTVHCDataRequest * dataRequest = [self.requestDictionary objectForKey:dataTask];
+    KTVHCDataResponse * dataResponse = [[KTVHCDataResponse alloc] initWithURL:dataRequest.URL headers:HTTPResponse.allHeaderFields];
+    KTVHCLogDownload(@"%p, Receive response\nrequest : %@\nresponse : %@\nHTTPResponse : %@", self, dataRequest, dataResponse, [(NSHTTPURLResponse *)response allHeaderFields]);
+    NSError * error = nil;
+    if (!error)
+    {
+        if (HTTPResponse.statusCode > 400)
+        {
+            error = [KTVHCError errorForResponseUnavailable:dataTask.currentRequest.URL request:dataTask.currentRequest response:dataTask.response];
         }
         }
-    }
-    if (!error) {
-        BOOL vaild = NO;
-        if (dataResponse.contentType.length > 0) {
-            for (NSString *obj in self.acceptableContentTypes) {
-                if ([[dataResponse.contentType lowercaseString] containsString:[obj lowercaseString]]) {
-                    vaild = YES;
+        if (!error)
+        {
+            BOOL contentTypeVaild = NO;
+            if (dataResponse.contentType.length > 0)
+            {
+                for (NSString * obj in self.acceptContentTypes)
+                {
+                    if ([[dataResponse.contentType lowercaseString] containsString:[obj lowercaseString]])
+                    {
+                        contentTypeVaild = YES;
+                    }
+                }
+                if (!contentTypeVaild && self.unsupportContentTypeFilter)
+                {
+                    contentTypeVaild = self.unsupportContentTypeFilter(dataRequest.URL, dataResponse.contentType);
                 }
                 }
             }
             }
-            if (!vaild && self.unacceptableContentTypeDisposer) {
-                vaild = self.unacceptableContentTypeDisposer(dataRequest.URL, dataResponse.contentType);
+            if (!contentTypeVaild)
+            {
+                error = [KTVHCError errorForUnsupportContentType:dataTask.currentRequest.URL request:dataTask.currentRequest response:dataTask.response];
             }
             }
-        }
-        if (!vaild) {
-            error = [KTVHCError errorForUnsupportContentType:task.currentRequest.URL
-                                                     request:task.currentRequest
-                                                    response:task.response];
-        }
-    }
-    if (!error) {
-        if (dataResponse.contentLength <= 0 ||
-            (!KTVHCRangeIsFull(dataRequest.range) &&
-             (dataResponse.contentLength != KTVHCRangeGetLength(dataRequest.range)))) {
-                error = [KTVHCError errorForUnsupportContentType:task.currentRequest.URL
-                                                         request:task.currentRequest
-                                                        response:task.response];
-            }
-    }
-    if (!error) {
-        long long (^getDeletionLength)(long long) = ^(long long desireLength){
-            return desireLength + [KTVHCDataStorage storage].totalCacheLength - [KTVHCDataStorage storage].maxCacheLength;
-        };
-        long long length = getDeletionLength(dataResponse.contentLength);
-        if (length > 0) {
-            [[KTVHCDataUnitPool pool] deleteUnitsWithLength:length];
-            length = getDeletionLength(dataResponse.contentLength);
-            if (length > 0) {
-                error = [KTVHCError errorForNotEnoughDiskSpace:dataResponse.totalLength
-                                                       request:dataResponse.contentLength
-                                              totalCacheLength:[KTVHCDataStorage storage].totalCacheLength
-                                                maxCacheLength:[KTVHCDataStorage storage].maxCacheLength];
+            if (!error)
+            {
+                if (dataResponse.currentLength <= 0 ||
+                    (!KTVHCRangeIsFull(dataRequest.range) &&
+                     (dataResponse.currentLength != KTVHCRangeGetLength(dataRequest.range))))
+                {
+                    error = [KTVHCError errorForUnsupportContentType:dataTask.currentRequest.URL request:dataTask.currentRequest response:dataTask.response];
+                }
+                if (!error)
+                {
+                    long long length = dataResponse.currentLength + [KTVHCDataStorage storage].totalCacheLength - [KTVHCDataStorage storage].maxCacheLength;
+                    if (length > 0)
+                    {
+                        [[KTVHCDataUnitPool pool] deleteUnitsWithLength:length];
+                        length = dataResponse.currentLength + [KTVHCDataStorage storage].totalCacheLength - [KTVHCDataStorage storage].maxCacheLength;
+                        if (length > 0)
+                        {
+                            error = [KTVHCError errorForNotEnoughDiskSpace:dataResponse.totalLength request:dataResponse.currentLength totalCacheLength:[KTVHCDataStorage storage].totalCacheLength maxCacheLength:[KTVHCDataStorage storage].maxCacheLength];
+                        }
+                    }
+                }
             }
             }
         }
         }
     }
     }
-    if (error) {
+    if (error)
+    {
         KTVHCLogDownload(@"%p, Invaild response\nError : %@", self, error);
         KTVHCLogDownload(@"%p, Invaild response\nError : %@", self, error);
-        [self.errorDictionary setObject:error forKey:task];
+        [self.errorDictionary setObject:error forKey:dataTask];
         completionHandler(NSURLSessionResponseCancel);
         completionHandler(NSURLSessionResponseCancel);
-    } else {
-        id<KTVHCDownloadDelegate> delegate = [self.delegateDictionary objectForKey:task];
-        [delegate ktv_download:self didReceiveResponse:dataResponse];
+    }
+    else
+    {
+        id <KTVHCDownloadDelegate> delegate = [self.delegateDictionary objectForKey:dataTask];
+        [delegate download:self didReceiveResponse:dataResponse];
         completionHandler(NSURLSessionResponseAllow);
         completionHandler(NSURLSessionResponseAllow);
     }
     }
     [self unlock];
     [self unlock];
@@ -225,15 +229,16 @@ NSString * const KTVHCContentTypeBinaryOctetStream      = @"binary/octet-stream"
 {
 {
     [self lock];
     [self lock];
     KTVHCLogDownload(@"%p, Receive data - Begin\nLength : %lld\nURL : %@", self, (long long)data.length, dataTask.originalRequest.URL.absoluteString);
     KTVHCLogDownload(@"%p, Receive data - Begin\nLength : %lld\nURL : %@", self, (long long)data.length, dataTask.originalRequest.URL.absoluteString);
-    id<KTVHCDownloadDelegate> delegate = [self.delegateDictionary objectForKey:dataTask];
-    [delegate ktv_download:self didReceiveData:data];
+    id <KTVHCDownloadDelegate> delegate = [self.delegateDictionary objectForKey:dataTask];
+    [delegate download:self didReceiveData:data];
     KTVHCLogDownload(@"%p, Receive data - End\nLength : %lld\nURL : %@", self, (long long)data.length, dataTask.originalRequest.URL.absoluteString);
     KTVHCLogDownload(@"%p, Receive data - End\nLength : %lld\nURL : %@", self, (long long)data.length, dataTask.originalRequest.URL.absoluteString);
     [self unlock];
     [self unlock];
 }
 }
 
 
 - (void)lock
 - (void)lock
 {
 {
-    if (!self.coreLock) {
+    if (!self.coreLock)
+    {
         self.coreLock = [[NSLock alloc] init];
         self.coreLock = [[NSLock alloc] init];
     }
     }
     [self.coreLock lock];
     [self.coreLock lock];
@@ -246,41 +251,53 @@ NSString * const KTVHCContentTypeBinaryOctetStream      = @"binary/octet-stream"
 
 
 #pragma mark - Background Task
 #pragma mark - Background Task
 
 
+static UIBackgroundTaskIdentifier backgroundTaskIdentifier = -1;
+
 - (void)applicationDidEnterBackground:(NSNotification *)notification
 - (void)applicationDidEnterBackground:(NSNotification *)notification
 {
 {
+    [self cleanBackgroundTask];
     [self lock];
     [self lock];
-    if (self.delegateDictionary.count > 0) {
-        [self beginBackgroundTask];
+    if (self.delegateDictionary.count > 0)
+    {
+        backgroundTaskIdentifier = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
+            [self cleanBackgroundTask];
+        }];
+        UIBackgroundTaskIdentifier blockIdentifier = backgroundTaskIdentifier;
+        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(300 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
+            if (blockIdentifier == backgroundTaskIdentifier)
+            {
+                [self cleanBackgroundTask];
+            }
+        });
     }
     }
     [self unlock];
     [self unlock];
 }
 }
 
 
 - (void)applicationWillEnterForeground:(NSNotification *)notification
 - (void)applicationWillEnterForeground:(NSNotification *)notification
 {
 {
-    [self endBackgroundTask];
+    [self cleanBackgroundTask];
 }
 }
 
 
-- (void)beginBackgroundTask
+- (void)cleanBackgroundTask
 {
 {
-    self.backgroundTask = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
-        [self endBackgroundTask];
-    }];
-}
-
-- (void)endBackgroundTask
-{
-    if (self.backgroundTask != UIBackgroundTaskInvalid) {
-        [[UIApplication sharedApplication] endBackgroundTask:self.backgroundTask];
-        self.backgroundTask = UIBackgroundTaskInvalid;
+    static dispatch_once_t onceToken;
+    dispatch_once(&onceToken, ^{
+        backgroundTaskIdentifier = UIBackgroundTaskInvalid;
+    });
+    if (backgroundTaskIdentifier != UIBackgroundTaskInvalid)
+    {
+        [[UIApplication sharedApplication] endBackgroundTask:backgroundTaskIdentifier];
+        backgroundTaskIdentifier = UIBackgroundTaskInvalid;
     }
     }
 }
 }
 
 
-- (void)endBackgroundTaskDelay
+- (void)cleanBackgroundTaskAsync
 {
 {
     dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
     dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
         [self lock];
         [self lock];
-        if (self.delegateDictionary.count <= 0) {
-            [self endBackgroundTask];
+        if (self.delegateDictionary.count <= 0)
+        {
+            [self cleanBackgroundTask];
         }
         }
         [self unlock];
         [self unlock];
     });
     });

+ 2 - 0
Carthage/Checkouts/KTVHTTPCache/KTVHTTPCache/Classes/KTVHCHTTPServer/KTVHCHTTPConnection.h

@@ -11,4 +11,6 @@
 
 
 @interface KTVHCHTTPConnection : HTTPConnection
 @interface KTVHCHTTPConnection : HTTPConnection
 
 
++ (NSString *)pingResponseValue;
+
 @end
 @end

+ 30 - 8
Carthage/Checkouts/KTVHTTPCache/KTVHTTPCache/Classes/KTVHCHTTPServer/KTVHCHTTPConnection.m

@@ -7,16 +7,23 @@
 //
 //
 
 
 #import "KTVHCHTTPConnection.h"
 #import "KTVHCHTTPConnection.h"
+#import "KTVHCHTTPRequest.h"
 #import "KTVHCHTTPResponse.h"
 #import "KTVHCHTTPResponse.h"
-#import "KTVHCDataStorage.h"
-#import "KTVHCURLTool.h"
+#import "KTVHCHTTPPingResponse.h"
+#import "KTVHCHTTPURL.h"
 #import "KTVHCLog.h"
 #import "KTVHCLog.h"
 
 
 @implementation KTVHCHTTPConnection
 @implementation KTVHCHTTPConnection
 
 
++ (NSString *)pingResponseValue
+{
+    return KTVHCHTTPPingResponseResponseValue;
+}
+
 - (id)initWithAsyncSocket:(GCDAsyncSocket *)newSocket configuration:(HTTPConfig *)aConfig
 - (id)initWithAsyncSocket:(GCDAsyncSocket *)newSocket configuration:(HTTPConfig *)aConfig
 {
 {
-    if (self = [super initWithAsyncSocket:newSocket configuration:aConfig]) {
+    if (self = [super initWithAsyncSocket:newSocket configuration:aConfig])
+    {
         KTVHCLogAlloc(self);
         KTVHCLogAlloc(self);
     }
     }
     return self;
     return self;
@@ -30,11 +37,26 @@
 - (NSObject<HTTPResponse> *)httpResponseForMethod:(NSString *)method URI:(NSString *)path
 - (NSObject<HTTPResponse> *)httpResponseForMethod:(NSString *)method URI:(NSString *)path
 {
 {
     KTVHCLogHTTPConnection(@"%p, Receive request\nmethod : %@\npath : %@\nURL : %@", self, method, path, request.url);
     KTVHCLogHTTPConnection(@"%p, Receive request\nmethod : %@\npath : %@\nURL : %@", self, method, path, request.url);
-    NSDictionary<NSString *,NSString *> *parameters = [[KTVHCURLTool tool] parseQuery:request.url.query];
-    NSURL *URL = [NSURL URLWithString:[parameters objectForKey:@"url"]];
-    KTVHCDataRequest *dataRequest = [[KTVHCDataRequest alloc] initWithURL:URL headers:request.allHeaderFields];
-    KTVHCHTTPResponse *response = [[KTVHCHTTPResponse alloc] initWithConnection:self dataRequest:dataRequest];
-    return response;
+    KTVHCHTTPURL * URL = [[KTVHCHTTPURL alloc] initWithProxyURL:request.url];
+    switch (URL.type)
+    {
+        case KTVHCHTTPURLTypeUnknown:
+            return nil;
+        case KTVHCHTTPURLTypePing:
+        {
+            KTVHCHTTPPingResponse * currentResponse = [KTVHCHTTPPingResponse responseWithConnection:self];
+            return currentResponse;
+        }
+        case KTVHCHTTPURLTypeContent:
+        {
+            KTVHCHTTPRequest * currentRequest = [[KTVHCHTTPRequest alloc] initWithURL:URL.URL headers:request.allHeaderFields];
+            currentRequest.method = request.method;
+            currentRequest.version = request.version;
+            KTVHCHTTPResponse * currentResponse = [[KTVHCHTTPResponse alloc] initWithConnection:self request:currentRequest];
+            return currentResponse;
+        }
+    }
+    return nil;
 }
 }
 
 
 
 

+ 2 - 2
Carthage/Checkouts/KTVHTTPCache/KTVHTTPCache/Classes/KTVHCHTTPServer/KTVHCHTTPResponse.h

@@ -10,13 +10,13 @@
 #import "KTVHCHTTPHeader.h"
 #import "KTVHCHTTPHeader.h"
 
 
 @class KTVHCHTTPConnection;
 @class KTVHCHTTPConnection;
-@class KTVHCDataRequest;
+@class KTVHCHTTPRequest;
 
 
 @interface KTVHCHTTPResponse : NSObject <HTTPResponse>
 @interface KTVHCHTTPResponse : NSObject <HTTPResponse>
 
 
 + (instancetype)new NS_UNAVAILABLE;
 + (instancetype)new NS_UNAVAILABLE;
 - (instancetype)init NS_UNAVAILABLE;
 - (instancetype)init NS_UNAVAILABLE;
 
 
-- (instancetype)initWithConnection:(KTVHCHTTPConnection *)connection dataRequest:(KTVHCDataRequest *)dataRequest NS_DESIGNATED_INITIALIZER;
+- (instancetype)initWithConnection:(KTVHCHTTPConnection *)connection request:(KTVHCHTTPRequest *)request;
 
 
 @end
 @end

+ 31 - 28
Carthage/Checkouts/KTVHTTPCache/KTVHTTPCache/Classes/KTVHCHTTPServer/KTVHCHTTPResponse.m

@@ -8,28 +8,34 @@
 
 
 #import "KTVHCHTTPResponse.h"
 #import "KTVHCHTTPResponse.h"
 #import "KTVHCHTTPConnection.h"
 #import "KTVHCHTTPConnection.h"
+#import "KTVHCHTTPRequest.h"
 #import "KTVHCDataStorage.h"
 #import "KTVHCDataStorage.h"
 #import "KTVHCLog.h"
 #import "KTVHCLog.h"
 
 
 @interface KTVHCHTTPResponse () <KTVHCDataReaderDelegate>
 @interface KTVHCHTTPResponse () <KTVHCDataReaderDelegate>
 
 
-@property (nonatomic) BOOL waitingResponse;
-@property (nonatomic, strong) KTVHCDataReader *reader;
-@property (nonatomic, weak) KTVHCHTTPConnection *connection;
+@property (nonatomic, weak) KTVHCHTTPConnection * connection;
+@property (nonatomic, strong) KTVHCHTTPRequest * request;
+@property (nonatomic, strong) KTVHCDataRequest * dataRequest;
+@property (nonatomic, strong) KTVHCDataReader * reader;
+@property (nonatomic, assign) BOOL waitingResponseHeader;
 
 
 @end
 @end
 
 
 @implementation KTVHCHTTPResponse
 @implementation KTVHCHTTPResponse
 
 
-- (instancetype)initWithConnection:(KTVHCHTTPConnection *)connection dataRequest:(KTVHCDataRequest *)dataRequest
+- (instancetype)initWithConnection:(KTVHCHTTPConnection *)connection request:(KTVHCHTTPRequest *)request
 {
 {
-    if (self = [super init]) {
+    if (self = [super init])
+    {
         KTVHCLogAlloc(self);
         KTVHCLogAlloc(self);
         self.connection = connection;
         self.connection = connection;
+        self.request = request;
+        KTVHCDataRequest * dataRequest = [[KTVHCDataRequest alloc] initWithURL:self.request.URL headers:self.request.headers];
         self.reader = [[KTVHCDataStorage storage] readerWithRequest:dataRequest];
         self.reader = [[KTVHCDataStorage storage] readerWithRequest:dataRequest];
         self.reader.delegate = self;
         self.reader.delegate = self;
         [self.reader prepare];
         [self.reader prepare];
-        KTVHCLogHTTPResponse(@"%p, Create response\nrequest : %@", self, dataRequest);
+        KTVHCLogHTTPResponse(@"%p, Create response\nrequest : %@", self, self.request);
     }
     }
     return self;
     return self;
 }
 }
@@ -44,9 +50,10 @@
 
 
 - (NSData *)readDataOfLength:(NSUInteger)length
 - (NSData *)readDataOfLength:(NSUInteger)length
 {
 {
-    NSData *data = [self.reader readDataOfLength:length];
+    NSData * data = [self.reader readDataOfLength:length];
     KTVHCLogHTTPResponse(@"%p, Read data : %lld", self, (long long)data.length);
     KTVHCLogHTTPResponse(@"%p, Read data : %lld", self, (long long)data.length);
-    if (self.reader.isFinished) {
+    if (self.reader.didFinished)
+    {
         KTVHCLogHTTPResponse(@"%p, Read data did finished", self);
         KTVHCLogHTTPResponse(@"%p, Read data did finished", self);
         [self.reader close];
         [self.reader close];
         [self.connection responseDidAbort:self];
         [self.connection responseDidAbort:self];
@@ -56,9 +63,9 @@
 
 
 - (BOOL)delayResponseHeaders
 - (BOOL)delayResponseHeaders
 {
 {
-    BOOL waiting = !self.reader.isPrepared;
-    self.waitingResponse = waiting;
-    KTVHCLogHTTPResponse(@"%p, Delay response : %d", self, self.waitingResponse);
+    BOOL waiting = !self.reader.didPrepared;
+    self.waitingResponseHeader = waiting;
+    KTVHCLogHTTPResponse(@"%p, Delay response : %d", self, self.waitingResponseHeader);
     return waiting;
     return waiting;
 }
 }
 
 
@@ -70,56 +77,52 @@
 
 
 - (NSDictionary *)httpHeaders
 - (NSDictionary *)httpHeaders
 {
 {
-    NSMutableDictionary *headers = [self.reader.response.headers mutableCopy];
-    [headers removeObjectForKey:@"Content-Range"];
-    [headers removeObjectForKey:@"content-range"];
-    [headers removeObjectForKey:@"Content-Length"];
-    [headers removeObjectForKey:@"content-length"];
-    KTVHCLogHTTPResponse(@"%p, Header\n%@", self, headers);
-    return headers;
+    KTVHCLogHTTPResponse(@"%p, Header\n%@", self, self.reader.response.headersWithoutRangeAndLength);
+    return self.reader.response.headersWithoutRangeAndLength;
 }
 }
 
 
 - (UInt64)offset
 - (UInt64)offset
 {
 {
-    KTVHCLogHTTPResponse(@"%p, Offset : %lld", self, self.reader.readedLength);
-    return self.reader.readedLength;
+    KTVHCLogHTTPResponse(@"%p, Offset : %lld", self, self.reader.readOffset);
+    return self.reader.readOffset;
 }
 }
 
 
 - (void)setOffset:(UInt64)offset
 - (void)setOffset:(UInt64)offset
 {
 {
-    KTVHCLogHTTPResponse(@"%p, Set offset : %lld, %lld", self, offset, self.reader.readedLength);
+    KTVHCLogHTTPResponse(@"%p, Set offset : %lld, %lld", self, offset, self.reader.readOffset);
 }
 }
 
 
 - (BOOL)isDone
 - (BOOL)isDone
 {
 {
-    KTVHCLogHTTPResponse(@"%p, Check done : %d", self, self.reader.isFinished);
-    return self.reader.isFinished;
+    KTVHCLogHTTPResponse(@"%p, Check done : %d", self, self.reader.didFinished);
+    return self.reader.didFinished;
 }
 }
 
 
 - (void)connectionDidClose
 - (void)connectionDidClose
 {
 {
-    KTVHCLogHTTPResponse(@"%p, Connection did closed : %lld, %lld", self, self.reader.response.contentLength, self.reader.readedLength);
+    KTVHCLogHTTPResponse(@"%p, Connection did closed : %lld, %lld", self, self.reader.response.currentLength, self.reader.readOffset);
     [self.reader close];
     [self.reader close];
 }
 }
 
 
 #pragma mark - KTVHCDataReaderDelegate
 #pragma mark - KTVHCDataReaderDelegate
 
 
-- (void)ktv_readerDidPrepare:(KTVHCDataReader *)reader
+- (void)readerDidPrepared:(KTVHCDataReader *)reader
 {
 {
     KTVHCLogHTTPResponse(@"%p, Prepared", self);
     KTVHCLogHTTPResponse(@"%p, Prepared", self);
-    if (self.reader.isPrepared && self.waitingResponse == YES) {
+    if (self.reader.didPrepared && self.waitingResponseHeader == YES)
+    {
         KTVHCLogHTTPResponse(@"%p, Call connection did prepared", self);
         KTVHCLogHTTPResponse(@"%p, Call connection did prepared", self);
         [self.connection responseHasAvailableData:self];
         [self.connection responseHasAvailableData:self];
     }
     }
 }
 }
 
 
-- (void)ktv_readerHasAvailableData:(KTVHCDataReader *)reader
+- (void)readerHasAvailableData:(KTVHCDataReader *)reader
 {
 {
     KTVHCLogHTTPResponse(@"%p, Has available data", self);
     KTVHCLogHTTPResponse(@"%p, Has available data", self);
     [self.connection responseHasAvailableData:self];
     [self.connection responseHasAvailableData:self];
 }
 }
 
 
-- (void)ktv_reader:(KTVHCDataReader *)reader didFailWithError:(NSError *)error
+- (void)reader:(KTVHCDataReader *)reader didFailed:(NSError *)error
 {
 {
     KTVHCLogHTTPResponse(@"%p, Failed\nError : %@", self, error);
     KTVHCLogHTTPResponse(@"%p, Failed\nError : %@", self, error);
     [self.reader close];
     [self.reader close];

+ 2 - 2
Carthage/Checkouts/KTVHTTPCache/KTVHTTPCache/Classes/KTVHCHTTPServer/KTVHCHTTPServer.h

@@ -15,9 +15,9 @@
 
 
 + (instancetype)server;
 + (instancetype)server;
 
 
-@property (nonatomic, readonly, getter=isRunning) BOOL running;
+@property (nonatomic, assign, readonly) BOOL running;
 
 
-- (BOOL)start:(NSError **)error;
+- (void)start:(NSError **)error;
 - (void)stop;
 - (void)stop;
 
 
 - (NSURL *)URLWithOriginalURL:(NSURL *)URL;
 - (NSURL *)URLWithOriginalURL:(NSURL *)URL;

+ 100 - 108
Carthage/Checkouts/KTVHTTPCache/KTVHTTPCache/Classes/KTVHCHTTPServer/KTVHCHTTPServer.m

@@ -7,16 +7,20 @@
 //
 //
 
 
 #import "KTVHCHTTPServer.h"
 #import "KTVHCHTTPServer.h"
-#import "KTVHCHTTPConnection.h"
 #import "KTVHCHTTPHeader.h"
 #import "KTVHCHTTPHeader.h"
-#import "KTVHCURLTool.h"
+#import "KTVHCHTTPConnection.h"
+#import "KTVHCHTTPURL.h"
 #import "KTVHCLog.h"
 #import "KTVHCLog.h"
 
 
 @interface KTVHCHTTPServer ()
 @interface KTVHCHTTPServer ()
 
 
-@property (nonatomic, strong) HTTPServer *server;
-@property (nonatomic) UIBackgroundTaskIdentifier backgroundTask;
-@property (nonatomic) BOOL wantsRunning;
+@property (nonatomic, strong) HTTPServer * coreHTTPServer;
+
+@property (nonatomic, assign) BOOL pinging;
+@property (nonatomic, assign) BOOL pingResult;
+@property (nonatomic, strong) NSCondition * pingCondition;
+@property (nonatomic, strong) NSURLSession * pingSession;
+@property (nonatomic, strong) NSURLSessionDataTask * pingTask;
 
 
 @end
 @end
 
 
@@ -24,7 +28,7 @@
 
 
 + (instancetype)server
 + (instancetype)server
 {
 {
-    static KTVHCHTTPServer *obj = nil;
+    static KTVHCHTTPServer * obj = nil;
     static dispatch_once_t onceToken;
     static dispatch_once_t onceToken;
     dispatch_once(&onceToken, ^{
     dispatch_once(&onceToken, ^{
         obj = [[self alloc] init];
         obj = [[self alloc] init];
@@ -34,21 +38,9 @@
 
 
 - (instancetype)init
 - (instancetype)init
 {
 {
-    if (self = [super init]) {
+    if (self = [super init])
+    {
         KTVHCLogAlloc(self);
         KTVHCLogAlloc(self);
-        self.backgroundTask = UIBackgroundTaskInvalid;
-        [[NSNotificationCenter defaultCenter] addObserver:self
-                                                 selector:@selector(applicationDidEnterBackground)
-                                                     name:UIApplicationDidEnterBackgroundNotification
-                                                   object:nil];
-        [[NSNotificationCenter defaultCenter] addObserver:self
-                                                 selector:@selector(applicationWillEnterForeground)
-                                                     name:UIApplicationWillEnterForegroundNotification
-                                                   object:nil];
-        [[NSNotificationCenter defaultCenter] addObserver:self
-                                                 selector:@selector(HTTPConnectionDidDie)
-                                                     name:HTTPConnectionDidDieNotification
-                                                   object:nil];
     }
     }
     return self;
     return self;
 }
 }
@@ -56,119 +48,119 @@
 - (void)dealloc
 - (void)dealloc
 {
 {
     KTVHCLogDealloc(self);
     KTVHCLogDealloc(self);
-    [self stopInternal];
+    [self stop];
 }
 }
 
 
-- (BOOL)isRunning
+- (BOOL)restart
 {
 {
-    return self.server.isRunning;
+    KTVHCLogHTTPServer(@"%p, Restart connection count : %lld", self, (long long)[self.coreHTTPServer numberOfHTTPConnections]);
+    [self.coreHTTPServer stop];
+    NSError * error = nil;
+    [self.coreHTTPServer start:&error];
+    if (error) {
+        KTVHCLogHTTPServer(@"%p, Restart server failed : %@", self, error);
+    } else {
+        KTVHCLogHTTPServer(@"%p, Restart server success", self);
+    }
+    return error == nil;
 }
 }
 
 
-- (BOOL)start:(NSError **)error
+- (void)start:(NSError * __autoreleasing *)error
 {
 {
-    self.wantsRunning = YES;
-    return [self startInternal:error];
+    self.coreHTTPServer = [[HTTPServer alloc] init];
+    [self.coreHTTPServer setConnectionClass:[KTVHCHTTPConnection class]];
+    [self.coreHTTPServer setType:@"_http._tcp."];
+    NSError * tempError = nil;
+    [self.coreHTTPServer start:&tempError];
+    if (tempError) {
+        * error = tempError;
+        KTVHCLogHTTPServer(@"%p, Start server failed : %@", self, tempError);
+    } else {
+        KTVHCLogHTTPServer(@"%p, Start server success", self);
+    }
 }
 }
 
 
 - (void)stop
 - (void)stop
 {
 {
-    self.wantsRunning = NO;
-    [self stopInternal];
+    if (self.running)
+    {
+        [self.coreHTTPServer stop];
+        [self.pingSession invalidateAndCancel];
+        [self.pingTask cancel];
+        self.pingTask = nil;
+        self.pingSession = nil;
+        KTVHCLogHTTPServer(@"%p, Stop server", self);
+    }
 }
 }
 
 
 - (NSURL *)URLWithOriginalURL:(NSURL *)URL
 - (NSURL *)URLWithOriginalURL:(NSURL *)URL
 {
 {
-    if (!URL || URL.isFileURL || URL.absoluteString.length == 0) {
-        return URL;
+    BOOL success = NO;
+    for (int i = 0; i < 2 && !success && self.running && [URL.scheme hasPrefix:@"http"]; i++)
+    {
+        if (i > 0)
+        {
+            [self restart];
+        }
+        success = [self ping];
+        KTVHCLogHTTPServer(@"%p, Ping\nsuccess : %d\nindex : %d", self, success, i);
     }
     }
-    if (!self.isRunning) {
-        return URL;
+    if (success)
+    {
+        KTVHCHTTPURL * HCURL = [[KTVHCHTTPURL alloc] initWithOriginalURL:URL];
+        URL = [HCURL proxyURLWithPort:self.coreHTTPServer.listeningPort];
     }
     }
-    NSString *original = [[KTVHCURLTool tool] URLEncode:URL.absoluteString];
-    NSString *server = [NSString stringWithFormat:@"http://localhost:%d/", self.server.listeningPort];
-    NSString *extension = URL.pathExtension ? [NSString stringWithFormat:@".%@", URL.pathExtension] : @"";
-    NSString *URLString = [NSString stringWithFormat:@"%@request%@?url=%@", server, extension, original];
-    URL = [NSURL URLWithString:URLString];
     KTVHCLogHTTPServer(@"%p, Return URL\nURL : %@", self, URL);
     KTVHCLogHTTPServer(@"%p, Return URL\nURL : %@", self, URL);
     return URL;
     return URL;
 }
 }
 
 
-#pragma mark - Internal
-
-- (BOOL)startInternal:(NSError **)error
-{
-    self.server = [[HTTPServer alloc] init];
-    [self.server setConnectionClass:[KTVHCHTTPConnection class]];
-    [self.server setType:@"_http._tcp."];
-    [self.server setPort:80];
-    BOOL ret = [self.server start:error];
-    if (ret) {
-        KTVHCLogHTTPServer(@"%p, Start server success", self);
-    } else {
-        KTVHCLogHTTPServer(@"%p, Start server failed", self);
-    }
-    return ret;
-}
-
-- (void)stopInternal
-{
-    [self.server stop];
-    self.server = nil;
-}
-
-#pragma mark - Background Task
-
-- (void)applicationDidEnterBackground
-{
-    if (self.server.numberOfHTTPConnections > 0) {
-        KTVHCLogHTTPServer(@"%p, enter background", self);
-        [self beginBackgroundTask];
-    } else {
-        KTVHCLogHTTPServer(@"%p, enter background and stop server", self);
-        [self stopInternal];
-    }
-}
-
-- (void)applicationWillEnterForeground
+- (BOOL)ping
 {
 {
-    KTVHCLogHTTPServer(@"%p, enter foreground", self);
-    if (self.backgroundTask == UIBackgroundTaskInvalid && self.wantsRunning) {
-        KTVHCLogHTTPServer(@"%p, restart server", self);
-        [self startInternal:nil];
-    }
-    [self endBackgroundTask];
-}
-
-- (void)HTTPConnectionDidDie
-{
-    KTVHCLogHTTPServer(@"%p, connection did die", self);
-    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
-        if ([UIApplication sharedApplication].applicationState == UIApplicationStateBackground &&
-            self.server.numberOfHTTPConnections == 0) {
-            KTVHCLogHTTPServer(@"%p, server idle", self);
-            [self endBackgroundTask];
-            [self stopInternal];
+    if (self.running)
+    {
+        if (!self.pingCondition)
+        {
+            self.pingCondition = [[NSCondition alloc] init];
         }
         }
-    });
-}
-
-- (void)beginBackgroundTask
-{
-    KTVHCLogHTTPServer(@"%p, begin background task", self);
-    self.backgroundTask = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
-        KTVHCLogHTTPServer(@"%p, background task expiration", self);
-        [self endBackgroundTask];
-        [self stopInternal];
-    }];
+        [self.pingCondition lock];
+        if (self.pinging)
+        {
+            [self.pingCondition wait];
+        }
+        else
+        {
+            NSURL * pingURL = [[KTVHCHTTPURL pingURL] proxyURLWithPort:self.coreHTTPServer.listeningPort];
+            if (!self.pingSession)
+            {
+                NSURLSessionConfiguration * sessionConfiguration = [NSURLSessionConfiguration defaultSessionConfiguration];
+                sessionConfiguration.timeoutIntervalForRequest = 3;
+                self.pingSession = [NSURLSession sessionWithConfiguration:sessionConfiguration];
+            }
+            self.pingTask = [self.pingSession dataTaskWithURL:pingURL completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
+                [self.pingCondition lock];
+                if (!error && data.length > 0) {
+                    NSString * pang = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
+                    self.pingResult = [pang isEqualToString:[KTVHCHTTPConnection pingResponseValue]];
+                } else {
+                    self.pingResult = NO;
+                }
+                self.pinging = NO;
+                [self.pingCondition broadcast];
+                [self.pingCondition unlock];
+            }];
+            self.pinging = YES;
+            [self.pingTask resume];
+            [self.pingCondition wait];
+        }
+        [self.pingCondition unlock];
+    }
+    KTVHCLogHTTPServer(@"%p, Ping result : %d", self, self.pingResult);
+    return self.pingResult;
 }
 }
 
 
-- (void)endBackgroundTask
+- (BOOL)running
 {
 {
-    if (self.backgroundTask != UIBackgroundTaskInvalid) {
-        KTVHCLogHTTPServer(@"%p, end background task", self);
-        [[UIApplication sharedApplication] endBackgroundTask:self.backgroundTask];
-        self.backgroundTask = UIBackgroundTaskInvalid;
-    }
+    return self.coreHTTPServer.isRunning;
 }
 }
 
 
 @end
 @end

+ 8 - 335
Carthage/Checkouts/KTVHTTPCache/KTVHTTPCache/KTVHTTPCache.h

@@ -2,28 +2,18 @@
 //  KTVHTTPCache.h
 //  KTVHTTPCache.h
 //  KTVHTTPCache
 //  KTVHTTPCache
 //
 //
-//  Created by Single on 2017/8/13.
+//  Created by Single on 2017/8/10.
 //  Copyright © 2017年 Single. All rights reserved.
 //  Copyright © 2017年 Single. All rights reserved.
 //
 //
 
 
-#import <Foundation/Foundation.h>
+#import <UIKit/UIKit.h>
 
 
-#if __has_include(<KTVHTTPCache/KTVHTTPCache.h>)
+#pragma mark - Interface
 
 
-FOUNDATION_EXPORT double KTVHTTPCacheVersionNumber;
-FOUNDATION_EXPORT const unsigned char KTVHTTPCacheVersionString[];
+#import "KTVHTTPCacheImp.h"
 
 
-#import <KTVHTTPCache/KTVHCRange.h>
-#import <KTVHTTPCache/KTVHCDataReader.h>
-#import <KTVHTTPCache/KTVHCDataLoader.h>
-#import <KTVHTTPCache/KTVHCDataRequest.h>
-#import <KTVHTTPCache/KTVHCDataResponse.h>
-#import <KTVHTTPCache/KTVHCDataCacheItem.h>
-#import <KTVHTTPCache/KTVHCDataCacheItemZone.h>
-
-#else
+#pragma mark - Data Storage
 
 
-#import "KTVHCRange.h"
 #import "KTVHCDataReader.h"
 #import "KTVHCDataReader.h"
 #import "KTVHCDataLoader.h"
 #import "KTVHCDataLoader.h"
 #import "KTVHCDataRequest.h"
 #import "KTVHCDataRequest.h"
@@ -31,324 +21,7 @@ FOUNDATION_EXPORT const unsigned char KTVHTTPCacheVersionString[];
 #import "KTVHCDataCacheItem.h"
 #import "KTVHCDataCacheItem.h"
 #import "KTVHCDataCacheItemZone.h"
 #import "KTVHCDataCacheItemZone.h"
 
 
-#endif
-
-/**
- *  KTVHTTPCache is a smart media cache framework.
- */
-@interface KTVHTTPCache : NSObject
-
-/**
- *  HTTP Server
- *
- *  This part is used to access the local HTTP server module.
- *  The prefix for API is 'proxy'.
- */
-#pragma mark - HTTP Server
-
-/**
- *  Start the proxy service.
- *
- *  @param error : Pointer to receive service error.
- *  @return YES when the proxy service is successfully started, otherwise NO.
- */
-+ (BOOL)proxyStart:(NSError **)error;
-
-/**
- *  Stop the proxy service.
- */
-+ (void)proxyStop;
-
-/**
- *  Proxy service running status.
- *
- *  @return YES when the proxy service is running, otherwise NO.
- */
-+ (BOOL)proxyIsRunning;
-
-/**
- *  Convert the URL to the proxy URL.
- *
- *  @param URL : The URL for HTTP content.
- *  @return If the param is a file URL or the proxy service isn't running, return URL. Otherwise reutrn the proxy URL.
- */
-+ (NSURL *)proxyURLWithOriginalURL:(NSURL *)URL;
-
-/**
- *  Data Storage
- *
- *  This part is used to access the data storage module.
- *  The prefix for API is 'cache'.
- */
-#pragma mark - Data Storage
-
-/**
- *  Convert the URL to the file URL if the cache is complete.
- *
- *  @param URL : The URL for HTTP content.
- *  @return If the contents of the URL have all been cached, return the complete file URL. Otherwise return nil.
- */
-+ (NSURL *)cacheCompleteFileURLWithURL:(NSURL *)URL;
-
-/**
- *  Create the data reader for the request.
- *
- *  @param request : The request of the expected data.
- *  @return The data reader for request.
- */
-+ (KTVHCDataReader *)cacheReaderWithRequest:(KTVHCDataRequest *)request;
-
-/**
- *  Create the data loader for the request.
- *
- *  @param request : The request of the expected data.
- *  @return The data loader for request.
- */
-+ (KTVHCDataLoader *)cacheLoaderWithRequest:(KTVHCDataRequest *)request;
-
-/**
- *  Set the maximum cache length.
- *  If the current cache length exceeds the maximum length, it will be deleted starting with the oldest cached data.
- *
- *  @param maxCacheLength : The maximum cache length.
- */
-+ (void)cacheSetMaxCacheLength:(long long)maxCacheLength;
-
-/**
- *  Get the maximum cache length.
- *
- *  @return Maximum cache length.
- */
-+ (long long)cacheMaxCacheLength;
-
-/**
- *  Get the current cached length.
- *
- *  @return Current cached length
- */
-+ (long long)cacheTotalCacheLength;
-
-/**
- *  Create the cache item for the URL.
- *
- *  @param URL : The URL for HTTP content.
- *  @return The cache item for URL.
- */
-+ (KTVHCDataCacheItem *)cacheCacheItemWithURL:(NSURL *)URL;
-
-/**
- *  Get all cache items.
- *
- *  @return All cache items.
- */
-+ (NSArray<KTVHCDataCacheItem *> *)cacheAllCacheItems;
-
-/**
- *  Delete cache for URL.
- *
- *  @param URL : The URL for HTTP content.
- */
-+ (void)cacheDeleteCacheWithURL:(NSURL *)URL;
-
-/**
- *  Delete all caches.
- */
-+ (void)cacheDeleteAllCaches;
-
-/**
- *  Encode
- *
- *  This part is used to access the encode module.
- *  The prefix for API is 'encode'.
- */
-#pragma mark - Encode
-
-/**
- *  Set URL converter.
- *  If the URL contains authentication parameters. It can be removed here to ensure that the indeterminate URL can use the same cache.
- *
- *  @warning High frequency call. Make it simple.
- *
- *  @param URLConverter : The URLConverter.
- */
-+ (void)encodeSetURLConverter:(NSURL * (^)(NSURL *URL))URLConverter;
-
-/**
- *  Download
- *
- *  This part is used to access the download module.
- *  The prefix for API is 'download'.
- */
-#pragma mark - Download
-
-/**
- *  Set the HTTP timeout interval.
- *
- *  @param timeoutInterval : The HTTP timeout interval.
- */
-+ (void)downloadSetTimeoutInterval:(NSTimeInterval)timeoutInterval;
+#pragma mark - Common
 
 
-/**
- *  Set HTTP timeout interval.
- *
- *  @return The current HTTP timeout interval.
- */
-+ (NSTimeInterval)downloadTimeoutInterval;
-
-/**
- *  Set the whitelist header keys.
- *  The following keys are only supported by default:
- *      User-Agent, Connection, Accept, Accept-Encoding, Accept-Language, Range
- *  If you want to allow other keys, set them here.
- *
- *  @param whitelistHeaderKeys : The keys can be allowed.
- */
-+ (void)downloadSetWhitelistHeaderKeys:(NSArray<NSString *> *)whitelistHeaderKeys;
-
-/**
- *  Get the current whitelist header keys.
- */
-+ (NSArray<NSString *> *)downloadWhitelistHeaderKeys;
-
-/**
- *  Set the additional headers.
- *  If you want to add extra headers, set them here.
- *
- *  @param additionalHeaders : The headers will be added.
- */
-+ (void)downloadSetAdditionalHeaders:(NSDictionary<NSString *, NSString *> *)additionalHeaders;
-
-/**
- *  Get the current additional headers.
- */
-+ (NSDictionary<NSString *, NSString *> *)downloadAdditionalHeaders;
-
-/**
- *  Set the acceptable content types.
- *  The following values are only supported by default:
- *      video/x, audio/x, application/mp4, application/octet-stream, binary/octet-stream
- *  If you want to allow other content types, set them here.
- *
- *  @param acceptableContentTypes : The content types can be allowed.
- */
-+ (void)downloadSetAcceptableContentTypes:(NSArray<NSString *> *)acceptableContentTypes;
-
-/**
- *  Get the current acceptable content types.
- */
-+ (NSArray<NSString *> *)downloadAcceptableContentTypes;
-
-/**
- *  Set the unacceptable content type disposer.
- *  If the receive response's Content-Type not included in acceptContentTypes, this method will be called.
- *  If the return value of block is YES, you can continue to load resources. Otherwise the HTTP task will be rejected.
- *
- *  @param unacceptableContentTypeDisposer : The unacceptable content type disposer.
- */
-+ (void)downloadSetUnacceptableContentTypeDisposer:(BOOL(^)(NSURL *URL, NSString *contentType))unacceptableContentTypeDisposer;
-
-/**
- *  Log
- *
- *  This part is used to access the Log module.
- *  The prefix for API is 'log'.
- */
-#pragma mark - Log
-
-/**
- *  Add an external log.
- *
- *  @param log : An external log.
- */
-+ (void)logAddLog:(NSString *)log;
-
-/**
- *  Set whether to enable the console log.
- *  Default is NO.
- *
- *  @param consoleLogEnable : The value to enable the console log.
- */
-+ (void)logSetConsoleLogEnable:(BOOL)consoleLogEnable;
-
-/**
- *  Get the value that enables the console log.
- *
- *  @return The value that enables the console log.
- */
-+ (BOOL)logConsoleLogEnable;
-
-/**
- *  Set whether to enable the record log.
- *  Default is NO.
- *
- *  @param recordLogEnable : The value to enable the record log.
- */
-+ (void)logSetRecordLogEnable:(BOOL)recordLogEnable;
-
-/**
- *  Get the value that enables the record log.
- *
- *  @return The value that enables the record log.
- */
-+ (BOOL)logRecordLogEnable;
-
-/**
- *  Get the path to the log file.
- *
- *  @return The path to the log file.
- */
-+ (NSURL *)logRecordLogFileURL;
-
-/**
- *  Delete the log file.
- */
-+ (void)logDeleteRecordLogFile;
-
-/**
- *  Get all errors
- *
- *  @return All errors.
- */
-+ (NSDictionary<NSURL *, NSError *> *)logErrors;
-
-/**
- *  Get the error for the URL.
- *
- *  @param URL : The URL for HTTP content.
- *  @return The error for the URL.
- */
-+ (NSError *)logErrorForURL:(NSURL *)URL;
-
-/**
- *  Delete the error for the URL.
- *
- *  @param URL : The URL for HTTP content.
- */
-+ (void)logCleanErrorForURL:(NSURL *)URL;
-
-@end
-
-/**
- *  Deprecated
- *
- *  This part is for compatibility with historical versions.
- *
- *  @warning This part will be removed in future versions.
- */
-#pragma mark - Deprecated
-
-@interface KTVHTTPCache (Deprecated)
-
-+ (void)logDeleteRecordLog                                                      __attribute__((deprecated("Use +logDeleteRecordLogFile instead.")));
-+ (NSString *)logRecordLogFilePath                                              __attribute__((deprecated("Use +logRecordLogFileURL instead.")));
-+ (NSString *)proxyURLStringWithOriginalURLString:(NSString *)URLString         __attribute__((deprecated("Use +proxyURLWithOriginalURL: instead.")));
-+ (NSURL *)cacheCompleteFileURLIfExistedWithURL:(NSURL *)URL                    __attribute__((deprecated("Use +cacheCompleteFileURLWithURL: instead.")));
-+ (NSString *)cacheCompleteFilePathIfExistedWithURLString:(NSString *)URLString __attribute__((deprecated("Use +cacheCompleteFileURLWithURL: instead.")));
-+ (KTVHCDataCacheItem *)cacheCacheItemWithURLString:(NSString *)URLString       __attribute__((deprecated("Use +cacheCacheItemWithURL: instead.")));
-+ (void)cacheDeleteCacheWithURLString:(NSString *)URLString                     __attribute__((deprecated("Use +cacheDeleteCacheWithURL: instead.")));
-+ (void)tokenSetURLFilter:(NSURL * (^)(NSURL * URL))URLFilter                   __attribute__((deprecated("Use +encodeSetURLConverter: instead.")));
-+ (void)downloadSetAcceptContentTypes:(NSArray<NSString *> *)acceptContentTypes __attribute__((deprecated("Use +downloadSetAcceptableContentTypes: instead.")));
-+ (NSArray<NSString *> *)downloadAcceptContentTypes                             __attribute__((deprecated("Use +downloadAcceptableContentTypes instead.")));
-+ (void)downloadSetUnsupportContentTypeFilter:(BOOL(^)(NSURL *URL, NSString *contentType))contentTypeFilter __attribute__((deprecated("Use +downloadSetUnacceptableContentTypeDisposer: instead.")));
-
-@end
+#import "KTVHCRange.h"
+#import "KTVHCCommon.h"

+ 1 - 1
Carthage/Checkouts/KTVHTTPCache/LICENSE

@@ -1,6 +1,6 @@
 MIT License
 MIT License
 
 
-Copyright (c) 2017 Single
+Copyright (c) 2017 唱吧
 
 
 Permission is hereby granted, free of charge, to any person obtaining a copy
 Permission is hereby granted, free of charge, to any person obtaining a copy
 of this software and associated documentation files (the "Software"), to deal
 of this software and associated documentation files (the "Software"), to deal

+ 2 - 2
Carthage/Checkouts/PDFGenerator/PDFGenerator.podspec

@@ -1,6 +1,6 @@
 Pod::Spec.new do |s|
 Pod::Spec.new do |s|
   s.name             = "PDFGenerator"
   s.name             = "PDFGenerator"
-  s.version          = "2.1"
+  s.version          = "2.1.1"
   s.summary          = "A simple PDF generator."
   s.summary          = "A simple PDF generator."
   s.homepage         = "https://github.com/sgr-ksmt/PDFGenerator"
   s.homepage         = "https://github.com/sgr-ksmt/PDFGenerator"
   # s.screenshots     = ""
   # s.screenshots     = ""
@@ -9,6 +9,6 @@ Pod::Spec.new do |s|
   s.source           = { :git => "https://github.com/sgr-ksmt/PDFGenerator.git", :tag => s.version.to_s }
   s.source           = { :git => "https://github.com/sgr-ksmt/PDFGenerator.git", :tag => s.version.to_s }
   s.platform         = :ios, '8.0'
   s.platform         = :ios, '8.0'
   s.requires_arc     = true
   s.requires_arc     = true
-  s.source_files     = "PDFGenerator/**/*"
+  s.source_files     = "PDFGenerator/**/*.swift"
   s.frameworks   = 'WebKit'
   s.frameworks   = 'WebKit'
 end
 end

+ 1 - 1
Carthage/Checkouts/SVGKit/Source/DOM classes/Core DOM/DOMGlobalSettings.h

@@ -1 +1 @@
-#define DEBUG_DOM_PARSING 0
+#define DEBUG_DOM_PARSING 0

+ 1 - 1
Carthage/Checkouts/SVGKit/Source/DOM classes/SVG-DOM/SVGNumber.h

@@ -9,4 +9,4 @@
 typedef struct
 typedef struct
 {
 {
 	float value;
 	float value;
-} SVGNumber;
+} SVGNumber;

+ 1 - 1
Carthage/Checkouts/SVGKit/Source/DOM classes/Unported or Partial DOM/SVGElement.h

@@ -61,4 +61,4 @@
 -(NSString*) cascadedValueForStylableProperty:(NSString*) stylableProperty;
 -(NSString*) cascadedValueForStylableProperty:(NSString*) stylableProperty;
 -(NSString*) cascadedValueForStylableProperty:(NSString*) stylableProperty inherit:(BOOL)inherit;
 -(NSString*) cascadedValueForStylableProperty:(NSString*) stylableProperty inherit:(BOOL)inherit;
 
 
-@end
+@end

+ 1 - 1
Carthage/Checkouts/SVGKit/Source/Foundation additions/NSData+NSInputStream.h

@@ -17,4 +17,4 @@
  */
  */
 +(NSData*)dataWithContentsOfStream:(NSInputStream*)input initialCapacity:(NSUInteger)capacity error:(NSError **)error;
 +(NSData*)dataWithContentsOfStream:(NSInputStream*)input initialCapacity:(NSUInteger)capacity error:(NSError **)error;
 
 
-@end
+@end

+ 1 - 1
Carthage/Checkouts/SVGKit/Source/Foundation additions/NSData+NSInputStream.m

@@ -57,4 +57,4 @@
 }
 }
 
 
 
 
-@end
+@end

+ 1 - 6
Carthage/Checkouts/SVGKit/Source/UIKit additions/SVGKFastImageView.m

@@ -39,12 +39,7 @@
 	self = [super initWithFrame:frame];
 	self = [super initWithFrame:frame];
 	if( self )
 	if( self )
 	{
 	{
-#if SVGKIT_UIKIT
-		self.backgroundColor = [UIColor clearColor];
-#else
-        self.layer.backgroundColor = [NSColor clearColor].CGColor;
-#endif
-        
+        [self populateFromImage:nil];
 	}
 	}
 	return self;
 	return self;
 }
 }

+ 1 - 5
Carthage/Checkouts/SVGKit/Source/UIKit additions/SVGKLayeredImageView.m

@@ -46,11 +46,7 @@
 	self = [super initWithFrame:frame];
 	self = [super initWithFrame:frame];
 	if( self )
 	if( self )
 	{
 	{
-#if SVGKIT_UIKIT
-		self.backgroundColor = [UIColor clearColor];
-#else
-        self.layer.backgroundColor = [NSColor clearColor].CGColor;
-#endif
+        [self populateFromImage:nil];
 	}
 	}
 	return self;
 	return self;
 }
 }

+ 0 - 2
Nextcloud.xcodeproj/project.pbxproj

@@ -4434,7 +4434,6 @@
 				);
 				);
 				SDKROOT = iphoneos;
 				SDKROOT = iphoneos;
 				SWIFT_SWIFT3_OBJC_INFERENCE = Off;
 				SWIFT_SWIFT3_OBJC_INFERENCE = Off;
-				SWIFT_VERSION = 4.2;
 			};
 			};
 			name = Debug;
 			name = Debug;
 		};
 		};
@@ -4487,7 +4486,6 @@
 				SDKROOT = iphoneos;
 				SDKROOT = iphoneos;
 				SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
 				SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
 				SWIFT_SWIFT3_OBJC_INFERENCE = Off;
 				SWIFT_SWIFT3_OBJC_INFERENCE = Off;
-				SWIFT_VERSION = 4.2;
 				VALIDATE_PRODUCT = YES;
 				VALIDATE_PRODUCT = YES;
 			};
 			};
 			name = Release;
 			name = Release;

+ 11 - 10
iOSClient/Viewer/NCViewerMedia.swift

@@ -97,8 +97,7 @@ class NCViewerMedia: NSObject {
             
             
             // Save cache
             // Save cache
             if !CCUtility.fileProviderStorageExists(self.metadata.fileID, fileNameView:self.metadata.fileNameView) {
             if !CCUtility.fileProviderStorageExists(self.metadata.fileID, fileNameView:self.metadata.fileNameView) {
-                
-                guard let url = KTVHTTPCache.cacheCompleteFileURL(with: self.videoURL) else {
+                guard let url = KTVHTTPCache.cacheCompleteFileURLIfExisted(with: self.videoURL) else {
                     return
                     return
                 }
                 }
                 
                 
@@ -123,27 +122,29 @@ class NCViewerMedia: NSObject {
     
     
     @objc func setupHTTPCache() {
     @objc func setupHTTPCache() {
         
         
+        var error: NSError?
+
         KTVHTTPCache.cacheSetMaxCacheLength(Int64(k_maxHTTPCache))
         KTVHTTPCache.cacheSetMaxCacheLength(Int64(k_maxHTTPCache))
         
         
         if ProcessInfo.processInfo.environment["SIMULATOR_DEVICE_NAME"] != nil {
         if ProcessInfo.processInfo.environment["SIMULATOR_DEVICE_NAME"] != nil {
             KTVHTTPCache.logSetConsoleLogEnable(true)
             KTVHTTPCache.logSetConsoleLogEnable(true)
         }
         }
         
         
-        do {
-            try KTVHTTPCache.proxyStart()
-        } catch let error {
-            print("Proxy Start error : \(error)")
+        KTVHTTPCache.proxyStart(&error)
+        if error == nil {
+            print("Proxy Start Success")
+        } else {
+            print("Proxy Start error : \(error!)")
         }
         }
-        
-        KTVHTTPCache.encodeSetURLConverter { (url) -> URL? in
+    
+        KTVHTTPCache.tokenSetURLFilter { (url) -> URL? in
             print("URL Filter reviced URL : " + String(describing: url))
             print("URL Filter reviced URL : " + String(describing: url))
             return url
             return url
         }
         }
         
         
-        KTVHTTPCache.downloadSetUnacceptableContentTypeDisposer { (url, contentType) -> Bool in
+        KTVHTTPCache.downloadSetUnsupportContentTypeFilter { (url, contentType) -> Bool in
             print("Unsupport Content-Type Filter reviced URL : " + String(describing: url) + " " + String(describing: contentType))
             print("Unsupport Content-Type Filter reviced URL : " + String(describing: url) + " " + String(describing: contentType))
             return false
             return false
         }
         }
-        
     }
     }
 }
 }