Sort vehicles by update date

This commit is contained in:
Selim Mustafaev 2020-09-27 19:01:51 +03:00
parent 7e0608b52e
commit dde3c91502
2 changed files with 21 additions and 15 deletions

View File

@ -7,28 +7,28 @@
<key>AutoCat.xcscheme_^#shared#^_</key> <key>AutoCat.xcscheme_^#shared#^_</key>
<dict> <dict>
<key>orderHint</key> <key>orderHint</key>
<integer>1</integer> <integer>0</integer>
</dict> </dict>
<key>Eureka (Playground) 1.xcscheme</key> <key>Eureka (Playground) 1.xcscheme</key>
<dict> <dict>
<key>isShown</key> <key>isShown</key>
<false/> <false/>
<key>orderHint</key> <key>orderHint</key>
<integer>5</integer> <integer>9</integer>
</dict> </dict>
<key>Eureka (Playground) 2.xcscheme</key> <key>Eureka (Playground) 2.xcscheme</key>
<dict> <dict>
<key>isShown</key> <key>isShown</key>
<false/> <false/>
<key>orderHint</key> <key>orderHint</key>
<integer>6</integer> <integer>10</integer>
</dict> </dict>
<key>Eureka (Playground).xcscheme</key> <key>Eureka (Playground).xcscheme</key>
<dict> <dict>
<key>isShown</key> <key>isShown</key>
<false/> <false/>
<key>orderHint</key> <key>orderHint</key>
<integer>4</integer> <integer>3</integer>
</dict> </dict>
<key>GettingStarted (Playground) 1.xcscheme</key> <key>GettingStarted (Playground) 1.xcscheme</key>
<dict> <dict>
@ -70,42 +70,42 @@
<key>isShown</key> <key>isShown</key>
<false/> <false/>
<key>orderHint</key> <key>orderHint</key>
<integer>10</integer> <integer>5</integer>
</dict> </dict>
<key>Rx (Playground) 1.xcscheme</key> <key>Rx (Playground) 1.xcscheme</key>
<dict> <dict>
<key>isShown</key> <key>isShown</key>
<false/> <false/>
<key>orderHint</key> <key>orderHint</key>
<integer>0</integer> <integer>2</integer>
</dict> </dict>
<key>Rx (Playground) 2.xcscheme</key> <key>Rx (Playground) 2.xcscheme</key>
<dict> <dict>
<key>isShown</key> <key>isShown</key>
<false/> <false/>
<key>orderHint</key> <key>orderHint</key>
<integer>3</integer> <integer>4</integer>
</dict> </dict>
<key>Rx (Playground).xcscheme</key> <key>Rx (Playground).xcscheme</key>
<dict> <dict>
<key>isShown</key> <key>isShown</key>
<false/> <false/>
<key>orderHint</key> <key>orderHint</key>
<integer>2</integer> <integer>1</integer>
</dict> </dict>
<key>SwiftDate (Playground) 1.xcscheme</key> <key>SwiftDate (Playground) 1.xcscheme</key>
<dict> <dict>
<key>isShown</key> <key>isShown</key>
<false/> <false/>
<key>orderHint</key> <key>orderHint</key>
<integer>8</integer> <integer>7</integer>
</dict> </dict>
<key>SwiftDate (Playground) 2.xcscheme</key> <key>SwiftDate (Playground) 2.xcscheme</key>
<dict> <dict>
<key>isShown</key> <key>isShown</key>
<false/> <false/>
<key>orderHint</key> <key>orderHint</key>
<integer>9</integer> <integer>8</integer>
</dict> </dict>
<key>SwiftDate (Playground) 3.xcscheme</key> <key>SwiftDate (Playground) 3.xcscheme</key>
<dict> <dict>
@ -133,7 +133,7 @@
<key>isShown</key> <key>isShown</key>
<false/> <false/>
<key>orderHint</key> <key>orderHint</key>
<integer>7</integer> <integer>6</integer>
</dict> </dict>
</dict> </dict>
</dict> </dict>

View File

@ -8,7 +8,12 @@ protocol Dated {
extension Vehicle: Dated { extension Vehicle: Dated {
var date: Date { var date: Date {
Date(timeIntervalSince1970: self.addedDate/1000) 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)
}
} }
} }
@ -24,9 +29,10 @@ extension RandomAccessCollection where Element: Dated & IdentifiableType & Equat
let monthStart = now.dateAtStartOf(.month) let monthStart = now.dateAtStartOf(.month)
var sections: [TimeInterval: [Element]] = [:] var sections: [TimeInterval: [Element]] = [:]
for vehicle in self { for vehicle in self {
var key = vehicle.date.dateAtStartOf(.day).timeIntervalSince1970 let date = vehicle.date
if vehicle.date.isBeforeDate(monthStart, orEqual: false, granularity: .day) { var key = date.dateAtStartOf(.day).timeIntervalSince1970
key = vehicle.date.dateAtStartOf(.month).timeIntervalSince1970 if date.isBeforeDate(monthStart, orEqual: false, granularity: .day) {
key = date.dateAtStartOf(.month).timeIntervalSince1970
} }
if sections[key] == nil { if sections[key] == nil {