Rockbox open source high quality audio player as a Music Player Daemon
mpris rockbox mpd libadwaita audio rust zig deno
2
fork

Configure Feed

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

Support Tabler icons for cast and snapcast

Add optional tablerIcon to Settings rows and render it when provided,
falling back to Ionicons. Use IconCast for the AirPlay & Cast row and
replace IconRadio with IconVolume for snapcast in the device picker.

+20 -5
+18 -3
expo/app/settings.tsx
··· 1 1 import { Ionicons } from "@expo/vector-icons"; 2 + import { IconCast, type Icon as TablerIcon } from "@tabler/icons-react-native"; 2 3 import { router, Stack } from "expo-router"; 3 4 import { useState } from "react"; 4 5 import { Pressable, ScrollView, Switch, Text, View } from "react-native"; ··· 17 18 rows: Row[]; 18 19 }; 19 20 21 + type IconName = React.ComponentProps<typeof Ionicons>["name"]; 22 + 20 23 type Row = 21 24 | { 22 25 kind: "switch"; 23 26 label: string; 24 - icon: React.ComponentProps<typeof Ionicons>["name"]; 27 + icon: IconName; 28 + tablerIcon?: TablerIcon; 25 29 value: boolean; 26 30 onChange: (v: boolean) => void; 27 31 } 28 32 | { 29 33 kind: "link"; 30 34 label: string; 31 - icon: React.ComponentProps<typeof Ionicons>["name"]; 35 + icon: IconName; 36 + tablerIcon?: TablerIcon; 32 37 value?: string; 33 38 onPress?: () => void; 34 39 }; ··· 78 83 kind: "link", 79 84 label: "AirPlay & Cast", 80 85 icon: "tv-outline", 86 + tablerIcon: IconCast, 81 87 value: currentDevice.name, 82 88 onPress: () => setDevicePickerOpen(true), 83 89 }, ··· 152 158 } 153 159 154 160 function SettingsRow({ row }: { row: Row }) { 161 + const TablerIconComp = row.tablerIcon; 155 162 const content = ( 156 163 <View className="flex-row items-center px-3.5 h-[52px] gap-3.5"> 157 - <Ionicons name={row.icon} size={20} color={Colors.textSecondary} /> 164 + {TablerIconComp ? ( 165 + <TablerIconComp 166 + size={20} 167 + color={Colors.textSecondary} 168 + strokeWidth={1.75} 169 + /> 170 + ) : ( 171 + <Ionicons name={row.icon} size={20} color={Colors.textSecondary} /> 172 + )} 158 173 <Text 159 174 numberOfLines={1} 160 175 className="text-text-primary text-[15px] font-sans flex-shrink-0"
+2 -2
expo/components/device-picker.tsx
··· 5 5 IconDeviceMobile, 6 6 IconHeadphones, 7 7 IconMusic, 8 - IconRadio, 8 + IconVolume, 9 9 type Icon, 10 10 } from "@tabler/icons-react-native"; 11 11 import { Modal, Pressable, ScrollView, Text, View } from "react-native"; ··· 38 38 googlecast: { kind: "tabler", component: IconCast }, 39 39 chromecast: { kind: "tabler", component: IconCast }, 40 40 airplay: { kind: "airplay" }, 41 - snapcast: { kind: "tabler", component: IconRadio }, 41 + snapcast: { kind: "tabler", component: IconVolume }, 42 42 upnp: { kind: "tabler", component: IconMusic }, 43 43 bluetooth: { kind: "tabler", component: IconBluetooth }, 44 44 builtin: { kind: "tabler", component: IconDeviceMobile },