Compare commits
5 Commits
v123113311
...
v124010032
Author | SHA1 | Date | |
---|---|---|---|
750c7758bd | |||
22f8b14ecd | |||
6e27d6d4e6 | |||
14ff4dbd05 | |||
390c2d0cf3 |
16
CHANGELOG.md
16
CHANGELOG.md
@ -1,3 +1,19 @@
|
||||
**v124010031**
|
||||
|
||||
- fix: Checking if selfoss instance.
|
||||
- fix: handle three characters lenght hexcode colors.
|
||||
- Changelog for v123113311 [CI SKIP]
|
||||
|
||||
--------------------------------------------------------------------
|
||||
|
||||
**v123113311**
|
||||
|
||||
- chore: Source tracker url in the menu.
|
||||
- fix: Handle kodein proguard rules.
|
||||
- Changelog for v123102961 [CI SKIP]
|
||||
|
||||
--------------------------------------------------------------------
|
||||
|
||||
**v123102961**
|
||||
|
||||
- chore: domain changes.
|
||||
|
@ -140,20 +140,25 @@ class LoginActivity : AppCompatActivity(), DIAware {
|
||||
repository.refreshLoginInformation(url, login, password)
|
||||
|
||||
CoroutineScope(Dispatchers.Main).launch {
|
||||
repository.updateApiInformation()
|
||||
try {
|
||||
repository.updateApiInformation()
|
||||
} catch (e: Exception) {
|
||||
if (e.message?.startsWith("No transformation found") == true) {
|
||||
Toast.makeText(
|
||||
applicationContext,
|
||||
R.string.application_selfoss_only,
|
||||
Toast.LENGTH_LONG,
|
||||
).show()
|
||||
preferenceError()
|
||||
showProgress(false)
|
||||
}
|
||||
}
|
||||
val result = repository.login()
|
||||
if (result) {
|
||||
val (errorFetching, displaySelfossOnly) = repository.shouldBeSelfossInstance()
|
||||
if (!errorFetching && !displaySelfossOnly) {
|
||||
val errorFetching = repository.checkIfFetchFails()
|
||||
if (!errorFetching) {
|
||||
goToMain()
|
||||
} else {
|
||||
if (displaySelfossOnly) {
|
||||
Toast.makeText(
|
||||
applicationContext,
|
||||
R.string.application_selfoss_only,
|
||||
Toast.LENGTH_LONG,
|
||||
).show()
|
||||
}
|
||||
preferenceError()
|
||||
}
|
||||
} else {
|
||||
|
@ -17,6 +17,7 @@ import bou.amine.apps.readerforselfossv2.android.R
|
||||
import bou.amine.apps.readerforselfossv2.android.databinding.FilterFragmentBinding
|
||||
import bou.amine.apps.readerforselfossv2.android.sendSilentlyWithAcraWithName
|
||||
import bou.amine.apps.readerforselfossv2.repository.Repository
|
||||
import bou.amine.apps.readerforselfossv2.utils.getColorHexCode
|
||||
import bou.amine.apps.readerforselfossv2.utils.getHtmlDecoded
|
||||
import bou.amine.apps.readerforselfossv2.utils.getIcon
|
||||
import com.bumptech.glide.Glide
|
||||
@ -147,9 +148,9 @@ class FilterSheetFragment : BottomSheetDialogFragment(), DIAware {
|
||||
val gd = GradientDrawable()
|
||||
val gdColor =
|
||||
try {
|
||||
Color.parseColor(tag.color)
|
||||
Color.parseColor(tag.getColorHexCode())
|
||||
} catch (e: IllegalArgumentException) {
|
||||
e.sendSilentlyWithAcraWithName("color issue " + tag.color)
|
||||
e.sendSilentlyWithAcraWithName("color issue " + tag.color + " / " + tag.getColorHexCode())
|
||||
resources.getColor(R.color.colorPrimary)
|
||||
}
|
||||
gd.setColor(gdColor)
|
||||
|
@ -13,6 +13,8 @@ class DatesTest {
|
||||
private val oldVersionDate = "2013-05-07 13:46:00"
|
||||
private val oldVersionDateVariant = "2021-03-21 10:32:00.000000"
|
||||
|
||||
private val bugVersionDate = "2023-12-19T10:30:53-05:00"
|
||||
|
||||
@Test
|
||||
fun new_version_date_should_be_parsed() {
|
||||
val date = DateUtils.parseDate(newVersionDate)
|
||||
@ -52,4 +54,14 @@ class DatesTest {
|
||||
|
||||
assertEquals(expected, date)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun bug_version_variant_date_should_be_parsed() {
|
||||
val date = DateUtils.parseDate(bugVersionDate)
|
||||
val expected =
|
||||
LocalDateTime(1991, 3, 18, 3, 0, 0, 0).toInstant(TimeZone.currentSystemDefault())
|
||||
.toEpochMilliseconds()
|
||||
|
||||
assertEquals(expected, date)
|
||||
}
|
||||
}
|
||||
|
@ -1,6 +1,7 @@
|
||||
package bou.amine.apps.readerforselfossv2.utils
|
||||
|
||||
import android.text.format.DateUtils
|
||||
import io.github.aakira.napier.Napier
|
||||
import kotlinx.datetime.*
|
||||
|
||||
actual class DateUtils {
|
||||
@ -16,12 +17,17 @@ actual class DateUtils {
|
||||
// For now, we handle this in a hacky way, because kotlin only accepts iso formats
|
||||
actual fun parseDate(dateString: String): Long {
|
||||
var isoDateString: String =
|
||||
if (dateString.matches(oldVersionFormat)) {
|
||||
dateString.replace(" ", "T")
|
||||
} else if (dateString.matches(newVersionFormat)) {
|
||||
dateString.split("+")[0]
|
||||
} else {
|
||||
throw Exception("Unrecognized format for $dateString")
|
||||
try {
|
||||
if (dateString.matches(oldVersionFormat)) {
|
||||
dateString.replace(" ", "T")
|
||||
} else if (dateString.matches(newVersionFormat)) {
|
||||
dateString.split("+")[0]
|
||||
} else {
|
||||
throw Exception("Unrecognized format for $dateString")
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
Napier.e(e.stackTraceToString(), tag = "DateUtils.parseDate")
|
||||
"1991-03-18T03:00:00"
|
||||
}
|
||||
|
||||
return LocalDateTime.parse(isoDateString).toInstant(TimeZone.currentSystemDefault()).toEpochMilliseconds()
|
||||
|
@ -8,7 +8,6 @@ import bou.amine.apps.readerforselfossv2.rest.SelfossApi
|
||||
import bou.amine.apps.readerforselfossv2.service.AppSettingsService
|
||||
import bou.amine.apps.readerforselfossv2.utils.*
|
||||
import io.github.aakira.napier.Napier
|
||||
import io.ktor.client.call.*
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.flow.MutableStateFlow
|
||||
@ -429,22 +428,19 @@ class Repository(
|
||||
return result
|
||||
}
|
||||
|
||||
suspend fun shouldBeSelfossInstance(): Pair<Boolean, Boolean> {
|
||||
suspend fun checkIfFetchFails(): Boolean {
|
||||
var fetchFailed = true
|
||||
var showSelfossOnlyModal = false
|
||||
if (isNetworkAvailable()) {
|
||||
try {
|
||||
// Trying to fetch one item, and check someone is trying to use the app with
|
||||
// a random rss feed, that would throw a NoTransformationFoundException
|
||||
fetchFailed = !api.getItemsWithoutCatch().success
|
||||
} catch (e: NoTransformationFoundException) {
|
||||
showSelfossOnlyModal = true
|
||||
} catch (e: Throwable) {
|
||||
Napier.e(e.stackTraceToString(), tag = "RepositoryImpl.shouldBeSelfossInstance")
|
||||
}
|
||||
}
|
||||
|
||||
return Pair(fetchFailed, showSelfossOnlyModal)
|
||||
return fetchFailed
|
||||
}
|
||||
|
||||
suspend fun logout() {
|
||||
|
@ -73,3 +73,13 @@ fun SelfossModel.Item.toEntity(): ITEM =
|
||||
this.tags.joinToString(","),
|
||||
this.author,
|
||||
)
|
||||
|
||||
fun SelfossModel.Tag.getColorHexCode(): String =
|
||||
if (this.color.length == 4) { // #000
|
||||
val char1 = this.color.get(1)
|
||||
val char2 = this.color.get(2)
|
||||
val char3 = this.color.get(3)
|
||||
"#$char1$char1$char2$char2$char3$char3"
|
||||
} else {
|
||||
this.color
|
||||
}
|
Reference in New Issue
Block a user