File size: 1,127 Bytes
7a5f946
 
 
55684d8
7a5f946
55684d8
7a5f946
 
 
55684d8
7a5f946
 
 
 
 
 
 
 
 
 
 
 
 
 
55684d8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
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
  );
}