Warning, /network/kdeconnect-ios/KDE Connect/KDE Connect/Swift Backend/FileTransferItem.swift is written in an unsupported language. File is not indexed.
0001 /* 0002 * SPDX-FileCopyrightText: 2023 Apollo Zhu <public-apollonian@outlook.com> 0003 * 0004 * SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL 0005 */ 0006 0007 // 0008 // FileTransferItem.swift 0009 // KDE Connect 0010 // 0011 // Created by Apollo Zhu on 2/20/23. 0012 // 0013 0014 import Foundation 0015 import CocoaAsyncSocket 0016 0017 @objc(KDEFileTransferItem) 0018 @objcMembers 0019 class FileTransferItem: NSObject { 0020 let fileHandle: FileHandle 0021 let networkPackage: NetworkPackage 0022 private(set) var info: FileTransferItemInfo 0023 let buffer = NSMutableData() 0024 0025 init(fileHandle: FileHandle, networkPackage: NetworkPackage) { 0026 self.fileHandle = fileHandle 0027 self.networkPackage = networkPackage 0028 guard let path = networkPackage.payloadPath else { 0029 preconditionFailure("NetworkPackage missing payloadPath") 0030 } 0031 guard let name = networkPackage._Body["filename"] as? String else { 0032 preconditionFailure("file transfer package missing filename") 0033 } 0034 self.info = FileTransferItemInfo( 0035 path: path, 0036 name: name, 0037 creationEpoch: networkPackage._Body["creationTime"] as? Int64, 0038 lastModifiedEpoch: networkPackage._Body["lastModified"] as? Int64, 0039 totalBytes: networkPackage._PayloadSize == -1 ? nil : networkPackage._PayloadSize 0040 ) 0041 super.init() 0042 } 0043 0044 var totalBytes: NSNumber? { info.totalBytes as? NSNumber } 0045 0046 var totalBytesCompleted: Int { 0047 get { info.totalBytesCompleted } 0048 set { info.totalBytesCompleted = newValue } 0049 } 0050 } 0051 0052 struct FileTransferItemInfo: Equatable, Identifiable { 0053 let path: URL 0054 let name: String 0055 let creationEpoch: Int64? 0056 let lastModifiedEpoch: Int64? 0057 let totalBytes: Int? 0058 var totalBytesCompleted: Int = 0 0059 0060 var id: URL { path } 0061 } 0062 0063 extension FileTransferItemInfo { 0064 init(path: URL, name: String, totalBytes: Int?, totalBytesCompleted: Int = 0) { 0065 self.init(path: path, name: name, 0066 creationEpoch: nil, lastModifiedEpoch: nil, 0067 totalBytes: totalBytes, totalBytesCompleted: totalBytesCompleted) 0068 } 0069 } 0070 0071 struct FailedFileTransferItemInfo: Identifiable { 0072 let path: URL 0073 let name: String 0074 let error: Error 0075 /// Sometimes file transfers are packaged together and we don't know 0076 /// exact file names, so the other related files are just a number. 0077 let countOtherFailedFilesInTheSameTransfer: Int 0078 0079 var id: URL { path } 0080 }