diff --git a/src/utils/StreamResolver.ts b/src/utils/StreamResolver.ts index 83a6a91..6b981cd 100644 --- a/src/utils/StreamResolver.ts +++ b/src/utils/StreamResolver.ts @@ -12,7 +12,7 @@ import { TooManyTimeoutsError, TooManyRequestsError, } from '../error'; -import { flagFromCountryCode, languageFromCountryCode } from './language'; +import { flagFromCountryCode } from './language'; import { envGetAppName } from './env'; import { Id } from './id'; import { ExtractorRegistry } from '../extractor'; @@ -151,7 +151,11 @@ export class StreamResolver { private buildName(ctx: Context, urlResult: UrlResult): string { let name = envGetAppName(); - name += urlResult.meta.height ? ` ${urlResult.meta.height}P` : ' N/A'; + name += ` ${flagFromCountryCode(urlResult.meta.countryCode)}`; + + if (urlResult.meta.height) { + name += ` ${urlResult.meta.height}p`; + } if (urlResult.isExternal && showExternalUrls(ctx.config)) { name += ` ⚠️ external`; @@ -210,15 +214,15 @@ export class StreamResolver { const titleLines = []; if (urlResult.meta.title) { - titleLines.push(`📂 ${urlResult.meta.title}`); + titleLines.push(urlResult.meta.title); } + const titleDetailsLine = []; if (urlResult.meta.bytes) { - titleLines.push(`💾 ${bytes.format(urlResult.meta.bytes, { unitSeparator: ' ' })}`); + titleDetailsLine.push(`💾 ${bytes.format(urlResult.meta.bytes, { unitSeparator: ' ' })}`); } - - titleLines.push(`🌐 ${languageFromCountryCode(urlResult.meta.countryCode)} ${flagFromCountryCode(urlResult.meta.countryCode)}`); - titleLines.push(`🔗 ${urlResult.label}`); + titleDetailsLine.push(`🔗 ${urlResult.label}`); + titleLines.push(titleDetailsLine.join(' ')); if (urlResult.error) { titleLines.push(this.logErrorAndReturnNiceString(ctx, urlResult.sourceId, urlResult.error)); diff --git a/src/utils/__snapshots__/StreamResolver.test.ts.snap b/src/utils/__snapshots__/StreamResolver.test.ts.snap index a4814d9..2a7116f 100644 --- a/src/utils/__snapshots__/StreamResolver.test.ts.snap +++ b/src/utils/__snapshots__/StreamResolver.test.ts.snap @@ -6,65 +6,57 @@ exports[`resolve adds error info 1`] = ` { "behaviorHints": {}, "externalUrl": "https://example.com/", - "name": "WebStreamr N/A ⚠️ external", - "title": "🌐 German 🇩🇪 -🔗 hoster.com + "name": "WebStreamr 🇩🇪 ⚠️ external", + "title": "🔗 hoster.com ⚠️ Request was blocked.", }, { "behaviorHints": {}, "externalUrl": "https://example.com/", - "name": "WebStreamr N/A ⚠️ external", - "title": "🌐 German 🇩🇪 -🔗 hoster.com + "name": "WebStreamr 🇩🇪 ⚠️ external", + "title": "🔗 hoster.com ⚠️ Request was blocked.", }, { "behaviorHints": {}, "externalUrl": "https://example.com/", - "name": "WebStreamr N/A ⚠️ external", - "title": "🌐 German 🇩🇪 -🔗 hoster.com + "name": "WebStreamr 🇩🇪 ⚠️ external", + "title": "🔗 hoster.com 🚦 Request was rate-limited. Please try again later or consider self-hosting.", }, { "behaviorHints": {}, "externalUrl": "https://example.com/", - "name": "WebStreamr N/A ⚠️ external", - "title": "🌐 German 🇩🇪 -🔗 hoster.com + "name": "WebStreamr 🇩🇪 ⚠️ external", + "title": "🔗 hoster.com 🚦 Too many recent timeouts. Please try again later.", }, { "behaviorHints": {}, "externalUrl": "https://example2.com/", - "name": "WebStreamr N/A ⚠️ external", - "title": "🌐 German 🇩🇪 -🔗 hoster.com + "name": "WebStreamr 🇩🇪 ⚠️ external", + "title": "🔗 hoster.com ❌ Request failed. Request-id: id.", }, { "behaviorHints": {}, "externalUrl": "https://example2.com/", - "name": "WebStreamr N/A ⚠️ external", - "title": "🌐 German 🇩🇪 -🔗 hoster.com + "name": "WebStreamr 🇩🇪 ⚠️ external", + "title": "🔗 hoster.com 🐢 Request timed out.", }, { "behaviorHints": {}, "externalUrl": "https://example3.com/", - "name": "WebStreamr N/A ⚠️ external", - "title": "🌐 German 🇩🇪 -🔗 hoster.com + "name": "WebStreamr 🇩🇪 ⚠️ external", + "title": "🔗 hoster.com ⏳ Request queue is full. Please try again later or consider self-hosting.", }, { "behaviorHints": {}, "externalUrl": "https://example4.com/", - "name": "WebStreamr N/A ⚠️ external", - "title": "🌐 German 🇩🇪 -🔗 hoster.com + "name": "WebStreamr 🇩🇪 ⚠️ external", + "title": "🔗 hoster.com ❌ Request failed with status 500 (Internal Server Error). Request-id: id.", }, ], @@ -76,65 +68,57 @@ exports[`resolve adds error info 2`] = ` "streams": [ { "behaviorHints": {}, - "name": "WebStreamr N/A", - "title": "🌐 German 🇩🇪 -🔗 hoster.com + "name": "WebStreamr 🇩🇪", + "title": "🔗 hoster.com ⚠️ Request was blocked.", "ytId": "E4WlUXrJgy4", }, { "behaviorHints": {}, - "name": "WebStreamr N/A", - "title": "🌐 German 🇩🇪 -🔗 hoster.com + "name": "WebStreamr 🇩🇪", + "title": "🔗 hoster.com ⚠️ Request was blocked.", "ytId": "E4WlUXrJgy4", }, { "behaviorHints": {}, - "name": "WebStreamr N/A", - "title": "🌐 German 🇩🇪 -🔗 hoster.com + "name": "WebStreamr 🇩🇪", + "title": "🔗 hoster.com 🚦 Request was rate-limited. Please try again later or consider self-hosting.", "ytId": "E4WlUXrJgy4", }, { "behaviorHints": {}, - "name": "WebStreamr N/A", - "title": "🌐 German 🇩🇪 -🔗 hoster.com + "name": "WebStreamr 🇩🇪", + "title": "🔗 hoster.com 🚦 Too many recent timeouts. Please try again later.", "ytId": "E4WlUXrJgy4", }, { "behaviorHints": {}, - "name": "WebStreamr N/A", - "title": "🌐 German 🇩🇪 -🔗 hoster.com + "name": "WebStreamr 🇩🇪", + "title": "🔗 hoster.com ❌ Request failed. Request-id: id.", "ytId": "E4WlUXrJgy4", }, { "behaviorHints": {}, - "name": "WebStreamr N/A", - "title": "🌐 German 🇩🇪 -🔗 hoster.com + "name": "WebStreamr 🇩🇪", + "title": "🔗 hoster.com 🐢 Request timed out.", "ytId": "E4WlUXrJgy4", }, { "behaviorHints": {}, - "name": "WebStreamr N/A", - "title": "🌐 German 🇩🇪 -🔗 hoster.com + "name": "WebStreamr 🇩🇪", + "title": "🔗 hoster.com ⏳ Request queue is full. Please try again later or consider self-hosting.", "ytId": "E4WlUXrJgy4", }, { "behaviorHints": {}, - "name": "WebStreamr N/A", - "title": "🌐 German 🇩🇪 -🔗 hoster.com + "name": "WebStreamr 🇩🇪", + "title": "🔗 hoster.com ❌ Request failed with status 500 (Internal Server Error). Request-id: id.", "ytId": "E4WlUXrJgy4", }, @@ -183,11 +167,9 @@ exports[`resolve returns sorted results 1`] = ` "bingeGroup": "webstreamr-dropload_de", "videoSize": 1395864371, }, - "name": "WebStreamr 1080P", - "title": "📂 des-teufels-bad-2024 -💾 1.3 GB -🌐 German 🇩🇪 -🔗 Dropload", + "name": "WebStreamr 🇩🇪 1080p", + "title": "des-teufels-bad-2024 +💾 1.3 GB 🔗 Dropload", "url": "https://srv34.dropload.io/hls2/01/00197/lyo2h1snpe5c_h/master.m3u8?t=MZSqs3F338ocbM2eTs8X23s585dWcYuilGrNNcidNas&s=1749846846&e=14400&f=987607&srv=srv27&i=0.0&sp=0&ii=50.99.15.93&p1=srv27&p2=srv27", }, { @@ -195,11 +177,9 @@ exports[`resolve returns sorted results 1`] = ` "bingeGroup": "webstreamr-dropload_it", "videoSize": 1181116006, }, - "name": "WebStreamr 720P", - "title": "📂 the-devils-bath-2024-sd-sub-ita -💾 1.1 GB -🌐 Italian 🇮🇹 -🔗 Dropload", + "name": "WebStreamr 🇮🇹 720p", + "title": "the-devils-bath-2024-sd-sub-ita +💾 1.1 GB 🔗 Dropload", "url": "https://srv34.dropload.io/hls2/01/00200/xsr90y2ltdyx_h/master.m3u8?t=rsJMeR8rtWZxFi_3DOdlt98U0rvAMincCe4-awDQzHE&s=1749846846&e=14400&f=1004116&srv=srv24&i=0.0&sp=0&ii=50.99.15.93&p1=srv24&p2=srv24", }, { @@ -207,11 +187,9 @@ exports[`resolve returns sorted results 1`] = ` "bingeGroup": "webstreamr-supervideo_it", "videoSize": 1181116006, }, - "name": "WebStreamr 720P", - "title": "📂 the-devils-bath-2024-sd-sub-ita -💾 1.1 GB -🌐 Italian 🇮🇹 -🔗 SuperVideo", + "name": "WebStreamr 🇮🇹 720p", + "title": "the-devils-bath-2024-sd-sub-ita +💾 1.1 GB 🔗 SuperVideo", "url": "https://hfs311.serversicuro.cc/hls/,dnzpcjj427g4a3gyvbth53rxqgffbu4vol4o7gg7pskpzb6josghbkwhnisq,.urlset/master.m3u8", }, { @@ -219,11 +197,9 @@ exports[`resolve returns sorted results 1`] = ` "bingeGroup": "webstreamr-supervideo_de", "videoSize": 1073741824, }, - "name": "WebStreamr 720P", - "title": "📂 des-teufels-bad-2024 -💾 1 GB -🌐 German 🇩🇪 -🔗 SuperVideo", + "name": "WebStreamr 🇩🇪 720p", + "title": "des-teufels-bad-2024 +💾 1 GB 🔗 SuperVideo", "url": "https://hfs309.serversicuro.cc/hls/,dnzpfi3d27g4a3gyvbmh5klwtl65qh654hyjtgupd6p577fze64mz3bsmdyq,.urlset/master.m3u8", }, { @@ -237,11 +213,9 @@ exports[`resolve returns sorted results 1`] = ` }, "videoSize": 791702409, }, - "name": "WebStreamr N/A", - "title": "📂 des-teufels-bad-2024 -💾 755.03 MB -🌐 German 🇩🇪 -🔗 DoodStream", + "name": "WebStreamr 🇩🇪", + "title": "des-teufels-bad-2024 +💾 755.03 MB 🔗 DoodStream", "url": "https://aa360cc.cloudatacdn.com/u5kjv4jxytd3sdgge5uogji5dg4huat2pxrm2qibdbm5rlyusvlvslr3u3ta/bibyo6w0dm~mocked-random-string?token=7uebebipnnhusa4xnyea1er4&expiry=639837296000", }, { @@ -254,9 +228,8 @@ exports[`resolve returns sorted results 1`] = ` }, }, }, - "name": "WebStreamr N/A", - "title": "📂 the-devils-bath-2024-sd-sub-ita -🌐 Italian 🇮🇹 + "name": "WebStreamr 🇮🇹", + "title": "the-devils-bath-2024-sd-sub-ita 🔗 DoodStream", "url": "https://kk892as.cloudatacdn.com/u5kj7j7s27d3sdgge5woezkbi4pu672wktq3aqujw47rbx4declm2mk2k2gq/4msi5kvncy~mocked-random-string?token=aw2v2d8uhbrj2ky54d573ujk&expiry=639837296000", }, @@ -265,18 +238,16 @@ exports[`resolve returns sorted results 1`] = ` "bingeGroup": "webstreamr-external_de", }, "externalUrl": "https://mixdrop.ag/e/3nzwveprim63or6", - "name": "WebStreamr N/A ⚠️ external", - "title": "🌐 German 🇩🇪 -🔗 mixdrop.ag", + "name": "WebStreamr 🇩🇪 ⚠️ external", + "title": "🔗 mixdrop.ag", }, { "behaviorHints": { "bingeGroup": "webstreamr-external_it", }, "externalUrl": "https://mixdrop.ag/e/vk196d6xfzwwo1", - "name": "WebStreamr N/A ⚠️ external", - "title": "🌐 Italian 🇮🇹 -🔗 mixdrop.ag", + "name": "WebStreamr 🇮🇹 ⚠️ external", + "title": "🔗 mixdrop.ag", }, ], "ttl": 900000,