diff --git a/CHDataManagement/Generator/Post Lists/PostListPageGenerator.swift b/CHDataManagement/Generator/Post Lists/PostListPageGenerator.swift index 045c951..bac605f 100644 --- a/CHDataManagement/Generator/Post Lists/PostListPageGenerator.swift +++ b/CHDataManagement/Generator/Post Lists/PostListPageGenerator.swift @@ -32,7 +32,7 @@ final class PostListPageGenerator { // Sort by newest first, filter drafts let posts = posts .filter { !$0.isDraft } - .sorted(ascending: false) { $0.startDate } + .sorted { $0.startDate > $1.startDate && $0.id < $1.id } let totalCount = posts.count guard totalCount > 0 else { diff --git a/CHDataManagement/Model/DateItem.swift b/CHDataManagement/Model/DateItem.swift index 6c7904c..859cdfd 100644 --- a/CHDataManagement/Model/DateItem.swift +++ b/CHDataManagement/Model/DateItem.swift @@ -2,6 +2,8 @@ import Foundation protocol DateItem { + var id: String { get } + var startDate: Date { get } var hasEndDate: Bool { get } @@ -9,6 +11,18 @@ protocol DateItem { var potentialEndDate: Date { get } } +extension Sequence where Element: DateItem { + + func sortedByStartDateAndId() -> [Element] { + sorted { (lhs, rhs) -> Bool in + if lhs.startDate == rhs.startDate { + return lhs.id < rhs.id + } + return lhs.startDate > rhs.startDate + } + } +} + extension DateItem { var endDate: Date? { diff --git a/CHDataManagement/Model/Loading/LoadingContext.swift b/CHDataManagement/Model/Loading/LoadingContext.swift index 8c786db..e1af776 100644 --- a/CHDataManagement/Model/Loading/LoadingContext.swift +++ b/CHDataManagement/Model/Loading/LoadingContext.swift @@ -24,8 +24,8 @@ final class LoadingContext { func results() -> LoadingResult { .init( settings: settings ?? .default, - posts: posts.values.sorted(ascending: false) { $0.startDate }, - pages: pages.values.sorted(ascending: false) { $0.startDate }, + posts: posts.values.sortedByStartDateAndId(), + pages: pages.values.sortedByStartDateAndId(), tags: tags.values.sorted(), files: files.values.sorted { $0.id }, tagOverview: tagOverview, diff --git a/CHDataManagement/Page Elements/ContentElements/AudioPlayer/AudioPlayerContent.swift b/CHDataManagement/Page Elements/ContentElements/AudioPlayer/AudioPlayerContent.swift index dd50c83..67e51c5 100644 --- a/CHDataManagement/Page Elements/ContentElements/AudioPlayer/AudioPlayerContent.swift +++ b/CHDataManagement/Page Elements/ContentElements/AudioPlayer/AudioPlayerContent.swift @@ -13,14 +13,17 @@ struct AudioPlayerScript: HtmlProducer { let items: [AmplitudeSong] + private let encoder = JSONEncoder() + init(items: [AmplitudeSong]) { self.items = items + encoder.outputFormatting = [.prettyPrinted, .sortedKeys] } func populate(_ result: inout String) { result += "