String changes

This commit is contained in:
tapframe 2026-05-21 14:51:30 +05:30
parent 8c25cca724
commit 0bfd2cb99c
7 changed files with 116 additions and 43 deletions

View file

@ -379,7 +379,7 @@
<string name="compose_settings_page_appearance">Utseende</string> <string name="compose_settings_page_appearance">Utseende</string>
<string name="compose_settings_page_content_discovery">Innhold &amp; oppdagelse</string> <string name="compose_settings_page_content_discovery">Innhold &amp; oppdagelse</string>
<string name="compose_settings_page_continue_watching">Fortsett å se</string> <string name="compose_settings_page_continue_watching">Fortsett å se</string>
<string name="compose_settings_page_debrid">Skytjenester</string> <string name="compose_settings_page_debrid">Tilkoblede tjenester</string>
<string name="compose_settings_page_homescreen">Hjemmeoppsett</string> <string name="compose_settings_page_homescreen">Hjemmeoppsett</string>
<string name="compose_settings_page_integrations">Integrasjoner</string> <string name="compose_settings_page_integrations">Integrasjoner</string>
<string name="compose_settings_page_licenses_attributions">Lisenser &amp; attribusjon</string> <string name="compose_settings_page_licenses_attributions">Lisenser &amp; attribusjon</string>
@ -588,17 +588,17 @@
<string name="settings_integrations_section_title">Integrasjoner</string> <string name="settings_integrations_section_title">Integrasjoner</string>
<string name="settings_integrations_tmdb_description">Metadata-berikelse-kontroller</string> <string name="settings_integrations_tmdb_description">Metadata-berikelse-kontroller</string>
<string name="settings_integrations_mdblist_description">Eksterne vurderingsleverandører</string> <string name="settings_integrations_mdblist_description">Eksterne vurderingsleverandører</string>
<string name="settings_integrations_debrid_description">Administrer skytjenestekontoer og tilgang til skybibliotek</string> <string name="settings_integrations_debrid_description">Koble til kontoer for lenker og bibliotektilgang</string>
<string name="settings_debrid_section_title">Skytjenester</string> <string name="settings_debrid_section_title">Tilkoblede tjenester</string>
<string name="settings_debrid_experimental_notice">Støtte for skytjenester er eksperimentell og kan endres eller fjernes senere.</string> <string name="settings_debrid_experimental_notice">Disse integrasjonene er eksperimentelle og kan endres eller fjernes senere.</string>
<string name="settings_debrid_cloud_library">Skybibliotek</string> <string name="settings_debrid_cloud_library">Skybibliotek</string>
<string name="settings_debrid_cloud_library_description">Bla gjennom og spill filer som allerede finnes i tilkoblede skytjenester.</string> <string name="settings_debrid_cloud_library_description">Bla gjennom og spill filer som allerede finnes i tilkoblede kontoer.</string>
<string name="settings_debrid_enable">Løs spillbare lenker</string> <string name="settings_debrid_enable">Løs spillbare lenker</string>
<string name="settings_debrid_enable_description">Be en tilkoblet tjeneste om spillbare lenker når et resultat trenger det. Dette kan legge elementet til i den tjenesten.</string> <string name="settings_debrid_enable_description">Be en tilkoblet tjeneste om spillbare lenker når et resultat trenger det. Dette kan legge elementet til i den tjenesten.</string>
<string name="settings_debrid_resolve_with">Løs med</string> <string name="settings_debrid_resolve_with">Løs med</string>
<string name="settings_debrid_resolve_with_description">Velg hvilken tilkoblet skytjeneste som håndterer spillbare lenker.</string> <string name="settings_debrid_resolve_with_description">Velg hvilken tilkoblet konto som håndterer spillbare lenker.</string>
<string name="settings_debrid_add_key_first">Koble til en skytjenestekonto først.</string> <string name="settings_debrid_add_key_first">Koble til en konto først.</string>
<string name="settings_debrid_section_providers">Skytjenester</string> <string name="settings_debrid_section_providers">Kontoer</string>
<string name="settings_debrid_provider_description">Koble til %1$s-kontoen din.</string> <string name="settings_debrid_provider_description">Koble til %1$s-kontoen din.</string>
<string name="settings_debrid_provider_device_description">Koble til %1$s-kontoen din i nettleseren.</string> <string name="settings_debrid_provider_device_description">Koble til %1$s-kontoen din i nettleseren.</string>
<string name="settings_debrid_dialog_title">%1$s API-nøkkel</string> <string name="settings_debrid_dialog_title">%1$s API-nøkkel</string>
@ -625,9 +625,9 @@
<string name="settings_debrid_prepare_count_many">%1$d lenker</string> <string name="settings_debrid_prepare_count_many">%1$d lenker</string>
<string name="settings_debrid_section_formatting">Formatering</string> <string name="settings_debrid_section_formatting">Formatering</string>
<string name="settings_debrid_name_template">Navnemal</string> <string name="settings_debrid_name_template">Navnemal</string>
<string name="settings_debrid_name_template_description">Styrer hvordan navn på skyresultater vises.</string> <string name="settings_debrid_name_template_description">Styrer hvordan resultatnavn vises.</string>
<string name="settings_debrid_description_template">Beskrivelsesmal</string> <string name="settings_debrid_description_template">Beskrivelsesmal</string>
<string name="settings_debrid_description_template_description">Styrer metadata vist under hvert skyresultat.</string> <string name="settings_debrid_description_template_description">Styrer metadata vist under hvert resultat.</string>
<string name="settings_debrid_key_valid">API-nøkkel validert.</string> <string name="settings_debrid_key_valid">API-nøkkel validert.</string>
<string name="settings_debrid_key_invalid">Kunne ikke validere denne API-nøkkelen.</string> <string name="settings_debrid_key_invalid">Kunne ikke validere denne API-nøkkelen.</string>
<string name="settings_mdb_add_api_key_first">Legg til MDBList API-nøkkel før du skrur på vurderinger.</string> <string name="settings_mdb_add_api_key_first">Legg til MDBList API-nøkkel før du skrur på vurderinger.</string>
@ -1165,9 +1165,9 @@
<string name="streams_resume_from_time">Gjenoppta fra %1$s</string> <string name="streams_resume_from_time">Gjenoppta fra %1$s</string>
<string name="streams_size">STØRRELSE %1$s</string> <string name="streams_size">STØRRELSE %1$s</string>
<string name="streams_torrent_not_supported">Denne strømtypen støttes ikke</string> <string name="streams_torrent_not_supported">Denne strømtypen støttes ikke</string>
<string name="debrid_missing_api_key">Koble til en skytjenestekonto i Innstillinger.</string> <string name="debrid_missing_api_key">Koble til en konto i Innstillinger.</string>
<string name="debrid_stream_stale">Denne skytjenestelenken er utgått. Oppdaterer resultater.</string> <string name="debrid_stream_stale">Denne lenken er utgått. Oppdaterer resultater.</string>
<string name="debrid_resolve_failed">Kunne ikke åpne denne skytjenestelenken.</string> <string name="debrid_resolve_failed">Kunne ikke åpne denne lenken.</string>
<string name="external_player_failed">Kunne ikke åpne ekstern avspiller</string> <string name="external_player_failed">Kunne ikke åpne ekstern avspiller</string>
<string name="external_player_not_configured">Velg en ekstern avspiller i innstillinger først</string> <string name="external_player_not_configured">Velg en ekstern avspiller i innstillinger først</string>
<string name="external_player_unavailable">Ingen ekstern avspiller er tilgjengelig</string> <string name="external_player_unavailable">Ingen ekstern avspiller er tilgjengelig</string>

