mas/MasKit/Formatters/AppInfoFormatter.swift
2019-01-11 19:46:23 -07:00

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:)) ?? ""
}
}