diff --git a/app/src/main/java/apps/amine/bou/readerforselfoss/HomeActivity.kt b/app/src/main/java/apps/amine/bou/readerforselfoss/HomeActivity.kt index 8b86b79..f32b21e 100644 --- a/app/src/main/java/apps/amine/bou/readerforselfoss/HomeActivity.kt +++ b/app/src/main/java/apps/amine/bou/readerforselfoss/HomeActivity.kt @@ -104,11 +104,11 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener { private var itemsCaching: Boolean = false private var updateSources: Boolean = true private var hiddenTags: List = emptyList() + private var apiVersionMajor: Int = 0 private var periodicRefresh = false private var refreshMinutes: Long = 360L private var refreshWhenChargingOnly = false - private val dateTimeFormatter = "yyyy-MM-dd HH:mm:ss" private lateinit var tabNewBadge: TextBadgeItem private lateinit var tabArchiveBadge: TextBadgeItem @@ -195,6 +195,8 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener { handleSharedPrefs() + getApiMajorVersion() + getElementsAccordingToTab() } @@ -330,6 +332,28 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener { } } + private fun getApiMajorVersion() { + api.apiVersion.enqueue(object : Callback { + override fun onFailure(call: Call, t: Throwable) { + if (apiVersionMajor >= 4) { + Config.dateTimeFormatter = "yyyy-MM-dd'T'HH:mm:ssXXX" + } + } + + override fun onResponse(call: Call, response: Response) { + if(response.body() != null) { + val version = response.body() as ApiVersion + apiVersionMajor = version.getApiMajorVersion() + sharedPref.edit().putInt("apiVersionMajor", apiVersionMajor).commit() + + if (apiVersionMajor >= 4) { + Config.dateTimeFormatter = "yyyy-MM-dd'T'HH:mm:ssXXX" + } + } + } + }) + } + override fun onResume() { super.onResume() @@ -442,6 +466,8 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener { if (refreshMinutes <= 15) { refreshMinutes = 15 } + + apiVersionMajor = sharedPref.getInt("apiVersionMajor", 0) } private fun handleThemeBinding() { @@ -906,7 +932,7 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener { thread { val dbItems = db.itemsDao().items().map { it.toView() }.sortedByDescending { - SimpleDateFormat(dateTimeFormatter).parse(it.datetime) + SimpleDateFormat(Config.dateTimeFormatter).parse(it.datetime) } runOnUiThread { if (dbItems.isNotEmpty()) { @@ -1010,7 +1036,7 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener { thread { val dbItems = db.itemsDao().items().map { it.toView() }.sortedByDescending { - SimpleDateFormat(dateTimeFormatter).parse(it.datetime) + SimpleDateFormat(Config.dateTimeFormatter).parse(it.datetime) } runOnUiThread { if (dbItems.isNotEmpty()) { diff --git a/app/src/main/java/apps/amine/bou/readerforselfoss/api/selfoss/SelfossApi.kt b/app/src/main/java/apps/amine/bou/readerforselfoss/api/selfoss/SelfossApi.kt index 47197ab..038bc01 100644 --- a/app/src/main/java/apps/amine/bou/readerforselfoss/api/selfoss/SelfossApi.kt +++ b/app/src/main/java/apps/amine/bou/readerforselfoss/api/selfoss/SelfossApi.kt @@ -215,6 +215,9 @@ class SelfossApi( fun update(): Call = service.update(userName, password) + val apiVersion: Call + get() = service.version() + val sources: Call> get() = service.sources(userName, password) diff --git a/app/src/main/java/apps/amine/bou/readerforselfoss/api/selfoss/SelfossModels.kt b/app/src/main/java/apps/amine/bou/readerforselfoss/api/selfoss/SelfossModels.kt index 0d74c25..3bf313f 100644 --- a/app/src/main/java/apps/amine/bou/readerforselfoss/api/selfoss/SelfossModels.kt +++ b/app/src/main/java/apps/amine/bou/readerforselfoss/api/selfoss/SelfossModels.kt @@ -48,6 +48,19 @@ data class Spout( @SerializedName("description") val description: String ) +data class ApiVersion( + @SerializedName("version") val version: String?, + @SerializedName("apiversion") val apiversion: String? +) { + fun getApiMajorVersion() : Int { + var versionNumber = 0 + if (apiversion != null) { + versionNumber = apiversion.substringBefore(".").toInt() + } + return versionNumber + } +} + data class Source( @SerializedName("id") val id: String, @SerializedName("title") val title: String, diff --git a/app/src/main/java/apps/amine/bou/readerforselfoss/api/selfoss/SelfossService.kt b/app/src/main/java/apps/amine/bou/readerforselfoss/api/selfoss/SelfossService.kt index 553579d..371213b 100644 --- a/app/src/main/java/apps/amine/bou/readerforselfoss/api/selfoss/SelfossService.kt +++ b/app/src/main/java/apps/amine/bou/readerforselfoss/api/selfoss/SelfossService.kt @@ -103,6 +103,9 @@ internal interface SelfossService { @Query("password") password: String ): Call> + @GET("api/about") + fun version(): Call + @DELETE("source/{id}") fun deleteSource( @Path("id") id: String, diff --git a/app/src/main/java/apps/amine/bou/readerforselfoss/utils/Config.kt b/app/src/main/java/apps/amine/bou/readerforselfoss/utils/Config.kt index 1f9f290..c0dca46 100644 --- a/app/src/main/java/apps/amine/bou/readerforselfoss/utils/Config.kt +++ b/app/src/main/java/apps/amine/bou/readerforselfoss/utils/Config.kt @@ -40,6 +40,8 @@ class Config(c: Context) { const val newItemsChannelId = "new-items-channel-id" + var dateTimeFormatter = "yyyy-MM-dd HH:mm:ss" + fun logoutAndRedirect( c: Context, callingActivity: Activity, diff --git a/app/src/main/java/apps/amine/bou/readerforselfoss/utils/ItemsUtils.kt b/app/src/main/java/apps/amine/bou/readerforselfoss/utils/ItemsUtils.kt index 2f7c562..d0a49b7 100644 --- a/app/src/main/java/apps/amine/bou/readerforselfoss/utils/ItemsUtils.kt +++ b/app/src/main/java/apps/amine/bou/readerforselfoss/utils/ItemsUtils.kt @@ -22,7 +22,7 @@ fun String.toTextDrawableString(c: Context): String { fun Item.sourceAndDateText(): String { val formattedDate: String = try { " " + DateUtils.getRelativeTimeSpanString( - SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(this.datetime).time, + SimpleDateFormat(Config.dateTimeFormatter).parse(this.datetime).time, Date().time, DateUtils.MINUTE_IN_MILLIS, DateUtils.FORMAT_ABBREV_RELATIVE