From 7824939c3084d16216b4e341be08603d5120b5a4 Mon Sep 17 00:00:00 2001 From: Maurice Parker Date: Mon, 6 Jan 2020 13:58:51 -0700 Subject: [PATCH] Make OPML generate in a consistent order when the Web Feed name is the same. Issue #1545 --- Frameworks/Account/Account.swift | 4 ++-- Frameworks/Account/Folder.swift | 13 ++++++++++++- Frameworks/Account/WebFeed.swift | 10 ++++++++++ 3 files changed, 24 insertions(+), 3 deletions(-) diff --git a/Frameworks/Account/Account.swift b/Frameworks/Account/Account.swift index 4eac70446..99011abf2 100644 --- a/Frameworks/Account/Account.swift +++ b/Frameworks/Account/Account.swift @@ -1245,10 +1245,10 @@ extension Account: OPMLRepresentable { public func OPMLString(indentLevel: Int, strictConformance: Bool) -> String { var s = "" - for feed in topLevelWebFeeds.sorted(by: { $0.nameForDisplay < $1.nameForDisplay }) { + for feed in topLevelWebFeeds.sorted() { s += feed.OPMLString(indentLevel: indentLevel + 1, strictConformance: strictConformance) } - for folder in folders!.sorted(by: { $0.nameForDisplay < $1.nameForDisplay }) { + for folder in folders!.sorted() { s += folder.OPMLString(indentLevel: indentLevel + 1, strictConformance: strictConformance) } return s diff --git a/Frameworks/Account/Folder.swift b/Frameworks/Account/Folder.swift index 31bb6e4e3..e69e4c939 100644 --- a/Frameworks/Account/Folder.swift +++ b/Frameworks/Account/Folder.swift @@ -189,7 +189,7 @@ extension Folder: OPMLRepresentable { var hasAtLeastOneChild = false - for feed in topLevelWebFeeds.sorted(by: { $0.nameForDisplay < $1.nameForDisplay }) { + for feed in topLevelWebFeeds.sorted() { s += feed.OPMLString(indentLevel: indentLevel + 1, strictConformance: strictConformance) hasAtLeastOneChild = true } @@ -206,3 +206,14 @@ extension Folder: OPMLRepresentable { } } +// MARK: Set + +extension Set where Element == Folder { + + func sorted() -> Array { + return sorted(by: { (folder1, folder2) -> Bool in + return folder1.nameForDisplay.localizedStandardCompare(folder2.nameForDisplay) == .orderedAscending + }) + } + +} diff --git a/Frameworks/Account/WebFeed.swift b/Frameworks/Account/WebFeed.swift index 8fd7d0e7c..c01605c74 100644 --- a/Frameworks/Account/WebFeed.swift +++ b/Frameworks/Account/WebFeed.swift @@ -276,4 +276,14 @@ extension Set where Element == WebFeed { func webFeedIDs() -> Set { return Set(map { $0.webFeedID }) } + + func sorted() -> Array { + return sorted(by: { (webFeed1, webFeed2) -> Bool in + if webFeed1.nameForDisplay.localizedStandardCompare(webFeed2.nameForDisplay) == .orderedSame { + return webFeed1.url < webFeed2.url + } + return webFeed1.nameForDisplay.localizedStandardCompare(webFeed2.nameForDisplay) == .orderedAscending + }) + } + }