From ff7b5fb3678f55710f3c96d58043266b7713465f Mon Sep 17 00:00:00 2001 From: lutfime Date: Wed, 26 Oct 2016 15:18:40 +0800 Subject: [PATCH] Fix vehicleActivity type not updated --- KatsanaAPI/Cache/KMCacheManager.m | 5 ++ KatsanaAPI/Object/KMUser.m | 7 +- KatsanaAPI/Object/ObjectJSONTransformer.swift | 20 +---- KatsanaAPI/Object/VehicleActivity.swift | 89 +++++++++++-------- 4 files changed, 62 insertions(+), 59 deletions(-) diff --git a/KatsanaAPI/Cache/KMCacheManager.m b/KatsanaAPI/Cache/KMCacheManager.m index 086d2f7..2c90db5 100644 --- a/KatsanaAPI/Cache/KMCacheManager.m +++ b/KatsanaAPI/Cache/KMCacheManager.m @@ -188,6 +188,11 @@ - (NSArray*)activityObjects{ NSMutableArray *activities; if (user.userId) { activities = self.activities[user.userId.copy]; + if ([activities.firstObject isKindOfClass:[NSDictionary class]]) { + self.activities = nil; + activities = nil; + } + } return activities.copy; } diff --git a/KatsanaAPI/Object/KMUser.m b/KatsanaAPI/Object/KMUser.m index e472036..37dd90e 100755 --- a/KatsanaAPI/Object/KMUser.m +++ b/KatsanaAPI/Object/KMUser.m @@ -129,7 +129,7 @@ - (void)addActivityObject:(VehicleActivity *)activity{ [activities addObject:activity]; } - NSSortDescriptor* sortOrder = [NSSortDescriptor sortDescriptorWithKey: @"self" + NSSortDescriptor* sortOrder = [NSSortDescriptor sortDescriptorWithKey: @"self.startTime" ascending: NO]; [activities sortUsingDescriptors:@[sortOrder]]; @@ -188,8 +188,9 @@ - (void)updateFilterActivities{ - (NSArray*)activitiesSeparatedByDaysForActivities:(NSArray*)theActivities{ NSMutableArray *group = [NSMutableArray array]; NSMutableArray *currentDayGroup; - - NSArray *activities = [[theActivities sortedArrayUsingSelector:@selector(compare:)] reverseObjectEnumerator].allObjects; + NSSortDescriptor* sortOrder = [NSSortDescriptor sortDescriptorWithKey: @"self.startTime" + ascending: NO]; + NSArray *activities = [theActivities sortedArrayUsingDescriptors:@[sortOrder]]; NSDate *currentDate; for (VehicleActivity *violation in activities) { if (!currentDate || ![[NSCalendar currentCalendar] isDate:currentDate inSameDayAsDate:violation.startTime]) { diff --git a/KatsanaAPI/Object/ObjectJSONTransformer.swift b/KatsanaAPI/Object/ObjectJSONTransformer.swift index 2c6805f..d733aa7 100644 --- a/KatsanaAPI/Object/ObjectJSONTransformer.swift +++ b/KatsanaAPI/Object/ObjectJSONTransformer.swift @@ -150,7 +150,6 @@ class ObjectJSONTransformer: NSObject { let violation = VehicleActivity() violation.violationId = json["id"].intValue violation.policyId = json["policy_id"].intValue - violation.message = json["description"].stringValue violation.address = json["address"].stringValue violation.distance = json["distance"].floatValue violation.duration = json["duration"].floatValue @@ -162,25 +161,8 @@ class ObjectJSONTransformer: NSObject { violation.endPosition = json["end_position"].intValue violation.maxSpeed = json["max_speed"].floatValue violation.averageSpeed = json["average_speed"].floatValue + violation.message = json["description"].stringValue return violation } - -// @{@"id": @"violationId", -// @"policy_id": @"policyId", -// @"policy_type": @"policyType", -// @"description": @"message", -// @"address": @"address", -// @"distance": @"distance", -// @"duration": @"duration", -// @"latitude": @"latitude", -// @"longitude": @"longitude", -// @"start_time": @"startTime", -// @"end_time": @"endTime", -// @"start_position": @"startPosition", -// @"end_position": @"endPosition", -// @"max_speed" : @"maxSpeed", -// @"average_speed" : @"averageSpeed", -// @"idle_duration" : @"idleDuration" -// }; } diff --git a/KatsanaAPI/Object/VehicleActivity.swift b/KatsanaAPI/Object/VehicleActivity.swift index 1236b98..9d8688f 100644 --- a/KatsanaAPI/Object/VehicleActivity.swift +++ b/KatsanaAPI/Object/VehicleActivity.swift @@ -22,6 +22,7 @@ import UIKit case harshAccelerate case harshCorner case speedSummary + case doorAjar //More can be added } @@ -34,19 +35,22 @@ import UIKit //@property (nonatomic, strong) NSString *serverTimeText; public class VehicleActivity: NSObject { + internal var privateAttributedMessage: NSAttributedString! + public var vehicleId: String! public var message: String! public var attributedMessage: NSAttributedString!{ set{ + privateAttributedMessage = newValue } get{ //Implement function updateAttributedMessage in extension for lazy attributed message initialization - if self.attributedMessage == nil { - if responds(to: Selector(("updateAttributedMessage"))) { + if privateAttributedMessage == nil { + if self.responds(to: Selector(("updateAttributedMessage"))) { perform(Selector(("updateAttributedMessage"))) } } - return self.attributedMessage + return privateAttributedMessage } } public var address: String! @@ -71,54 +75,60 @@ public class VehicleActivity: NSObject { public var identifier : String! public var violationId: Int = 0 public var policyId: Int = 0 - public var type: ActivityType = .none + public lazy var type: ActivityType = { + var type : ActivityType = .none + switch self.policyKey { + case "speed": + type = .speed + case "movement": + type = .time + case "area": + type = .area + case "battery-cutoff": + type = .batteryCutoff + case "trip-start": + type = .tripStart + case "speed-summary": + type = .speedSummary + case "harsh-brake": + type = .harshBrake + case "harsh-accelerate": + type = .harshAccelerate + case "harsh-corner": + type = .harshCorner + case "checkpoint": + type = .checkpoint + case "door-ajar": + type = .doorAjar + default: + print("Policy " + self.policyKey + " not handled") + } + return type + }() /// Policy string from server - var policyKey: String!{ - didSet{ - var type : ActivityType! - switch policyKey { - case "speed": - type = .speed - case "movement": - type = .time - case "area": - type = .area - case "battery-cutoff": - type = .batteryCutoff - case "trip-start": - type = .tripStart - case "speed-summary": - type = .speedSummary - case "harsh-brake": - type = .harshBrake - case "harsh-accelerate": - type = .harshAccelerate - case "harsh-corner": - type = .harshCorner - case "checkpoint": - type = .checkpoint - default: - print("Policy" + policyKey + "not handled") - } - self.type = type - } - } + var policyKey: String! + class func fastCodingKeys() -> [String]! { - return ["deviceId", "message", "distance", "duration", "latitude", "longitude", "startTime", "endTime", "startPosition", "endPosition", "violationId", "policyId", "policyKey", "maxSpeed", "averageSpeed", "identifier", "altitude", "course", "speed", "timeString"] + return ["vehicleId", "message", "distance", "duration", "latitude", "longitude", "startTime", "endTime", "startPosition", "endPosition", "violationId", "policyId", "policyKey", "maxSpeed", "averageSpeed", "identifier", "altitude", "course", "speed", "timeString"] + } + + convenience override init() { + self.init(dictionary: nil, identifier: nil) } public init(dictionary:[String : Any]! = nil, identifier:String! = nil) { + super.init() if dictionary != nil { self.policyKey = dictionary["type"] as? String - self.vehicleId = dictionary["device_id"] as? String + self.vehicleId = (dictionary["device_id"] as? NSNumber)?.stringValue self.message = dictionary["message"] as? String self.timeString = dictionary["time"] as? String self.startTime = (dictionary["time"] as? String)?.date(gmt: 0) self.identifier = identifier } - super.init() + } public func coordinate() -> CLLocationCoordinate2D { @@ -138,6 +148,8 @@ public class VehicleActivity: NSObject { completion(address?.optimizedAddress()) }) } + + // MARK: Display public func speedString() -> String { return KatsanaFormatter.speedStringFrom(knot: Double(speed)) @@ -147,4 +159,7 @@ public class VehicleActivity: NSObject { return KatsanaFormatter.speedStringFrom(knot: Double(maxSpeed)) } +// class public func allTypes() -> [String] { +// return ["speed", "movement", "area", "battery-cutoff", "trip-start", "speed-summary", "harsh-brake", "harsh-accelerate", "harsh-corner", "checkpoint"] +// } }