Compare commits

...

8 Commits

Author SHA1 Message Date
7f96798f13 fix: images could be null.
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone Build is passing
2023-05-27 21:06:56 +02:00
6e5704a45b fix: Check if color is not empty before parsing it. 2023-05-27 21:02:25 +02:00
495591159f chore: Removed unused log. 2023-05-27 21:01:54 +02:00
718fe7c5ee Changelog for v123051331 [CI SKIP] 2023-05-13 20:24:57 +00:00
ecd23213f9 fix: illegal input.
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone Build is passing
2023-05-13 22:14:25 +02:00
e6baed8cb4 Changelog for v123051321 [CI SKIP] 2023-05-12 19:19:35 +00:00
c87abec0b9 debug: Debug null context.
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone Build is passing
2023-05-12 20:31:40 +02:00
0aba41d8bf Changelog for v123051301 [CI SKIP] 2023-05-10 19:36:31 +00:00
7 changed files with 70 additions and 41 deletions

View File

@ -1,3 +1,25 @@
**v123051331**
- fix: illegal input.
- Changelog for v123051321 [CI SKIP]
--------------------------------------------------------------------
**v123051321**
- debug: Debug null context.
- Changelog for v123051301 [CI SKIP]
--------------------------------------------------------------------
**v123051301**
- feat: Basic auth from url. Fixes #142 (#143)
- debug: Debug index out of bound exception.
- Changelog for v123051211 [CI SKIP]
--------------------------------------------------------------------
**v123051211** **v123051211**
- fix: Sometimes url isn't even defined. - fix: Sometimes url isn't even defined.

View File

