FileUiModel.kt 2.03 KB
Newer Older
1
package chat.rocket.android.files.uimodel
2 3 4 5 6 7 8 9

import DateTimeHelper
import chat.rocket.android.server.domain.TokenRepository
import chat.rocket.android.server.domain.useRealName
import chat.rocket.android.util.extensions.fileUrl
import chat.rocket.core.model.Value
import chat.rocket.core.model.attachment.GenericAttachment

10
class FileUiModel(
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
    private val genericAttachment: GenericAttachment,
    private val settings: Map<String, Value<Any>>,
    private val tokenRepository: TokenRepository,
    private val baseUrl: String
) {
    val name: String?
    val uploader: String?
    val uploadDate: String?
    val url: String?
    val isMedia: Boolean
    val isImage: Boolean

    init {
        name = getFileName()
        uploader = getUserDisplayName()
        uploadDate = getFileUploadDate()
        url = getFileUrl()
        isMedia = isFileMedia()
        isImage = isFileImage()
    }

    private fun getFileName(): String? {
        return genericAttachment.name
    }

    private fun getUserDisplayName(): String {
        val username = "@${genericAttachment.user?.username}"
        val realName = genericAttachment.user?.name
        val uploaderName = if (settings.useRealName()) realName else username
        return uploaderName ?: username
    }

    private fun getFileUploadDate(): String {
Filipe de Lima Brito's avatar
Filipe de Lima Brito committed
44 45 46 47
        genericAttachment.uploadedAt?.let {
            return DateTimeHelper.getDateTime(DateTimeHelper.getLocalDateTime(it))
        }
        return ""
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
    }

    private fun getFileUrl(): String? {
        val token = tokenRepository.get(baseUrl)
        if (token != null) {
            genericAttachment.path?.let {
                return baseUrl.fileUrl(it, token)
            }
        }
        return ""
    }

    private fun isFileMedia(): Boolean {
        genericAttachment.type?.let {
            return it.contains("audio") || it.contains("video")
        }
        return false
    }

    private fun isFileImage(): Boolean {
        genericAttachment.type?.let {
            return it.contains("image")
        }
        return false
    }
}