Merge branch 'dev' into 'master'

dev

See merge request AuroraOSS/AuroraStore!451
This commit is contained in:
Rahul Patel
2025-03-16 17:03:34 +05:30
4 changed files with 21 additions and 32 deletions

View File

@@ -95,10 +95,8 @@ class AuroraApp : Application(), Configuration.Provider, SingletonImageLoader.Fa
NotificationUtil.createNotificationChannel(this)
// Initialize Download and Update helpers to observe and trigger downloads
scope.launch {
downloadHelper.init()
updateHelper.init()
}
downloadHelper.init()
updateHelper.init()
//Register broadcast receiver for package install/uninstall
ContextCompat.registerReceiver(

View File

@@ -16,12 +16,13 @@ import com.aurora.store.data.room.update.Update
import com.aurora.store.data.work.DownloadWorker
import com.aurora.store.util.PathUtil
import dagger.hilt.android.qualifiers.ApplicationContext
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.SharingStarted
import kotlinx.coroutines.flow.filter
import kotlinx.coroutines.flow.firstOrNull
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.flow.stateIn
import kotlinx.coroutines.withContext
import kotlinx.coroutines.launch
import javax.inject.Inject
/**
@@ -49,16 +50,16 @@ class DownloadHelper @Inject constructor(
/**
* Removes failed download from the queue and starts observing for newly enqueued apps.
*/
suspend fun init() {
withContext(Dispatchers.IO) {
fun init() {
AuroraApp.scope.launch {
cancelFailedDownloads(downloadDao.downloads().firstOrNull() ?: emptyList())
}.invokeOnCompletion {
observeDownloads()
}
observeDownloads()
}
private suspend fun observeDownloads() {
downloadDao.downloads().collect { list ->
private fun observeDownloads() {
downloadDao.downloads().onEach { list ->
try {
if (list.none { it.downloadStatus == DownloadStatus.DOWNLOADING }) {
list.find { it.downloadStatus == DownloadStatus.QUEUED }
@@ -70,7 +71,7 @@ class DownloadHelper @Inject constructor(
} catch (exception: Exception) {
Log.e(TAG, "Failed to enqueue download worker", exception)
}
}
}.launchIn(AuroraApp.scope)
}
/**

View File

@@ -25,14 +25,13 @@ import com.aurora.store.util.Preferences.PREFERENCES_UPDATES_RESTRICTIONS_IDLE
import com.aurora.store.util.Preferences.PREFERENCES_UPDATES_RESTRICTIONS_METERED
import com.aurora.store.util.Preferences.PREFERENCE_UPDATES_CHECK_INTERVAL
import dagger.hilt.android.qualifiers.ApplicationContext
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.SharingStarted
import kotlinx.coroutines.flow.firstOrNull
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.flow.stateIn
import kotlinx.coroutines.withContext
import kotlinx.coroutines.launch
import java.util.concurrent.TimeUnit.HOURS
import java.util.concurrent.TimeUnit.MINUTES
import javax.inject.Inject
@@ -69,12 +68,12 @@ class UpdateHelper @Inject constructor(
/**
* Deletes invalid updates from database and starts observing events
*/
suspend fun init() {
withContext(Dispatchers.IO) {
fun init() {
AuroraApp.scope.launch {
deleteInvalidUpdates()
}.invokeOnCompletion {
observeUpdates()
}
observeUpdates()
}
private fun observeUpdates() {

View File

@@ -13,6 +13,7 @@ import android.graphics.Bitmap
import android.graphics.BitmapFactory
import android.util.Log
import androidx.core.content.getSystemService
import androidx.core.graphics.scale
import androidx.hilt.work.HiltWorker
import androidx.work.ForegroundInfo
import androidx.work.WorkInfo.Companion.STOP_REASON_CANCELLED_BY_APP
@@ -63,9 +64,9 @@ import com.aurora.gplayapi.data.models.File as GPlayFile
*/
@HiltWorker
class DownloadWorker @AssistedInject constructor(
authProvider: AuthProvider,
private val downloadDao: DownloadDao,
private val appInstaller: AppInstaller,
private val authProvider: AuthProvider,
private val httpClient: IHttpClient,
private val purchaseHelper: PurchaseHelper,
@Assisted private val appContext: Context,
@@ -85,8 +86,6 @@ class DownloadWorker @AssistedInject constructor(
private val NOTIFICATION_ID: Int = 200
object Exceptions {
class InvalidAuthDataException : Exception("AuthData is invalid")
class NoPackageNameException : Exception("No packagename provided")
class NoNetworkException : Exception("No network available")
class NothingToDownloadException : Exception("Failed to purchase app")
class DownloadFailedException : Exception("Download failed")
@@ -97,23 +96,15 @@ class DownloadWorker @AssistedInject constructor(
override suspend fun doWork(): Result {
super.doWork()
// Bail out immediately if authData is not valid
if (!authProvider.isSavedAuthDataValid()) return onFailure(Exceptions.InvalidAuthDataException())
// Fetch required data for download
try {
val packageName = inputData.getString(DownloadHelper.PACKAGE_NAME)
// Bail out if no package name is provided
if (packageName.isNullOrBlank()) return onFailure(Exceptions.NoPackageNameException())
download = downloadDao.getDownload(packageName)
download = downloadDao.getDownload(inputData.getString(DownloadHelper.PACKAGE_NAME)!!)
val response = (httpClient as HttpClient).call(download.iconURL).body
if (response != null) {
val bitmap =
BitmapFactory.decodeStream(withContext(Dispatchers.IO) { response.byteStream() })
icon = Bitmap.createScaledBitmap(bitmap, 96, 96, true)
icon = bitmap.scale(96, 96)
}
} catch (exception: Exception) {
return onFailure(exception)