AutoCat/AutoCat/Extensions/Dated.swift
2020-09-27 19:01:51 +03:00

53 lines
1.6 KiB
Swift

import Foundation
import RxDataSources
import SwiftDate
protocol Dated {
var date: Date { get }
}
extension Vehicle: Dated {
var date: Date {
if let lastEventDate = self.events.max(by: { $0.date < $1.date })?.date {
let ts = max(self.addedDate/1000, lastEventDate)
return Date(timeIntervalSince1970: ts)
} else {
return Date(timeIntervalSince1970: self.addedDate/1000)
}
}
}
extension AudioRecord: Dated {
var date: Date {
Date(timeIntervalSince1970: self.addedDate)
}
}
extension RandomAccessCollection where Element: Dated & IdentifiableType & Equatable {
func groupedByDate() -> [DateSection<Element>] {
let now = Date()
let monthStart = now.dateAtStartOf(.month)
var sections: [TimeInterval: [Element]] = [:]
for vehicle in self {
let date = vehicle.date
var key = date.dateAtStartOf(.day).timeIntervalSince1970
if date.isBeforeDate(monthStart, orEqual: false, granularity: .day) {
key = date.dateAtStartOf(.month).timeIntervalSince1970
}
if sections[key] == nil {
sections[key] = [vehicle]
} else {
sections[key]?.append(vehicle)
}
}
var sectionsArray: [DateSection<Element>] = []
for (timestamp, vehicles) in sections {
sectionsArray.append(DateSection<Element>(timestamp: timestamp, items: vehicles))
}
return sectionsArray.sorted { $0.timestamp > $1.timestamp }
}
}