2022-11-25 09:03:42 +00:00
|
|
|
import HTML2Markdown
|
2022-11-25 11:00:01 +00:00
|
|
|
import Foundation
|
2022-11-25 09:03:42 +00:00
|
|
|
|
2022-12-16 12:16:48 +00:00
|
|
|
extension AnyStatus {
|
2022-11-29 08:28:17 +00:00
|
|
|
private static var createdAtDateFormatter: DateFormatter {
|
|
|
|
let dateFormatter = DateFormatter()
|
|
|
|
dateFormatter.calendar = .init(identifier: .iso8601)
|
|
|
|
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSXXXXX"
|
|
|
|
dateFormatter.timeZone = .init(abbreviation: "UTC")
|
|
|
|
return dateFormatter
|
|
|
|
}
|
|
|
|
|
|
|
|
private static var createdAtRelativeFormatter: RelativeDateTimeFormatter {
|
|
|
|
let dateFormatter = RelativeDateTimeFormatter()
|
|
|
|
dateFormatter.unitsStyle = .abbreviated
|
|
|
|
return dateFormatter
|
|
|
|
}
|
|
|
|
|
2022-12-16 12:16:48 +00:00
|
|
|
private static var createdAtShortDateFormatted: DateFormatter {
|
|
|
|
let dateFormatter = DateFormatter()
|
|
|
|
dateFormatter.dateStyle = .medium
|
|
|
|
return dateFormatter
|
|
|
|
}
|
|
|
|
|
2022-11-25 09:03:42 +00:00
|
|
|
public var contentAsMarkdown: String {
|
|
|
|
do {
|
|
|
|
let dom = try HTMLParser().parse(html: content)
|
|
|
|
return dom.toMarkdown()
|
|
|
|
} catch {
|
|
|
|
return content
|
|
|
|
}
|
|
|
|
}
|
2022-11-25 11:00:01 +00:00
|
|
|
|
|
|
|
public var createdAtDate: Date {
|
2022-11-29 08:28:17 +00:00
|
|
|
Self.createdAtDateFormatter.date(from: createdAt)!
|
2022-11-25 11:00:01 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
public var createdAtFormatted: String {
|
2022-12-16 12:16:48 +00:00
|
|
|
let calendar = Calendar(identifier: .gregorian)
|
|
|
|
if calendar.numberOfDaysBetween(createdAtDate, and: Date()) > 1 {
|
|
|
|
return Self.createdAtShortDateFormatted.string(from: createdAtDate)
|
|
|
|
} else {
|
|
|
|
return Self.createdAtRelativeFormatter.localizedString(for: createdAtDate, relativeTo: Date())
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
extension Calendar {
|
|
|
|
func numberOfDaysBetween(_ from: Date, and to: Date) -> Int {
|
|
|
|
let fromDate = startOfDay(for: from)
|
|
|
|
let toDate = startOfDay(for: to)
|
|
|
|
let numberOfDays = dateComponents([.day], from: fromDate, to: toDate)
|
|
|
|
|
|
|
|
return numberOfDays.day!
|
2022-11-25 11:00:01 +00:00
|
|
|
}
|
2022-11-25 09:03:42 +00:00
|
|
|
}
|