Spaces:
Sleeping
Sleeping
| export function detectMediaTypeFromUrl(url) { | |
| try { | |
| const u = new URL(url); | |
| const host = u.hostname.toLowerCase(); | |
| const path = u.pathname.toLowerCase(); | |
| if (host.includes('youtube.com') || host.includes('youtu.be')) return 'youtube'; | |
| if (/\.(mp4|webm|ogg|mkv|mov|m4v)$/.test(path)) return 'video'; | |
| if (/\.(mp3|wav|aac|m4a|flac|ogg|opus)$/.test(path)) return 'audio'; | |
| } catch {} | |
| if (/^[a-zA-Z0-9_-]{11}$/.test(url)) return 'youtube'; | |
| return 'unknown'; | |
| } | |
| export function safeTitle(track) { | |
| return track?.title || track?.meta?.title || track?.url || 'Untitled'; | |
| } | |
| export function prettyError(e) { | |
| if (!e) return 'Unknown error'; | |
| if (typeof e === 'string') return e; | |
| if (e.response && e.response.data && e.response.data.error) return e.response.data.error; | |
| if (e.message) return e.message; | |
| return JSON.stringify(e); | |
| } | |
| export function getThumb(meta) { | |
| if (!meta) return null; | |
| return ( | |
| meta.thumb || | |
| meta.image || | |
| meta.thumbnail || | |
| meta.song_image || | |
| meta.album_image || | |
| meta.image_url || | |
| meta?.images?.cover || | |
| meta?.images?.[0] || | |
| null | |
| ); | |
| } | |