a fork of iceshrimp.net but a tweaked frontend to my personal liking. waow
fediverse social-media social iceshrimp fedi
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

[parsing] Add note visibility search query type (ISH-707)

+57 -2
+17
Iceshrimp.Backend/Core/Extensions/QueryableFtsExtensions.cs
··· 35 35 InstanceFilter instanceFilter => current.ApplyInstanceFilter(instanceFilter, config), 36 36 MentionFilter mentionFilter => current.ApplyMentionFilter(mentionFilter, config, db), 37 37 MiscFilter miscFilter => current.ApplyMiscFilter(miscFilter, user), 38 + VisibilityFilter visibilityFilter => current.ApplyVisibilityFilter(visibilityFilter), 38 39 ReplyFilter replyFilter => current.ApplyReplyFilter(replyFilter, config, db), 39 40 CwFilter cwFilter => current.ApplyCwFilter(cwFilter, caseSensitivity, matchType), 40 41 WordFilter wordFilter => current.ApplyWordFilter(wordFilter, caseSensitivity, matchType), ··· 161 162 MiscFilterType.Replies => query.ApplyRepliesFilter(filter.Negated), 162 163 _ => throw new ArgumentOutOfRangeException(nameof(filter)) 163 164 }; 165 + } 166 + 167 + private static IQueryable<Note> ApplyVisibilityFilter(this IQueryable<Note> query, VisibilityFilter filter) 168 + { 169 + var visibility = filter.Value switch 170 + { 171 + VisibilityFilterType.Public => Note.NoteVisibility.Public, 172 + VisibilityFilterType.Home => Note.NoteVisibility.Home, 173 + VisibilityFilterType.Followers => Note.NoteVisibility.Followers, 174 + VisibilityFilterType.Specified => Note.NoteVisibility.Specified, 175 + _ => throw new ArgumentOutOfRangeException() 176 + }; 177 + 178 + return filter.Negated 179 + ? query.Where(p => p.Visibility != visibility) 180 + : query.Where(p => p.Visibility == visibility); 164 181 } 165 182 166 183 [SuppressMessage("ReSharper", "EntityFramework.UnsupportedServerSideFunctionCall", Justification = "Projectables")]
+37
Iceshrimp.Parsing/SearchQueryFilters.cs
··· 131 131 132 132 public record BeforeFilter(DateOnly Value) : ISearchQueryFilter; 133 133 134 + public enum VisibilityFilterType 135 + { 136 + Public, 137 + Home, 138 + Followers, 139 + Specified 140 + } 141 + 142 + public record VisibilityFilter(bool Negated, VisibilityFilterType Value) : ISearchQueryFilter 143 + { 144 + public static bool TryParse( 145 + bool negated, ReadOnlySpan<char> value, [NotNullWhen(true)] out VisibilityFilter? result 146 + ) 147 + { 148 + VisibilityFilterType? type = value switch 149 + { 150 + "public" => VisibilityFilterType.Public, 151 + "home" => VisibilityFilterType.Home, 152 + "unlisted" => VisibilityFilterType.Home, 153 + "followers" => VisibilityFilterType.Followers, 154 + "specified" => VisibilityFilterType.Specified, 155 + "direct" => VisibilityFilterType.Specified, 156 + "private" => VisibilityFilterType.Specified, 157 + _ => null 158 + }; 159 + 160 + if (!type.HasValue) 161 + { 162 + result = null; 163 + return false; 164 + } 165 + 166 + result = new VisibilityFilter(negated, type.Value); 167 + return true; 168 + } 169 + } 170 + 134 171 public enum CaseFilterType 135 172 { 136 173 Sensitive,
+3 -2
Iceshrimp.Parsing/SearchQueryParser.cs
··· 82 82 "reply" or "replying" or "to" => new ReplyFilter(negated, value.ToString()), 83 83 "instance" or "domain" or "host" => new InstanceFilter(negated, value.ToString()), 84 84 85 - "filter" when MiscFilter.TryParse(negated, value, out var parsed) => parsed, 86 - "in" when InFilter.TryParse(negated, value, out var parsed) => parsed, 85 + "filter" when MiscFilter.TryParse(negated, value, out var parsed) => parsed, 86 + "in" when InFilter.TryParse(negated, value, out var parsed) => parsed, 87 + "visibility" when VisibilityFilter.TryParse(negated, value, out var parsed) => parsed, 87 88 "has" or "attachment" or "attached" when AttachmentFilter.TryParse(negated, value, out var parsed) 88 89 => parsed, 89 90