Files
xcodesApp-mirror/Xcodes/Backend/Progress+.swift

75 lines
3.2 KiB
Swift

import os.log
import Foundation
extension Progress {
var xcodesLocalizedDescription: String {
return localizedAdditionalDescription.replacingOccurrences(of: "", with: "\n")
}
func updateFromAria2(string: String) {
let range = NSRange(location: 0, length: string.utf16.count)
// MARK: Total Downloaded
let regexTotalDownloaded = try! NSRegularExpression(pattern: #"(?<= )(.*)(?=\/)"#)
if let match = regexTotalDownloaded.firstMatch(in: string, options: [], range: range),
let matchRange = Range(match.range(at: 0), in: string),
let totalDownloaded = Int(string[matchRange].replacingOccurrences(of: "B", with: "")) {
self.completedUnitCount = Int64(totalDownloaded)
}
// MARK: Filesize
let regexTotalFileSize = try! NSRegularExpression(pattern: #"(?<=/)(.*)(?=\()"#)
if let match = regexTotalFileSize.firstMatch(in: string, options: [], range: range),
let matchRange = Range(match.range(at: 0), in: string),
let totalFileSize = Int(string[matchRange].replacingOccurrences(of: "B", with: "")) {
if totalFileSize > 0 {
self.totalUnitCount = Int64(totalFileSize)
}
}
// MARK: PERCENT DOWNLOADED
// Since we get fractionCompleted from completedUnitCount + totalUnitCount, no need to process
// let regexPercent = try! NSRegularExpression(pattern: #"((?<percent>\d+)%\))"#)
// MARK: Speed
let regexSpeed = try! NSRegularExpression(pattern: #"(?<=DL:)(.*)(?= )"#)
if let match = regexSpeed.firstMatch(in: string, options: [], range: range),
let matchRange = Range(match.range(at: 0), in: string),
let speed = Int(string[matchRange].replacingOccurrences(of: "B", with: "")) {
self.throughput = speed
} else {
Logger.appState.debug("Could not parse throughput from aria2 download output")
}
// MARK: Estimated Time Remaining
let regexETA = try! NSRegularExpression(pattern: #"(?<=ETA:)(?<hours>\d*h)?(?<minutes>\d*m)?(?<seconds>\d*s)?"#)
if let match = regexETA.firstMatch(in: string, options: [], range: range) {
var seconds: Int = 0
if let matchRange = Range(match.range(withName: "hours"), in: string),
let hours = Int(string[matchRange].replacingOccurrences(of: "h", with: "")) {
seconds += (hours * 60 * 60)
}
if let matchRange = Range(match.range(withName: "minutes"), in: string),
let minutes = Int(string[matchRange].replacingOccurrences(of: "m", with: "")) {
seconds += (minutes * 60)
}
if let matchRange = Range(match.range(withName: "seconds"), in: string),
let second = Int(string[matchRange].replacingOccurrences(of: "s", with: "")) {
seconds += (second)
}
self.estimatedTimeRemaining = TimeInterval(seconds)
}
}
}