diff --git a/.drone.yml b/.drone.yml index 22ee6bd..b401477 100644 --- a/.drone.yml +++ b/.drone.yml @@ -18,4 +18,4 @@ steps: - name: build image: mingc/android-build-box:latest commands: - - ./gradlew :androidApp:build -PignoreGitVersion=true -P appLoginUrl="\"URL\"" -P appLoginUsername="\"LOGIN\"" -P appLoginPassword="\"PASS\"" \ No newline at end of file + - ./gradlew :androidApp:build -PignoreGitVersion=true -P appLoginUrl="\"URL\"" -P appLoginUsername="\"LOGIN\"" -P appLoginPassword="\"PASS\"" -P pushCache=false \ No newline at end of file diff --git a/androidApp/src/main/java/bou/amine/apps/readerforselfossv2/android/HomeActivity.kt b/androidApp/src/main/java/bou/amine/apps/readerforselfossv2/android/HomeActivity.kt index 722a8e4..87b5b67 100644 --- a/androidApp/src/main/java/bou/amine/apps/readerforselfossv2/android/HomeActivity.kt +++ b/androidApp/src/main/java/bou/amine/apps/readerforselfossv2/android/HomeActivity.kt @@ -318,7 +318,9 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener, DIAwar handleRecurringTask() - handleOfflineActions() + CoroutineScope(Dispatchers.Main).launch { + repository.handleDBActions() + } getElementsAccordingToTab() } @@ -1082,26 +1084,7 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener, DIAwar } private fun handleOfflineActions() { - fun doAndReportOnFail(success: Boolean, action: ACTION) { - if (success) { - thread { - repository.deleteDBAction(action) - } - } - } - CoroutineScope(Dispatchers.Main).launch { - val actions = repository.getDBActions() - - actions.forEach { action -> - when { - action.read -> doAndReportOnFail(repository.markAsReadById(action.articleid.toInt()), action) - action.unread -> doAndReportOnFail(repository.unmarkAsReadById(action.articleid.toInt()), action) - action.starred -> doAndReportOnFail(repository.starrById(action.articleid.toInt()), action) - action.unstarred -> doAndReportOnFail(repository.unstarrById(action.articleid.toInt()), action) - } - } - } } } diff --git a/androidApp/src/main/java/bou/amine/apps/readerforselfossv2/android/MyApp.kt b/androidApp/src/main/java/bou/amine/apps/readerforselfossv2/android/MyApp.kt index 887fc5a..3345124 100644 --- a/androidApp/src/main/java/bou/amine/apps/readerforselfossv2/android/MyApp.kt +++ b/androidApp/src/main/java/bou/amine/apps/readerforselfossv2/android/MyApp.kt @@ -69,7 +69,14 @@ class MyApp : MultiDexApplication(), DIAware { ProcessLifecycleOwner.get().lifecycle.addObserver(AppLifeCycleObserver(connectivityStatus, repository)) CoroutineScope(Dispatchers.Main).launch { - viewModel.toastMessageProvider.collect { toastMessage -> + viewModel.networkAvailableProvider.collect { networkAvailable -> + val toastMessage = if (networkAvailable) { + repository.handleDBActions() + R.string.network_connectivity_retrieved + } else { + R.string.network_connectivity_lost + } + Toast.makeText( applicationContext, toastMessage, diff --git a/androidApp/src/main/java/bou/amine/apps/readerforselfossv2/android/api/mercury/MercuryApi.kt b/androidApp/src/main/java/bou/amine/apps/readerforselfossv2/android/api/mercury/MercuryApi.kt index 46d32ff..dc2357e 100644 --- a/androidApp/src/main/java/bou/amine/apps/readerforselfossv2/android/api/mercury/MercuryApi.kt +++ b/androidApp/src/main/java/bou/amine/apps/readerforselfossv2/android/api/mercury/MercuryApi.kt @@ -22,7 +22,7 @@ class MercuryApi() { val retrofit = Retrofit .Builder() - .baseUrl("https://www.amine-bou.fr") + .baseUrl("https://www.amine-louveau.fr") .client(client) .addConverterFactory(GsonConverterFactory.create(gson)) .build() diff --git a/androidApp/src/main/java/bou/amine/apps/readerforselfossv2/android/background/background.kt b/androidApp/src/main/java/bou/amine/apps/readerforselfossv2/android/background/background.kt index 93f16be..907338d 100644 --- a/androidApp/src/main/java/bou/amine/apps/readerforselfossv2/android/background/background.kt +++ b/androidApp/src/main/java/bou/amine/apps/readerforselfossv2/android/background/background.kt @@ -17,9 +17,8 @@ import bou.amine.apps.readerforselfossv2.android.model.preloadImages import bou.amine.apps.readerforselfossv2.android.utils.Config import bou.amine.apps.readerforselfossv2.android.utils.network.isNetworkAccessible import bou.amine.apps.readerforselfossv2.dao.ACTION -import bou.amine.apps.readerforselfossv2.repository.Repository import bou.amine.apps.readerforselfossv2.model.SelfossModel -import bou.amine.apps.readerforselfossv2.utils.ItemType +import bou.amine.apps.readerforselfossv2.repository.Repository import com.russhwolf.settings.Settings import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers @@ -57,28 +56,7 @@ override fun doWork(): Result { val notifyNewItems = settings.getBoolean("notify_new_items", false) - val actions: List = repository.getDBActions() - - actions.forEach { action -> - when { - action.read -> doAndReportOnFail( - repository.markAsReadById(action.articleid.toInt()), - action - ) - action.unread -> doAndReportOnFail( - repository.unmarkAsReadById(action.articleid.toInt()), - action - ) - action.starred -> doAndReportOnFail( - repository.starrById(action.articleid.toInt()), - action - ) - action.unstarred -> doAndReportOnFail( - repository.unstarrById(action.articleid.toInt()), - action - ) - } - } + repository.handleDBActions() launch { handleNewItemsNotification(repository.tryToCacheItemsAndGetNewOnes(), notifyNewItems, notificationManager) @@ -135,12 +113,4 @@ override fun doWork(): Result { } } } - - private fun doAndReportOnFail(result: Boolean, action: ACTION) { - if (result) { - thread { - repository.deleteDBAction(action) - } - } - } } \ No newline at end of file diff --git a/androidApp/src/main/java/bou/amine/apps/readerforselfossv2/android/model/AndroidIModelUtils.kt b/androidApp/src/main/java/bou/amine/apps/readerforselfossv2/android/model/AndroidIModelUtils.kt index 85c9e73..4822eca 100644 --- a/androidApp/src/main/java/bou/amine/apps/readerforselfossv2/android/model/AndroidIModelUtils.kt +++ b/androidApp/src/main/java/bou/amine/apps/readerforselfossv2/android/model/AndroidIModelUtils.kt @@ -35,6 +35,7 @@ fun String.toTextDrawableString(): String { try { textDrawable.append(s[0]) } catch (e: StringIndexOutOfBoundsException) { + // We do nothing } } return textDrawable.toString() diff --git a/androidApp/src/main/java/bou/amine/apps/readerforselfossv2/android/viewmodel/AppViewModel.kt b/androidApp/src/main/java/bou/amine/apps/readerforselfossv2/android/viewmodel/AppViewModel.kt index 9320762..018900e 100644 --- a/androidApp/src/main/java/bou/amine/apps/readerforselfossv2/android/viewmodel/AppViewModel.kt +++ b/androidApp/src/main/java/bou/amine/apps/readerforselfossv2/android/viewmodel/AppViewModel.kt @@ -9,19 +9,21 @@ import kotlinx.coroutines.flow.asSharedFlow import kotlinx.coroutines.launch class AppViewModel(private val repository: Repository) : ViewModel() { - private val _toastMessageProvider = MutableSharedFlow() - val toastMessageProvider = _toastMessageProvider.asSharedFlow() + private val _networkAvailableProvider = MutableSharedFlow() + val networkAvailableProvider = _networkAvailableProvider.asSharedFlow() private var wasConnected = true init { viewModelScope.launch { repository.isConnectionAvailable.collect { isConnected -> - if (isConnected && !wasConnected && repository.connectionMonitored) { - _toastMessageProvider.emit(R.string.network_connectivity_retrieved) - wasConnected = true - } else if (!isConnected && wasConnected && repository.connectionMonitored){ - _toastMessageProvider.emit(R.string.network_connectivity_lost) - wasConnected = false + if (repository.connectionMonitored) { + if (isConnected && !wasConnected && repository.connectionMonitored) { + _networkAvailableProvider.emit(true) + wasConnected = true + } else if (!isConnected && wasConnected && repository.connectionMonitored){ + _networkAvailableProvider.emit(false) + wasConnected = false + } } } } diff --git a/gradle.properties b/gradle.properties index 5322fc7..1503398 100644 --- a/gradle.properties +++ b/gradle.properties @@ -19,4 +19,6 @@ android.useAndroidX=true android.enableJetifier=true kotlin.mpp.enableGranularSourceSetsMetadata=true org.gradle.parallel=true +org.gradle.caching=true ignoreGitVersion=false +pushCache=true diff --git a/settings.gradle.kts b/settings.gradle.kts index 0b32ec1..4f3bcd9 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1,3 +1,5 @@ +val pushCache: String by settings + pluginManagement { repositories { google() @@ -6,6 +8,16 @@ pluginManagement { } } +buildCache { + remote { + url = uri("http://18.0.0.7:3071/cache/") + isAllowInsecureProtocol = true + isAllowUntrustedServer = true + isUseExpectContinue = true + isPush = (pushCache == "true") + } +} + rootProject.name = "ReaderForSelfossV2" include(":androidApp") include(":shared") \ No newline at end of file diff --git a/shared/src/commonMain/kotlin/bou/amine/apps/readerforselfossv2/repository/RepositoryImpl.kt b/shared/src/commonMain/kotlin/bou/amine/apps/readerforselfossv2/repository/RepositoryImpl.kt index e4e7d90..6b7c824 100644 --- a/shared/src/commonMain/kotlin/bou/amine/apps/readerforselfossv2/repository/RepositoryImpl.kt +++ b/shared/src/commonMain/kotlin/bou/amine/apps/readerforselfossv2/repository/RepositoryImpl.kt @@ -329,8 +329,13 @@ class Repository(private val api: SelfossApi, private val apiDetails: ApiDetails return success } - suspend fun updateRemote(): Boolean = - isNetworkAvailable() && api.update()?.isSuccess == true + suspend fun updateRemote(): Boolean { + return if (isNetworkAvailable()) { + api.update()?.equals("finished") ?: false + } else { + false + } + } suspend fun login(): Boolean { var result = false @@ -429,4 +434,36 @@ class Repository(private val api: SelfossApi, private val apiDetails: ApiDetails } catch (e: Throwable) {} return emptyList() } + + suspend fun handleDBActions() { + + val actions: List = getDBActions() + + actions.forEach { action -> + when { + action.read -> doAndReportOnFail( + markAsReadById(action.articleid.toInt()), + action + ) + action.unread -> doAndReportOnFail( + unmarkAsReadById(action.articleid.toInt()), + action + ) + action.starred -> doAndReportOnFail( + starrById(action.articleid.toInt()), + action + ) + action.unstarred -> doAndReportOnFail( + unstarrById(action.articleid.toInt()), + action + ) + } + } + } + + private fun doAndReportOnFail(result: Boolean, action: ACTION) { + if (result) { + deleteDBAction(action) + } + } } \ No newline at end of file diff --git a/shared/src/commonMain/kotlin/bou/amine/apps/readerforselfossv2/rest/SelfossApi.kt b/shared/src/commonMain/kotlin/bou/amine/apps/readerforselfossv2/rest/SelfossApi.kt index 0047453..084d987 100644 --- a/shared/src/commonMain/kotlin/bou/amine/apps/readerforselfossv2/rest/SelfossApi.kt +++ b/shared/src/commonMain/kotlin/bou/amine/apps/readerforselfossv2/rest/SelfossApi.kt @@ -100,7 +100,7 @@ class SelfossApi(private val apiDetailsService: ApiDetailsService) { parameter("password", apiDetailsService.getPassword()) }.body() - suspend fun update(): SelfossModel.SuccessResponse? = + suspend fun update(): String? = client.get(url("/update")) { parameter("username", apiDetailsService.getUserName()) parameter("password", apiDetailsService.getPassword())