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 }