Add filters only with selfoss >= 2.19
Some checks failed
Check PR code / translations (pull_request) Successful in 31s
Check PR code / Lint (pull_request) Failing after 37s
Check PR code / build (pull_request) Has been skipped

Source filters have been implemented in 2014 (commit 849957ca) but there is no reliable way to determine whether the selfoss instance does support source filters.
This commit is contained in:
davidoskky 2025-04-13 19:53:01 +02:00
parent 566930ba84
commit 9e140aefa6

View File

@ -642,14 +642,13 @@ class SelfossApi(
): SuccessResponse = ): SuccessResponse =
maybeResponse( maybeResponse(
if (appSettingsService.getApiVersion() > 1) { if (appSettingsService.getApiVersion() > 1) {
createSource("tags[]", title, url, spout, tags, filter) createSource(title, url, spout, tags, filter)
} else { } else {
createSource("tags", title, url, spout, tags, filter) createSourceOld(title, url, spout, tags)
}, },
) )
private suspend fun createSource( private suspend fun createSource(
tagsParamName: String,
title: String, title: String,
url: String, url: String,
spout: String, spout: String,
@ -668,7 +667,47 @@ class SelfossApi(
append("url", url) append("url", url)
append("spout", spout) append("spout", spout)
append("filter", filter) append("filter", filter)
append(tagsParamName, tags) append("tags[]", tags)
},
block = {
if (appSettingsService
.getBasicUserName()
.isNotEmpty() &&
appSettingsService.getBasicPassword().isNotEmpty()
) {
headers {
append(
HttpHeaders.Authorization,
constructBasicAuthValue(
BasicAuthCredentials(
username = appSettingsService.getBasicUserName(),
password = appSettingsService.getBasicPassword(),
),
),
)
}
}
},
)
private suspend fun createSourceOld(
title: String,
url: String,
spout: String,
tags: String,
): HttpResponse? =
client.tryToSubmitForm(
url = url("/source"),
formParameters =
Parameters.build {
if (!shouldHavePostLogin()) {
append("username", appSettingsService.getUserName())
append("password", appSettingsService.getPassword())
}
append("title", title)
append("url", url)
append("spout", spout)
append("tags", tags)
}, },
block = { block = {
if (appSettingsService if (appSettingsService
@ -701,15 +740,14 @@ class SelfossApi(
): SuccessResponse = ): SuccessResponse =
maybeResponse( maybeResponse(
if (appSettingsService.getApiVersion() > 1) { if (appSettingsService.getApiVersion() > 1) {
updateSource(id, "tags[]", title, url, spout, tags, filter) updateSource(id, title, url, spout, tags, filter)
} else { } else {
updateSource(id, "tags", title, url, spout, tags, filter) updateSourceOld(id, title, url, spout, tags)
}, },
) )
private suspend fun updateSource( private suspend fun updateSource(
id: Int, id: Int,
tagsParamName: String,
title: String, title: String,
url: String, url: String,
spout: String, spout: String,
@ -727,7 +765,7 @@ class SelfossApi(
append("title", title) append("title", title)
append("url", url) append("url", url)
append("spout", spout) append("spout", spout)
append(tagsParamName, tags) append("tags[]", tags)
append("filter", filter) append("filter", filter)
}, },
block = { block = {
@ -751,6 +789,47 @@ class SelfossApi(
}, },
) )
private suspend fun updateSourceOld(
id: Int,
title: String,
url: String,
spout: String,
tags: String,
): HttpResponse? =
client.tryToSubmitForm(
url = url("/source/$id"),
formParameters =
Parameters.build {
if (!shouldHavePostLogin()) {
append("username", appSettingsService.getUserName())
append("password", appSettingsService.getPassword())
}
append("title", title)
append("url", url)
append("spout", spout)
append("tags", tags)
},
block = {
if (appSettingsService
.getBasicUserName()
.isNotEmpty() &&
appSettingsService.getBasicPassword().isNotEmpty()
) {
headers {
append(
HttpHeaders.Authorization,
constructBasicAuthValue(
BasicAuthCredentials(
username = appSettingsService.getBasicUserName(),
password = appSettingsService.getBasicPassword(),
),
),
)
}
}
},
)
suspend fun deleteSource(id: Int): SuccessResponse = suspend fun deleteSource(id: Int): SuccessResponse =
maybeResponse( maybeResponse(
client.tryToDelete(url("/source/$id")) { client.tryToDelete(url("/source/$id")) {