+ private buildAvailableUrl (obj: any) {
+ const urls: string[] = []
+
+ if (obj.url) urls.push(obj.url)
+ if (obj.urls) {
+ if (Array.isArray(obj.urls)) urls.push(...obj.urls)
+ else urls.push(obj.urls)
+ }
+
+ const formats = Array.isArray(obj.formats)
+ ? obj.formats
+ : []
+
+ for (const format of formats) {
+ if (!format.url) continue
+
+ urls.push(format.url)
+ }
+
+ const thumbnails = Array.isArray(obj.thumbnails)
+ ? obj.thumbnails
+ : []
+
+ for (const thumbnail of thumbnails) {
+ if (!thumbnail.url) continue
+
+ urls.push(thumbnail.url)
+ }
+
+ if (obj.thumbnail) urls.push(obj.thumbnail)
+
+ for (const subtitleKey of Object.keys(obj.subtitles || {})) {
+ const subtitles = obj.subtitles[subtitleKey]
+ if (!Array.isArray(subtitles)) continue
+
+ for (const subtitle of subtitles) {
+ if (!subtitle.url) continue
+
+ urls.push(subtitle.url)
+ }
+ }
+
+ return urls.filter(u => u && isUrlValid(u))
+ }
+