From e672f6c5ac301009e98e62c06630f5a484d92a5b Mon Sep 17 00:00:00 2001 From: Maurice Parker Date: Tue, 28 Jul 2020 17:47:52 -0500 Subject: [PATCH 1/5] Update to the maintenance branches of the submodules --- .../Account/FeedWrangler/FeedWranglerAccountDelegate.swift | 2 +- Frameworks/Account/Feedbin/FeedbinAccountDelegate.swift | 2 +- Frameworks/Account/Feedly/Models/FeedlyEntryParser.swift | 1 + .../Account/Feedly/OAuthAuthorizationCodeGranting.swift | 4 ++-- Frameworks/Account/ReaderAPI/ReaderAPIAccountDelegate.swift | 2 +- iOS/Article/OpenInSafariActivity.swift | 2 +- 6 files changed, 7 insertions(+), 6 deletions(-) diff --git a/Frameworks/Account/FeedWrangler/FeedWranglerAccountDelegate.swift b/Frameworks/Account/FeedWrangler/FeedWranglerAccountDelegate.swift index 8186e378b..6ed331340 100644 --- a/Frameworks/Account/FeedWrangler/FeedWranglerAccountDelegate.swift +++ b/Frameworks/Account/FeedWrangler/FeedWranglerAccountDelegate.swift @@ -511,7 +511,7 @@ private extension FeedWranglerAccountDelegate { let parsedItems = feedItems.map { (item: FeedWranglerFeedItem) -> ParsedItem in let itemID = String(item.feedItemID) // let authors = ... - let parsedItem = ParsedItem(syncServiceID: itemID, uniqueID: itemID, feedURL: String(item.feedID), url: nil, externalURL: item.url, title: item.title, contentHTML: item.body, contentText: nil, summary: nil, imageURL: nil, bannerImageURL: nil, datePublished: item.publishedDate, dateModified: item.updatedDate, authors: nil, tags: nil, attachments: nil) + let parsedItem = ParsedItem(syncServiceID: itemID, uniqueID: itemID, feedURL: String(item.feedID), url: nil, externalURL: item.url, title: item.title, language: nil, contentHTML: item.body, contentText: nil, summary: nil, imageURL: nil, bannerImageURL: nil, datePublished: item.publishedDate, dateModified: item.updatedDate, authors: nil, tags: nil, attachments: nil) return parsedItem } diff --git a/Frameworks/Account/Feedbin/FeedbinAccountDelegate.swift b/Frameworks/Account/Feedbin/FeedbinAccountDelegate.swift index 35818a012..3d6e7d19d 100644 --- a/Frameworks/Account/Feedbin/FeedbinAccountDelegate.swift +++ b/Frameworks/Account/Feedbin/FeedbinAccountDelegate.swift @@ -1233,7 +1233,7 @@ private extension FeedbinAccountDelegate { let parsedItems: [ParsedItem] = entries.map { entry in let authors = Set([ParsedAuthor(name: entry.authorName, url: entry.jsonFeed?.jsonFeedAuthor?.url, avatarURL: entry.jsonFeed?.jsonFeedAuthor?.avatarURL, emailAddress: nil)]) - return ParsedItem(syncServiceID: String(entry.articleID), uniqueID: String(entry.articleID), feedURL: String(entry.feedID), url: entry.url, externalURL: nil, title: entry.title, contentHTML: entry.contentHTML, contentText: nil, summary: entry.summary, imageURL: nil, bannerImageURL: nil, datePublished: entry.parsedDatePublished, dateModified: nil, authors: authors, tags: nil, attachments: nil) + return ParsedItem(syncServiceID: String(entry.articleID), uniqueID: String(entry.articleID), feedURL: String(entry.feedID), url: entry.url, externalURL: nil, title: entry.title, language: nil, contentHTML: entry.contentHTML, contentText: nil, summary: entry.summary, imageURL: nil, bannerImageURL: nil, datePublished: entry.parsedDatePublished, dateModified: nil, authors: authors, tags: nil, attachments: nil) } return Set(parsedItems) diff --git a/Frameworks/Account/Feedly/Models/FeedlyEntryParser.swift b/Frameworks/Account/Feedly/Models/FeedlyEntryParser.swift index 8af6714c7..2da2edc84 100644 --- a/Frameworks/Account/Feedly/Models/FeedlyEntryParser.swift +++ b/Frameworks/Account/Feedly/Models/FeedlyEntryParser.swift @@ -98,6 +98,7 @@ struct FeedlyEntryParser { url: nil, externalURL: externalUrl, title: title, + language: nil, contentHTML: contentHMTL, contentText: contentText, summary: summary, diff --git a/Frameworks/Account/Feedly/OAuthAuthorizationCodeGranting.swift b/Frameworks/Account/Feedly/OAuthAuthorizationCodeGranting.swift index 735f33bff..836989e78 100644 --- a/Frameworks/Account/Feedly/OAuthAuthorizationCodeGranting.swift +++ b/Frameworks/Account/Feedly/OAuthAuthorizationCodeGranting.swift @@ -70,12 +70,12 @@ public extension OAuthAuthorizationResponse { guard let queryItems = components.queryItems, !queryItems.isEmpty else { throw URLError(.unsupportedURL) } - let code = queryItems.firstElementPassingTest { $0.name.lowercased() == "code" } + let code = queryItems.first { $0.name.lowercased() == "code" } guard let codeValue = code?.value, !codeValue.isEmpty else { throw URLError(.unsupportedURL) } - let state = queryItems.firstElementPassingTest { $0.name.lowercased() == "state" } + let state = queryItems.first { $0.name.lowercased() == "state" } let stateValue = state?.value self.init(code: codeValue, state: stateValue) diff --git a/Frameworks/Account/ReaderAPI/ReaderAPIAccountDelegate.swift b/Frameworks/Account/ReaderAPI/ReaderAPIAccountDelegate.swift index ad55d4e6c..89095f3a0 100644 --- a/Frameworks/Account/ReaderAPI/ReaderAPIAccountDelegate.swift +++ b/Frameworks/Account/ReaderAPI/ReaderAPIAccountDelegate.swift @@ -932,7 +932,7 @@ private extension ReaderAPIAccountDelegate { // let authors = Set([ParsedAuthor(name: entry.authorName, url: entry.jsonFeed?.jsonFeedAuthor?.url, avatarURL: entry.jsonFeed?.jsonFeedAuthor?.avatarURL, emailAddress: nil)]) // let feed = account.idToFeedDictionary[entry.origin.streamId!]! // TODO clean this up - return ParsedItem(syncServiceID: entry.uniqueID(), uniqueID: entry.uniqueID(), feedURL: entry.origin.streamId!, url: nil, externalURL: entry.alternates.first?.url, title: entry.title, contentHTML: entry.summary.content, contentText: nil, summary: entry.summary.content, imageURL: nil, bannerImageURL: nil, datePublished: entry.parseDatePublished(), dateModified: nil, authors: nil, tags: nil, attachments: nil) + return ParsedItem(syncServiceID: entry.uniqueID(), uniqueID: entry.uniqueID(), feedURL: entry.origin.streamId!, url: nil, externalURL: entry.alternates.first?.url, title: entry.title, language: nil, contentHTML: entry.summary.content, contentText: nil, summary: entry.summary.content, imageURL: nil, bannerImageURL: nil, datePublished: entry.parseDatePublished(), dateModified: nil, authors: nil, tags: nil, attachments: nil) } return Set(parsedItems) diff --git a/iOS/Article/OpenInSafariActivity.swift b/iOS/Article/OpenInSafariActivity.swift index a157345fb..9b5b5ed8f 100644 --- a/iOS/Article/OpenInSafariActivity.swift +++ b/iOS/Article/OpenInSafariActivity.swift @@ -37,7 +37,7 @@ class OpenInSafariActivity: UIActivity { } override func perform() { - guard let url = activityItems?.firstElementPassingTest({ $0 is URL }) as? URL else { + guard let url = activityItems?.first(where: { $0 is URL }) as? URL else { activityDidFinish(false) return } From b7afc0a8335f3e549b1f4f127e09ff349c849d2f Mon Sep 17 00:00:00 2001 From: Maurice Parker Date: Tue, 28 Jul 2020 17:50:27 -0500 Subject: [PATCH 2/5] Upgrade to the latest maintenance submodules --- submodules/RSCore | 2 +- submodules/RSDatabase | 2 +- submodules/RSParser | 2 +- submodules/RSTree | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/submodules/RSCore b/submodules/RSCore index a175db500..34c17b358 160000 --- a/submodules/RSCore +++ b/submodules/RSCore @@ -1 +1 @@ -Subproject commit a175db5009f8222fcbaa825d9501305e8727da6f +Subproject commit 34c17b358b883936141a44db7cc5f3dd7e805267 diff --git a/submodules/RSDatabase b/submodules/RSDatabase index de7753914..73b827736 160000 --- a/submodules/RSDatabase +++ b/submodules/RSDatabase @@ -1 +1 @@ -Subproject commit de7753914c4f47aa97adfbe7a121acf0d2f8cd40 +Subproject commit 73b8277369c4d2d3729b7bb33c11bdd7350d81cb diff --git a/submodules/RSParser b/submodules/RSParser index 47ba87875..93ccfb0ea 160000 --- a/submodules/RSParser +++ b/submodules/RSParser @@ -1 +1 @@ -Subproject commit 47ba87875fbd026dccc2c4d4382a98cb4a1f1fbc +Subproject commit 93ccfb0ea5f46603045d0c3e726252b7c60b5060 diff --git a/submodules/RSTree b/submodules/RSTree index 2fc9b9cff..8cd9e07de 160000 --- a/submodules/RSTree +++ b/submodules/RSTree @@ -1 +1 @@ -Subproject commit 2fc9b9cff60032a272303ff6d6df5b39ec297179 +Subproject commit 8cd9e07de4bddebd62f803ca00e761e57f806813 From 16081b37f95a4dd2fda2ee30e41d8bc69185be57 Mon Sep 17 00:00:00 2001 From: Maurice Parker Date: Tue, 28 Jul 2020 18:13:12 -0500 Subject: [PATCH 3/5] Revert "Upgrade to the latest maintenance submodules" This reverts commit b7afc0a8335f3e549b1f4f127e09ff349c849d2f. --- submodules/RSCore | 2 +- submodules/RSDatabase | 2 +- submodules/RSParser | 2 +- submodules/RSTree | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/submodules/RSCore b/submodules/RSCore index 34c17b358..a175db500 160000 --- a/submodules/RSCore +++ b/submodules/RSCore @@ -1 +1 @@ -Subproject commit 34c17b358b883936141a44db7cc5f3dd7e805267 +Subproject commit a175db5009f8222fcbaa825d9501305e8727da6f diff --git a/submodules/RSDatabase b/submodules/RSDatabase index 73b827736..de7753914 160000 --- a/submodules/RSDatabase +++ b/submodules/RSDatabase @@ -1 +1 @@ -Subproject commit 73b8277369c4d2d3729b7bb33c11bdd7350d81cb +Subproject commit de7753914c4f47aa97adfbe7a121acf0d2f8cd40 diff --git a/submodules/RSParser b/submodules/RSParser index 93ccfb0ea..47ba87875 160000 --- a/submodules/RSParser +++ b/submodules/RSParser @@ -1 +1 @@ -Subproject commit 93ccfb0ea5f46603045d0c3e726252b7c60b5060 +Subproject commit 47ba87875fbd026dccc2c4d4382a98cb4a1f1fbc diff --git a/submodules/RSTree b/submodules/RSTree index 8cd9e07de..2fc9b9cff 160000 --- a/submodules/RSTree +++ b/submodules/RSTree @@ -1 +1 @@ -Subproject commit 8cd9e07de4bddebd62f803ca00e761e57f806813 +Subproject commit 2fc9b9cff60032a272303ff6d6df5b39ec297179 From 18fd98424654ebc35be64f05cc3dbcea5a89c577 Mon Sep 17 00:00:00 2001 From: Maurice Parker Date: Tue, 28 Jul 2020 18:13:35 -0500 Subject: [PATCH 4/5] Revert "Update to the maintenance branches of the submodules" This reverts commit e672f6c5ac301009e98e62c06630f5a484d92a5b. --- .../Account/FeedWrangler/FeedWranglerAccountDelegate.swift | 2 +- Frameworks/Account/Feedbin/FeedbinAccountDelegate.swift | 2 +- Frameworks/Account/Feedly/Models/FeedlyEntryParser.swift | 1 - .../Account/Feedly/OAuthAuthorizationCodeGranting.swift | 4 ++-- Frameworks/Account/ReaderAPI/ReaderAPIAccountDelegate.swift | 2 +- iOS/Article/OpenInSafariActivity.swift | 2 +- 6 files changed, 6 insertions(+), 7 deletions(-) diff --git a/Frameworks/Account/FeedWrangler/FeedWranglerAccountDelegate.swift b/Frameworks/Account/FeedWrangler/FeedWranglerAccountDelegate.swift index 6ed331340..8186e378b 100644 --- a/Frameworks/Account/FeedWrangler/FeedWranglerAccountDelegate.swift +++ b/Frameworks/Account/FeedWrangler/FeedWranglerAccountDelegate.swift @@ -511,7 +511,7 @@ private extension FeedWranglerAccountDelegate { let parsedItems = feedItems.map { (item: FeedWranglerFeedItem) -> ParsedItem in let itemID = String(item.feedItemID) // let authors = ... - let parsedItem = ParsedItem(syncServiceID: itemID, uniqueID: itemID, feedURL: String(item.feedID), url: nil, externalURL: item.url, title: item.title, language: nil, contentHTML: item.body, contentText: nil, summary: nil, imageURL: nil, bannerImageURL: nil, datePublished: item.publishedDate, dateModified: item.updatedDate, authors: nil, tags: nil, attachments: nil) + let parsedItem = ParsedItem(syncServiceID: itemID, uniqueID: itemID, feedURL: String(item.feedID), url: nil, externalURL: item.url, title: item.title, contentHTML: item.body, contentText: nil, summary: nil, imageURL: nil, bannerImageURL: nil, datePublished: item.publishedDate, dateModified: item.updatedDate, authors: nil, tags: nil, attachments: nil) return parsedItem } diff --git a/Frameworks/Account/Feedbin/FeedbinAccountDelegate.swift b/Frameworks/Account/Feedbin/FeedbinAccountDelegate.swift index 3d6e7d19d..35818a012 100644 --- a/Frameworks/Account/Feedbin/FeedbinAccountDelegate.swift +++ b/Frameworks/Account/Feedbin/FeedbinAccountDelegate.swift @@ -1233,7 +1233,7 @@ private extension FeedbinAccountDelegate { let parsedItems: [ParsedItem] = entries.map { entry in let authors = Set([ParsedAuthor(name: entry.authorName, url: entry.jsonFeed?.jsonFeedAuthor?.url, avatarURL: entry.jsonFeed?.jsonFeedAuthor?.avatarURL, emailAddress: nil)]) - return ParsedItem(syncServiceID: String(entry.articleID), uniqueID: String(entry.articleID), feedURL: String(entry.feedID), url: entry.url, externalURL: nil, title: entry.title, language: nil, contentHTML: entry.contentHTML, contentText: nil, summary: entry.summary, imageURL: nil, bannerImageURL: nil, datePublished: entry.parsedDatePublished, dateModified: nil, authors: authors, tags: nil, attachments: nil) + return ParsedItem(syncServiceID: String(entry.articleID), uniqueID: String(entry.articleID), feedURL: String(entry.feedID), url: entry.url, externalURL: nil, title: entry.title, contentHTML: entry.contentHTML, contentText: nil, summary: entry.summary, imageURL: nil, bannerImageURL: nil, datePublished: entry.parsedDatePublished, dateModified: nil, authors: authors, tags: nil, attachments: nil) } return Set(parsedItems) diff --git a/Frameworks/Account/Feedly/Models/FeedlyEntryParser.swift b/Frameworks/Account/Feedly/Models/FeedlyEntryParser.swift index 2da2edc84..8af6714c7 100644 --- a/Frameworks/Account/Feedly/Models/FeedlyEntryParser.swift +++ b/Frameworks/Account/Feedly/Models/FeedlyEntryParser.swift @@ -98,7 +98,6 @@ struct FeedlyEntryParser { url: nil, externalURL: externalUrl, title: title, - language: nil, contentHTML: contentHMTL, contentText: contentText, summary: summary, diff --git a/Frameworks/Account/Feedly/OAuthAuthorizationCodeGranting.swift b/Frameworks/Account/Feedly/OAuthAuthorizationCodeGranting.swift index 836989e78..735f33bff 100644 --- a/Frameworks/Account/Feedly/OAuthAuthorizationCodeGranting.swift +++ b/Frameworks/Account/Feedly/OAuthAuthorizationCodeGranting.swift @@ -70,12 +70,12 @@ public extension OAuthAuthorizationResponse { guard let queryItems = components.queryItems, !queryItems.isEmpty else { throw URLError(.unsupportedURL) } - let code = queryItems.first { $0.name.lowercased() == "code" } + let code = queryItems.firstElementPassingTest { $0.name.lowercased() == "code" } guard let codeValue = code?.value, !codeValue.isEmpty else { throw URLError(.unsupportedURL) } - let state = queryItems.first { $0.name.lowercased() == "state" } + let state = queryItems.firstElementPassingTest { $0.name.lowercased() == "state" } let stateValue = state?.value self.init(code: codeValue, state: stateValue) diff --git a/Frameworks/Account/ReaderAPI/ReaderAPIAccountDelegate.swift b/Frameworks/Account/ReaderAPI/ReaderAPIAccountDelegate.swift index 89095f3a0..ad55d4e6c 100644 --- a/Frameworks/Account/ReaderAPI/ReaderAPIAccountDelegate.swift +++ b/Frameworks/Account/ReaderAPI/ReaderAPIAccountDelegate.swift @@ -932,7 +932,7 @@ private extension ReaderAPIAccountDelegate { // let authors = Set([ParsedAuthor(name: entry.authorName, url: entry.jsonFeed?.jsonFeedAuthor?.url, avatarURL: entry.jsonFeed?.jsonFeedAuthor?.avatarURL, emailAddress: nil)]) // let feed = account.idToFeedDictionary[entry.origin.streamId!]! // TODO clean this up - return ParsedItem(syncServiceID: entry.uniqueID(), uniqueID: entry.uniqueID(), feedURL: entry.origin.streamId!, url: nil, externalURL: entry.alternates.first?.url, title: entry.title, language: nil, contentHTML: entry.summary.content, contentText: nil, summary: entry.summary.content, imageURL: nil, bannerImageURL: nil, datePublished: entry.parseDatePublished(), dateModified: nil, authors: nil, tags: nil, attachments: nil) + return ParsedItem(syncServiceID: entry.uniqueID(), uniqueID: entry.uniqueID(), feedURL: entry.origin.streamId!, url: nil, externalURL: entry.alternates.first?.url, title: entry.title, contentHTML: entry.summary.content, contentText: nil, summary: entry.summary.content, imageURL: nil, bannerImageURL: nil, datePublished: entry.parseDatePublished(), dateModified: nil, authors: nil, tags: nil, attachments: nil) } return Set(parsedItems) diff --git a/iOS/Article/OpenInSafariActivity.swift b/iOS/Article/OpenInSafariActivity.swift index 9b5b5ed8f..a157345fb 100644 --- a/iOS/Article/OpenInSafariActivity.swift +++ b/iOS/Article/OpenInSafariActivity.swift @@ -37,7 +37,7 @@ class OpenInSafariActivity: UIActivity { } override func perform() { - guard let url = activityItems?.first(where: { $0 is URL }) as? URL else { + guard let url = activityItems?.firstElementPassingTest({ $0 is URL }) as? URL else { activityDidFinish(false) return } From 1c4b6b4c260812ac27f6525b7bf216da2606ba45 Mon Sep 17 00:00:00 2001 From: Rizwan Mohamed Ibrahim Date: Wed, 29 Jul 2020 11:37:27 +0530 Subject: [PATCH 5/5] Fix a11y for title view of timeline view controller --- iOS/MasterTimeline/MasterTimelineTitleView.swift | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/iOS/MasterTimeline/MasterTimelineTitleView.swift b/iOS/MasterTimeline/MasterTimelineTitleView.swift index 76e4fbbaa..9c81ac7ee 100644 --- a/iOS/MasterTimeline/MasterTimelineTitleView.swift +++ b/iOS/MasterTimeline/MasterTimelineTitleView.swift @@ -18,7 +18,20 @@ class MasterTimelineTitleView: UIView { private lazy var pointerInteraction: UIPointerInteraction = { UIPointerInteraction(delegate: self) }() - + + override var accessibilityLabel: String? { + set { } + get { + if let name = label.text { + let unreadLabel = NSLocalizedString("unread", comment: "Unread label for accessiblity") + return "\(name) \(unreadCountView.unreadCount) \(unreadLabel)" + } + else { + return nil + } + } + } + func buttonize() { heightAnchor.constraint(equalToConstant: 40.0).isActive = true accessibilityTraits = .button @@ -28,6 +41,7 @@ class MasterTimelineTitleView: UIView { } func debuttonize() { + heightAnchor.constraint(equalToConstant: 40.0).isActive = true accessibilityTraits.remove(.button) if #available(iOS 13.4, *) { removeInteraction(pointerInteraction)