forked from Louvorg/ReaderForSelfoss-multiplatform
Compare commits
5 Commits
v122123571
...
v122123601
Author | SHA1 | Date | |
---|---|---|---|
a5e86bfb77 | |||
23be633798 | |||
813e0707d8 | |||
9ed9bf07fc | |||
47265c10d0 |
@ -17,6 +17,7 @@ steps:
|
|||||||
- echo "---------------------------------------------------------"
|
- echo "---------------------------------------------------------"
|
||||||
- ./gradlew koverMergedXmlReport
|
- ./gradlew koverMergedXmlReport
|
||||||
environment:
|
environment:
|
||||||
|
TZ: Europe/Paris
|
||||||
SONAR_HOST_URL:
|
SONAR_HOST_URL:
|
||||||
from_secret: sonarScannerHostUrl
|
from_secret: sonarScannerHostUrl
|
||||||
SONAR_LOGIN:
|
SONAR_LOGIN:
|
||||||
@ -50,6 +51,7 @@ steps:
|
|||||||
- git remote add pushing https://$GITEA_USR:$GITEA_PASS@gitea.amine-louveau.fr/Louvorg/ReaderForSelfoss-multiplatform.git
|
- git remote add pushing https://$GITEA_USR:$GITEA_PASS@gitea.amine-louveau.fr/Louvorg/ReaderForSelfoss-multiplatform.git
|
||||||
- git push pushing --tags
|
- git push pushing --tags
|
||||||
environment:
|
environment:
|
||||||
|
TZ: Europe/Paris
|
||||||
GITEA_USR:
|
GITEA_USR:
|
||||||
from_secret: giteaUsr
|
from_secret: giteaUsr
|
||||||
GITEA_PASS:
|
GITEA_PASS:
|
||||||
@ -117,6 +119,7 @@ steps:
|
|||||||
- echo "Verify"
|
- echo "Verify"
|
||||||
- $ANDROID_HOME/build-tools/31.0.0/apksigner verify signed.apk
|
- $ANDROID_HOME/build-tools/31.0.0/apksigner verify signed.apk
|
||||||
environment:
|
environment:
|
||||||
|
TZ: Europe/Paris
|
||||||
YOUR_KEYSTORE_PASSWORD:
|
YOUR_KEYSTORE_PASSWORD:
|
||||||
from_secret: keyPass
|
from_secret: keyPass
|
||||||
YOUR_KEY_ALIAS:
|
YOUR_KEY_ALIAS:
|
||||||
|
@ -23,6 +23,7 @@ import com.mikepenz.aboutlibraries.LibsBuilder
|
|||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
|
import org.acra.ACRA
|
||||||
import org.kodein.di.DIAware
|
import org.kodein.di.DIAware
|
||||||
import org.kodein.di.android.closestDI
|
import org.kodein.di.android.closestDI
|
||||||
import org.kodein.di.instance
|
import org.kodein.di.instance
|
||||||
@ -129,6 +130,7 @@ class LoginActivity : AppCompatActivity(), DIAware {
|
|||||||
private fun goToMain() {
|
private fun goToMain() {
|
||||||
CoroutineScope(Dispatchers.Main).launch {
|
CoroutineScope(Dispatchers.Main).launch {
|
||||||
repository.updateApiVersion()
|
repository.updateApiVersion()
|
||||||
|
ACRA.errorReporter.putCustomData("SELFOSS_API_VERSION", appSettingsService.getApiVersion().toString())
|
||||||
}
|
}
|
||||||
val intent = Intent(this, HomeActivity::class.java)
|
val intent = Intent(this, HomeActivity::class.java)
|
||||||
startActivity(intent)
|
startActivity(intent)
|
||||||
|
@ -30,6 +30,8 @@ class ReaderActivity : AppCompatActivity(), DIAware {
|
|||||||
|
|
||||||
private lateinit var binding: ActivityReaderBinding
|
private lateinit var binding: ActivityReaderBinding
|
||||||
|
|
||||||
|
private var allItems: ArrayList<SelfossModel.Item> = ArrayList()
|
||||||
|
|
||||||
override val di by closestDI()
|
override val di by closestDI()
|
||||||
private val repository: Repository by instance()
|
private val repository: Repository by instance()
|
||||||
private val appSettingsService: AppSettingsService by instance()
|
private val appSettingsService: AppSettingsService by instance()
|
||||||
@ -61,12 +63,14 @@ class ReaderActivity : AppCompatActivity(), DIAware {
|
|||||||
supportActionBar?.setDisplayHomeAsUpEnabled(true)
|
supportActionBar?.setDisplayHomeAsUpEnabled(true)
|
||||||
supportActionBar?.setDisplayShowHomeEnabled(true)
|
supportActionBar?.setDisplayShowHomeEnabled(true)
|
||||||
|
|
||||||
if (allItems.isEmpty()) {
|
currentItem = intent.getIntExtra("currentItem", 0)
|
||||||
|
|
||||||
|
allItems = repository.getReaderItems()
|
||||||
|
|
||||||
|
if (allItems.isEmpty() || currentItem > allItems.size) {
|
||||||
finish()
|
finish()
|
||||||
}
|
}
|
||||||
|
|
||||||
currentItem = intent.getIntExtra("currentItem", 0)
|
|
||||||
|
|
||||||
readItem(allItems[currentItem])
|
readItem(allItems[currentItem])
|
||||||
|
|
||||||
binding.pager.adapter = ScreenSlidePagerAdapter(this)
|
binding.pager.adapter = ScreenSlidePagerAdapter(this)
|
||||||
@ -214,8 +218,4 @@ class ReaderActivity : AppCompatActivity(), DIAware {
|
|||||||
startActivity(intent)
|
startActivity(intent)
|
||||||
overridePendingTransition(0, 0)
|
overridePendingTransition(0, 0)
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
|
||||||
var allItems: ArrayList<SelfossModel.Item> = ArrayList()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -132,8 +132,8 @@ class ItemCardAdapter(
|
|||||||
|
|
||||||
private fun handleLinkOpening() {
|
private fun handleLinkOpening() {
|
||||||
binding.root.setOnClickListener {
|
binding.root.setOnClickListener {
|
||||||
|
repository.setReaderItems(items)
|
||||||
c.openItemUrl(
|
c.openItemUrl(
|
||||||
items,
|
|
||||||
bindingAdapterPosition,
|
bindingAdapterPosition,
|
||||||
items[bindingAdapterPosition].getLinkDecoded(),
|
items[bindingAdapterPosition].getLinkDecoded(),
|
||||||
appSettingsService.isArticleViewerEnabled(),
|
appSettingsService.isArticleViewerEnabled(),
|
||||||
|
@ -84,8 +84,8 @@ class ItemListAdapter(
|
|||||||
|
|
||||||
private fun handleLinkOpening() {
|
private fun handleLinkOpening() {
|
||||||
binding.root.setOnClickListener {
|
binding.root.setOnClickListener {
|
||||||
|
repository.setReaderItems(items)
|
||||||
c.openItemUrl(
|
c.openItemUrl(
|
||||||
items,
|
|
||||||
bindingAdapterPosition,
|
bindingAdapterPosition,
|
||||||
items[bindingAdapterPosition].getLinkDecoded(),
|
items[bindingAdapterPosition].getLinkDecoded(),
|
||||||
appSettingsService.isArticleViewerEnabled(),
|
appSettingsService.isArticleViewerEnabled(),
|
||||||
|
@ -18,7 +18,6 @@ import bou.amine.apps.readerforselfossv2.utils.toStringUriWithHttp
|
|||||||
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
|
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
|
||||||
|
|
||||||
fun Context.openItemUrl(
|
fun Context.openItemUrl(
|
||||||
allItems: ArrayList<SelfossModel.Item>,
|
|
||||||
currentItem: Int,
|
currentItem: Int,
|
||||||
linkDecoded: String,
|
linkDecoded: String,
|
||||||
articleViewer: Boolean,
|
articleViewer: Boolean,
|
||||||
@ -33,7 +32,6 @@ fun Context.openItemUrl(
|
|||||||
).show()
|
).show()
|
||||||
} else {
|
} else {
|
||||||
if (articleViewer) {
|
if (articleViewer) {
|
||||||
ReaderActivity.allItems = allItems
|
|
||||||
val intent = Intent(this, ReaderActivity::class.java)
|
val intent = Intent(this, ReaderActivity::class.java)
|
||||||
intent.putExtra("currentItem", currentItem)
|
intent.putExtra("currentItem", currentItem)
|
||||||
app.startActivity(intent)
|
app.startActivity(intent)
|
||||||
|
@ -11,11 +11,14 @@ class DatesTest {
|
|||||||
|
|
||||||
private val v3Date = "2013-04-07T13:43:00+01:00"
|
private val v3Date = "2013-04-07T13:43:00+01:00"
|
||||||
private val v4Date = "2013-04-07 13:43:00"
|
private val v4Date = "2013-04-07 13:43:00"
|
||||||
|
private val bug1Date = "2022-12-24T17:00:08+00"
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun v3_date_should_be_parsed() {
|
fun v3_date_should_be_parsed() {
|
||||||
val date = DateUtils.parseDate(v3Date)
|
val date = DateUtils.parseDate(v3Date)
|
||||||
val expected = LocalDateTime(2013, 4, 7, 13, 43, 0, 0).toInstant(TimeZone.of("UTC+1")) .toEpochMilliseconds()
|
val expected =
|
||||||
|
LocalDateTime(2013, 4, 7, 14, 43, 0, 0).toInstant(TimeZone.currentSystemDefault())
|
||||||
|
.toEpochMilliseconds()
|
||||||
|
|
||||||
assertEquals(date, expected)
|
assertEquals(date, expected)
|
||||||
}
|
}
|
||||||
@ -30,4 +33,14 @@ class DatesTest {
|
|||||||
assertEquals(date, expected)
|
assertEquals(date, expected)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun bug1_date_should_be_parsed() {
|
||||||
|
val date = DateUtils.parseDate(bug1Date)
|
||||||
|
val expected =
|
||||||
|
LocalDateTime(2022, 12, 24, 18, 0, 8, 0).toInstant(TimeZone.currentSystemDefault())
|
||||||
|
.toEpochMilliseconds()
|
||||||
|
|
||||||
|
assertEquals(date, expected)
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -17,10 +17,12 @@ plugins {
|
|||||||
|
|
||||||
allprojects {
|
allprojects {
|
||||||
repositories {
|
repositories {
|
||||||
google()
|
maven { url = uri("https://nexus.amine-louveau.fr/repository/maven-public/")}
|
||||||
mavenCentral()
|
// IMPORTANT : Add back when new library added
|
||||||
jcenter()
|
// google()
|
||||||
maven { url = uri("https://www.jitpack.io") }
|
// mavenCentral()
|
||||||
|
// jcenter()
|
||||||
|
// maven { url = uri("https://www.jitpack.io") }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2,16 +2,20 @@ val pushCache: String by settings
|
|||||||
|
|
||||||
pluginManagement {
|
pluginManagement {
|
||||||
repositories {
|
repositories {
|
||||||
google()
|
maven { url = uri("https://nexus.amine-louveau.fr/repository/maven-public/")}
|
||||||
gradlePluginPortal()
|
// IMPORTANT : Add back when new plugin added
|
||||||
mavenCentral()
|
// google()
|
||||||
|
// gradlePluginPortal()
|
||||||
|
// mavenCentral()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencyResolutionManagement {
|
dependencyResolutionManagement {
|
||||||
repositories {
|
repositories {
|
||||||
google()
|
maven { url = uri("https://nexus.amine-louveau.fr/repository/maven-public/")}
|
||||||
mavenCentral()
|
// IMPORTANT : Add back when new library added
|
||||||
|
// google()
|
||||||
|
// mavenCentral()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -10,7 +10,11 @@ actual class DateUtils {
|
|||||||
return try {
|
return try {
|
||||||
Instant.parse(dateString).toEpochMilliseconds()
|
Instant.parse(dateString).toEpochMilliseconds()
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
LocalDateTime.parse(dateString.replace(" ", "T")).toInstant(TimeZone.currentSystemDefault()).toEpochMilliseconds()
|
var str = dateString.replace(" ", "T")
|
||||||
|
if (str.matches("\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\+\\d{2}".toRegex())) {
|
||||||
|
str = str.split("+")[0]
|
||||||
|
}
|
||||||
|
LocalDateTime.parse(str).toInstant(TimeZone.currentSystemDefault()).toEpochMilliseconds()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -47,6 +47,8 @@ class Repository(
|
|||||||
private var fetchedSources = false
|
private var fetchedSources = false
|
||||||
private var fetchedTags = false
|
private var fetchedTags = false
|
||||||
|
|
||||||
|
private var _readerItems = ArrayList<SelfossModel.Item>()
|
||||||
|
|
||||||
suspend fun getNewerItems(): ArrayList<SelfossModel.Item> {
|
suspend fun getNewerItems(): ArrayList<SelfossModel.Item> {
|
||||||
// TODO: Use the updatedSince parameter
|
// TODO: Use the updatedSince parameter
|
||||||
var fetchedItems: StatusAndData<List<SelfossModel.Item>> = StatusAndData.error()
|
var fetchedItems: StatusAndData<List<SelfossModel.Item>> = StatusAndData.error()
|
||||||
@ -558,4 +560,12 @@ class Repository(
|
|||||||
fun setSourceFilter(source: SelfossModel.Source?) {
|
fun setSourceFilter(source: SelfossModel.Source?) {
|
||||||
_sourceFilter.value = source
|
_sourceFilter.value = source
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun setReaderItems(readerItems: ArrayList<SelfossModel.Item>) {
|
||||||
|
_readerItems = readerItems
|
||||||
|
}
|
||||||
|
|
||||||
|
fun getReaderItems(): ArrayList<SelfossModel.Item> {
|
||||||
|
return _readerItems
|
||||||
|
}
|
||||||
}
|
}
|
Reference in New Issue
Block a user