     /// - Throws: TUSClientError
     public func uploadFileAt(filePath: URL) throws {
         do {
-            let url = try Files.copy(from: filePath)
-            guard let size = try url.resourceValues(forKeys: [.fileSizeKey]).fileSize else {
-                print("Size is unknown")
-                // TODO: Load data and try getting size
-                throw TUSClientError.fileNotFound
-            }
+            let destinationFilePath = try Files.copy(from: filePath)
+            let size = try destinationFilePath.resourceValues(forKeys: [.fileSizeKey]).fileSize ?? Data(contentsOf: destinationFilePath).count
             
-            // TODO: Duplicate
+            // TODO: Duplicate size
             let sizeInKiloBytes = 500 * 1024// Uses safe speed, 500kb
             let ranges = (0..<size).chunkRanges(size: sizeInKiloBytes)
             
-            scheduleUploadsFor(url: url, ranges: ranges)
+            scheduleUploadsFor(filePath: destinationFilePath, ranges: ranges)
         } catch {
-            throw TUSClientError.fileNotFound
+            throw TUSClientError.couldNotCopyFile
         }
-//        // TODO: Copy file from URL
-//        let data = try findData(for: filePath)
-//        scheduleUploadsFor(data: data)
     }
     
     /// Upload data


final class UploadDataTask: Task {
    
//    let chunk: Data
    let url: URL
    let range: Range<Int>
    let uploader: Uploader
    
    init(url: URL, range: Range<Int>, uploader: Uploader) {
        self.url = url
        self.range = range
        self.uploader = uploader
    }
    
    func run(completed: @escaping ([Task]) -> ()) {
        // TODO: Error handling
        let data = try! Data(contentsOf: url)
        let sub = data[range]
        
        uploader.upload(data: sub, range: range) {

        // TODO: error handling
        
        // Store file now
        // TODO: Force
        let filePath = try! Files.store(data: data)
        let sizeInKiloBytes = 500 * 1024// Uses safe speed, 500kb
        let ranges = data.chunkRanges(size: sizeInKiloBytes)
        scheduleUploadsFor(filePath: filePath, ranges: ranges)
    }
    
    /// Start upload based on a file path
    /// - Parameters:
    ///   - filePath: The url to a file's location
    ///   - ranges: The ranges of the file to upload
    private func scheduleUploadsFor(filePath: URL, ranges: [Range<Int>]) {
        let tasks = ranges.map { range in
            UploadDataTask(filePath: filePath, range: range, uploader: Uploader())
        }
        
        total += tasks.count
        scheduler.addGroupedTasks(tasks: tasks)
    }

}

extension TUSClient: SchedulerDelegate {