View file

@ -380,7 +380,7 @@
<string name="compose_settings_page_appearance">Layout</string> <string name="compose_settings_page_appearance">Layout</string>
<string name="compose_settings_page_content_discovery">Content &amp; Discovery</string> <string name="compose_settings_page_content_discovery">Content &amp; Discovery</string>
<string name="compose_settings_page_continue_watching">Continue Watching</string> <string name="compose_settings_page_continue_watching">Continue Watching</string>
<string name="compose_settings_page_debrid">Cloud Services</string> <string name="compose_settings_page_debrid">Connected Services</string>
<string name="compose_settings_page_homescreen">Home Layout</string> <string name="compose_settings_page_homescreen">Home Layout</string>
<string name="compose_settings_page_integrations">Integrations</string> <string name="compose_settings_page_integrations">Integrations</string>
<string name="compose_settings_page_licenses_attributions">Licenses &amp; Attribution</string> <string name="compose_settings_page_licenses_attributions">Licenses &amp; Attribution</string>
@ -589,17 +589,17 @@
<string name="settings_integrations_section_title">Integrations</string> <string name="settings_integrations_section_title">Integrations</string>
<string name="settings_integrations_tmdb_description">Metadata enrichment controls</string> <string name="settings_integrations_tmdb_description">Metadata enrichment controls</string>
<string name="settings_integrations_mdblist_description">External ratings providers</string> <string name="settings_integrations_mdblist_description">External ratings providers</string>
<string name="settings_integrations_debrid_description">Manage cloud service accounts and cloud library access</string> <string name="settings_integrations_debrid_description">Connect accounts for links and library access</string>
<string name="settings_debrid_section_title">Cloud Services</string> <string name="settings_debrid_section_title">Connected Services</string>
<string name="settings_debrid_experimental_notice">Cloud Services support is experimental and may be kept, changed, or removed later.</string> <string name="settings_debrid_experimental_notice">These integrations are experimental and may be kept, changed, or removed later.</string>
<string name="settings_debrid_cloud_library">Cloud library</string> <string name="settings_debrid_cloud_library">Cloud library</string>
<string name="settings_debrid_cloud_library_description">Browse and play files already in your connected cloud services.</string> <string name="settings_debrid_cloud_library_description">Browse and play files already in your connected accounts.</string>
<string name="settings_debrid_enable">Resolve playable links</string> <string name="settings_debrid_enable">Resolve playable links</string>
<string name="settings_debrid_enable_description">Ask a connected service for playable links when a result needs it. This may add the item to that service.</string> <string name="settings_debrid_enable_description">Ask a connected service for playable links when a result needs it. This may add the item to that service.</string>
<string name="settings_debrid_resolve_with">Resolve with</string> <string name="settings_debrid_resolve_with">Resolve with</string>
<string name="settings_debrid_resolve_with_description">Choose which connected cloud service manages playable links.</string> <string name="settings_debrid_resolve_with_description">Choose which connected account handles playable links.</string>
<string name="settings_debrid_add_key_first">Connect a cloud service account first.</string> <string name="settings_debrid_add_key_first">Connect an account first.</string>
<string name="settings_debrid_section_providers">Cloud Services</string> <string name="settings_debrid_section_providers">Accounts</string>
<string name="settings_debrid_provider_description">Connect your %1$s account.</string> <string name="settings_debrid_provider_description">Connect your %1$s account.</string>
<string name="settings_debrid_provider_device_description">Link your %1$s account in the browser.</string> <string name="settings_debrid_provider_device_description">Link your %1$s account in the browser.</string>
<string name="settings_debrid_dialog_title">%1$s API Key</string> <string name="settings_debrid_dialog_title">%1$s API Key</string>
@ -623,16 +623,16 @@
<string name="settings_debrid_prepare_instant_playback">Prepare links</string> <string name="settings_debrid_prepare_instant_playback">Prepare links</string>
<string name="settings_debrid_prepare_instant_playback_description">Resolve playable links before playback starts.</string> <string name="settings_debrid_prepare_instant_playback_description">Resolve playable links before playback starts.</string>
<string name="settings_debrid_prepare_stream_count">Links to prepare</string> <string name="settings_debrid_prepare_stream_count">Links to prepare</string>
<string name="settings_debrid_prepare_stream_count_warning">Use a lower count when possible. Cloud services may rate-limit how many links can be resolved in a time period. Opening a movie or episode can count toward those limits even if you do not press Watch, because the links are prepared ahead of time.</string> <string name="settings_debrid_prepare_stream_count_warning">Use a lower count when possible. Connected services may rate-limit how many links can be resolved in a time period. Opening a movie or episode can count toward those limits even if you do not press Watch, because the links are prepared ahead of time.</string>
<string name="settings_debrid_prepare_count_one">1 link</string> <string name="settings_debrid_prepare_count_one">1 link</string>
<string name="settings_debrid_prepare_count_many">%1$d links</string> <string name="settings_debrid_prepare_count_many">%1$d links</string>
<string name="settings_debrid_section_formatting">Formatting</string> <string name="settings_debrid_section_formatting">Formatting</string>
<string name="settings_debrid_name_template">Name template</string> <string name="settings_debrid_name_template">Name template</string>
<string name="settings_debrid_name_template_description">Controls how cloud result names appear.</string> <string name="settings_debrid_name_template_description">Controls how result names appear.</string>
<string name="settings_debrid_description_template">Description template</string> <string name="settings_debrid_description_template">Description template</string>
<string name="settings_debrid_description_template_description">Controls the metadata shown under each cloud result.</string> <string name="settings_debrid_description_template_description">Controls the metadata shown under each result.</string>
<string name="settings_debrid_formatter_reset_title">Reset formatting</string> <string name="settings_debrid_formatter_reset_title">Reset formatting</string>
<string name="settings_debrid_formatter_reset_subtitle">Restore default cloud result formatting.</string> <string name="settings_debrid_formatter_reset_subtitle">Restore default result formatting.</string>
<string name="settings_debrid_key_valid">API key validated.</string> <string name="settings_debrid_key_valid">API key validated.</string>
<string name="settings_debrid_key_invalid">Could not validate this API key.</string> <string name="settings_debrid_key_invalid">Could not validate this API key.</string>
<string name="settings_mdb_add_api_key_first">Add your MDBList API key below before turning ratings on.</string> <string name="settings_mdb_add_api_key_first">Add your MDBList API key below before turning ratings on.</string>
@ -1170,10 +1170,10 @@
<string name="streams_resume_from_time">Resume from %1$s</string> <string name="streams_resume_from_time">Resume from %1$s</string>
<string name="streams_size">SIZE %1$s</string> <string name="streams_size">SIZE %1$s</string>
<string name="streams_torrent_not_supported">This stream type is not supported</string> <string name="streams_torrent_not_supported">This stream type is not supported</string>
<string name="debrid_missing_api_key">Connect a cloud service account in Settings.</string> <string name="debrid_missing_api_key">Connect an account in Settings.</string>
<string name="debrid_not_cached">Not cached on Torbox.</string> <string name="debrid_not_cached">Not cached on Torbox.</string>
<string name="debrid_stream_stale">This cloud service link expired. Refreshing results.</string> <string name="debrid_stream_stale">This link expired. Refreshing results.</string>
<string name="debrid_resolve_failed">Could not open this cloud service link.</string> <string name="debrid_resolve_failed">Could not open this link.</string>
<string name="external_player_failed">Couldn&apos;t open external player</string> <string name="external_player_failed">Couldn&apos;t open external player</string>
<string name="external_player_not_configured">Choose an external player in settings first</string> <string name="external_player_not_configured">Choose an external player in settings first</string>
<string name="external_player_unavailable">No external player is available</string> <string name="external_player_unavailable">No external player is available</string>
@ -1333,10 +1333,10 @@
<string name="library_trakt_load_failed">Couldn't load Trakt library</string> <string name="library_trakt_load_failed">Couldn't load Trakt library</string>
<string name="library_trakt_title">Trakt Library</string> <string name="library_trakt_title">Trakt Library</string>
<string name="cloud_library_connect_action">Connect account</string> <string name="cloud_library_connect_action">Connect account</string>
<string name="cloud_library_connect_message">Connect a cloud service in Cloud Services settings to browse playable files from your cloud library.</string> <string name="cloud_library_connect_message">Connect an account in Connected Services settings to browse playable files from your cloud library.</string>
<string name="cloud_library_connect_title">No cloud account connected</string> <string name="cloud_library_connect_title">No cloud account connected</string>
<string name="cloud_library_disabled_action">Open Cloud Services</string> <string name="cloud_library_disabled_action">Open Connected Services</string>
<string name="cloud_library_disabled_message">Turn on Cloud library in Cloud Services settings to browse files from connected accounts.</string> <string name="cloud_library_disabled_message">Turn on Cloud library in Connected Services settings to browse files from connected accounts.</string>
<string name="cloud_library_disabled_title">Cloud library is off</string> <string name="cloud_library_disabled_title">Cloud library is off</string>
<string name="cloud_library_empty_message">No playable cloud files match the current filters.</string> <string name="cloud_library_empty_message">No playable cloud files match the current filters.</string>
<string name="cloud_library_empty_title">Nothing here yet</string> <string name="cloud_library_empty_title">Nothing here yet</string>

