From 703e89d3c438aa8673fbfcfa915f4266294bb559 Mon Sep 17 00:00:00 2001 From: Gerrit Linnemann Date: Fri, 23 Dec 2016 10:31:50 +0100 Subject: [PATCH] Age --- .../UserInterfaceState.xcuserstate | Bin 27884 -> 28532 bytes .../xcdebugger/Breakpoints_v2.xcbkptlist | 48 ++++++ OTRS-Watch/Base.lproj/Main.storyboard | 14 +- OTRS-Watch/Constants.swift | 32 ++++ OTRS-Watch/Extension/Date.swift | 142 +++++++++++++++++- .../Extension/ViewControllerExtension.swift | 2 +- .../Model/Extension/TicketExtension.swift | 14 +- 7 files changed, 238 insertions(+), 14 deletions(-) diff --git a/OTRS-Watch.xcodeproj/project.xcworkspace/xcuserdata/linnemann.xcuserdatad/UserInterfaceState.xcuserstate b/OTRS-Watch.xcodeproj/project.xcworkspace/xcuserdata/linnemann.xcuserdatad/UserInterfaceState.xcuserstate index 8c4f5ccd70dee4c0b116378c79773bfe8bc17e8f..e2d2ca55db94c640910f566357589ee2b9946c82 100644 GIT binary patch delta 15091 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 S|FvQBkofD!50Ut95l)_0d*s9e~wV zYu$TWcU{%Gt*f%J@VDSK5C8($0ej#KL_iGOfEVxu0YDBE zAR5GgSP%zPAOmEAERYRyKrYA!1;7M4f>KZgx`Q5|C#VIzzyMGW27(4K0*nL}FbPZs zQ^0gE1MuKW@D-S60bhf~U?o@uR)aNQ12_l{fgizPa0DC$$G~xL5&Qx!fy>|uxC*X; zU%^dqA3Oq&!4vQT{0#|6LJHE5flkmFxgYHlQy`UeI!7vyJGhimnhXv3C&9D%5 zgr%?(>3>*u`!SQek{0#DNCY%N5z!TmW0( zBKS32441<1;R?6`?t=T_F?bT5ffwLq_$&Mk{sHg62kUAVP>x zB8&(pltcs(Nu(1Uhzuf=$Re_d9Kv8B@`ysBh^Qp0h+af*q7N~U7)p#JMiGdZM0`r{ z#2jJ)v5HtttRdDC>xlKl24W+ziP%aUC5{otiJyoQ#7W|3;uLX#xJ>*?+$3%h4~f5s zC&b^xD-w_l$&!ww59v$#kuuVs3?SuX1Q|(2kGMP*vQ^``Yj4UTB$V#$` z>_m1ZyO3SUYO)*IgX~4tk^RVeau_+B96?&h3FN2bRPrP7XYMo=TEQPgN^3^kUrP#lG*3Dn2bC)9Lm4mFqhlKP68M}18#rj}64s1?*YYCW}q z+ClB4c2Sny)DP4F>M-?!dPTja37Vu?+KzUjooNv*rafpW?L+(00koVBrbB2Y9YM#? zv2+5RNT<-LbOxPCYiKQPpz~-GZKg};j&ucGNq3>U(%tDEbUi(g9z+kO$I=#>qY?cn zJ(d29o<@H~&!gwl3+ROwx`}S4Tj&+^N_rK&n%++Dpm)-{=-u=W^d5RI{S$qHK1u&f zU!kwk*XUpAd-Q$!0sWAEMZabQj3eX3I5S?1H{-+jGGR1+o!gUw{K z*lae3)v#JNm({U)*1(pq9obU0jP1(yVe8nw><4T=wm&<79nOx>up`+~>;!fqJBgjl z&R}`=3-(KP8T%c(oc*3%!LDJ~vm4lr>{j+5dxSm8o?uV1XV|msMfMl=DtnFnoxQ={ z=GRdfpb!6;8e`uJf!-YCD6Z3*(X@p4j7afK%ZR|HoD4uYkEbir>`hMu(p8tZ!1)ebH-4Cq-q9Pg#&a;t^z9qW30P}`^- z-dH=Jp{{;FRKu{kUX4P*3BfSIaKRsfn|!3RjA$0z;+4({iw)zSR*an9ilFlC!nW-m z2p(c!9%tloOAG3I*7g$;ZJ?*E>k6#vs>~gWOCrl_8hi9H9}t#koG{zI2Y!c{ODe=423)D5U>3~i_% zGPp-=N*KS*L+Rj-$&mmSNCD0J3q3+AxMJH{Z{SmED#4UB18>3T69RiY(GM#g$ha!3 z_(48y@ha7rF?J^fcCD~L5GDv-1cE>?2mzs77p^N;&2?J@!hsS*fJm-}>&?}1efh=0 z%#e7HY@M3`5kUy7Q9C(u&VaLmAaI`hocjWs%xo@$Utk=?A9D}t z_Zzq_I0;y6BHwUxamW#HTAKym5`4J`+y;MwJK!$&B{!d2$bJ1bA^-+QD4y!A>b#I#p%-?mZ@ zy|I{~5BEJcgtwE*EdDU?KQ#lf3&9X>CDzP&F2lAe9D6NPa;x5Y5sZR~|3BrxB&deT zFa@Tn<=GJhBxij1`?ksoC>UH5g>iH$on2;=(i**CDVGh(lEw`3i$F1i!EP^_y zg$9_%ZR9p^o4IZLE9tO^A}b-q+$OHDN>w^Evb-QNSy%c-$*>GoSfy0XZE1p)+*ZEH zGdiIwtQ7<=hSjhetbyHO57?92&h6lKa=W2wu35Qz%;f75{fia71tvXPje# z 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 diff --git a/OTRS-Watch.xcodeproj/xcuserdata/linnemann.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/OTRS-Watch.xcodeproj/xcuserdata/linnemann.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist index 6911433..928fa50 100644 --- a/OTRS-Watch.xcodeproj/xcuserdata/linnemann.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist +++ b/OTRS-Watch.xcodeproj/xcuserdata/linnemann.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist @@ -67,5 +67,53 @@ landmarkType = "3"> + + + + + + + + + + + + diff --git a/OTRS-Watch/Base.lproj/Main.storyboard b/OTRS-Watch/Base.lproj/Main.storyboard index c93e08a..edd9967 100644 --- a/OTRS-Watch/Base.lproj/Main.storyboard +++ b/OTRS-Watch/Base.lproj/Main.storyboard @@ -1,5 +1,5 @@ - + @@ -734,8 +734,8 @@ - - + + @@ -748,11 +748,11 @@ - + - + @@ -781,7 +781,7 @@ - + @@ -814,7 +814,7 @@ - + diff --git a/OTRS-Watch/Constants.swift b/OTRS-Watch/Constants.swift index 527bff9..674055b 100644 --- a/OTRS-Watch/Constants.swift +++ b/OTRS-Watch/Constants.swift @@ -45,4 +45,36 @@ struct Constants { static let SETTINGS = 1 } } + + struct DATE_TIME { + struct DE { + static let X_YEARS_AGO = "Vor %d Jahren" + static let X_MONTH_AGO = "Vor %d Monaten" + static let X_WEEKS_AGO = "Vor %d Wochen" + static let X_DAYS_AGO = "Vor %d Tagen" + static let X_HOURS_AGO = "Vor %d Stunden" + static let X_MINUTES_AGO = "Vor %d Minuten" + static let X_SECONDS_AGO = "Vor %d Sekunden" + + static let ONE_YEAR_AGO = "Vor 1 Jahr" + static let ONE_MONTH_AGO = "Vor 1 Monat" + static let ONE_WEEK_AGO = "Vor 1 Woche" + static let ONE_DAY_AGO = "Vor 1 Tag" + static let ONE_MINUTE_AGO = "Vor einer Minute" + + static let AN_HOUR_AGO = "Vor einer Stunde" + static let JUST_NOW = "Gerade eben" + static let LAST_YEAR = "Letztes Jahr" + static let LAST_MONTH = "Letzten Monat" + static let LAST_WEEK = "Letzte Woche" + static let YESTERDAY = "Gestern" + + static let THIS_MORNING = "Heute Morgen" + static let THIS_AFTERNOON = "Heute Nachmittag" + static let THIS_WEEK = "Diese Woche" + static let THIS_MONTH = "Diesen Monat" + static let THIS_YEAR = "Dieses Jahr" + static let TODAY = "Heute" + } + } } diff --git a/OTRS-Watch/Extension/Date.swift b/OTRS-Watch/Extension/Date.swift index 8aeada0..1343082 100644 --- a/OTRS-Watch/Extension/Date.swift +++ b/OTRS-Watch/Extension/Date.swift @@ -8,10 +8,150 @@ import Foundation + + extension Date { func toString() -> String { let dateFormatter = DateFormatter() - dateFormatter.dateFormat = "dd.MM.yyyy hh:mm" + dateFormatter.dateFormat = "dd.MM.yyyy" return dateFormatter.string(from: self) } + + // shows 1 or two letter abbreviation for units. + // does not include 'ago' text ... just {value}{unit-abbreviation} + // does not include interim summary options such as 'Just now' + /*public var timeAgoSimple: String { + let components = self.dateComponents() + + if components.year! > 0 { + return stringFromFormat("%%d%@yr", withValue: components.year!) + } + + if components.month! > 0 { + return stringFromFormat("%%d%@mo", withValue: components.month!) + } + + // TODO: localize for other calanders + if components.day! >= 7 { + let value = components.day!/7 + return stringFromFormat("%%d%@w", withValue: value) + } + + if components.day! > 0 { + return stringFromFormat("%%d%@d", withValue: components.day!) + } + + if components.hour! > 0 { + return stringFromFormat("%%d%@h", withValue: components.hour!) + } + + if components.minute! > 0 { + return stringFromFormat("%%d%@m", withValue: components.minute!) + } + + if components.second! > 0 { + return stringFromFormat("%%d%@s", withValue: components.second! ) + } + + return "" + }*/ + + public var timeAgo: String { + let components = self.dateComponents() + + if components.year! > 0 { + if components.year! < 2 { + return Constants.DATE_TIME.DE.LAST_YEAR + } else { + return stringFromFormat(Constants.DATE_TIME.DE.X_YEARS_AGO, withValue: components.year!) + } + } + + if components.month! > 0 { + if components.month! < 2 { + return Constants.DATE_TIME.DE.LAST_MONTH + } else { + return stringFromFormat(Constants.DATE_TIME.DE.X_MONTH_AGO, withValue: components.month!) + } + } + + if components.day! >= 7 { + let week = components.day!/7 + if week < 2 { + return Constants.DATE_TIME.DE.LAST_WEEK + } else { + return stringFromFormat(Constants.DATE_TIME.DE.X_WEEKS_AGO, withValue: week) + } + } + + if components.day! > 0 { + if components.day! < 2 { + return Constants.DATE_TIME.DE.YESTERDAY + } else { + return stringFromFormat(Constants.DATE_TIME.DE.X_DAYS_AGO, withValue: components.day!) + } + } + + if components.hour! > 0 { + if components.hour! < 2 { + return Constants.DATE_TIME.DE.AN_HOUR_AGO + } else { + return stringFromFormat(Constants.DATE_TIME.DE.X_HOURS_AGO, withValue: components.hour!) + } + } + + if components.minute! > 0 { + if components.minute! < 2 { + return Constants.DATE_TIME.DE.ONE_MINUTE_AGO + } else { + return stringFromFormat(Constants.DATE_TIME.DE.X_MINUTES_AGO, withValue: components.minute!) + } + } + + if components.second! > 0 { + if components.second! < 5 { + return Constants.DATE_TIME.DE.JUST_NOW + } else { + return stringFromFormat(Constants.DATE_TIME.DE.X_SECONDS_AGO, withValue: components.second!) + } + } + + return "" + } + + fileprivate func dateComponents() -> DateComponents { + let calander = Calendar.current + return (calander as NSCalendar).components([.second, .minute, .hour, .day, .month, .year], from: self, to: Date(), options: []) + } + + fileprivate func stringFromFormat(_ format: String, withValue value: Int) -> String { + let localeFormat = String(format: format, getLocaleFormatUnderscoresWithValue(Double(value))) + return String(format: format, value) + } + + fileprivate func getLocaleFormatUnderscoresWithValue(_ value: Double) -> String { + guard let localeCode = Locale.preferredLanguages.first else { + return "" + } + + // Russian (ru) and Ukrainian (uk) + if localeCode.hasPrefix("ru") || localeCode.hasPrefix("uk") { + let XY = Int(floor(value)) % 100 + let Y = Int(floor(value)) % 10 + + if Y == 0 || Y > 4 || (XY > 10 && XY < 15) { + return "" + } + + if Y > 1 && Y < 5 && (XY < 10 || XY > 20) { + return "_" + } + + if Y == 1 && XY != 11 { + return "__" + } + } + + return "" + } } diff --git a/OTRS-Watch/Extension/ViewControllerExtension.swift b/OTRS-Watch/Extension/ViewControllerExtension.swift index 2f7be06..f95fe8f 100644 --- a/OTRS-Watch/Extension/ViewControllerExtension.swift +++ b/OTRS-Watch/Extension/ViewControllerExtension.swift @@ -34,7 +34,7 @@ extension ViewController: NSTableViewDataSource, NSTableViewDelegate { if tableColumn == self.ticketTableView.tableColumns[0] { cellIdentifier = CellIdentifiers.OTRSTicketNumber image = nil - text = item.created.toString() + text = item.created.timeAgo } else if tableColumn == self.ticketTableView.tableColumns[1] { cellIdentifier = CellIdentifiers.OTRSTicketDetails image = nil diff --git a/OTRS-Watch/Model/Extension/TicketExtension.swift b/OTRS-Watch/Model/Extension/TicketExtension.swift index 861dfb6..55c7697 100644 --- a/OTRS-Watch/Model/Extension/TicketExtension.swift +++ b/OTRS-Watch/Model/Extension/TicketExtension.swift @@ -75,6 +75,13 @@ extension Ticket { throw SerializationError.missing("Created") } + // extract created, e.g. 2016-11-24 11:30:11 + + guard let createdUnixJSON = source["CreateTimeUnix"] as? String else { + throw SerializationError.missing("CreateTimeUnix") + } + let epochTime: TimeInterval = Double.init(createdUnixJSON)! + // extract changed, e.g. 2016-11-24 13:33:01 guard let changedJSON = source["Changed"] as? String else { throw SerializationError.missing("Changed") @@ -91,14 +98,11 @@ extension Ticket { self.queue = queue_ self.queueID = queueID_ self.state = state_ - if let created:Date = dateFormatter.date(from: createdJSON) { - self.created = created - } else { - self.created = Date.init() - } + self.created = Date(timeIntervalSince1970: epochTime) if let changed:Date = dateFormatter.date(from: changedJSON) { self.changed = changed } else { + print("Error creating date instance from \(createdJSON)") self.changed = Date.init() } }