Fix if pending file takes too long

This commit is contained in:
Leon Böttger committed 2025-04-04 20:21:17 +02:00
1 parent c0fb5dd303
commit bb86ebc606
7 files changed
+53 -19

No files matched your search

+2 -7
View File
@@ -168,12 +168,7 @@ class AppDelegate: NSObject, NSApplicationDelegate, UNUserNotificationCenterDele
plusWindow?.makeKeyAndOrderFront(nil)
plusWindow?.level = .normal
}
func isPlusVersion() -> Bool {
return UserDefaults.standard.bool(forKey: UserDefaultsKeys.plusVersion.rawValue)
}
func transmissionCount() -> Int {
return UserDefaults.standard.integer(forKey: UserDefaultsKeys.transmissionCount.rawValue)
@@ -287,7 +282,7 @@ class AppDelegate: NSObject, NSApplicationDelegate, UNUserNotificationCenterDele
private func pressAcceptButton(transferID: String) {
if false || (!isPlusVersion() && transmissionCount() > 0) {
if true || (!isPlusVersion() && transmissionCount() > 0) {
self.continueTransmission(accept: true, transferID: transferID, storeInTemp: true)
log("Showing plus screen...")
+1
View File
@@ -7,6 +7,7 @@
import SwiftUI
import AppKit
import NearbyShare
struct SettingsView: View {
@AppStorage(UserDefaultsKeys.automaticallyAcceptFiles.rawValue) private var automaticallyAcceptFiles = false
+1 -1
View File
@@ -6,7 +6,7 @@
//
import SwiftUI
import NearbyShare
struct TutorialView: View {
+1
View File
@@ -6,6 +6,7 @@
//
import SwiftUI
import NearbyShare
struct WelcomeScreen: View {
@@ -1,13 +1,17 @@
//
// UserDefaultKeys.swift
// Helpers.swift
// QuickDrop
//
// Created by Leon Böttger on 26.02.25.
// Created by Leon Böttger on 04.04.25.
//
import Foundation
enum UserDefaultsKeys: String, CaseIterable {
public func isPlusVersion() -> Bool {
return UserDefaults.standard.bool(forKey: UserDefaultsKeys.plusVersion.rawValue)
}
public enum UserDefaultsKeys: String, CaseIterable {
case isEligibleForIap = "isEligibleForIap"
case appLaunchedBefore = "ShowedWelcomeScreen"
case plusVersion = "isPlusVersion"
+37 -2
View File
@@ -43,6 +43,7 @@ class InboundNearbyConnection: NearbyConnection{
DispatchQueue.main.async {
self.delegate?.connectionWasTerminated(connection: self, error: self.lastError)
SaveFilesManager.shared.movePendingFilesToTarget()
SaveFilesManager.shared.stopAccessingSecurityScopedResource()
}
}
@@ -113,6 +114,8 @@ class InboundNearbyConnection: NearbyConnection{
try fileInfo.fileHandle?.close()
transferredFiles[id]!.fileHandle=nil
fileInfo.progress?.unpublish()
SaveFilesManager.shared.registerFileFinishedDownloading(fileInfo.destinationURL)
transferredFiles.removeValue(forKey: id)
if transferredFiles.isEmpty{
try sendDisconnectionAndDisconnect()
@@ -135,6 +138,7 @@ class InboundNearbyConnection: NearbyConnection{
transferredFiles[id]!.fileHandle=nil
fileInfo.progress?.unpublish()
transferredFiles.removeValue(forKey: id)
SaveFilesManager.shared.registerFileFinishedDownloading(fileInfo.destinationURL)
try sendDisconnectionAndDisconnect()
return true
}
@@ -442,8 +446,20 @@ public class SaveFilesManager {
internal let tempDirectory: URL = FileManager.default.temporaryDirectory.appendingPathComponent("Pending")
private var securityScopeUrl: URL?
private var filesFinishedDownloading = [URL]()
public func registerFileFinishedDownloading(_ fileURL: URL) {
filesFinishedDownloading.append(fileURL)
}
public func movePendingFilesToTarget() {
if !isPlusVersion() {
return
}
log("Moving pending files to target directory")
do {
@@ -453,9 +469,16 @@ public class SaveFilesManager {
let target = getSaveDirectory()
for file in files {
let fileName = file.lastPathComponent
var destinationURL = target.appendingPathComponent(fileName)
if !filesFinishedDownloading.contains(destinationURL) {
log("File \(file) not finished downloading, skipping")
log("Pending files: \(filesFinishedDownloading)")
continue
}
var counter = 1
let fileExtension = destinationURL.pathExtension
let baseName = destinationURL.deletingPathExtension().lastPathComponent
@@ -469,10 +492,22 @@ public class SaveFilesManager {
log("Moving file: \(file.lastPathComponent) to \(destinationURL.lastPathComponent)")
try fileManager.copyItem(at: file, to: destinationURL)
let progress = Progress()
progress.fileURL = destinationURL
progress.totalUnitCount = 10
progress.kind = .file
progress.isPausable = false
progress.publish()
DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
progress.completedUnitCount = 10
progress.unpublish()
}
try fileManager.removeItem(at: file)
}
try fileManager.removeItem(at: tempDirectory)
stopAccessingSecurityScopedResource()
log("Moved all pending files to target directory")
+4 -6
View File
@@ -34,11 +34,10 @@
69DCF49C2AB8C58500CBE2CC /* SwiftECC in Frameworks */ = {isa = PBXBuildFile; productRef = 69DCF49B2AB8C58500CBE2CC /* SwiftECC */; };
69DCF49D2AB8C9A500CBE2CC /* libNearbyShare.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 69DCF4812AB70D0600CBE2CC /* libNearbyShare.dylib */; };
69DCF49E2AB8C9A500CBE2CC /* libNearbyShare.dylib in Embed Libraries */ = {isa = PBXBuildFile; fileRef = 69DCF4812AB70D0600CBE2CC /* libNearbyShare.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
EB2F9BFB2DA04B69004010A2 /* Helpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB2F9BFA2DA04B67004010A2 /* Helpers.swift */; };
EB3643602D73A2A2009CDFF8 /* AudioManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB36435F2D73A29F009CDFF8 /* AudioManager.swift */; };
EB3643622D73A2CA009CDFF8 /* timeIsNow.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = EB3643612D73A2CA009CDFF8 /* timeIsNow.mp3 */; };
EB6F62D72D91F4AF00534EC2 /* SettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB6F62D62D91F4AC00534EC2 /* SettingsView.swift */; };
EB6F62DE2D932B4800534EC2 /* UserDefaultsKeys.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB7CD1422D6FAEAF00CB0CB5 /* UserDefaultsKeys.swift */; };
EB7CD1432D6FAEB400CB0CB5 /* UserDefaultsKeys.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB7CD1422D6FAEAF00CB0CB5 /* UserDefaultsKeys.swift */; };
EB7CD1452D6FB0C300CB0CB5 /* Logger.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB7CD1442D6FB0C100CB0CB5 /* Logger.swift */; };
EB7CD1462D6FB0E800CB0CB5 /* Logger.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB7CD1442D6FB0C100CB0CB5 /* Logger.swift */; };
EB7CD1472D6FB0E800CB0CB5 /* Logger.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB7CD1442D6FB0C100CB0CB5 /* Logger.swift */; };
@@ -196,10 +195,10 @@
E9C8C6D22CFF66650053474D /* ro */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ro; path = ro.lproj/ShareViewController.strings; sourceTree = "<group>"; };
E9C8C6D32CFF66650053474D /* ro */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = ro; path = ro.lproj/Localizable.stringsdict; sourceTree = "<group>"; };
E9C8C6D42CFF66650053474D /* ro */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ro; path = ro.lproj/Localizable.strings; sourceTree = "<group>"; };
EB2F9BFA2DA04B67004010A2 /* Helpers.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Helpers.swift; sourceTree = "<group>"; };
EB36435F2D73A29F009CDFF8 /* AudioManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AudioManager.swift; sourceTree = "<group>"; };
EB3643612D73A2CA009CDFF8 /* timeIsNow.mp3 */ = {isa = PBXFileReference; lastKnownFileType = audio.mp3; path = timeIsNow.mp3; sourceTree = "<group>"; };
EB6F62D62D91F4AC00534EC2 /* SettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsView.swift; sourceTree = "<group>"; };
EB7CD1422D6FAEAF00CB0CB5 /* UserDefaultsKeys.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserDefaultsKeys.swift; sourceTree = "<group>"; };
EB7CD1442D6FB0C100CB0CB5 /* Logger.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Logger.swift; sourceTree = "<group>"; };
EB7F540F2D78E6DD00989564 /* Sidebar.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Sidebar.swift; sourceTree = "<group>"; };
EB7F54112D78E95C00989564 /* TutorialView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TutorialView.swift; sourceTree = "<group>"; };
@@ -311,7 +310,6 @@
EB36435F2D73A29F009CDFF8 /* AudioManager.swift */,
EB96ED8E2D7F8103004B3FF1 /* Localized.swift */,
EB7F540F2D78E6DD00989564 /* Sidebar.swift */,
EB7CD1422D6FAEAF00CB0CB5 /* UserDefaultsKeys.swift */,
EB7CD13B2D6F8B6500CB0CB5 /* IAP */,
69DA9A1329E0BF5200A442DA /* Assets.xcassets */,
69D2C33629E78DF400EC7E30 /* Localizable.stringsdict */,
@@ -342,6 +340,7 @@
69DA9A1E29E0C0B300A442DA /* NearbyConnectionManager.swift */,
69DA9A2229E17F0400A442DA /* InboundNearbyConnection.swift */,
691F53BD2ABF03820089FD92 /* OutboundNearbyConnection.swift */,
EB2F9BFA2DA04B67004010A2 /* Helpers.swift */,
698DFAE529E2F91A0064F247 /* NearbyConnection.swift */,
69DA9A2029E0CC4E00A442DA /* Data+Extensions.swift */,
);
@@ -539,7 +538,6 @@
EB3643602D73A2A2009CDFF8 /* AudioManager.swift in Sources */,
EB96ED8C2D7F7E7B004B3FF1 /* QrCodeView.swift in Sources */,
EB7F54142D78E9E700989564 /* LicenseWindow.swift in Sources */,
EB7CD1432D6FAEB400CB0CB5 /* UserDefaultsKeys.swift in Sources */,
69DA9A1229E0BF5100A442DA /* AppDelegate.swift in Sources */,
EB7F54102D78E6DF00989564 /* Sidebar.swift in Sources */,
EB6F62D72D91F4AF00534EC2 /* SettingsView.swift in Sources */,
@@ -554,8 +552,8 @@
buildActionMask = 2147483647;
files = (
69DCF48D2AB70E8C00CBE2CC /* offline_wire_formats.pb.swift in Sources */,
EB2F9BFB2DA04B69004010A2 /* Helpers.swift in Sources */,
69DCF48F2AB70E8C00CBE2CC /* securemessage.pb.swift in Sources */,
EB6F62DE2D932B4800534EC2 /* UserDefaultsKeys.swift in Sources */,
69DCF4912AB70E9700CBE2CC /* NearbyConnection.swift in Sources */,
69DCF4922AB70E9700CBE2CC /* NearbyConnectionManager.swift in Sources */,
69DCF48E2AB70E8C00CBE2CC /* securegcm.pb.swift in Sources */,