Skip to content

Commit 704c65f

Browse files
committed
v1.4.2(64)
Fix bugs
1 parent 7729c36 commit 704c65f

File tree

9 files changed

+86
-77
lines changed

9 files changed

+86
-77
lines changed

RemoteCloud/RemoteCloud/FileCache.swift

Lines changed: 38 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,16 @@ public class FileCache {
3030
group.leave()
3131
return
3232
}
33-
var targetURL: URL?
3433
self.persistentContainer.performBackgroundTask { context in
34+
defer {
35+
group.leave()
36+
}
37+
var targetURL: URL?
3538
let fetchrequest = NSFetchRequest<NSFetchRequestResult>(entityName: "FileCacheItem")
3639
fetchrequest.predicate = NSPredicate(format: "storage == %@ && id == %@ && chunkOffset == 0", storage, id)
3740
do{
38-
guard let item = try context.fetch(fetchrequest).first as? FileCacheItem else {
41+
let items = try context.fetch(fetchrequest)
42+
guard let item = items.first as? FileCacheItem else {
3943
return
4044
}
4145
if orgItem.mdate != item.mdate || orgItem.size != item.orgSize {
@@ -65,42 +69,42 @@ public class FileCache {
6569
}
6670
}
6771
catch{
68-
return
72+
print(error)
6973
}
70-
}
71-
if let target = targetURL {
72-
do {
73-
let hFile = try FileHandle(forReadingFrom: target)
74-
defer {
75-
do {
76-
if #available(iOS 13.0, *) {
77-
try hFile.close()
78-
} else {
79-
hFile.closeFile()
74+
if let target = targetURL {
75+
do {
76+
let hFile = try FileHandle(forReadingFrom: target)
77+
defer {
78+
do {
79+
if #available(iOS 13.0, *) {
80+
try hFile.close()
81+
} else {
82+
hFile.closeFile()
83+
}
84+
}
85+
catch {
86+
print(error)
8087
}
8188
}
82-
catch {
83-
print(error)
89+
if #available(iOS 13.0, *) {
90+
try hFile.seek(toOffset: UInt64(offset))
91+
} else {
92+
hFile.seek(toFileOffset: UInt64(offset))
8493
}
85-
}
86-
if #available(iOS 13.0, *) {
87-
try hFile.seek(toOffset: UInt64(offset))
88-
} else {
89-
hFile.seek(toFileOffset: UInt64(offset))
90-
}
91-
if size < 0 {
92-
ret = hFile.readDataToEndOfFile()
94+
if size < 0 {
95+
ret = hFile.readDataToEndOfFile()
96+
return
97+
}
98+
ret = hFile.readData(ofLength: Int(size))
9399
return
94100
}
95-
ret = hFile.readData(ofLength: Int(size))
96-
return
97-
}
98-
catch {
99-
print(error)
101+
catch {
102+
print(error)
103+
}
100104
}
101105
}
102106
}
103-
let _ = group.wait(timeout: .now()+2)
107+
let _ = group.wait()
104108
return ret
105109
}
106110

@@ -123,7 +127,8 @@ public class FileCache {
123127
let fetchrequest = NSFetchRequest<NSFetchRequestResult>(entityName: "FileCacheItem")
124128
fetchrequest.predicate = NSPredicate(format: "storage == %@ && id == %@ && chunkOffset == %lld", storage, id, offset)
125129
do{
126-
guard let item = try context.fetch(fetchrequest).first as? FileCacheItem else {
130+
let items = try context.fetch(fetchrequest)
131+
guard let item = items.first as? FileCacheItem else {
127132
return
128133
}
129134
if orgItem.mdate != item.mdate || orgItem.size != item.orgSize {
@@ -153,20 +158,21 @@ public class FileCache {
153158
}
154159
}
155160
catch{
161+
print(error)
156162
return
157163
}
158164
}
159165

160166
}
161-
let _ = group.wait(timeout: .now()+2)
167+
let _ = group.wait()
162168
return ret
163169
}
164170

165171
public func saveFile(storage: String, id: String, data: Data) {
166172
if getCacheSize() > cacheMaxSize {
167173
increseFreeSpace()
168174
}
169-
175+
170176
do {
171177
let size = Int64(data.count)
172178
let base = try FileManager.default.url(for: .cachesDirectory, in: .userDomainMask, appropriateFor: nil, create: true).appendingPathComponent("NetCache", isDirectory: true)

RemoteCloud/RemoteCloud/RemoteStorage.swift

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -583,7 +583,7 @@ public class RemoteStorageBase: NSObject, RemoteStorage {
583583
var cancelTime = Date(timeIntervalSince1970: 0)
584584

585585
public func cancel() {
586-
cancelTime = Date(timeIntervalSinceNow: 0.1)
586+
cancelTime = Date(timeIntervalSinceNow: 0.5)
587587
}
588588

589589
public func config() -> String {
@@ -661,16 +661,15 @@ public class RemoteStorageBase: NSObject, RemoteStorage {
661661
if fileId == "" {
662662
let backgroundContext = CloudFactory.shared.data.persistentContainer.newBackgroundContext()
663663
self.deleteChild(parent: fileId, context: backgroundContext)
664-
backgroundContext.performAndWait {
664+
backgroundContext.perform {
665665
try? backgroundContext.save()
666+
self.ListChildren(onFinish: onFinish)
666667
}
667-
self.ListChildren(onFinish: onFinish)
668668
}
669669
else {
670670
var path = ""
671671
let backgroundContext = CloudFactory.shared.data.persistentContainer.newBackgroundContext()
672-
673-
backgroundContext.performAndWait {
672+
backgroundContext.perform {
674673
let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "RemoteData")
675674
fetchRequest.predicate = NSPredicate(format: "id == %@ && storage == %@", fileId, self.storageName ?? "")
676675
if let result = try? backgroundContext.fetch(fetchRequest) {
@@ -683,7 +682,7 @@ public class RemoteStorageBase: NSObject, RemoteStorage {
683682
self.deleteChild(parent: fileId, context: backgroundContext)
684683
}
685684
}
686-
backgroundContext.performAndWait {
685+
backgroundContext.perform {
687686
if path != "" {
688687
try? backgroundContext.save()
689688
self.ListChildren(fileId: fileId, path: path, onFinish: onFinish)
@@ -702,7 +701,7 @@ public class RemoteStorageBase: NSObject, RemoteStorage {
702701
else {
703702
var ids: [String] = []
704703
let backgroundContext = CloudFactory.shared.data.persistentContainer.newBackgroundContext()
705-
backgroundContext.performAndWait {
704+
backgroundContext.perform {
706705
let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "RemoteData")
707706
fetchRequest.predicate = NSPredicate(format: "path == %@", path)
708707
if let result = try? backgroundContext.fetch(fetchRequest), let items = result as? [RemoteData] {

RemoteCloud/RemoteCloud/Storages/WebDAVStorage.swift

Lines changed: 20 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -313,15 +313,6 @@ public class WebDAVStorage: NetworkStorage, URLSessionTaskDelegate, URLSessionDa
313313
return .WebDAV
314314
}
315315

316-
public override func cancel() {
317-
if let acceptRange = acceptRange, !acceptRange {
318-
cancelTime = Date(timeIntervalSinceNow: 10)
319-
}
320-
else {
321-
super.cancel()
322-
}
323-
}
324-
325316
var cache_accessUsername = ""
326317
var accessUsername: String {
327318
if let name = storageName {
@@ -377,6 +368,7 @@ public class WebDAVStorage: NetworkStorage, URLSessionTaskDelegate, URLSessionDa
377368
var recvData: [Int: Data] = [:]
378369
var headerHandler: [Int: (URLResponse)->URLSession.ResponseDisposition] = [:]
379370

371+
let wholeQueue = DispatchQueue(label: "WholeReading")
380372
var wholeReading: [URL] = []
381373

382374
public func urlSession(_ session: URLSession, task: URLSessionTask, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) {
@@ -1040,9 +1032,8 @@ public class WebDAVStorage: NetworkStorage, URLSessionTaskDelegate, URLSessionDa
10401032
}
10411033
}
10421034
//print(url)
1043-
1044-
if wholeReading.contains(url) {
1045-
DispatchQueue.global().asyncAfter(deadline: .now()+Double.random(in: 1..<5)) {
1035+
if wholeQueue.sync(execute: { wholeReading.contains(url) }) {
1036+
DispatchQueue.global().asyncAfter(deadline: .now()+Double.random(in: 0..<1)) {
10461037
if self.cancelTime.timeIntervalSinceNow > 0 {
10471038
self.cancelTime = Date(timeIntervalSinceNow: 0.5)
10481039
onFinish?(nil)
@@ -1065,33 +1056,34 @@ public class WebDAVStorage: NetworkStorage, URLSessionTaskDelegate, URLSessionDa
10651056
return
10661057
}
10671058
lastCall = Date()
1068-
wholeReading += [url]
1069-
1059+
wholeQueue.async {
1060+
self.wholeReading += [url]
1061+
}
1062+
10701063
var request: URLRequest
10711064
request = URLRequest(url: url)
10721065

1073-
os_log("%{public}@", log: log, type: .debug, "readFile(WebDAV:\(storageName ?? "") \(fileId) whole read")
1066+
os_log("%{public}@", log: log, type: .debug, "readFile(WebDAV:\(storageName ?? "") \(fileId) whole read \(start ?? 0) \(length ?? -1)")
10741067

10751068
let task = dataSession.dataTask(with: request)
1076-
let timer1 = Timer.scheduledTimer(withTimeInterval: 0.1, repeats: true) { t in
1077-
if self.cancelTime.timeIntervalSinceNow > 0 {
1078-
print("cancel")
1079-
self.cancelTime = Date(timeIntervalSinceNow: 1)
1080-
onFinish?(nil)
1081-
task.cancel()
1082-
return
1069+
var timer1: Timer?
1070+
DispatchQueue.main.async {
1071+
timer1 = Timer.scheduledTimer(withTimeInterval: 0.1, repeats: true) { t in
1072+
if self.cancelTime.timeIntervalSinceNow > 0 {
1073+
print("cancel")
1074+
task.cancel()
1075+
self.cancelTime = Date(timeIntervalSinceNow: 0.5)
1076+
onFinish?(nil)
1077+
return
1078+
}
10831079
}
10841080
}
10851081
dataTasks[task.taskIdentifier] = { data, error in
1086-
self.callSemaphore.signal()
1087-
timer1.invalidate()
1088-
var waittime = self.callWait
10891082
if let error = error {
10901083
print(error)
1091-
if (error as NSError).code == -1009 {
1092-
waittime += 30
1093-
}
10941084
}
1085+
self.callSemaphore.signal()
1086+
timer1?.invalidate()
10951087
if let d = data {
10961088
CloudFactory.shared.cache.saveFile(storage: self.storageName!, id: fileId, data: d)
10971089
let s = Int(start ?? 0)

ccViewer/CryptCloudViewer.xcodeproj/project.pbxproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -803,7 +803,7 @@
803803
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
804804
CODE_SIGN_ENTITLEMENTS = ccViewer/ccViewer.entitlements;
805805
CODE_SIGN_STYLE = Automatic;
806-
CURRENT_PROJECT_VERSION = 62;
806+
CURRENT_PROJECT_VERSION = 64;
807807
DERIVE_MACCATALYST_PRODUCT_BUNDLE_IDENTIFIER = YES;
808808
DEVELOPMENT_TEAM = 7A9X38B4YU;
809809
"ENABLE_HARDENED_RUNTIME[sdk=macosx*]" = YES;
@@ -838,7 +838,7 @@
838838
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
839839
CODE_SIGN_ENTITLEMENTS = ccViewer/ccViewer.entitlements;
840840
CODE_SIGN_STYLE = Automatic;
841-
CURRENT_PROJECT_VERSION = 62;
841+
CURRENT_PROJECT_VERSION = 64;
842842
DERIVE_MACCATALYST_PRODUCT_BUNDLE_IDENTIFIER = YES;
843843
DEVELOPMENT_TEAM = 7A9X38B4YU;
844844
"ENABLE_HARDENED_RUNTIME[sdk=macosx*]" = YES;

ccViewer/ccViewer/Base.lproj/LaunchScreen.storyboard

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
11
<?xml version="1.0" encoding="UTF-8"?>
2-
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="14460.31" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
3-
<device id="retina4_7" orientation="portrait">
4-
<adaptation id="fullscreen"/>
5-
</device>
2+
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="15505" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
3+
<device id="retina4_7" orientation="portrait" appearance="light"/>
64
<dependencies>
75
<deployment identifier="iOS"/>
8-
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14460.20"/>
6+
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="15510"/>
97
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
108
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
119
</dependencies>
@@ -20,6 +18,7 @@
2018
<subviews>
2119
<imageView userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="app" translatesAutoresizingMaskIntoConstraints="NO" id="bfX-Rm-C0u">
2220
<rect key="frame" x="59.5" y="205.5" width="256" height="256"/>
21+
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
2322
<constraints>
2423
<constraint firstAttribute="width" constant="256" id="M6P-aU-fXF"/>
2524
<constraint firstAttribute="height" constant="256" id="bfj-je-7va"/>
@@ -40,6 +39,6 @@
4039
</scene>
4140
</scenes>
4241
<resources>
43-
<image name="app" width="245.75999450683594" height="245.75999450683594"/>
42+
<image name="app" width="340" height="340"/>
4443
</resources>
4544
</document>

ccViewer/ccViewer/TableViewControllerItems.swift

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -309,6 +309,7 @@ class TableViewControllerItems: UITableViewController, UISearchResultsUpdating,
309309
super.didMove(toParent: parent)
310310
if parent == nil {
311311
gone = false
312+
semaphore.signal()
312313
}
313314
}
314315

@@ -934,7 +935,10 @@ class TableViewControllerItems: UITableViewController, UISearchResultsUpdating,
934935
if newroot.count == 0 {
935936
self.activityIndicator.startAnimating()
936937
DispatchQueue.global().async {
937-
CloudFactory.shared[self.storageName]?.list(fileId: self.result[indexPath.row].id ?? "") {
938+
CloudFactory.shared[self.storageName]?.list(fileId: self.result[indexPath.row].id ?? "") { [weak self] in
939+
guard let self = self else {
940+
return
941+
}
938942
DispatchQueue.main.async {
939943
self.activityIndicator.stopAnimating()
940944
self.semaphore.signal()
@@ -964,7 +968,10 @@ class TableViewControllerItems: UITableViewController, UISearchResultsUpdating,
964968
if newroot.count == 0 {
965969
activityIndicator.startAnimating()
966970

967-
(CloudFactory.shared[storageName] as? RemoteSubItem)?.listsubitem(fileId: result[indexPath.row].id ?? "") {
971+
(CloudFactory.shared[storageName] as? RemoteSubItem)?.listsubitem(fileId: result[indexPath.row].id ?? "") { [weak self] in
972+
guard let self = self else {
973+
return
974+
}
968975
DispatchQueue.main.async {
969976
self.activityIndicator.stopAnimating()
970977
self.semaphore.signal()
@@ -1314,6 +1321,7 @@ class TableViewControllerItems: UITableViewController, UISearchResultsUpdating,
13141321
guard self.downloadProgress.isLive else {
13151322
self.semaphore.signal()
13161323
stream.isLive = false
1324+
item.cancel()
13171325
return
13181326
}
13191327
DispatchQueue.main.async {
@@ -1359,6 +1367,7 @@ class TableViewControllerItems: UITableViewController, UISearchResultsUpdating,
13591367
guard self.downloadProgress.isLive else {
13601368
self.semaphore.signal()
13611369
stream.isLive = false
1370+
item.cancel()
13621371
return
13631372
}
13641373
DispatchQueue.main.async {

ccViewer/ccViewer/TableViewControllerItemsEdit.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -238,6 +238,7 @@ class TableViewControllerItemsEdit: UITableViewController, UISearchResultsUpdati
238238
override func didMove(toParent parent: UIViewController?) {
239239
if parent == nil {
240240
gone = false
241+
semaphore.signal()
241242
}
242243
}
243244

ccViewer/ccViewer/TableViewControllerPlaylist.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@ class TableViewControllerPlaylist: UITableViewController, UISearchResultsUpdatin
9696
super.didMove(toParent: parent)
9797
if parent == nil {
9898
gone = false
99+
semaphore.signal()
99100
}
100101
}
101102

ccViewer/ccViewer/ViewControllerImage.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,7 @@ class ViewControllerImage: UIViewController, UIScrollViewDelegate, UIDocumentInt
243243
self.isDownloading = false
244244
guard self.downloadProgress.isLive else {
245245
stream.isLive = false
246+
self.items[idx].cancel()
246247
return
247248
}
248249
DispatchQueue.main.async {
@@ -362,6 +363,7 @@ class ViewControllerImage: UIViewController, UIScrollViewDelegate, UIDocumentInt
362363
}) { data in
363364
guard self.downloadProgress.isLive else {
364365
stream.isLive = false
366+
self.items[self.itemIdx].cancel()
365367
return
366368
}
367369
DispatchQueue.main.async {

0 commit comments

Comments
 (0)