1
- package ir.mehdiyari.krypt.data.repositories
1
+ package ir.mehdiyari.krypt.data.repositories.files
2
2
3
3
import ir.mehdiyari.krypt.app.user.UsernameProvider
4
4
import ir.mehdiyari.krypt.data.backup.BackupDao
@@ -9,20 +9,20 @@ import ir.mehdiyari.krypt.di.qualifiers.DispatcherIO
9
9
import ir.mehdiyari.krypt.utils.FilesUtilities
10
10
import kotlinx.coroutines.CoroutineDispatcher
11
11
import kotlinx.coroutines.withContext
12
- import java.io.File
13
12
import javax.inject.Inject
14
13
import javax.inject.Singleton
15
14
16
15
@Singleton
17
- class FilesRepository @Inject constructor(
16
+ class FilesRepositoryImpl @Inject constructor(
18
17
private val filedDao : FilesDao ,
19
18
private val backupDao : BackupDao ,
20
19
private val usernameProvider : UsernameProvider ,
21
20
private val filesUtilities : FilesUtilities ,
21
+ private val fileWrapper : FileWrapper ,
22
22
@DispatcherIO private val ioDispatcher : CoroutineDispatcher
23
- ) {
23
+ ) : FilesRepository {
24
24
25
- suspend fun getAllFilesTypeCounts (): List <Pair <FileTypeEnum , Long >> =
25
+ override suspend fun getAllFilesTypeCounts (): List <Pair <FileTypeEnum , Long >> =
26
26
mutableListOf<Pair <FileTypeEnum , Long >>().apply {
27
27
FileTypeEnum .values().forEach { fileType ->
28
28
add(
@@ -39,29 +39,29 @@ class FilesRepository @Inject constructor(
39
39
}.toList()
40
40
41
41
42
- suspend fun insertFiles (
42
+ override suspend fun insertFiles (
43
43
files : List <FileEntity >
44
44
) {
45
45
filedDao.insertFiles(files.map {
46
46
it.copy(accountName = usernameProvider.getUsername()!! )
47
47
})
48
48
}
49
49
50
- suspend fun getMediasCount (): Long = filedDao.getFilesCountBasedOnType(
50
+ override suspend fun getMediasCount (): Long = filedDao.getFilesCountBasedOnType(
51
51
usernameProvider.getUsername()!! ,
52
52
FileTypeEnum .Photo
53
53
) + filedDao.getFilesCountBasedOnType(
54
54
usernameProvider.getUsername()!! ,
55
55
FileTypeEnum .Video
56
56
)
57
57
58
- suspend fun getLastEncryptedMediaThumbnail (): String? =
58
+ override suspend fun getLastEncryptedMediaThumbnail (): String? =
59
59
internalGetLastThumb(FileTypeEnum .Photo , FileTypeEnum .Video )
60
60
61
- suspend fun getLastEncryptedPhotoThumbnail (): String? =
61
+ override suspend fun getLastEncryptedPhotoThumbnail (): String? =
62
62
internalGetLastThumb(FileTypeEnum .Photo )
63
63
64
- suspend fun getLastEncryptedVideoThumbnail (): String? =
64
+ override suspend fun getLastEncryptedVideoThumbnail (): String? =
65
65
internalGetLastThumb(FileTypeEnum .Video )
66
66
67
67
private suspend fun internalGetLastThumb (
@@ -73,12 +73,12 @@ class FilesRepository @Inject constructor(
73
73
it.metaData.isNotBlank()
74
74
}?.metaData
75
75
76
- suspend fun getAllEncryptedMedia (): List <FileEntity > =
76
+ override suspend fun getAllEncryptedMedia (): List <FileEntity > =
77
77
filedDao.getAllMedia(
78
78
usernameProvider.getUsername()!!
79
79
)
80
80
81
- suspend fun mapThumbnailsAndNameToFileEntity (medias : Array <String >): List <FileEntity > =
81
+ override suspend fun mapThumbnailsAndNameToFileEntity (medias : Array <String >): List <FileEntity > =
82
82
mutableListOf<FileEntity >().apply {
83
83
getAllEncryptedMedia().filter {
84
84
medias.any { currentMedia ->
@@ -92,32 +92,32 @@ class FilesRepository @Inject constructor(
92
92
}.also (this ::addAll)
93
93
}
94
94
95
- suspend fun deleteEncryptedFilesFromKryptDBAndFileSystem (files : List <FileEntity >) {
95
+ override suspend fun deleteEncryptedFilesFromKryptDBAndFileSystem (files : List <FileEntity >) {
96
96
filedDao.deleteFiles(files)
97
97
files.forEach {
98
- File (it.filePath).delete( )
98
+ fileWrapper.delete (it.filePath)
99
99
if (
100
100
it.metaData.isNotBlank()
101
101
&& (it.type == FileTypeEnum .Photo || it.type == FileTypeEnum .Video )
102
102
) {
103
- File (it.metaData).delete( )
103
+ fileWrapper.delete (it.metaData)
104
104
}
105
105
}
106
106
}
107
107
108
- suspend fun getAllTextFiles (): List <FileEntity > =
108
+ override suspend fun getAllTextFiles (): List <FileEntity > =
109
109
filedDao.getAllFilesOfCurrentAccountBasedOnType(
110
110
usernameProvider.getUsername()!! ,
111
111
FileTypeEnum .Text
112
112
)
113
113
114
- suspend fun getFileById (id : Long ): FileEntity ? =
114
+ override suspend fun getFileById (id : Long ): FileEntity ? =
115
115
filedDao.getFileById(usernameProvider.getUsername()!! , id)
116
116
117
- suspend fun getAllFiles (): List <FileEntity > =
117
+ override suspend fun getAllFiles (): List <FileEntity > =
118
118
filedDao.getAllFiles(usernameProvider.getUsername()!! )
119
119
120
- suspend fun getAllFilesSize (): Long {
120
+ override suspend fun getAllFilesSize (): Long {
121
121
var total = 0L
122
122
(try {
123
123
mutableListOf<String >().apply {
@@ -127,56 +127,56 @@ class FilesRepository @Inject constructor(
127
127
} catch (t: Throwable ) {
128
128
null
129
129
})?.map {
130
- File (it) .length()
130
+ fileWrapper .length(it )
131
131
}?.forEach {
132
132
total + = it
133
133
}
134
134
135
135
return total
136
136
}
137
137
138
- suspend fun getAllImages (): List <FileEntity > = filedDao.getAllMedia(
138
+ override suspend fun getAllImages (): List <FileEntity > = filedDao.getAllMedia(
139
139
usernameProvider.getUsername()!! , listOf (FileTypeEnum .Photo )
140
140
)
141
141
142
- suspend fun getAllVideos (): List <FileEntity > = filedDao.getAllMedia(
142
+ override suspend fun getAllVideos (): List <FileEntity > = filedDao.getAllMedia(
143
143
usernameProvider.getUsername()!! , listOf (FileTypeEnum .Video )
144
144
)
145
145
146
- suspend fun getPhotosCount (): Long = filedDao.getFilesCountBasedOnType(
146
+ override suspend fun getPhotosCount (): Long = filedDao.getFilesCountBasedOnType(
147
147
usernameProvider.getUsername()!! ,
148
148
FileTypeEnum .Photo
149
149
)
150
150
151
- suspend fun getAudiosCount (): Long = withContext(ioDispatcher) {
151
+ override suspend fun getAudiosCount (): Long = withContext(ioDispatcher) {
152
152
filedDao.getFilesCountBasedOnType(
153
153
usernameProvider.getUsername()!! ,
154
154
FileTypeEnum .Audio
155
155
)
156
156
}
157
157
158
- suspend fun getVideosCount (): Long = filedDao.getFilesCountBasedOnType(
158
+ override suspend fun getVideosCount (): Long = filedDao.getFilesCountBasedOnType(
159
159
usernameProvider.getUsername()!! ,
160
160
FileTypeEnum .Video
161
161
)
162
162
163
- suspend fun getFileByThumbPath (thumbFileName : String ): FileEntity ? =
163
+ override suspend fun getFileByThumbPath (thumbFileName : String ): FileEntity ? =
164
164
filedDao.getMediaFileByPath(
165
165
usernameProvider.getUsername()!! , thumbFileName
166
166
)
167
167
168
- suspend fun getAllAudioFiles (): List <FileEntity > = withContext(ioDispatcher) {
168
+ override suspend fun getAllAudioFiles (): List <FileEntity > = withContext(ioDispatcher) {
169
169
filedDao.getAllFilesOfCurrentAccountBasedOnType(
170
170
usernameProvider.getUsername()!! ,
171
171
FileTypeEnum .Audio
172
172
)
173
173
}
174
174
175
- suspend fun updateFile (fileEntity : FileEntity ): Unit = withContext(ioDispatcher) {
175
+ override suspend fun updateFile (fileEntity : FileEntity ): Unit = withContext(ioDispatcher) {
176
176
filedDao.updateFile(fileEntity)
177
177
}
178
178
179
- suspend fun getAudioById (id : Long ): FileEntity ? = withContext(ioDispatcher) {
179
+ override suspend fun getAudioById (id : Long ): FileEntity ? = withContext(ioDispatcher) {
180
180
filedDao.getFileById(usernameProvider.getUsername()!! , id)
181
181
}
182
182
}
0 commit comments