-
-
Notifications
You must be signed in to change notification settings - Fork 124
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Change-Id: I64051aa9b38f295146cdaf05fecabf84f264f64c
- Loading branch information
1 parent
0dad4fe
commit 1e84037
Showing
56 changed files
with
1,421 additions
and
385 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
314 changes: 242 additions & 72 deletions
314
source/core/data/src/main/kotlin/com/xayah/core/data/repository/AppsRepo.kt
Large diffs are not rendered by default.
Oops, something went wrong.
98 changes: 98 additions & 0 deletions
98
source/core/data/src/main/kotlin/com/xayah/core/data/repository/FilesRepo.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,98 @@ | ||
package com.xayah.core.data.repository | ||
|
||
import android.content.Context | ||
import com.xayah.core.database.dao.MediaDao | ||
import com.xayah.core.datastore.di.DbDispatchers.Default | ||
import com.xayah.core.datastore.di.Dispatcher | ||
import com.xayah.core.hiddenapi.castTo | ||
import com.xayah.core.model.File | ||
import com.xayah.core.model.OpType | ||
import com.xayah.core.model.database.MediaEntity | ||
import com.xayah.core.model.database.asExternalModel | ||
import com.xayah.core.rootservice.service.RemoteRootService | ||
import com.xayah.core.util.PathUtil | ||
import com.xayah.core.util.withLog | ||
import dagger.hilt.android.qualifiers.ApplicationContext | ||
import kotlinx.coroutines.CoroutineDispatcher | ||
import kotlinx.coroutines.flow.Flow | ||
import kotlinx.coroutines.flow.combine | ||
import kotlinx.coroutines.flow.flowOn | ||
import javax.inject.Inject | ||
|
||
class FilesRepo @Inject constructor( | ||
@ApplicationContext private val context: Context, | ||
@Dispatcher(Default) private val defaultDispatcher: CoroutineDispatcher, | ||
private val filesDao: MediaDao, | ||
private val mediaRepo: MediaRepository, | ||
private val pathUtil: PathUtil, | ||
private val rootService: RemoteRootService, | ||
private val cloudRepo: CloudRepository, | ||
) { | ||
fun getFiles( | ||
opType: OpType, | ||
listData: Flow<ListData>, | ||
cloudName: String, | ||
backupDir: String | ||
): Flow<List<File>> = combine( | ||
listData, | ||
when (opType) { | ||
OpType.BACKUP -> filesDao.queryFilesFlow(opType = opType, existed = true, blocked = false) | ||
OpType.RESTORE -> filesDao.queryFilesFlow(opType = opType, cloud = cloudName, backupDir = backupDir) | ||
} | ||
) { lData, files -> | ||
val data = lData.castTo<ListData.Files>() | ||
files.asSequence() | ||
.filter(mediaRepo.getKeyPredicateNew(key = data.searchQuery)) | ||
.sortedWith(mediaRepo.getSortComparatorNew(sortIndex = data.sortIndex, sortType = data.sortType)) | ||
.sortedByDescending { p -> p.extraInfo.activated }.toList() | ||
.map(MediaEntity::asExternalModel) | ||
}.flowOn(defaultDispatcher) | ||
|
||
fun countFiles(opType: OpType) = filesDao.countFilesFlow(opType = opType, existed = true, blocked = false) | ||
fun countSelectedFiles(opType: OpType) = filesDao.countActivatedFilesFlow(opType = opType, existed = true, blocked = false) | ||
|
||
suspend fun selectFile(id: Long, selected: Boolean) { | ||
filesDao.activateById(id, selected) | ||
} | ||
|
||
suspend fun selectAll(ids: List<Long>) { | ||
filesDao.activateByIds(ids, true) | ||
} | ||
|
||
suspend fun unselectAll(ids: List<Long>) { | ||
filesDao.activateByIds(ids, false) | ||
} | ||
|
||
suspend fun reverseAll(ids: List<Long>) { | ||
filesDao.reverseActivatedByIds(ids) | ||
} | ||
|
||
suspend fun blockSelected(ids: List<Long>) { | ||
filesDao.blockByIds(ids) | ||
} | ||
|
||
suspend fun deleteSelected(ids: List<Long>) { | ||
val filesDir = pathUtil.getLocalBackupFilesDir() | ||
val deletedIds = mutableListOf<Long>() | ||
ids.forEach { | ||
val file = filesDao.queryById(it) | ||
if (file != null) { | ||
val isSuccess = if (file.indexInfo.cloud.isEmpty()) { | ||
val src = "${filesDir}/${file.archivesRelativeDir}" | ||
rootService.deleteRecursively(src) | ||
} else { | ||
runCatching { | ||
cloudRepo.withClient(file.indexInfo.cloud) { client, entity -> | ||
val remote = entity.remote | ||
val remoteArchivesMediumDir = pathUtil.getCloudRemoteFilesDir(remote) | ||
val src = "${remoteArchivesMediumDir}/${file.archivesRelativeDir}" | ||
if (client.exists(src)) client.deleteRecursively(src) | ||
} | ||
}.withLog().isSuccess | ||
} | ||
if (isSuccess) deletedIds.add(file.id) | ||
} | ||
} | ||
filesDao.deleteByIds(deletedIds) | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.