From f354a2660a1b48c8dfe87cd444c4f35aa6eabf1b Mon Sep 17 00:00:00 2001 From: Fernando Date: Sun, 16 Jul 2023 00:29:43 +0900 Subject: [PATCH] =?UTF-8?q?=F0=9F=9A=91=20Change=20Contribution=20logic=20?= =?UTF-8?q?(#30)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Sources/AppDelegate.swift | 18 +++++++++++++++++- Sources/Consts/ParseKeys.swift | 2 +- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/Sources/AppDelegate.swift b/Sources/AppDelegate.swift index 0796b65..1a3355b 100644 --- a/Sources/AppDelegate.swift +++ b/Sources/AppDelegate.swift @@ -524,11 +524,16 @@ class AppDelegate: NSObject, NSApplicationDelegate { } private func parseHtmltoData(html: String) -> [ContributeData] { + let isoDateFormatter = ISO8601DateFormatter() + isoDateFormatter.formatOptions = [.withFullDate] + do { let doc: Document = try SwiftSoup.parse(html) let rects: Elements = try doc.getElementsByTag(ParseKeys.rect) let days: [Element] = rects.array().filter { $0.hasAttr(ParseKeys.date) } - let weekend = days.suffix(Consts.fetchCount) + let sortedDays = sortDaysByDate(days, with: isoDateFormatter) + + let weekend = sortedDays.suffix(Consts.fetchCount) let contributeDataList = weekend.map(mapFunction) return contributeDataList @@ -537,6 +542,17 @@ class AppDelegate: NSObject, NSApplicationDelegate { } } + private func sortDaysByDate(_ days: [Element], with dateFormatter: ISO8601DateFormatter) -> [Element] { + return days.sorted { (element1, element2) -> Bool in + guard let date1 = try? element1.attr(ParseKeys.date), + let date2 = try? element2.attr(ParseKeys.date), + let date1Value = dateFormatter.date(from: date1), + let date2Value = dateFormatter.date(from: date2) else { + return false + } + return date1Value < date2Value + } + } private func parseHtmltoDataForCount(html: String) -> ContributeData { do { diff --git a/Sources/Consts/ParseKeys.swift b/Sources/Consts/ParseKeys.swift index 750f459..715b5c3 100644 --- a/Sources/Consts/ParseKeys.swift +++ b/Sources/Consts/ParseKeys.swift @@ -9,5 +9,5 @@ import Foundation enum ParseKeys { static let date = "data-date" - static let rect = "rect" + static let rect = "td" }