@ -74,7 +74,6 @@ class ReaderActivity : AppCompatActivity(), DIAware {
try { try {
readItem(allItems[currentItem]) readItem(allItems[currentItem])
} catch (e: IndexOutOfBoundsException) { } catch (e: IndexOutOfBoundsException) {
e.sendSilentlyWithAcraWithName("out of bound > size = ${allItems.size} currentItem = $currentItem")
finish() finish()
} }

View File

@ -530,7 +530,12 @@ class ArticleFragment : Fragment(), DIAware {
private fun openInBrowserAfterFailing() { private fun openInBrowserAfterFailing() {
binding.progressBar.visibility = View.GONE binding.progressBar.visibility = View.GONE
requireActivity().openInBrowserAsNewTask(this@ArticleFragment.item) if (context != null) {
requireContext().openInBrowserAsNewTask(this@ArticleFragment.item)
} else {
Exception("openInBrowserAfterFailing context is null").sendSilentlyWithAcraWithName("openInBrowserAfterFailing > $context")
}
} }
companion object { companion object {
@ -548,8 +553,8 @@ class ArticleFragment : Fragment(), DIAware {
} }
fun performClick(): Boolean { fun performClick(): Boolean {
if (binding.webcontent.hitTestResult.type == WebView.HitTestResult.IMAGE_TYPE || if (allImages != null && (binding.webcontent.hitTestResult.type == WebView.HitTestResult.IMAGE_TYPE ||
binding.webcontent.hitTestResult.type == WebView.HitTestResult.SRC_IMAGE_ANCHOR_TYPE binding.webcontent.hitTestResult.type == WebView.HitTestResult.SRC_IMAGE_ANCHOR_TYPE)
) { ) {
val position: Int = allImages.indexOf(binding.webcontent.hitTestResult.extra) val position: Int = allImages.indexOf(binding.webcontent.hitTestResult.extra)

View File

@ -149,6 +149,7 @@ class FilterSheetFragment : BottomSheetDialogFragment(), DIAware {
c.ellipsize = TextUtils.TruncateAt.END c.ellipsize = TextUtils.TruncateAt.END
c.text = tag.tag c.text = tag.tag
if (tag.color.isNotEmpty()) {
try { try {
val gd = GradientDrawable() val gd = GradientDrawable()
val gdColor = try { val gdColor = try {
@ -165,6 +166,7 @@ class FilterSheetFragment : BottomSheetDialogFragment(), DIAware {
} catch (e: Exception) { } catch (e: Exception) {
e.sendSilentlyWithAcraWithName("tags > GradientDrawable") e.sendSilentlyWithAcraWithName("tags > GradientDrawable")
} }
}
c.setOnCloseIconClickListener { c.setOnCloseIconClickListener {
(it as Chip).isCloseIconVisible = false (it as Chip).isCloseIconVisible = false

View File

@ -6,12 +6,12 @@ class MercuryModel {
@Serializable @Serializable
class ParsedContent( class ParsedContent(
val title: String?, val title: String? = null,
val content: String?, val content: String? = null,
val lead_image_url: String?, // NOSONAR val lead_image_url: String? = null, // NOSONAR
val url: String?, val url: String? = null,
val error: Boolean?, val error: Boolean? = null,
val message: String?, val message: String? = null,
val failed: Boolean? val failed: Boolean? = null
) )
} }

View File

@ -24,8 +24,8 @@ class SelfossModel {
@Serializable @Serializable
class Stats( class Stats(
val total: Int, val total: Int,
val unread: Int?, val unread: Int? = null,
val starred: Int? val starred: Int? = null
) )
@Serializable @Serializable
@ -36,9 +36,9 @@ class SelfossModel {
@Serializable @Serializable
data class ApiInformation( data class ApiInformation(
val version: String?, val version: String? = null,
val apiversion: String?, val apiversion: String? = null,
val configuration: ApiConfiguration? val configuration: ApiConfiguration? = null
) { ) {
fun getApiMajorVersion(): Int { fun getApiMajorVersion(): Int {
var versionNumber = 0 var versionNumber = 0
@ -54,9 +54,9 @@ class SelfossModel {
@Serializable @Serializable
data class ApiConfiguration( data class ApiConfiguration(
@Serializable(with = BooleanSerializer::class) @Serializable(with = BooleanSerializer::class)
val publicMode: Boolean?, val publicMode: Boolean? = null,
@Serializable(with = BooleanSerializer::class) @Serializable(with = BooleanSerializer::class)
val authEnabled: Boolean? val authEnabled: Boolean? = null
) { ) {
fun isAuthEnabled() = authEnabled ?: true fun isAuthEnabled() = authEnabled ?: true
@ -75,7 +75,7 @@ class SelfossModel {
data class SourceStats( data class SourceStats(
override val id: Int, override val id: Int,
override var title: String, override var title: String,
override var unread: Int?, override var unread: Int? = null,
override var error: String? = null, override var error: String? = null,
override var icon: String? = null override var icon: String? = null
) : Source ) : Source
@ -86,11 +86,11 @@ class SelfossModel {
override var title: String, override var title: String,
override var unread: Int? = null, override var unread: Int? = null,
@Serializable(with = TagsListSerializer::class) @Serializable(with = TagsListSerializer::class)
var tags: List<String>?, var tags: List<String>? = null,
var spout: String?, var spout: String? = null,
override var error: String?, override var error: String? = null,
override var icon: String?, override var icon: String? = null,
var params: SourceParams? var params: SourceParams? = null
) : Source ) : Source
@Serializable @Serializable
@ -107,13 +107,13 @@ class SelfossModel {
var unread: Boolean, var unread: Boolean,
@Serializable(with = BooleanSerializer::class) @Serializable(with = BooleanSerializer::class)
var starred: Boolean, var starred: Boolean,
val thumbnail: String?, val thumbnail: String? = null,
val icon: String?, val icon: String? = null,
val link: String, val link: String,
val sourcetitle: String, val sourcetitle: String,
@Serializable(with = TagsListSerializer::class) @Serializable(with = TagsListSerializer::class)
val tags: List<String>, val tags: List<String>,
val author: String? val author: String? = null
) { ) {
fun getLinkDecoded(): String { fun getLinkDecoded(): String {
var stringUrl: String var stringUrl: String

View File

@ -36,6 +36,7 @@ class SelfossApi(private val appSettingsService: AppSettingsService) {
prettyPrint = true prettyPrint = true
isLenient = true isLenient = true
ignoreUnknownKeys = true ignoreUnknownKeys = true
explicitNulls = false
}) })
} }
install(Logging) { install(Logging) {