pstream is dead; long live pstream taciturnaxolotl.github.io/pstream-ng/
1
fork

Configure Feed

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

sort app language to top of subtitle languages

Pas 4630d782 39e5329e

+25 -9
+12 -4
src/components/player/atoms/settings/CaptionsView.tsx
··· 260 260 // Hook to filter and sort subtitle list with search 261 261 export function useSubtitleList(subs: CaptionListItem[], searchQuery: string) { 262 262 const { t: translate } = useTranslation(); 263 + const appLanguage = useLanguageStore((s) => s.language); 263 264 const unknownChoice = translate("player.menus.subtitles.unknownLanguage"); 264 265 return useMemo(() => { 265 266 const input = subs.map((t) => ({ ··· 267 268 languageName: 268 269 getPrettyLanguageNameFromLocale(t.language) ?? unknownChoice, 269 270 })); 270 - const sorted = sortLangCodes(input.map((t) => t.language)); 271 + const sorted = sortLangCodes( 272 + input.map((t) => t.language), 273 + appLanguage, 274 + ); 271 275 let results = input.sort((a, b) => { 272 276 return sorted.indexOf(a.language) - sorted.indexOf(b.language); 273 277 }); ··· 283 287 } 284 288 285 289 return results; 286 - }, [subs, searchQuery, unknownChoice]); 290 + }, [subs, searchQuery, unknownChoice, appLanguage]); 287 291 } 288 292 289 293 export function CustomCaptionOption() { ··· 529 533 // Sort with app language first, then alphabetically 530 534 return sortedGroups.sort((a, b) => { 531 535 // App language always comes first 532 - if (a.language === appLanguage) return -1; 533 - if (b.language === appLanguage) return 1; 536 + const isALang = 537 + a.language === appLanguage || a.language.startsWith(`${appLanguage}-`); 538 + const isBLang = 539 + b.language === appLanguage || b.language.startsWith(`${appLanguage}-`); 540 + if (isALang && !isBLang) return -1; 541 + if (!isALang && isBLang) return 1; 534 542 535 543 // Then sort alphabetically 536 544 return a.languageName.localeCompare(b.languageName);
+4 -1
src/pages/parts/settings/PreferencesPart.tsx
··· 47 47 const { t } = useTranslation(); 48 48 const { showModal } = useOverlayStack(); 49 49 const [isSourceListExpanded, setIsSourceListExpanded] = useState(false); 50 - const sorted = sortLangCodes(appLanguageOptions.map((item) => item.code)); 50 + const sorted = sortLangCodes( 51 + appLanguageOptions.map((item) => item.code), 52 + props.language, 53 + ); 51 54 52 55 const allowAutoplay = isAutoplayAllowed(); 53 56
+9 -4
src/utils/language.ts
··· 123 123 /** 124 124 * Sort locale codes by occurrence, rest on alphabetical order 125 125 * @param langCodes list language codes to sort 126 + * @param appLanguage optional app language to prioritize 126 127 * @returns sorted version of inputted list 127 128 */ 128 - export function sortLangCodes(langCodes: string[]) { 129 - const languagesOrder = [...languageOrder].reverse(); // Reverse is necessary, not sure why 129 + export function sortLangCodes(langCodes: string[], appLanguage?: string) { 130 + const languagesOrder = [...languageOrder]; 131 + if (appLanguage && !languagesOrder.includes(appLanguage)) { 132 + languagesOrder.unshift(appLanguage); 133 + } 134 + const reversedOrder = [...languagesOrder].reverse(); // Reverse is necessary, not sure why 130 135 131 136 const results = langCodes.sort((a, b) => { 132 - const langOrderA = languagesOrder.findIndex( 137 + const langOrderA = reversedOrder.findIndex( 133 138 (v) => a.startsWith(`${v}-`) || a === v, 134 139 ); 135 - const langOrderB = languagesOrder.findIndex( 140 + const langOrderB = reversedOrder.findIndex( 136 141 (v) => b.startsWith(`${v}-`) || b === v, 137 142 ); 138 143 if (langOrderA !== -1 || langOrderB !== -1) return langOrderB - langOrderA;