mirror of
https://github.com/mas-cli/mas
synced 2024-12-24 10:53:10 +00:00
57 lines
1.9 KiB
Swift
57 lines
1.9 KiB
Swift
//
|
|
// AppInfoFormatter.swift
|
|
// MasKit
|
|
//
|
|
// Created by Ben Chatelain on 1/7/19.
|
|
// Copyright © 2019 mas-cli. All rights reserved.
|
|
//
|
|
|
|
import Foundation
|
|
|
|
/// Formats text output for the info command.
|
|
struct AppInfoFormatter {
|
|
/// Formats text output with app info.
|
|
///
|
|
/// - Parameter app: Search result with app data.
|
|
/// - Returns: Multiline text output.
|
|
static func format(app: SearchResult) -> String {
|
|
let headline = [
|
|
"\(app.trackName)",
|
|
"\(app.version)",
|
|
"[\(app.price)]"
|
|
].joined(separator: " ")
|
|
|
|
return [
|
|
headline,
|
|
"By: \(app.sellerName)",
|
|
"Released: \(humanReadableDate(app.currentVersionReleaseDate))",
|
|
"Minimum OS: \(app.minimumOsVersion)",
|
|
"Size: \(humanReadableSize(app.fileSizeBytes))",
|
|
"From: \(app.trackViewUrl)"
|
|
].joined(separator: "\n")
|
|
}
|
|
|
|
/// Formats a file size.
|
|
///
|
|
/// - Parameter size: Numeric string.
|
|
/// - Returns: Formatted file size description.
|
|
private static func humanReadableSize(_ size: String) -> String {
|
|
let bytesSize = Int64(size) ?? 0
|
|
return ByteCountFormatter.string(fromByteCount: bytesSize, countStyle: .file)
|
|
}
|
|
|
|
/// Formats a date in format.
|
|
///
|
|
/// - Parameter serverDate: String containing a date in ISO-8601 format.
|
|
/// - Returns: Simple date format.
|
|
private static func humanReadableDate(_ serverDate: String) -> String {
|
|
let serverDateFormatter = DateFormatter()
|
|
serverDateFormatter.locale = Locale(identifier: "en_US_POSIX")
|
|
serverDateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZZZZZ"
|
|
|
|
let humanDateFormatter = DateFormatter()
|
|
humanDateFormatter.timeStyle = .none
|
|
humanDateFormatter.dateStyle = .medium
|
|
return serverDateFormatter.date(from: serverDate).flatMap(humanDateFormatter.string(from:)) ?? ""
|
|
}
|
|
}
|