Make blank debrid templates use original text

This commit is contained in:
tapframe 2026-05-30 00:59:47 +05:30
parent 8aed980b32
commit 7477600514
5 changed files with 36 additions and 9 deletions

View file

@ -661,9 +661,9 @@
<string name="settings_debrid_prepare_count_many">%1$d links</string>
<string name="settings_debrid_section_formatting">Formatting</string>
<string name="settings_debrid_name_template">Name template</string>
<string name="settings_debrid_name_template_description">Controls how result names appear.</string>
<string name="settings_debrid_name_template_description">Controls how result names appear. Leave blank to use the original result name.</string>
<string name="settings_debrid_description_template">Description template</string>
<string name="settings_debrid_description_template_description">Controls the metadata shown under each result.</string>
<string name="settings_debrid_description_template_description">Controls the metadata shown under each result. Leave blank to use the original result details.</string>
<string name="settings_debrid_formatter_reset_title">Reset formatting</string>
<string name="settings_debrid_formatter_reset_subtitle">Restore default result formatting.</string>
<string name="settings_debrid_key_valid">API key validated.</string>
@ -1545,6 +1545,7 @@
<!-- Debrid misc -->
<string name="settings_debrid_learn_more">Learn more</string>
<string name="settings_debrid_template_default_format">Default format</string>
<string name="settings_debrid_template_original_format">Original format</string>
<string name="settings_debrid_release_groups_hint">Enter one group per line.</string>
<!-- Debrid sort profiles -->
<string name="settings_debrid_sort_original">Original order</string>

View file

@ -390,11 +390,13 @@ object DebridSettingsRepository {
}
}
streamNameTemplate = normalizeStreamTemplate(
DebridSettingsStorage.loadStreamNameTemplate().orEmpty(),
DebridSettingsStorage.loadStreamNameTemplate()
?: DebridStreamFormatterDefaults.NAME_TEMPLATE,
DebridTemplateKind.NAME,
)
streamDescriptionTemplate = normalizeStreamTemplate(
DebridSettingsStorage.loadStreamDescriptionTemplate().orEmpty(),
DebridSettingsStorage.loadStreamDescriptionTemplate()
?: DebridStreamFormatterDefaults.DESCRIPTION_TEMPLATE,
DebridTemplateKind.DESCRIPTION,
)
streamBadgeRules = parseStreamBadgeRules(DebridSettingsStorage.loadStreamBadgeRules()) ?: StreamBadgeRules()

View file

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

View file

@ -150,6 +150,7 @@ import nuvio.composeapp.generated.resources.settings_debrid_size_range
import nuvio.composeapp.generated.resources.settings_debrid_size_range_desc
import nuvio.composeapp.generated.resources.settings_debrid_learn_more
import nuvio.composeapp.generated.resources.settings_debrid_template_default_format
import nuvio.composeapp.generated.resources.settings_debrid_template_original_format
import nuvio.composeapp.generated.resources.settings_debrid_release_groups_hint
import nuvio.composeapp.generated.resources.settings_debrid_sort_best_quality
import nuvio.composeapp.generated.resources.settings_debrid_sort_largest
@ -600,7 +601,10 @@ private enum class DebridTemplateField {
private fun templatePreview(value: String, defaultValue: String): String {
val defaultFormat = runBlocking { getString(Res.string.settings_debrid_template_default_format) }
if (value.trim().isBlank() || value.trim() == defaultValue.trim()) return defaultFormat
val originalFormat = runBlocking { getString(Res.string.settings_debrid_template_original_format) }
val trimmed = value.trim()
if (trimmed.isBlank()) return originalFormat
if (trimmed == defaultValue.trim()) return defaultFormat
val firstLine = value
.lineSequence()
.map { it.trim() }

View file

@ -39,6 +39,28 @@ class DebridStreamPresentationTest {
assertContains(description, "Lost.S01E01.2160p.WEB-DL.H265.AAC-NAKSU.mkv")
}
@Test
fun `blank templates preserve original stream name and description`() {
val stream = localTorboxStream(
name = "Original torrent",
filename = "Movie.2026.1080p.WEB-DL.H265-GRP.mkv",
size = 4_000_000_000,
).copy(description = "Original addon details")
val formatted = DebridStreamFormatter().format(
stream = stream,
settings = DebridSettings(
enabled = true,
providerApiKeys = mapOf(DebridProviders.TORBOX_ID to "key"),
streamNameTemplate = "",
streamDescriptionTemplate = "",
),
)
assertEquals("Original torrent", formatted.name)
assertEquals("Original addon details", formatted.description)
}
@Test
fun `formats imported badge matches from fusion badge rules`() {
val stream = localTorboxStream(