View file

@ -56,7 +56,10 @@ data class DebridSettings(
get() = cloudLibraryEnabled && hasCloudLibraryProvider get() = cloudLibraryEnabled && hasCloudLibraryProvider
val hasCustomStreamFormatting: Boolean val hasCustomStreamFormatting: Boolean
get() = streamNameTemplate.isNotBlank() || streamDescriptionTemplate.isNotBlank() get() = DebridStreamFormatterDefaults.NAME_TEMPLATE.isNotBlank() ||
DebridStreamFormatterDefaults.DESCRIPTION_TEMPLATE.isNotBlank() ||
streamNameTemplate.isNotBlank() ||
streamDescriptionTemplate.isNotBlank()
fun apiKeyFor(providerId: String?): String { fun apiKeyFor(providerId: String?): String {
val normalized = DebridProviders.byId(providerId)?.id val normalized = DebridProviders.byId(providerId)?.id

View file

@ -12,12 +12,14 @@ class DebridStreamFormatter(
fun format(stream: StreamItem, settings: DebridSettings): StreamItem { fun format(stream: StreamItem, settings: DebridSettings): StreamItem {
if (!stream.isManagedDebridStream) return stream if (!stream.isManagedDebridStream) return stream
val values = buildValues(stream, settings) val values = buildValues(stream, settings)
val formattedName = engine.render(settings.streamNameTemplate, values) val nameTemplate = settings.streamNameTemplate.ifBlank { DebridStreamFormatterDefaults.NAME_TEMPLATE }
val descriptionTemplate = settings.streamDescriptionTemplate.ifBlank { DebridStreamFormatterDefaults.DESCRIPTION_TEMPLATE }
val formattedName = engine.render(nameTemplate, values)
.lineSequence() .lineSequence()
.joinToString(" ") { it.trim() } .joinToString(" ") { it.trim() }
.replace(Regex("\\s+"), " ") .replace(Regex("\\s+"), " ")
.trim() .trim()
val formattedDescription = engine.render(settings.streamDescriptionTemplate, values) val formattedDescription = engine.render(descriptionTemplate, values)
.lineSequence() .lineSequence()
.map { it.trim() } .map { it.trim() }
.filter { it.isNotBlank() } .filter { it.isNotBlank() }

View file

@ -1,7 +1,7 @@
package com.nuvio.app.features.debrid package com.nuvio.app.features.debrid
object DebridStreamFormatterDefaults { object DebridStreamFormatterDefaults {
const val NAME_TEMPLATE = "" const val NAME_TEMPLATE = "{stream.resolution::exists[\"{stream.resolution} \"||\"\"]}{service.shortName::exists[\"{service.shortName}\"||\"Cloud\"]} Instant"
const val DESCRIPTION_TEMPLATE = "" const val DESCRIPTION_TEMPLATE = ""

View file

@ -321,7 +321,7 @@ internal fun LazyListScope.debridSettingsContent(
DebridPreferenceRow( DebridPreferenceRow(
isTablet = isTablet, isTablet = isTablet,
title = "Max results", title = "Max results",
description = "Limit how many cloud-service results appear.", description = "Limit how many results appear.",
value = streamMaxResultsLabel(preferences.maxResults), value = streamMaxResultsLabel(preferences.maxResults),
enabled = settings.canResolvePlayableLinks, enabled = settings.canResolvePlayableLinks,
onClick = { activeStreamPicker = DebridStreamPicker.MAX_RESULTS }, onClick = { activeStreamPicker = DebridStreamPicker.MAX_RESULTS },
@ -330,7 +330,7 @@ internal fun LazyListScope.debridSettingsContent(
DebridPreferenceRow( DebridPreferenceRow(
isTablet = isTablet, isTablet = isTablet,
title = "Sort results", title = "Sort results",
description = "Choose how cloud-service results are ordered.", description = "Choose how results are ordered.",
value = sortProfileLabel(preferences.sortCriteria), value = sortProfileLabel(preferences.sortCriteria),
enabled = settings.canResolvePlayableLinks, enabled = settings.canResolvePlayableLinks,
onClick = { activeStreamPicker = DebridStreamPicker.SORT_MODE }, onClick = { activeStreamPicker = DebridStreamPicker.SORT_MODE },
@ -357,7 +357,7 @@ internal fun LazyListScope.debridSettingsContent(
DebridPreferenceRow( DebridPreferenceRow(
isTablet = isTablet, isTablet = isTablet,
title = "Size range", title = "Size range",
description = "Filter cloud-service results by file size.", description = "Filter results by file size.",
value = sizeRangeLabel(preferences), value = sizeRangeLabel(preferences),
enabled = settings.canResolvePlayableLinks, enabled = settings.canResolvePlayableLinks,
onClick = { activeStreamPicker = DebridStreamPicker.SIZE_RANGE }, onClick = { activeStreamPicker = DebridStreamPicker.SIZE_RANGE },
@ -398,7 +398,10 @@ internal fun LazyListScope.debridSettingsContent(
isTablet = isTablet, isTablet = isTablet,
title = stringResource(Res.string.settings_debrid_name_template), title = stringResource(Res.string.settings_debrid_name_template),
description = stringResource(Res.string.settings_debrid_name_template_description), description = stringResource(Res.string.settings_debrid_name_template_description),
value = templatePreview(settings.streamNameTemplate), value = templatePreview(
value = settings.streamNameTemplate,
defaultValue = DebridStreamFormatterDefaults.NAME_TEMPLATE,
),
enabled = settings.canResolvePlayableLinks, enabled = settings.canResolvePlayableLinks,
onClick = { activeTemplateField = DebridTemplateField.NAME }, onClick = { activeTemplateField = DebridTemplateField.NAME },
) )
@ -407,7 +410,10 @@ internal fun LazyListScope.debridSettingsContent(
isTablet = isTablet, isTablet = isTablet,
title = stringResource(Res.string.settings_debrid_description_template), title = stringResource(Res.string.settings_debrid_description_template),
description = stringResource(Res.string.settings_debrid_description_template_description), description = stringResource(Res.string.settings_debrid_description_template_description),
value = templatePreview(settings.streamDescriptionTemplate), value = templatePreview(
value = settings.streamDescriptionTemplate,
defaultValue = DebridStreamFormatterDefaults.DESCRIPTION_TEMPLATE,
),
enabled = settings.canResolvePlayableLinks, enabled = settings.canResolvePlayableLinks,
onClick = { activeTemplateField = DebridTemplateField.DESCRIPTION }, onClick = { activeTemplateField = DebridTemplateField.DESCRIPTION },
) )
@ -450,7 +456,8 @@ private enum class DebridTemplateField {
DESCRIPTION, DESCRIPTION,
} }
private fun templatePreview(value: String): String { private fun templatePreview(value: String, defaultValue: String): String {
if (value.trim().isBlank() || value.trim() == defaultValue.trim()) return "Default format"
val firstLine = value val firstLine = value
.lineSequence() .lineSequence()
.map { it.trim() } .map { it.trim() }

View file

@ -2,12 +2,17 @@ package com.nuvio.app.features.debrid
import com.nuvio.app.features.streams.AddonStreamGroup import com.nuvio.app.features.streams.AddonStreamGroup
import com.nuvio.app.features.streams.StreamBehaviorHints import com.nuvio.app.features.streams.StreamBehaviorHints
import com.nuvio.app.features.streams.StreamClientResolve
import com.nuvio.app.features.streams.StreamClientResolveParsed
import com.nuvio.app.features.streams.StreamClientResolveRaw
import com.nuvio.app.features.streams.StreamClientResolveStream
import com.nuvio.app.features.streams.StreamDebridCacheState import com.nuvio.app.features.streams.StreamDebridCacheState
import com.nuvio.app.features.streams.StreamDebridCacheStatus import com.nuvio.app.features.streams.StreamDebridCacheStatus
import com.nuvio.app.features.streams.StreamItem import com.nuvio.app.features.streams.StreamItem
import kotlin.test.Test import kotlin.test.Test
import kotlin.test.assertContains import kotlin.test.assertContains
import kotlin.test.assertEquals import kotlin.test.assertEquals
import kotlin.test.assertFalse
class DebridStreamPresentationTest { class DebridStreamPresentationTest {
@Test @Test
@ -34,6 +39,36 @@ class DebridStreamPresentationTest {
assertContains(description, "Lost.S01E01.2160p.WEB-DL.H265.AAC-NAKSU.mkv") assertContains(description, "Lost.S01E01.2160p.WEB-DL.H265.AAC-NAKSU.mkv")
} }
@Test
fun `default formatter replaces addon source labels for managed streams`() {
val stream = premiumizeDirectStream(
name = "[P2P] Torrentio 2160p - PM Instant",
filename = "The.Boys.S03E01.Payback.2160p.WEB-DL.H265.mkv",
size = 12_000_000_000,
)
val presented = DebridStreamPresentation.apply(
groups = listOf(
AddonStreamGroup(
addonName = "Torrentio",
addonId = "addon:torrentio",
streams = listOf(stream),
),
),
settings = DebridSettings(
enabled = true,
providerApiKeys = mapOf(DebridProviders.PREMIUMIZE_ID to "pm_key"),
),
).single().streams.single()
val name = presented.name.orEmpty()
assertEquals("2160p PM Instant", name)
assertFalse(name.contains("P2P", ignoreCase = true))
assertFalse(name.contains("torrent", ignoreCase = true))
assertFalse(name.contains("Torrentio", ignoreCase = true))
assertFalse(name.contains("Comet", ignoreCase = true))
}
@Test @Test
fun `applies debrid sort filters and limits without removing normal urls`() { fun `applies debrid sort filters and limits without removing normal urls`() {
val low = localTorboxStream( val low = localTorboxStream(
@ -75,7 +110,7 @@ class DebridStreamPresentationTest {
), ),
).single().streams ).single().streams
assertEquals(listOf("Large", "Mid", "Resolved addon URL"), presented.map { it.name }) assertEquals(listOf("2160p TB Instant", "1080p TB Instant", "Resolved addon URL"), presented.map { it.name })
} }
@Test @Test
@ -106,7 +141,7 @@ class DebridStreamPresentationTest {
), ),
).single().streams ).single().streams
assertEquals(listOf("Cached"), presented.map { it.name }) assertEquals(listOf("1080p TB Instant"), presented.map { it.name })
} }
@Test @Test
@ -158,4 +193,30 @@ class DebridStreamPresentationTest {
cachedSize = size, cachedSize = size,
), ),
) )
private fun premiumizeDirectStream(
name: String,
filename: String,
size: Long,
): StreamItem =
StreamItem(
name = name,
addonName = "Torrentio",
addonId = "addon:torrentio",
clientResolve = StreamClientResolve(
type = "debrid",
service = DebridProviders.PREMIUMIZE_ID,
filename = filename,
isCached = true,
stream = StreamClientResolveStream(
raw = StreamClientResolveRaw(
filename = filename,
size = size,
parsed = StreamClientResolveParsed(
resolution = "2160p",
),
),
),
),
)
} }