diff --git a/settings.gradle.kts b/settings.gradle.kts index 952ef97f..cb6a3028 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -19,4 +19,5 @@ rootProject.name = "omh-storage" include(":storage-api") include(":storage-api-drive-gms") include(":storage-api-drive-nongms") -// include(":storage-sample") +// Sample app is currently broken. Removed temporally +//include(":storage-sample") diff --git a/storage-api-drive-nongms/src/main/java/com/omh/android/storage/api/drive/nongms/data/GoogleRetrofitImpl.kt b/storage-api-drive-nongms/src/main/java/com/omh/android/storage/api/drive/nongms/data/GoogleRetrofitImpl.kt index 886fab68..47e82e90 100644 --- a/storage-api-drive-nongms/src/main/java/com/omh/android/storage/api/drive/nongms/data/GoogleRetrofitImpl.kt +++ b/storage-api-drive-nongms/src/main/java/com/omh/android/storage/api/drive/nongms/data/GoogleRetrofitImpl.kt @@ -1,26 +1,75 @@ package com.omh.android.storage.api.drive.nongms.data import com.omh.android.storage.api.drive.nongms.BuildConfig +import okhttp3.Interceptor import okhttp3.OkHttpClient import okhttp3.logging.HttpLoggingInterceptor import retrofit2.Retrofit import retrofit2.converter.jackson.JacksonConverterFactory -internal object GoogleRetrofitImpl { +internal class GoogleRetrofitImpl(private val bearerToken: String) { - private val okHttpClient = OkHttpClient.Builder() - .addInterceptor( - HttpLoggingInterceptor().apply { - if (BuildConfig.DEBUG) setLevel(HttpLoggingInterceptor.Level.BODY) + companion object { + private const val HEADER_AUTHORIZATION_NAME = "Authorization" + + private var instance: GoogleRetrofitImpl? = null + + internal fun getInstance(bearerToken: String): GoogleRetrofitImpl { + if (instance == null) { + instance = GoogleRetrofitImpl(bearerToken) + } + + return instance!! + } + } + + private var apiService: GoogleStorageApiService? = null + + fun getGoogleStorageApiService(): GoogleStorageApiService { + if (apiService != null) { + return apiService!! + } + + val retrofit = Retrofit.Builder() + .client(createOkHttpClient()) + .addConverterFactory(createConverterFactory()) + .baseUrl(BuildConfig.G_STORAGE_URL) + .build() + + apiService = retrofit.create(GoogleStorageApiService::class.java) + return apiService!! + } + + private fun createOkHttpClient(): OkHttpClient { + val loggingInterceptor = setupLoggingInterceptor() + + return OkHttpClient.Builder() + .addInterceptor(loggingInterceptor) + .addInterceptor { chain -> + val request = setupRequestInterceptor(chain) + chain.proceed(request) + } + .build() + } + + private fun setupLoggingInterceptor() = HttpLoggingInterceptor().apply { + setLevel( + if (BuildConfig.DEBUG) { + HttpLoggingInterceptor.Level.BODY + } else { + HttpLoggingInterceptor.Level.NONE } ) - .build() + } - private val retrofitClient = Retrofit.Builder() - .client(okHttpClient) - .baseUrl(BuildConfig.G_STORAGE_URL) - .addConverterFactory(JacksonConverterFactory.create()) + private fun setupRequestInterceptor(chain: Interceptor.Chain) = chain + .request() + .newBuilder() + .addHeader( + HEADER_AUTHORIZATION_NAME, + bearerToken + ) .build() - val googleStorageREST: GoogleStorageREST = retrofitClient.create(GoogleStorageREST::class.java) + private fun createConverterFactory() = JacksonConverterFactory.create() } diff --git a/storage-api-drive-nongms/src/main/java/com/omh/android/storage/api/drive/nongms/data/GoogleStorageApiService.kt b/storage-api-drive-nongms/src/main/java/com/omh/android/storage/api/drive/nongms/data/GoogleStorageApiService.kt new file mode 100644 index 00000000..6e5fbdf1 --- /dev/null +++ b/storage-api-drive-nongms/src/main/java/com/omh/android/storage/api/drive/nongms/data/GoogleStorageApiService.kt @@ -0,0 +1,25 @@ +package com.omh.android.storage.api.drive.nongms.data + +import com.omh.android.storage.api.drive.nongms.data.source.response.FileListRemoteResponse +import retrofit2.Call +import retrofit2.http.GET +import retrofit2.http.Query + +internal interface GoogleStorageApiService { + + companion object { + private const val GET_ALL_FILES_AND_FOLDERS_LIST_PARTICLE = "files" + + private const val QUERY_Q = "q" + private const val QUERY_FIELDS = "fields" + + private const val Q_VALUE = "'root' in parents and trashed = false" + private const val FIELDS_VALUE = "files(id, name, mimeType, modifiedTime)" + } + + @GET(GET_ALL_FILES_AND_FOLDERS_LIST_PARTICLE) + fun getRootFilesList( + @Query(QUERY_Q) query: String = Q_VALUE, + @Query(QUERY_FIELDS) fields: String = FIELDS_VALUE + ): Call +} diff --git a/storage-api-drive-nongms/src/main/java/com/omh/android/storage/api/drive/nongms/data/GoogleStorageREST.kt b/storage-api-drive-nongms/src/main/java/com/omh/android/storage/api/drive/nongms/data/GoogleStorageREST.kt deleted file mode 100644 index ae62ff26..00000000 --- a/storage-api-drive-nongms/src/main/java/com/omh/android/storage/api/drive/nongms/data/GoogleStorageREST.kt +++ /dev/null @@ -1,15 +0,0 @@ -package com.omh.android.storage.api.drive.nongms.data - -import com.omh.android.storage.api.drive.nongms.data.model.FilesFoldersListResponse -import retrofit2.Call -import retrofit2.http.GET -import retrofit2.http.Query - -internal interface GoogleStorageREST { - - @GET("files") - fun getFilesFoldersList( - @Query("q") query: String = "'root' in parents and trashed = false", - @Query("fields") fields: String = "files(id, name, mimeType, modifiedTime)" - ): Call -} diff --git a/storage-api-drive-nongms/src/main/java/com/omh/android/storage/api/drive/nongms/data/datasource/FilesFoldersRestDataSource.kt b/storage-api-drive-nongms/src/main/java/com/omh/android/storage/api/drive/nongms/data/datasource/FilesFoldersRestDataSource.kt deleted file mode 100644 index 6f3741a8..00000000 --- a/storage-api-drive-nongms/src/main/java/com/omh/android/storage/api/drive/nongms/data/datasource/FilesFoldersRestDataSource.kt +++ /dev/null @@ -1,14 +0,0 @@ -package com.omh.android.storage.api.drive.nongms.data.datasource - -import com.omh.android.storage.api.data.datasource.network.FilesFoldersNetworkDataSource -import com.omh.android.storage.api.drive.nongms.data.GoogleStorageREST -import com.omh.android.storage.api.drive.nongms.data.mapper.fromFilesFoldersResponseListToData - -internal class FilesFoldersRestDataSource( - private val storageService: GoogleStorageREST, -) : FilesFoldersNetworkDataSource { - - override fun getAll() = fromFilesFoldersResponseListToData( - storageService.getFilesFoldersList().execute() - ) -} diff --git a/storage-api-drive-nongms/src/main/java/com/omh/android/storage/api/drive/nongms/data/mapper/DataMappers.kt b/storage-api-drive-nongms/src/main/java/com/omh/android/storage/api/drive/nongms/data/mapper/DataMappers.kt deleted file mode 100644 index 3c2c5ba7..00000000 --- a/storage-api-drive-nongms/src/main/java/com/omh/android/storage/api/drive/nongms/data/mapper/DataMappers.kt +++ /dev/null @@ -1,38 +0,0 @@ -package com.omh.android.storage.api.drive.nongms.data.mapper - -import com.omh.android.storage.api.data.model.RemoteFile -import com.omh.android.storage.api.data.model.RemoteFileOrFolder -import com.omh.android.storage.api.data.model.RemoteFolder -import com.omh.android.storage.api.drive.nongms.data.model.FilesFoldersListResponse -import retrofit2.Response -import java.text.SimpleDateFormat - -private const val RESPONSE_DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'" - -internal fun fromFilesFoldersResponseListToData( - response: Response -): List { - val outputList = mutableListOf() - val filesInBody = response.body()?.files - if (!response.isSuccessful || filesInBody == null) return outputList - filesInBody.map { fileFolderResponse -> - val modifiedTimeAsLong = SimpleDateFormat(RESPONSE_DATE_FORMAT) - .parse(fileFolderResponse.modifiedTime) - .time - outputList.add( - if (fileFolderResponse.mimeType.contains("folder")) { - RemoteFolder( - fileFolderResponse.name, - modifiedTimeAsLong - ) - } else { - RemoteFile( - fileFolderResponse.name, - fileFolderResponse.mimeType, - modifiedTimeAsLong - ) - } - ) - } - return outputList -} diff --git a/storage-api-drive-nongms/src/main/java/com/omh/android/storage/api/drive/nongms/data/model/FileOrFolderResponse.kt b/storage-api-drive-nongms/src/main/java/com/omh/android/storage/api/drive/nongms/data/model/FileOrFolderResponse.kt deleted file mode 100644 index 867cac4d..00000000 --- a/storage-api-drive-nongms/src/main/java/com/omh/android/storage/api/drive/nongms/data/model/FileOrFolderResponse.kt +++ /dev/null @@ -1,16 +0,0 @@ -package com.omh.android.storage.api.drive.nongms.data.model - -import com.fasterxml.jackson.annotation.JsonIgnoreProperties -import com.fasterxml.jackson.annotation.JsonProperty - -@JsonIgnoreProperties(ignoreUnknown = true) -internal class FileOrFolderResponse( - @JsonProperty("id") - val id: String, - @JsonProperty("name") - val name: String, - @JsonProperty("mimeType") - val mimeType: String, - @JsonProperty("modifiedTime") - val modifiedTime: String -) diff --git a/storage-api-drive-nongms/src/main/java/com/omh/android/storage/api/drive/nongms/data/model/FilesFoldersListResponse.kt b/storage-api-drive-nongms/src/main/java/com/omh/android/storage/api/drive/nongms/data/model/FilesFoldersListResponse.kt deleted file mode 100644 index a07d478e..00000000 --- a/storage-api-drive-nongms/src/main/java/com/omh/android/storage/api/drive/nongms/data/model/FilesFoldersListResponse.kt +++ /dev/null @@ -1,10 +0,0 @@ -package com.omh.android.storage.api.drive.nongms.data.model - -import com.fasterxml.jackson.annotation.JsonIgnoreProperties -import com.fasterxml.jackson.annotation.JsonProperty - -@JsonIgnoreProperties(ignoreUnknown = true) -internal class FilesFoldersListResponse( - @JsonProperty("files") - val files: List -) diff --git a/storage-api-drive-nongms/src/main/java/com/omh/android/storage/api/drive/nongms/data/source/FileRemoteDataSource.kt b/storage-api-drive-nongms/src/main/java/com/omh/android/storage/api/drive/nongms/data/source/FileRemoteDataSource.kt new file mode 100644 index 00000000..4f670f6b --- /dev/null +++ b/storage-api-drive-nongms/src/main/java/com/omh/android/storage/api/drive/nongms/data/source/FileRemoteDataSource.kt @@ -0,0 +1,23 @@ +package com.omh.android.storage.api.drive.nongms.data.source + +import com.omh.android.storage.api.data.source.remote.FileRemoteDataSource +import com.omh.android.storage.api.domain.model.File +import com.omh.android.storage.api.drive.nongms.data.GoogleRetrofitImpl +import com.omh.android.storage.api.drive.nongms.data.source.mapper.toFileList + +internal class FileRemoteDataSource : FileRemoteDataSource { + + override fun getRootFilesList(): List { + val response = GoogleRetrofitImpl + .getInstance("") + .getGoogleStorageApiService() + .getRootFilesList() + .execute() + + return if (response.isSuccessful) { + response.body()?.toFileList().orEmpty() + } else { + emptyList() + } + } +} diff --git a/storage-api-drive-nongms/src/main/java/com/omh/android/storage/api/drive/nongms/data/source/mapper/DataMappers.kt b/storage-api-drive-nongms/src/main/java/com/omh/android/storage/api/drive/nongms/data/source/mapper/DataMappers.kt new file mode 100644 index 00000000..79f80d1e --- /dev/null +++ b/storage-api-drive-nongms/src/main/java/com/omh/android/storage/api/drive/nongms/data/source/mapper/DataMappers.kt @@ -0,0 +1,22 @@ +package com.omh.android.storage.api.drive.nongms.data.source.mapper + +import com.omh.android.storage.api.domain.model.File +import com.omh.android.storage.api.drive.nongms.data.source.response.FileListRemoteResponse +import com.omh.android.storage.api.drive.nongms.data.source.response.FileRemoteResponse + +@SuppressWarnings("ComplexCondition") +internal fun FileRemoteResponse.toFile(): File? { + if (mimeType == null || id == null || name == null || modifiedTime == null) { + return null + } + + return File( + mimeType, + id, + name, + modifiedTime + ) +} + +internal fun FileListRemoteResponse.toFileList(): List = + files?.mapNotNull { remoteFileModel -> remoteFileModel?.toFile() }.orEmpty() diff --git a/storage-api-drive-nongms/src/main/java/com/omh/android/storage/api/drive/nongms/data/source/response/FileListRemoteResponse.kt b/storage-api-drive-nongms/src/main/java/com/omh/android/storage/api/drive/nongms/data/source/response/FileListRemoteResponse.kt new file mode 100644 index 00000000..dfdce2f8 --- /dev/null +++ b/storage-api-drive-nongms/src/main/java/com/omh/android/storage/api/drive/nongms/data/source/response/FileListRemoteResponse.kt @@ -0,0 +1,9 @@ +package com.omh.android.storage.api.drive.nongms.data.source.response + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties +import com.fasterxml.jackson.annotation.JsonProperty + +@JsonIgnoreProperties(ignoreUnknown = true) +internal data class FileListRemoteResponse( + @JsonProperty("files") val files: List? +) diff --git a/storage-api-drive-nongms/src/main/java/com/omh/android/storage/api/drive/nongms/data/source/response/FileRemoteResponse.kt b/storage-api-drive-nongms/src/main/java/com/omh/android/storage/api/drive/nongms/data/source/response/FileRemoteResponse.kt new file mode 100644 index 00000000..c360cc71 --- /dev/null +++ b/storage-api-drive-nongms/src/main/java/com/omh/android/storage/api/drive/nongms/data/source/response/FileRemoteResponse.kt @@ -0,0 +1,12 @@ +package com.omh.android.storage.api.drive.nongms.data.source.response + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties +import com.fasterxml.jackson.annotation.JsonProperty + +@JsonIgnoreProperties(ignoreUnknown = true) +internal data class FileRemoteResponse( + @JsonProperty("mimeType")val mimeType: String?, + @JsonProperty("id")val id: String?, + @JsonProperty("name")val name: String?, + @JsonProperty("modifiedTime")val modifiedTime: String? +) diff --git a/storage-api/src/main/java/com/omh/android/storage/api/data/datasource/network/FilesFoldersNetworkDataSource.kt b/storage-api/src/main/java/com/omh/android/storage/api/data/datasource/network/FilesFoldersNetworkDataSource.kt deleted file mode 100644 index d6488ba7..00000000 --- a/storage-api/src/main/java/com/omh/android/storage/api/data/datasource/network/FilesFoldersNetworkDataSource.kt +++ /dev/null @@ -1,7 +0,0 @@ -package com.omh.android.storage.api.data.datasource.network - -import com.omh.android.storage.api.data.model.RemoteFileOrFolder - -interface FilesFoldersNetworkDataSource { - fun getAll(): List -} diff --git a/storage-api/src/main/java/com/omh/android/storage/api/data/mapper/DataMappers.kt b/storage-api/src/main/java/com/omh/android/storage/api/data/mapper/DataMappers.kt deleted file mode 100644 index 0ed11aba..00000000 --- a/storage-api/src/main/java/com/omh/android/storage/api/data/mapper/DataMappers.kt +++ /dev/null @@ -1,32 +0,0 @@ -package com.omh.android.storage.api.data.mapper - -import com.omh.android.storage.api.data.model.RemoteFile -import com.omh.android.storage.api.data.model.RemoteFileOrFolder -import com.omh.android.storage.api.data.model.RemoteFolder -import com.omh.android.storage.api.domain.model.File -import com.omh.android.storage.api.domain.model.FileOrFolder -import com.omh.android.storage.api.domain.model.Folder - -fun fromFilesFoldersRemoteListToDomain(inputList: List): List { - val outputList = mutableListOf() - if (inputList.isEmpty()) { - return outputList - } - for (gDriveFileOrFolder in inputList) { - outputList.add( - if (gDriveFileOrFolder is RemoteFile) { - File( - gDriveFileOrFolder.name, - gDriveFileOrFolder.ext, - gDriveFileOrFolder.lastModDate - ) - } else { - Folder( - (gDriveFileOrFolder as RemoteFolder).name, - gDriveFileOrFolder.lastModDate - ) - } - ) - } - return outputList -} diff --git a/storage-api/src/main/java/com/omh/android/storage/api/data/mapper/FileTypeMapper.kt b/storage-api/src/main/java/com/omh/android/storage/api/data/mapper/FileTypeMapper.kt new file mode 100644 index 00000000..ceb83fb7 --- /dev/null +++ b/storage-api/src/main/java/com/omh/android/storage/api/data/mapper/FileTypeMapper.kt @@ -0,0 +1,17 @@ +package com.omh.android.storage.api.data.mapper + +import com.omh.android.storage.api.domain.model.FileType + +internal object FileTypeMapper { + + private val MAP_FILE_TYPES: Map = + FileType.values().associateBy { fileType -> fileType.mimeType } + + fun getFileTypeWithMime(mimeType: String): FileType { + return if (MAP_FILE_TYPES.containsKey(mimeType)) { + MAP_FILE_TYPES[mimeType] ?: FileType.OTHER + } else { + FileType.OTHER + } + } +} diff --git a/storage-api/src/main/java/com/omh/android/storage/api/data/model/DataModel.kt b/storage-api/src/main/java/com/omh/android/storage/api/data/model/DataModel.kt deleted file mode 100644 index 0f6968a1..00000000 --- a/storage-api/src/main/java/com/omh/android/storage/api/data/model/DataModel.kt +++ /dev/null @@ -1,14 +0,0 @@ -package com.omh.android.storage.api.data.model - -interface RemoteFileOrFolder - -data class RemoteFile( - val name: String = "", - val ext: String = "", - val lastModDate: Long = 0L -) : RemoteFileOrFolder - -data class RemoteFolder( - val name: String = "", - val lastModDate: Long = 0L -) : RemoteFileOrFolder diff --git a/storage-api/src/main/java/com/omh/android/storage/api/data/repository/FilesFoldersDataRepository.kt b/storage-api/src/main/java/com/omh/android/storage/api/data/repository/FilesFoldersDataRepository.kt index 37b27424..a32254c6 100644 --- a/storage-api/src/main/java/com/omh/android/storage/api/data/repository/FilesFoldersDataRepository.kt +++ b/storage-api/src/main/java/com/omh/android/storage/api/data/repository/FilesFoldersDataRepository.kt @@ -1,13 +1,11 @@ package com.omh.android.storage.api.data.repository -import com.omh.android.storage.api.data.datasource.network.FilesFoldersNetworkDataSource -import com.omh.android.storage.api.data.mapper.fromFilesFoldersRemoteListToDomain +import com.omh.android.storage.api.data.source.remote.FileRemoteDataSource import com.omh.android.storage.api.domain.abstraction.FilesFoldersRepository class FilesFoldersDataRepository( - private val networkDataSource: FilesFoldersNetworkDataSource + private val networkDataSource: FileRemoteDataSource ) : FilesFoldersRepository { - override fun getAll() = fromFilesFoldersRemoteListToDomain( - networkDataSource.getAll() - ) + + override fun getRootFilesList() = networkDataSource.getRootFilesList() } diff --git a/storage-api/src/main/java/com/omh/android/storage/api/data/datasource/network/FileNetworkDataSource.kt b/storage-api/src/main/java/com/omh/android/storage/api/data/source/remote/FileNetworkDataSource.kt similarity index 69% rename from storage-api/src/main/java/com/omh/android/storage/api/data/datasource/network/FileNetworkDataSource.kt rename to storage-api/src/main/java/com/omh/android/storage/api/data/source/remote/FileNetworkDataSource.kt index 898515b4..6ea8c1eb 100644 --- a/storage-api/src/main/java/com/omh/android/storage/api/data/datasource/network/FileNetworkDataSource.kt +++ b/storage-api/src/main/java/com/omh/android/storage/api/data/source/remote/FileNetworkDataSource.kt @@ -1,4 +1,4 @@ -package com.omh.android.storage.api.data.datasource.network +package com.omh.android.storage.api.data.source.remote interface FileNetworkDataSource { fun create() diff --git a/storage-api/src/main/java/com/omh/android/storage/api/data/source/remote/FileRemoteDataSource.kt b/storage-api/src/main/java/com/omh/android/storage/api/data/source/remote/FileRemoteDataSource.kt new file mode 100644 index 00000000..5c6aca9f --- /dev/null +++ b/storage-api/src/main/java/com/omh/android/storage/api/data/source/remote/FileRemoteDataSource.kt @@ -0,0 +1,8 @@ +package com.omh.android.storage.api.data.source.remote + +import com.omh.android.storage.api.domain.model.File + +interface FileRemoteDataSource { + + fun getRootFilesList(): List +} diff --git a/storage-api/src/main/java/com/omh/android/storage/api/data/datasource/network/FolderNetworkDataSource.kt b/storage-api/src/main/java/com/omh/android/storage/api/data/source/remote/FolderNetworkDataSource.kt similarity index 70% rename from storage-api/src/main/java/com/omh/android/storage/api/data/datasource/network/FolderNetworkDataSource.kt rename to storage-api/src/main/java/com/omh/android/storage/api/data/source/remote/FolderNetworkDataSource.kt index 0a23be74..77e5b5f1 100644 --- a/storage-api/src/main/java/com/omh/android/storage/api/data/datasource/network/FolderNetworkDataSource.kt +++ b/storage-api/src/main/java/com/omh/android/storage/api/data/source/remote/FolderNetworkDataSource.kt @@ -1,4 +1,4 @@ -package com.omh.android.storage.api.data.datasource.network +package com.omh.android.storage.api.data.source.remote interface FolderNetworkDataSource { fun create() diff --git a/storage-api/src/main/java/com/omh/android/storage/api/domain/abstraction/FilesFoldersRepository.kt b/storage-api/src/main/java/com/omh/android/storage/api/domain/abstraction/FilesFoldersRepository.kt index 864de08e..5d4d2305 100644 --- a/storage-api/src/main/java/com/omh/android/storage/api/domain/abstraction/FilesFoldersRepository.kt +++ b/storage-api/src/main/java/com/omh/android/storage/api/domain/abstraction/FilesFoldersRepository.kt @@ -1,7 +1,8 @@ package com.omh.android.storage.api.domain.abstraction -import com.omh.android.storage.api.domain.model.FileOrFolder +import com.omh.android.storage.api.domain.model.File interface FilesFoldersRepository { - fun getAll(): List + + fun getRootFilesList(): List } diff --git a/storage-api/src/main/java/com/omh/android/storage/api/domain/model/DomainModel.kt b/storage-api/src/main/java/com/omh/android/storage/api/domain/model/DomainModel.kt index 58492356..30332977 100644 --- a/storage-api/src/main/java/com/omh/android/storage/api/domain/model/DomainModel.kt +++ b/storage-api/src/main/java/com/omh/android/storage/api/domain/model/DomainModel.kt @@ -5,12 +5,6 @@ interface FileOrFolder { val modificationDate: Long } -data class File( - override val name: String, - val extension: String, - override val modificationDate: Long -) : FileOrFolder - data class Folder( override val name: String, override val modificationDate: Long diff --git a/storage-api/src/main/java/com/omh/android/storage/api/domain/model/File.kt b/storage-api/src/main/java/com/omh/android/storage/api/domain/model/File.kt new file mode 100644 index 00000000..7e6fd2d1 --- /dev/null +++ b/storage-api/src/main/java/com/omh/android/storage/api/domain/model/File.kt @@ -0,0 +1,16 @@ +package com.omh.android.storage.api.domain.model + +import com.omh.android.storage.api.data.mapper.FileTypeMapper + +data class File( + val mimeType: String, + val id: String, + val name: String, + val modifiedTime: String +) { + val fileType by lazy { FileTypeMapper.getFileTypeWithMime(mimeType) } + + fun isFolder() = fileType == FileType.FOLDER + + fun isFile() = !isFolder() +} diff --git a/storage-api/src/main/java/com/omh/android/storage/api/domain/model/FileType.kt b/storage-api/src/main/java/com/omh/android/storage/api/domain/model/FileType.kt new file mode 100644 index 00000000..e655b03c --- /dev/null +++ b/storage-api/src/main/java/com/omh/android/storage/api/domain/model/FileType.kt @@ -0,0 +1,30 @@ +package com.omh.android.storage.api.domain.model + +enum class FileType(val mimeType: String) { + + // Specific MIME from Google Workspace and Drive + AUDIO("application/vnd.google-apps.audio"), + DOCUMENT("application/vnd.google-apps.document"), + THIRD_PARTY_SHORTCUT("application/vnd.google-apps.drive-sdk"), + DRAWING("application/vnd.google-apps.drawing"), + FILE("application/vnd.google-apps.file"), + FOLDER("application/vnd.google-apps.folder"), + FORM("application/vnd.google-apps.form"), + FUSIONTABLE("application/vnd.google-apps.fusiontable"), + JAMBOARD("application/vnd.google-apps.jam"), + MAP("application/vnd.google-apps.map"), + PHOTO("application/vnd.google-apps.photo"), + PRESENTATION("application/vnd.google-apps.presentation"), + SCRIPT("application/vnd.google-apps.script"), + SHORTCUT("application/vnd.google-apps.shortcut"), + SITE("application/vnd.google-apps.site"), + SPREADSHEET("application/vnd.google-apps.spreadsheet"), + UNKNOWN("application/vnd.google-apps.unknown"), + VIDEO("application/vnd.google-apps.video"), + + // External MIME + ZIP("application/zip"), + IMAGE_PNG("image/png"), + PDF("application/pdf"), + OTHER("") +} diff --git a/storage-api/src/main/java/com/omh/android/storage/api/domain/usecase/GetAllFilesAndFolders.kt b/storage-api/src/main/java/com/omh/android/storage/api/domain/usecase/GetAllFilesAndFolders.kt index 59c78926..1c56ebd6 100644 --- a/storage-api/src/main/java/com/omh/android/storage/api/domain/usecase/GetAllFilesAndFolders.kt +++ b/storage-api/src/main/java/com/omh/android/storage/api/domain/usecase/GetAllFilesAndFolders.kt @@ -1,7 +1,7 @@ package com.omh.android.storage.api.domain.usecase -import com.omh.android.storage.api.domain.model.FileOrFolder +import com.omh.android.storage.api.domain.model.File interface GetAllFilesAndFolders { - fun execute(): List + fun execute(): List } diff --git a/storage-api/src/main/java/com/omh/android/storage/api/domain/usecase/GetAllFilesAndFoldersUseCase.kt b/storage-api/src/main/java/com/omh/android/storage/api/domain/usecase/GetAllFilesAndFoldersUseCase.kt index 066e1f0e..4c5b2748 100644 --- a/storage-api/src/main/java/com/omh/android/storage/api/domain/usecase/GetAllFilesAndFoldersUseCase.kt +++ b/storage-api/src/main/java/com/omh/android/storage/api/domain/usecase/GetAllFilesAndFoldersUseCase.kt @@ -5,5 +5,5 @@ import com.omh.android.storage.api.domain.abstraction.FilesFoldersRepository class GetAllFilesAndFoldersUseCase( private val repository: FilesFoldersRepository ) : GetAllFilesAndFolders { - override fun execute() = repository.getAll() + override fun execute() = repository.getRootFilesList() }