From 8b1316814a72a0b80fa7423fde3f37374cfc8a85 Mon Sep 17 00:00:00 2001 From: Nathan Mattes Date: Sat, 22 Apr 2023 23:00:55 +0200 Subject: [PATCH] Filter for content warnings (IOS-37) --- .../WidgetExtension.intentdefinition | 48 +++++++++++++++++-- .../Variants/Hashtag/HashtagWidget.swift | 15 +++++- 2 files changed, 58 insertions(+), 5 deletions(-) diff --git a/WidgetExtension/Base.lproj/WidgetExtension.intentdefinition b/WidgetExtension/Base.lproj/WidgetExtension.intentdefinition index 667efed07..9a6dae161 100644 --- a/WidgetExtension/Base.lproj/WidgetExtension.intentdefinition +++ b/WidgetExtension/Base.lproj/WidgetExtension.intentdefinition @@ -11,9 +11,9 @@ INIntentDefinitionSystemVersion 22D68 INIntentDefinitionToolsBuildVersion - 14C18 + 14E222b INIntentDefinitionToolsVersion - 14.2 + 14.3 INIntents @@ -389,7 +389,7 @@ INIntentIneligibleForSuggestions INIntentLastParameterTag - 5 + 7 INIntentName Hashtag INIntentParameters @@ -440,6 +440,48 @@ INIntentParameterType String + + INIntentParameterConfigurable + + INIntentParameterDisplayName + Ignore content warnings + INIntentParameterDisplayNameID + xcBHPA + INIntentParameterDisplayPriority + 2 + INIntentParameterMetadata + + INIntentParameterMetadataFalseDisplayName + false + INIntentParameterMetadataFalseDisplayNameID + wftYbm + INIntentParameterMetadataTrueDisplayName + true + INIntentParameterMetadataTrueDisplayNameID + QkKsLf + + INIntentParameterName + ignoreContentWarnings + INIntentParameterPromptDialogs + + + INIntentParameterPromptDialogCustom + + INIntentParameterPromptDialogType + Configuration + + + INIntentParameterPromptDialogCustom + + INIntentParameterPromptDialogType + Primary + + + INIntentParameterTag + 7 + INIntentParameterType + Boolean + INIntentResponse diff --git a/WidgetExtension/Variants/Hashtag/HashtagWidget.swift b/WidgetExtension/Variants/Hashtag/HashtagWidget.swift index 7d5b5218f..28566e10f 100644 --- a/WidgetExtension/Variants/Hashtag/HashtagWidget.swift +++ b/WidgetExtension/Variants/Hashtag/HashtagWidget.swift @@ -49,10 +49,17 @@ extension HashtagWidgetProvider { do { let mostRecentStatuses = try await WidgetExtension.appContext .apiService - .hashtagTimeline(domain: authBox.domain, limit: 1, hashtag: desiredHashtag, authenticationBox: authBox) + .hashtagTimeline(domain: authBox.domain, limit: 40, hashtag: desiredHashtag, authenticationBox: authBox) .value - if let mostRecentStatus = mostRecentStatuses.first { + let filteredStatuses: [Mastodon.Entity.Status] + if configuration.ignoreContentWarnings?.boolValue == true { + filteredStatuses = mostRecentStatuses + } else { + filteredStatuses = mostRecentStatuses.filter { $0.sensitive == false } + } + + if let mostRecentStatus = filteredStatuses.first { let hashtagEntry = HashtagEntry( accountName: mostRecentStatus.account.displayNameWithFallback, @@ -70,6 +77,10 @@ extension HashtagWidgetProvider { ) completion(hashtagTimelineEntry) + } else { + let noStatusFound = HashtagWidgetTimelineEntry.notFound + + completion(noStatusFound) } } catch { completion(.notFound)