Bluesky app fork with some witchin' additions 💫
0
fork

Configure Feed

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

Give the unfiltered view if the language filter yields no results (close #358) (#382)

authored by

Paul Frazee and committed by
GitHub
50f7f987 9102af6b

+23 -6
+23 -6
src/lib/api/feed-manip.ts
··· 7 7 export type FeedTunerFn = ( 8 8 tuner: FeedTuner, 9 9 slices: FeedViewPostsSlice[], 10 - ) => void 10 + ) => FeedViewPostsSlice[] 11 11 12 12 export class FeedViewPostsSlice { 13 13 isFlattenedReply = false ··· 87 87 feed: FeedViewPost[], 88 88 tunerFns: FeedTunerFn[] = [], 89 89 ): FeedViewPostsSlice[] { 90 - const slices: FeedViewPostsSlice[] = [] 90 + let slices: FeedViewPostsSlice[] = [] 91 91 92 92 // arrange the posts into thread slices 93 93 for (let i = feed.length - 1; i >= 0; i--) { ··· 106 106 107 107 // run the custom tuners 108 108 for (const tunerFn of tunerFns) { 109 - tunerFn(this, slices) 109 + slices = tunerFn(this, slices.slice()) 110 110 } 111 111 112 112 // remove any items already "seen" ··· 148 148 return slices 149 149 } 150 150 151 - static dedupReposts(tuner: FeedTuner, slices: FeedViewPostsSlice[]) { 151 + static dedupReposts( 152 + tuner: FeedTuner, 153 + slices: FeedViewPostsSlice[], 154 + ): FeedViewPostsSlice[] { 152 155 // remove duplicates caused by reposts 153 156 for (let i = 0; i < slices.length; i++) { 154 157 const item1 = slices[i] ··· 164 167 } 165 168 } 166 169 } 170 + return slices 167 171 } 168 172 169 - static likedRepliesOnly(tuner: FeedTuner, slices: FeedViewPostsSlice[]) { 173 + static likedRepliesOnly( 174 + tuner: FeedTuner, 175 + slices: FeedViewPostsSlice[], 176 + ): FeedViewPostsSlice[] { 170 177 // remove any replies without at least 2 likes 171 178 for (let i = slices.length - 1; i >= 0; i--) { 172 179 if (slices[i].isFullThread || !slices[i].rootItem.reply) { ··· 178 185 slices.splice(i, 1) 179 186 } 180 187 } 188 + return slices 181 189 } 182 190 183 191 static preferredLangOnly(langsCode2: string[]) { 184 192 const langsCode3 = langsCode2.map(l => LANGUAGES_MAP_CODE2[l]?.code3 || l) 185 - return (tuner: FeedTuner, slices: FeedViewPostsSlice[]) => { 193 + return ( 194 + tuner: FeedTuner, 195 + slices: FeedViewPostsSlice[], 196 + ): FeedViewPostsSlice[] => { 197 + const origSlices = slices.concat() 186 198 for (let i = slices.length - 1; i >= 0; i--) { 187 199 let hasPreferredLang = false 188 200 for (const item of slices[i].items) { ··· 202 214 slices.splice(i, 1) 203 215 } 204 216 } 217 + if (slices.length) { 218 + return slices 219 + } 220 + // fallback: give everything if the language filter left nothing 221 + return origSlices 205 222 } 206 223 } 207 224 }