From f7c8d6e1c8a72db36cea60b39a0fa8b0f92ba72a Mon Sep 17 00:00:00 2001 From: Danil Nikolaev Date: Sat, 11 Sep 2021 21:58:55 +0300 Subject: [PATCH] Basic conversations screen attachment types action types forwards --- .../kotlin/com/meloda/fast/api/UserConfig.kt | 3 + .../kotlin/com/meloda/fast/api/VkUtils.kt | 357 ++++++++++++++++++ .../api/datasource/ConversationsDataSource.kt | 2 +- .../meloda/fast/api/model/VkConversation.kt | 8 + .../com/meloda/fast/api/model/VkGroup.kt | 17 + .../com/meloda/fast/api/model/VkMessage.kt | 43 ++- .../com/meloda/fast/api/model/VkUser.kt | 10 +- .../model/attachments/BaseVKAttachmentItem.kt | 16 - .../api/model/attachments/VkAttachment.kt | 3 + .../fast/api/model/attachments/VkAudio.kt | 5 + .../fast/api/model/attachments/VkCall.kt | 5 + .../fast/api/model/attachments/VkFile.kt | 5 + .../fast/api/model/attachments/VkGift.kt | 5 + .../fast/api/model/attachments/VkGraffiti.kt | 5 + .../fast/api/model/attachments/VkLink.kt | 5 + .../fast/api/model/attachments/VkMiniApp.kt | 5 + .../fast/api/model/attachments/VkPhoto.kt | 5 + .../fast/api/model/attachments/VkPoll.kt | 5 + .../fast/api/model/attachments/VkSticker.kt | 5 + .../fast/api/model/attachments/VkVideo.kt | 5 + .../api/model/attachments/VkVoiceMessage.kt | 5 + .../fast/api/model/attachments/VkWall.kt | 5 + .../fast/api/model/attachments/VkWallReply.kt | 5 + .../fast/api/model/base/BaseVkConversation.kt | 33 +- .../meloda/fast/api/model/base/BaseVkGroup.kt | 38 ++ .../fast/api/model/base/BaseVkMessage.kt | 37 +- .../meloda/fast/api/model/base/BaseVkUser.kt | 4 +- .../base/attachments/BaseVkAttachmentItem.kt | 56 +++ .../attachments/BaseVkAudio.kt} | 6 +- .../api/model/base/attachments/BaseVkCall.kt | 17 + .../attachments/BaseVkFile.kt} | 6 +- .../api/model/base/attachments/BaseVkGift.kt | 16 + .../model/base/attachments/BaseVkGraffiti.kt | 17 + .../attachments/BaseVkLink.kt} | 8 +- .../model/base/attachments/BaseVkMiniApp.kt | 67 ++++ .../attachments/BaseVkPhoto.kt} | 6 +- .../api/model/base/attachments/BaseVkPoll.kt | 72 ++++ .../model/base/attachments/BaseVkSticker.kt | 35 ++ .../attachments/BaseVkVideo.kt} | 20 +- .../base/attachments/BaseVkVoiceMessage.kt | 23 ++ .../api/model/base/attachments/BaseVkWall.kt | 76 ++++ .../model/base/attachments/BaseVkWallReply.kt | 39 ++ .../fast/api/model/old/VKAttachments.kt | 26 +- .../fast/api/model/old/VKLongPollHistory.kt | 2 +- .../model/old/{VKAudio.kt => oldVKAudio.kt} | 2 +- ...VKAudioMessage.kt => oldVKAudioMessage.kt} | 2 +- .../old/{VKComment.kt => oldVKComment.kt} | 2 +- .../fast/api/model/old/oldVKConversation.kt | 4 +- .../old/{VKDocument.kt => oldVKDocument.kt} | 8 +- .../{VKGeolocation.kt => oldVKGeolocation.kt} | 2 +- .../api/model/old/{VKGift.kt => oldVKGift.kt} | 2 +- .../old/{VKGraffiti.kt => oldVKGraffiti.kt} | 2 +- .../model/old/{VKGroup.kt => oldVKGroup.kt} | 8 +- .../api/model/old/{VKLink.kt => oldVKLink.kt} | 6 +- .../meloda/fast/api/model/old/oldVKMessage.kt | 12 +- ...MessageAction.kt => oldVKMessageAction.kt} | 2 +- .../model/old/{VKPhoto.kt => oldVKPhoto.kt} | 8 +- .../old/{VKPhotoSize.kt => oldVKPhotoSize.kt} | 2 +- .../api/model/old/{VKPoll.kt => oldVKPoll.kt} | 2 +- .../old/{VKSticker.kt => oldVKSticker.kt} | 2 +- .../model/old/{VKVideo.kt => oldVKVideo.kt} | 2 +- .../api/model/old/{VKWall.kt => oldVKWall.kt} | 2 +- .../api/network/repo/ConversationsRepo.kt | 7 +- .../meloda/fast/api/network/repo/UsersRepo.kt | 12 +- .../network/request/ConversationsRequest.kt | 14 +- .../fast/api/network/request/UsersRequest.kt | 14 +- .../network/response/ConversationsResponse.kt | 6 +- .../fast/api/{VKUtil.kt => oldVKUtil.kt} | 32 +- .../com/meloda/fast/database/AppDatabase.kt | 8 +- .../fast/database/dao/ConversationsDao.kt | 14 +- .../com/meloda/fast/database/dao/GroupsDao.kt | 23 ++ .../com/meloda/fast/database/dao/UsersDao.kt | 9 +- .../fast/database/old/storage/ChatsStorage.kt | 6 +- .../database/old/storage/GroupsStorage.kt | 30 +- .../database/old/storage/MessagesStorage.kt | 4 +- .../fast/database/old/storage/UsersStorage.kt | 6 +- .../com/meloda/fast/di/DatabaseModule.kt | 6 + .../com/meloda/fast/extensions/Extensions.kt | 4 +- .../fast/screens/login/LoginViewModel.kt | 6 +- .../screens/messages/ConversationsAdapter.kt | 144 ++++++- .../screens/messages/ConversationsFragment.kt | 14 +- .../messages/ConversationsViewModel.kt | 52 ++- .../kotlin/com/meloda/fast/util/VKUtils.kt | 22 +- app/src/main/res/font/google_sans_regular.ttf | Bin 142960 -> 330872 bytes .../res/layout/fragment_conversations.xml | 36 +- app/src/main/res/layout/fragment_main.xml | 4 +- app/src/main/res/layout/item_conversation.xml | 233 ++++-------- .../main/res/layout/item_conversation_old.xml | 186 +++++++++ app/src/main/res/values-v31/colors.xml | 11 +- app/src/main/res/values/colors.xml | 4 + app/src/main/res/values/strings.xml | 5 + 91 files changed, 1694 insertions(+), 421 deletions(-) create mode 100644 app/src/main/kotlin/com/meloda/fast/api/VkUtils.kt create mode 100644 app/src/main/kotlin/com/meloda/fast/api/model/VkGroup.kt delete mode 100644 app/src/main/kotlin/com/meloda/fast/api/model/attachments/BaseVKAttachmentItem.kt create mode 100644 app/src/main/kotlin/com/meloda/fast/api/model/attachments/VkAttachment.kt create mode 100644 app/src/main/kotlin/com/meloda/fast/api/model/attachments/VkAudio.kt create mode 100644 app/src/main/kotlin/com/meloda/fast/api/model/attachments/VkCall.kt create mode 100644 app/src/main/kotlin/com/meloda/fast/api/model/attachments/VkFile.kt create mode 100644 app/src/main/kotlin/com/meloda/fast/api/model/attachments/VkGift.kt create mode 100644 app/src/main/kotlin/com/meloda/fast/api/model/attachments/VkGraffiti.kt create mode 100644 app/src/main/kotlin/com/meloda/fast/api/model/attachments/VkLink.kt create mode 100644 app/src/main/kotlin/com/meloda/fast/api/model/attachments/VkMiniApp.kt create mode 100644 app/src/main/kotlin/com/meloda/fast/api/model/attachments/VkPhoto.kt create mode 100644 app/src/main/kotlin/com/meloda/fast/api/model/attachments/VkPoll.kt create mode 100644 app/src/main/kotlin/com/meloda/fast/api/model/attachments/VkSticker.kt create mode 100644 app/src/main/kotlin/com/meloda/fast/api/model/attachments/VkVideo.kt create mode 100644 app/src/main/kotlin/com/meloda/fast/api/model/attachments/VkVoiceMessage.kt create mode 100644 app/src/main/kotlin/com/meloda/fast/api/model/attachments/VkWall.kt create mode 100644 app/src/main/kotlin/com/meloda/fast/api/model/attachments/VkWallReply.kt create mode 100644 app/src/main/kotlin/com/meloda/fast/api/model/base/BaseVkGroup.kt create mode 100644 app/src/main/kotlin/com/meloda/fast/api/model/base/attachments/BaseVkAttachmentItem.kt rename app/src/main/kotlin/com/meloda/fast/api/model/{attachments/VKAudioAttachment.kt => base/attachments/BaseVkAudio.kt} (94%) create mode 100644 app/src/main/kotlin/com/meloda/fast/api/model/base/attachments/BaseVkCall.kt rename app/src/main/kotlin/com/meloda/fast/api/model/{attachments/VKFileAttachment.kt => base/attachments/BaseVkFile.kt} (90%) create mode 100644 app/src/main/kotlin/com/meloda/fast/api/model/base/attachments/BaseVkGift.kt create mode 100644 app/src/main/kotlin/com/meloda/fast/api/model/base/attachments/BaseVkGraffiti.kt rename app/src/main/kotlin/com/meloda/fast/api/model/{attachments/VKLinkAttachment.kt => base/attachments/BaseVkLink.kt} (65%) create mode 100644 app/src/main/kotlin/com/meloda/fast/api/model/base/attachments/BaseVkMiniApp.kt rename app/src/main/kotlin/com/meloda/fast/api/model/{attachments/VKPhotoAttachment.kt => base/attachments/BaseVkPhoto.kt} (87%) create mode 100644 app/src/main/kotlin/com/meloda/fast/api/model/base/attachments/BaseVkPoll.kt create mode 100644 app/src/main/kotlin/com/meloda/fast/api/model/base/attachments/BaseVkSticker.kt rename app/src/main/kotlin/com/meloda/fast/api/model/{attachments/VKVideoAttachment.kt => base/attachments/BaseVkVideo.kt} (89%) create mode 100644 app/src/main/kotlin/com/meloda/fast/api/model/base/attachments/BaseVkVoiceMessage.kt create mode 100644 app/src/main/kotlin/com/meloda/fast/api/model/base/attachments/BaseVkWall.kt create mode 100644 app/src/main/kotlin/com/meloda/fast/api/model/base/attachments/BaseVkWallReply.kt rename app/src/main/kotlin/com/meloda/fast/api/model/old/{VKAudio.kt => oldVKAudio.kt} (95%) rename app/src/main/kotlin/com/meloda/fast/api/model/old/{VKAudioMessage.kt => oldVKAudioMessage.kt} (94%) rename app/src/main/kotlin/com/meloda/fast/api/model/old/{VKComment.kt => oldVKComment.kt} (77%) rename app/src/main/kotlin/com/meloda/fast/api/model/old/{VKDocument.kt => oldVKDocument.kt} (90%) rename app/src/main/kotlin/com/meloda/fast/api/model/old/{VKGeolocation.kt => oldVKGeolocation.kt} (86%) rename app/src/main/kotlin/com/meloda/fast/api/model/old/{VKGift.kt => oldVKGift.kt} (94%) rename app/src/main/kotlin/com/meloda/fast/api/model/old/{VKGraffiti.kt => oldVKGraffiti.kt} (94%) rename app/src/main/kotlin/com/meloda/fast/api/model/old/{VKGroup.kt => oldVKGroup.kt} (85%) rename app/src/main/kotlin/com/meloda/fast/api/model/old/{VKLink.kt => oldVKLink.kt} (92%) rename app/src/main/kotlin/com/meloda/fast/api/model/old/{VKMessageAction.kt => oldVKMessageAction.kt} (97%) rename app/src/main/kotlin/com/meloda/fast/api/model/old/{VKPhoto.kt => oldVKPhoto.kt} (80%) rename app/src/main/kotlin/com/meloda/fast/api/model/old/{VKPhotoSize.kt => oldVKPhotoSize.kt} (88%) rename app/src/main/kotlin/com/meloda/fast/api/model/old/{VKPoll.kt => oldVKPoll.kt} (97%) rename app/src/main/kotlin/com/meloda/fast/api/model/old/{VKSticker.kt => oldVKSticker.kt} (96%) rename app/src/main/kotlin/com/meloda/fast/api/model/old/{VKVideo.kt => oldVKVideo.kt} (98%) rename app/src/main/kotlin/com/meloda/fast/api/model/old/{VKWall.kt => oldVKWall.kt} (79%) rename app/src/main/kotlin/com/meloda/fast/api/{VKUtil.kt => oldVKUtil.kt} (91%) create mode 100644 app/src/main/kotlin/com/meloda/fast/database/dao/GroupsDao.kt create mode 100644 app/src/main/res/layout/item_conversation_old.xml diff --git a/app/src/main/kotlin/com/meloda/fast/api/UserConfig.kt b/app/src/main/kotlin/com/meloda/fast/api/UserConfig.kt index 3d882c2c..e40a107e 100644 --- a/app/src/main/kotlin/com/meloda/fast/api/UserConfig.kt +++ b/app/src/main/kotlin/com/meloda/fast/api/UserConfig.kt @@ -1,5 +1,6 @@ package com.meloda.fast.api +import com.meloda.fast.api.model.VkUser import com.meloda.fast.common.AppGlobal object UserConfig { @@ -30,4 +31,6 @@ object UserConfig { fun isLoggedIn() = userId > 0 && accessToken.isNotBlank() + var vkUser: VkUser? = null + } \ No newline at end of file diff --git a/app/src/main/kotlin/com/meloda/fast/api/VkUtils.kt b/app/src/main/kotlin/com/meloda/fast/api/VkUtils.kt new file mode 100644 index 00000000..e714f6da --- /dev/null +++ b/app/src/main/kotlin/com/meloda/fast/api/VkUtils.kt @@ -0,0 +1,357 @@ +package com.meloda.fast.api + +import android.content.Context +import com.meloda.fast.R +import com.meloda.fast.api.model.VkGroup +import com.meloda.fast.api.model.VkMessage +import com.meloda.fast.api.model.VkUser +import com.meloda.fast.api.model.attachments.* +import com.meloda.fast.api.model.base.BaseVkMessage +import com.meloda.fast.api.model.base.attachments.BaseVkAttachmentItem + +object VkUtils { + + fun parseForwards(baseForwards: List?): List? { + if (baseForwards.isNullOrEmpty()) return null + + val forwards = mutableListOf() + + for (baseForward in baseForwards) { + forwards += baseForward.asVkMessage() + } + + return forwards + } + + fun parseAttachments(baseAttachments: List?): List? { + if (baseAttachments.isNullOrEmpty()) return null + + val attachments = mutableListOf() + + for (baseAttachment in baseAttachments) { + when (baseAttachment.getPreparedType()) { + BaseVkAttachmentItem.AttachmentType.PHOTO -> { + val photo = baseAttachment.photo ?: continue + attachments += VkPhoto( + link = photo.sizes[0].url + ) + } + BaseVkAttachmentItem.AttachmentType.VIDEO -> { + val video = baseAttachment.video ?: continue + attachments += VkVideo( + link = video.player + ) + } + BaseVkAttachmentItem.AttachmentType.AUDIO -> { + val audio = baseAttachment.audio ?: continue + attachments += VkAudio( + link = audio.url + ) + } + BaseVkAttachmentItem.AttachmentType.FILE -> { + val file = baseAttachment.file ?: continue + attachments += VkFile( + link = file.url + ) + } + BaseVkAttachmentItem.AttachmentType.LINK -> { + val link = baseAttachment.link ?: continue + attachments += VkLink( + link = link.url + ) + } + BaseVkAttachmentItem.AttachmentType.MINI_APP -> { + val miniApp = baseAttachment.miniApp ?: continue + attachments += VkMiniApp( + link = miniApp.app.shareUrl + ) + } + BaseVkAttachmentItem.AttachmentType.VOICE -> { + val voiceMessage = baseAttachment.voiceMessage ?: continue + attachments += VkVoiceMessage( + link = voiceMessage.linkMp3 + ) + } + BaseVkAttachmentItem.AttachmentType.STICKER -> { + val sticker = baseAttachment.sticker ?: continue + attachments += VkSticker( + link = sticker.images[0].url + ) + } + BaseVkAttachmentItem.AttachmentType.GIFT -> { + val gift = baseAttachment.gift ?: continue + attachments += VkGift( + link = gift.thumb48 + ) + } + BaseVkAttachmentItem.AttachmentType.WALL -> { + val wall = baseAttachment.wall ?: continue + attachments += VkWall( + id = wall.id + ) + } + BaseVkAttachmentItem.AttachmentType.GRAFFITI -> { + val graffiti = baseAttachment.graffiti ?: continue + attachments += VkGraffiti( + link = graffiti.url + ) + } + BaseVkAttachmentItem.AttachmentType.POLL -> { + val poll = baseAttachment.poll ?: continue + attachments += VkPoll( + id = poll.id + ) + } + BaseVkAttachmentItem.AttachmentType.WALL_REPLY -> { + val wallReply = baseAttachment.wallReply ?: continue + attachments += VkWallReply( + id = wallReply.id + ) + } + BaseVkAttachmentItem.AttachmentType.CALL -> { + val call = baseAttachment.call ?: continue + attachments += VkCall( + initiatorId = call.initiatorId + ) + } + else -> continue + } + } + + return attachments + } + + fun getActionConversationText( + message: VkMessage, + youPrefix: String, + profiles: HashMap? = null, + groups: HashMap? = null, + messageUser: VkUser? = null, + messageGroup: VkGroup? = null + ): String? { + return when (message.getPreparedAction()) { + VkMessage.Action.CHAT_CREATE -> { + val text = message.actionText ?: return null + + val prefix = when { + message.fromId == UserConfig.userId -> youPrefix + message.isGroup() -> messageGroup?.name + message.isUser() -> messageUser?.toString() + else -> return null + } ?: return null + + "$prefix created «$text»" + } + VkMessage.Action.CHAT_TITLE_UPDATE -> { + val text = message.actionText ?: return null + + val prefix = when { + message.fromId == UserConfig.userId -> youPrefix + message.isGroup() -> messageGroup?.name + message.isUser() -> messageUser?.toString() + else -> return null + } ?: return null + + "$prefix renamed chat to «$text»" + } + VkMessage.Action.CHAT_PHOTO_UPDATE -> { + val prefix = when { + message.fromId == UserConfig.userId -> youPrefix + message.isGroup() -> messageGroup?.name + message.isUser() -> messageUser?.toString() + else -> return null + } ?: return null + + "$prefix updated the chat photo" + } + VkMessage.Action.CHAT_PHOTO_REMOVE -> { + val prefix = when { + message.fromId == UserConfig.userId -> youPrefix + message.isGroup() -> messageGroup?.name + message.isUser() -> messageUser?.toString() + else -> return null + } ?: return null + + "$prefix deleted the chat photo" + } + VkMessage.Action.CHAT_KICK_USER -> { + val memberId = message.actionMemberId ?: return null + val isUser = memberId > 0 + val isGroup = memberId < 0 + + val actionUser = profiles?.get(memberId) + val actionGroup = groups?.get(memberId) +// val actionUser = profiles?.find { it.id == memberId } +// val actionGroup = groups?.find { it.id == memberId } + + if (isUser && actionUser == null) return null + if (isGroup && actionGroup == null) return null + + if (memberId == message.fromId) { + val prefix = if (memberId == UserConfig.userId) youPrefix + else actionUser.toString() + "$prefix left the chat" + } else { + val prefix = + if (message.fromId == UserConfig.userId) youPrefix + else messageUser?.toString() ?: messageGroup?.toString() ?: "..." + val postfix = + if (memberId == UserConfig.userId) youPrefix.lowercase() + else actionUser.toString() + "$prefix kicked $postfix" + } + } + VkMessage.Action.CHAT_INVITE_USER -> { + val memberId = message.actionMemberId ?: 0 + val isUser = memberId > 0 + val isGroup = memberId < 0 + + val actionUser = profiles?.get(memberId) + val actionGroup = groups?.get(memberId) +// val actionUser = profiles?.find { it.id == memberId } +// val actionGroup = groups?.find { it.id == memberId } + + if (isUser && actionUser == null) return null + if (isGroup && actionGroup == null) return null + + if (memberId == message.fromId) { + val prefix = if (memberId == UserConfig.userId) youPrefix + else actionUser.toString() + "$prefix returned the chat" + } else { + val prefix = if (message.fromId == UserConfig.userId) youPrefix + else messageUser?.toString() ?: messageGroup?.toString() ?: "..." + val postfix = + if (memberId == UserConfig.userId) youPrefix.lowercase() + else actionUser.toString() + "$prefix invited $postfix" + } + } + VkMessage.Action.CHAT_INVITE_USER_BY_LINK -> { + val prefix = when { + message.fromId == UserConfig.userId -> youPrefix + message.isUser() -> messageUser?.toString() + else -> return null + } ?: return null + + "$prefix joined the chat via link" + } + VkMessage.Action.CHAT_INVITE_USER_BY_CALL_LINK -> { + val prefix = when { + message.fromId == UserConfig.userId -> youPrefix + message.isUser() -> messageUser?.toString() + else -> return null + } ?: return null + + "$prefix joined the call via link" + } + VkMessage.Action.CHAT_PIN_MESSAGE -> { + val prefix = when { + message.fromId == UserConfig.userId -> youPrefix + message.isGroup() -> messageGroup?.name + message.isUser() -> messageUser?.toString() + else -> return null + } ?: return null + + val actionMessage = message.actionMessage ?: return null + + "$prefix pinned message «$actionMessage»" + } + VkMessage.Action.CHAT_UNPIN_MESSAGE -> { + val prefix = when { + message.fromId == UserConfig.userId -> youPrefix + message.isGroup() -> messageGroup?.name + message.isUser() -> messageUser?.toString() + else -> return null + } ?: return null + + "$prefix unpinned message" + } + VkMessage.Action.CHAT_SCREENSHOT -> { + val prefix = when { + message.fromId == UserConfig.userId -> youPrefix + message.isGroup() -> messageGroup?.name + message.isUser() -> messageUser?.toString() + else -> return null + } ?: return null + + "$prefix took a screenshot" + } + null -> null + else -> "[${message.action}]" + } + } + + fun getForwardsConversationText(context: Context, message: VkMessage): String? { + if (message.forwards.isNullOrEmpty()) return null + + return message.forwards?.let { forwards -> + context.getString( + if (forwards.size == 1) R.string.forwarded_message + else R.string.forwarded_messages + ) + } + } + + fun getAttachmentConversationText(context: Context, message: VkMessage): String? { + message.geoType?.let { + return when (it) { + "point" -> context.getString(R.string.message_geo_point) + else -> context.getString(R.string.message_geo) + } + } + if (message.attachments.isNullOrEmpty()) return null + + return message.attachments?.let { attachments -> + if (attachments.size == 1) { + getAttachmentTypeByClass(attachments[0])?.let { getAttachmentTextByType(it) } + } else { + if (isAttachmentsHaveOneType(attachments)) { + getAttachmentTypeByClass(attachments[0])?.let { getAttachmentTextByType(it) } + } else { + context.getString(R.string.message_attachments_many) + } + } + } + } + + fun isAttachmentsHaveOneType(attachments: List): Boolean { + if (attachments.isEmpty()) return true + if (attachments.size == 1) return true + + val firstType = getAttachmentTypeByClass(attachments[0]) + for (i in 1 until attachments.size) { + val type = getAttachmentTypeByClass(attachments[i]) + if (type != firstType) return false + } + + return true + } + + fun getAttachmentTypeByClass(attachment: VkAttachment): BaseVkAttachmentItem.AttachmentType? { + return when (attachment) { + is VkPhoto -> BaseVkAttachmentItem.AttachmentType.PHOTO + is VkVideo -> BaseVkAttachmentItem.AttachmentType.VIDEO + is VkAudio -> BaseVkAttachmentItem.AttachmentType.AUDIO + is VkFile -> BaseVkAttachmentItem.AttachmentType.FILE + is VkLink -> BaseVkAttachmentItem.AttachmentType.LINK + is VkMiniApp -> BaseVkAttachmentItem.AttachmentType.MINI_APP + is VkVoiceMessage -> BaseVkAttachmentItem.AttachmentType.VOICE + is VkSticker -> BaseVkAttachmentItem.AttachmentType.STICKER + is VkGift -> BaseVkAttachmentItem.AttachmentType.GIFT + is VkWall -> BaseVkAttachmentItem.AttachmentType.WALL + is VkGraffiti -> BaseVkAttachmentItem.AttachmentType.GRAFFITI + is VkPoll -> BaseVkAttachmentItem.AttachmentType.POLL + is VkWallReply -> BaseVkAttachmentItem.AttachmentType.WALL_REPLY + is VkCall -> BaseVkAttachmentItem.AttachmentType.CALL + else -> null + } + } + + fun getAttachmentTextByType(attachmentType: BaseVkAttachmentItem.AttachmentType): String? { + return when (attachmentType) { + else -> attachmentType.value + } + } + +} \ No newline at end of file diff --git a/app/src/main/kotlin/com/meloda/fast/api/datasource/ConversationsDataSource.kt b/app/src/main/kotlin/com/meloda/fast/api/datasource/ConversationsDataSource.kt index 6b488183..1b78db0e 100644 --- a/app/src/main/kotlin/com/meloda/fast/api/datasource/ConversationsDataSource.kt +++ b/app/src/main/kotlin/com/meloda/fast/api/datasource/ConversationsDataSource.kt @@ -11,7 +11,7 @@ class ConversationsDataSource @Inject constructor( private val dao: ConversationsDao ) { - suspend fun getAllChats(params: ConversationsGetRequest) = repo.getAllChats(params) + suspend fun getAllChats(params: ConversationsGetRequest) = repo.getAllChats(params.map) suspend fun storeConversations(conversations: List) = dao.insert(conversations) diff --git a/app/src/main/kotlin/com/meloda/fast/api/model/VkConversation.kt b/app/src/main/kotlin/com/meloda/fast/api/model/VkConversation.kt index ead41a76..2c9f450d 100644 --- a/app/src/main/kotlin/com/meloda/fast/api/model/VkConversation.kt +++ b/app/src/main/kotlin/com/meloda/fast/api/model/VkConversation.kt @@ -9,7 +9,15 @@ data class VkConversation( @PrimaryKey(autoGenerate = false) val id: Int, val title: String?, + val photo200: String?, + val type: String, + val callInProgress: Boolean ) { @Ignore var lastMessage: VkMessage? = null + + fun isChat() = type == "chat" + fun isUser() = type == "user" + fun isGroup() = type == "group" + } diff --git a/app/src/main/kotlin/com/meloda/fast/api/model/VkGroup.kt b/app/src/main/kotlin/com/meloda/fast/api/model/VkGroup.kt new file mode 100644 index 00000000..6a7cabbc --- /dev/null +++ b/app/src/main/kotlin/com/meloda/fast/api/model/VkGroup.kt @@ -0,0 +1,17 @@ +package com.meloda.fast.api.model + +import androidx.room.Entity +import androidx.room.PrimaryKey + +@Entity(tableName = "groups") +data class VkGroup( + @PrimaryKey(autoGenerate = false) + val id: Int, + val name: String, + val screenName: String, + val photo200: String? +) { + + override fun toString() = name.trim() + +} diff --git a/app/src/main/kotlin/com/meloda/fast/api/model/VkMessage.kt b/app/src/main/kotlin/com/meloda/fast/api/model/VkMessage.kt index c53396b3..59121406 100644 --- a/app/src/main/kotlin/com/meloda/fast/api/model/VkMessage.kt +++ b/app/src/main/kotlin/com/meloda/fast/api/model/VkMessage.kt @@ -1,7 +1,9 @@ package com.meloda.fast.api.model import androidx.room.Entity +import androidx.room.Ignore import androidx.room.PrimaryKey +import com.meloda.fast.api.model.attachments.VkAttachment @Entity(tableName = "messages") data class VkMessage( @@ -11,9 +13,48 @@ data class VkMessage( val isOut: Boolean, val peerId: Int, val fromId: Int, - val date: Int + val date: Int, + val action: String?, + val actionMemberId: Int?, + val actionText: String?, + val actionConversationMessageId: Int?, + val actionMessage: String?, + val geoType: String? ) { + @Ignore + var forwards: List? = null + @Ignore + var attachments: List? = null + fun isUser() = id > 0 + + fun isGroup() = id < 0 + + fun getPreparedAction(): Action? { + if (action == null) return null + return Action.parse(action) + } + + enum class Action(val value: String) { + CHAT_CREATE("chat_create"), + CHAT_PHOTO_UPDATE("chat_photo_update"), + CHAT_PHOTO_REMOVE("chat_photo_remove"), + CHAT_TITLE_UPDATE("chat_title_update"), + CHAT_PIN_MESSAGE("chat_pin_message"), + CHAT_UNPIN_MESSAGE("chat_unpin_message"), + CHAT_INVITE_USER("chat_invite_user"), + CHAT_INVITE_USER_BY_LINK("chat_invite_user_by_link"), + CHAT_KICK_USER("chat_kick_user"), + CHAT_SCREENSHOT("chat_screenshot"), + + // TODO: 9/11/2021 catch this shit + CHAT_INVITE_USER_BY_CALL("chat_invite_user_by_call"), + CHAT_INVITE_USER_BY_CALL_LINK("chat_invite_user_by_call_join_link"); + + companion object { + fun parse(value: String) = values().first { it.value == value } + } + } } diff --git a/app/src/main/kotlin/com/meloda/fast/api/model/VkUser.kt b/app/src/main/kotlin/com/meloda/fast/api/model/VkUser.kt index 0873961c..5e28b35c 100644 --- a/app/src/main/kotlin/com/meloda/fast/api/model/VkUser.kt +++ b/app/src/main/kotlin/com/meloda/fast/api/model/VkUser.kt @@ -8,5 +8,11 @@ data class VkUser( @PrimaryKey(autoGenerate = false) val id: Int, val firstName: String, - val lastName: String -) \ No newline at end of file + val lastName: String, + val online: Boolean, + val photo200: String? +) { + + override fun toString() = "$firstName $lastName".trim() + +} \ No newline at end of file diff --git a/app/src/main/kotlin/com/meloda/fast/api/model/attachments/BaseVKAttachmentItem.kt b/app/src/main/kotlin/com/meloda/fast/api/model/attachments/BaseVKAttachmentItem.kt deleted file mode 100644 index 8808bc4a..00000000 --- a/app/src/main/kotlin/com/meloda/fast/api/model/attachments/BaseVKAttachmentItem.kt +++ /dev/null @@ -1,16 +0,0 @@ -package com.meloda.fast.api.model.attachments - -import android.os.Parcelable -import kotlinx.parcelize.Parcelize - -@Parcelize -data class BaseVKAttachmentItem( - val type: String, - val photo: VKPhotoAttachment?, - val video: VKVideoAttachment?, - val audio: VKAudioAttachment?, - val doc: VKFileAttachment?, - val link: VKLinkAttachment? -) : Parcelable - -abstract class BaseVKAttachment : Parcelable \ No newline at end of file diff --git a/app/src/main/kotlin/com/meloda/fast/api/model/attachments/VkAttachment.kt b/app/src/main/kotlin/com/meloda/fast/api/model/attachments/VkAttachment.kt new file mode 100644 index 00000000..5c6ce70c --- /dev/null +++ b/app/src/main/kotlin/com/meloda/fast/api/model/attachments/VkAttachment.kt @@ -0,0 +1,3 @@ +package com.meloda.fast.api.model.attachments + +abstract class VkAttachment \ No newline at end of file diff --git a/app/src/main/kotlin/com/meloda/fast/api/model/attachments/VkAudio.kt b/app/src/main/kotlin/com/meloda/fast/api/model/attachments/VkAudio.kt new file mode 100644 index 00000000..5a5ec10a --- /dev/null +++ b/app/src/main/kotlin/com/meloda/fast/api/model/attachments/VkAudio.kt @@ -0,0 +1,5 @@ +package com.meloda.fast.api.model.attachments + +data class VkAudio( + val link: String +) : VkAttachment() \ No newline at end of file diff --git a/app/src/main/kotlin/com/meloda/fast/api/model/attachments/VkCall.kt b/app/src/main/kotlin/com/meloda/fast/api/model/attachments/VkCall.kt new file mode 100644 index 00000000..5c418b22 --- /dev/null +++ b/app/src/main/kotlin/com/meloda/fast/api/model/attachments/VkCall.kt @@ -0,0 +1,5 @@ +package com.meloda.fast.api.model.attachments + +data class VkCall( + val initiatorId: Int +) : VkAttachment() \ No newline at end of file diff --git a/app/src/main/kotlin/com/meloda/fast/api/model/attachments/VkFile.kt b/app/src/main/kotlin/com/meloda/fast/api/model/attachments/VkFile.kt new file mode 100644 index 00000000..e8eaaa23 --- /dev/null +++ b/app/src/main/kotlin/com/meloda/fast/api/model/attachments/VkFile.kt @@ -0,0 +1,5 @@ +package com.meloda.fast.api.model.attachments + +data class VkFile( + val link: String +) : VkAttachment() \ No newline at end of file diff --git a/app/src/main/kotlin/com/meloda/fast/api/model/attachments/VkGift.kt b/app/src/main/kotlin/com/meloda/fast/api/model/attachments/VkGift.kt new file mode 100644 index 00000000..75f08967 --- /dev/null +++ b/app/src/main/kotlin/com/meloda/fast/api/model/attachments/VkGift.kt @@ -0,0 +1,5 @@ +package com.meloda.fast.api.model.attachments + +data class VkGift( + val link: String +) : VkAttachment() diff --git a/app/src/main/kotlin/com/meloda/fast/api/model/attachments/VkGraffiti.kt b/app/src/main/kotlin/com/meloda/fast/api/model/attachments/VkGraffiti.kt new file mode 100644 index 00000000..7f7ddebc --- /dev/null +++ b/app/src/main/kotlin/com/meloda/fast/api/model/attachments/VkGraffiti.kt @@ -0,0 +1,5 @@ +package com.meloda.fast.api.model.attachments + +data class VkGraffiti( + val link: String +) : VkAttachment() \ No newline at end of file diff --git a/app/src/main/kotlin/com/meloda/fast/api/model/attachments/VkLink.kt b/app/src/main/kotlin/com/meloda/fast/api/model/attachments/VkLink.kt new file mode 100644 index 00000000..6e68af59 --- /dev/null +++ b/app/src/main/kotlin/com/meloda/fast/api/model/attachments/VkLink.kt @@ -0,0 +1,5 @@ +package com.meloda.fast.api.model.attachments + +data class VkLink( + val link: String +) : VkAttachment() diff --git a/app/src/main/kotlin/com/meloda/fast/api/model/attachments/VkMiniApp.kt b/app/src/main/kotlin/com/meloda/fast/api/model/attachments/VkMiniApp.kt new file mode 100644 index 00000000..781ba12e --- /dev/null +++ b/app/src/main/kotlin/com/meloda/fast/api/model/attachments/VkMiniApp.kt @@ -0,0 +1,5 @@ +package com.meloda.fast.api.model.attachments + +data class VkMiniApp( + val link: String +) : VkAttachment() diff --git a/app/src/main/kotlin/com/meloda/fast/api/model/attachments/VkPhoto.kt b/app/src/main/kotlin/com/meloda/fast/api/model/attachments/VkPhoto.kt new file mode 100644 index 00000000..2e1579ba --- /dev/null +++ b/app/src/main/kotlin/com/meloda/fast/api/model/attachments/VkPhoto.kt @@ -0,0 +1,5 @@ +package com.meloda.fast.api.model.attachments + +data class VkPhoto( + val link: String +) : VkAttachment() \ No newline at end of file diff --git a/app/src/main/kotlin/com/meloda/fast/api/model/attachments/VkPoll.kt b/app/src/main/kotlin/com/meloda/fast/api/model/attachments/VkPoll.kt new file mode 100644 index 00000000..ec8742a0 --- /dev/null +++ b/app/src/main/kotlin/com/meloda/fast/api/model/attachments/VkPoll.kt @@ -0,0 +1,5 @@ +package com.meloda.fast.api.model.attachments + +data class VkPoll( + val id: Int +) : VkAttachment() \ No newline at end of file diff --git a/app/src/main/kotlin/com/meloda/fast/api/model/attachments/VkSticker.kt b/app/src/main/kotlin/com/meloda/fast/api/model/attachments/VkSticker.kt new file mode 100644 index 00000000..43aeefdc --- /dev/null +++ b/app/src/main/kotlin/com/meloda/fast/api/model/attachments/VkSticker.kt @@ -0,0 +1,5 @@ +package com.meloda.fast.api.model.attachments + +data class VkSticker( + val link: String +) : VkAttachment() diff --git a/app/src/main/kotlin/com/meloda/fast/api/model/attachments/VkVideo.kt b/app/src/main/kotlin/com/meloda/fast/api/model/attachments/VkVideo.kt new file mode 100644 index 00000000..77c0d427 --- /dev/null +++ b/app/src/main/kotlin/com/meloda/fast/api/model/attachments/VkVideo.kt @@ -0,0 +1,5 @@ +package com.meloda.fast.api.model.attachments + +data class VkVideo( + val link: String +) : VkAttachment() \ No newline at end of file diff --git a/app/src/main/kotlin/com/meloda/fast/api/model/attachments/VkVoiceMessage.kt b/app/src/main/kotlin/com/meloda/fast/api/model/attachments/VkVoiceMessage.kt new file mode 100644 index 00000000..e701a35f --- /dev/null +++ b/app/src/main/kotlin/com/meloda/fast/api/model/attachments/VkVoiceMessage.kt @@ -0,0 +1,5 @@ +package com.meloda.fast.api.model.attachments + +data class VkVoiceMessage( + val link: String +) : VkAttachment() diff --git a/app/src/main/kotlin/com/meloda/fast/api/model/attachments/VkWall.kt b/app/src/main/kotlin/com/meloda/fast/api/model/attachments/VkWall.kt new file mode 100644 index 00000000..e2f54efe --- /dev/null +++ b/app/src/main/kotlin/com/meloda/fast/api/model/attachments/VkWall.kt @@ -0,0 +1,5 @@ +package com.meloda.fast.api.model.attachments + +data class VkWall( + val id: Int +) : VkAttachment() \ No newline at end of file diff --git a/app/src/main/kotlin/com/meloda/fast/api/model/attachments/VkWallReply.kt b/app/src/main/kotlin/com/meloda/fast/api/model/attachments/VkWallReply.kt new file mode 100644 index 00000000..6930c369 --- /dev/null +++ b/app/src/main/kotlin/com/meloda/fast/api/model/attachments/VkWallReply.kt @@ -0,0 +1,5 @@ +package com.meloda.fast.api.model.attachments + +data class VkWallReply( + val id: Int +) : VkAttachment() \ No newline at end of file diff --git a/app/src/main/kotlin/com/meloda/fast/api/model/base/BaseVkConversation.kt b/app/src/main/kotlin/com/meloda/fast/api/model/base/BaseVkConversation.kt index db8de3ee..444b6cff 100644 --- a/app/src/main/kotlin/com/meloda/fast/api/model/base/BaseVkConversation.kt +++ b/app/src/main/kotlin/com/meloda/fast/api/model/base/BaseVkConversation.kt @@ -31,12 +31,17 @@ data class BaseVkConversation( @SerializedName("can_receive_money") val canReceiveMoney: Boolean, @SerializedName("chat_settings") - val chatSettings: ChatSettings? + val chatSettings: ChatSettings?, + @SerializedName("call_in_progress") + val callInProgress: CallInProgress? ) : Parcelable { fun asVkConversation(lastMessage: VkMessage? = null) = VkConversation( id = peer.id, title = chatSettings?.title, + photo200 = chatSettings?.photo?.photo200, + type = peer.type, + callInProgress = callInProgress != null ).apply { this.lastMessage = lastMessage } @Parcelize @@ -83,7 +88,7 @@ data class BaseVkConversation( val membersCount: Int, @SerializedName("friends_count") val friendsCount: Int, - val photo: Photo, + val photo: Photo?, @SerializedName("admin_ids") val adminsIds: List, @SerializedName("active_ids") @@ -93,7 +98,8 @@ data class BaseVkConversation( @SerializedName("is_disappearing") val isDisappearing: Boolean, @SerializedName("is_service") - val isService: Boolean + val isService: Boolean, + val theme: String ) : Parcelable { @Parcelize @@ -125,13 +131,28 @@ data class BaseVkConversation( @Parcelize data class Photo( @SerializedName("photo_50") - val photo50: String, + val photo50: String?, @SerializedName("photo_100") - val photo100: String, + val photo100: String?, @SerializedName("photo_200") - val photo200: String, + val photo200: String?, @SerializedName("is_default_photo") val isDefaultPhoto: Boolean ) : Parcelable } + + @Parcelize + data class CallInProgress( + val participants: Participants, + @SerializedName("join_link") + val joinLink: String + ) : Parcelable { + + @Parcelize + data class Participants( + val list: List, + val count: Int + ) : Parcelable + + } } \ No newline at end of file diff --git a/app/src/main/kotlin/com/meloda/fast/api/model/base/BaseVkGroup.kt b/app/src/main/kotlin/com/meloda/fast/api/model/base/BaseVkGroup.kt new file mode 100644 index 00000000..0bf754c3 --- /dev/null +++ b/app/src/main/kotlin/com/meloda/fast/api/model/base/BaseVkGroup.kt @@ -0,0 +1,38 @@ +package com.meloda.fast.api.model.base + +import android.os.Parcelable +import com.google.gson.annotations.SerializedName +import com.meloda.fast.api.model.VkGroup +import kotlinx.parcelize.Parcelize + +@Parcelize +data class BaseVkGroup( + val id: Int, + val name: String, + @SerializedName("screen_name") + val screenName: String, + @SerializedName("is_closed") + val isClosed: Int, + val type: String, + @SerializedName("is_admin") + val isAdmin: Int, + @SerializedName("is_member") + val isMember: Int, + @SerializedName("is_advertiser") + val isAdvertiser: Int, + @SerializedName("photo_50") + val photo50: String?, + @SerializedName("photo_100") + val photo100: String?, + @SerializedName("photo_200") + val photo200: String? +) : Parcelable { + + fun asVkGroup() = VkGroup( + id = -id, + name = name, + screenName = screenName, + photo200 = photo200 + ) + +} diff --git a/app/src/main/kotlin/com/meloda/fast/api/model/base/BaseVkMessage.kt b/app/src/main/kotlin/com/meloda/fast/api/model/base/BaseVkMessage.kt index bdedf2ec..0c698b82 100644 --- a/app/src/main/kotlin/com/meloda/fast/api/model/base/BaseVkMessage.kt +++ b/app/src/main/kotlin/com/meloda/fast/api/model/base/BaseVkMessage.kt @@ -2,9 +2,10 @@ package com.meloda.fast.api.model.base import android.os.Parcelable import com.google.gson.annotations.SerializedName +import com.meloda.fast.api.VkUtils import com.meloda.fast.api.model.VkMessage +import com.meloda.fast.api.model.base.attachments.BaseVkAttachmentItem import kotlinx.parcelize.Parcelize -import kotlinx.parcelize.RawValue @Parcelize data class BaseVkMessage( @@ -19,25 +20,36 @@ data class BaseVkMessage( @SerializedName("conversation_message_id") val conversationMessageId: Int, @SerializedName("fwd_messages") - val fwdMessages: List = listOf(), + val fwdMessages: List? = listOf(), val important: Boolean, @SerializedName("random_id") val randomId: Int, - val attachments: @RawValue List = listOf(), + val attachments: List = listOf(), @SerializedName("is_hidden") val isHidden: Boolean, val payload: String, - val geo: Geo? + val geo: Geo?, + val action: Action?, + val ttl: Int ) : Parcelable { fun asVkMessage() = VkMessage( id = id, - text = text, + text = if (text.isBlank()) null else text, isOut = out == 1, peerId = peerId, fromId = fromId, - date = date - ) + date = date, + action = action?.type, + actionMemberId = action?.memberId, + actionText = action?.text, + actionConversationMessageId = action?.conversationMessageId, + actionMessage = action?.message, + geoType = geo?.type + ).also { + it.attachments = VkUtils.parseAttachments(attachments) + it.forwards = VkUtils.parseForwards(fwdMessages) + } @Parcelize data class Geo( @@ -54,4 +66,15 @@ data class BaseVkMessage( data class Place(val country: String, val city: String, val title: String) : Parcelable } + @Parcelize + data class Action( + val type: String, + @SerializedName("member_id") + val memberId: Int?, + val text: String?, + @SerializedName("conversation_message_id") + val conversationMessageId: Int?, + val message: String? + ) : Parcelable + } diff --git a/app/src/main/kotlin/com/meloda/fast/api/model/base/BaseVkUser.kt b/app/src/main/kotlin/com/meloda/fast/api/model/base/BaseVkUser.kt index e38cba7e..bc7ceac9 100644 --- a/app/src/main/kotlin/com/meloda/fast/api/model/base/BaseVkUser.kt +++ b/app/src/main/kotlin/com/meloda/fast/api/model/base/BaseVkUser.kt @@ -50,7 +50,9 @@ data class BaseVkUser( fun asVkUser() = VkUser( id = id, firstName = firstName, - lastName = lastName + lastName = lastName, + online = online == 1, + photo200 = photo200 ) } diff --git a/app/src/main/kotlin/com/meloda/fast/api/model/base/attachments/BaseVkAttachmentItem.kt b/app/src/main/kotlin/com/meloda/fast/api/model/base/attachments/BaseVkAttachmentItem.kt new file mode 100644 index 00000000..f887b3be --- /dev/null +++ b/app/src/main/kotlin/com/meloda/fast/api/model/base/attachments/BaseVkAttachmentItem.kt @@ -0,0 +1,56 @@ +package com.meloda.fast.api.model.base.attachments + +import android.os.Parcelable +import com.google.gson.annotations.SerializedName +import kotlinx.parcelize.Parcelize + +@Parcelize +data class BaseVkAttachmentItem( + val type: String, + val photo: BaseVkPhoto?, + val video: BaseVkVideo?, + val audio: BaseVkAudio?, + @SerializedName("doc") + val file: BaseVkFile?, + val link: BaseVkLink?, + @SerializedName("mini_app") + val miniApp: BaseVkMiniApp?, + @SerializedName("audio_message") + val voiceMessage: BaseVkVoiceMessage?, + val sticker: BaseVkSticker?, + val gift: BaseVkGift?, + val wall: BaseVkWall?, + val graffiti: BaseVkGraffiti?, + val poll: BaseVkPoll?, + @SerializedName("wall_reply") + val wallReply: BaseVkWallReply?, + val call: BaseVkCall? +) : Parcelable { + + fun getPreparedType() = AttachmentType.parse(type) + + enum class AttachmentType(val value: String) { + PHOTO("photo"), + VIDEO("video"), + AUDIO("audio"), + FILE("doc"), + LINK("link"), + VOICE("audio_message"), + MINI_APP("mini_app"), + STICKER("sticker"), + GIFT("gift"), + WALL("wall"), + GRAFFITI("graffiti"), + POLL("poll"), + WALL_REPLY("wall_reply"), + CALL("call") + ; + + companion object { + fun parse(value: String) = values().firstOrNull { it.value == value } + } + } + +} + +abstract class BaseVkAttachment : Parcelable \ No newline at end of file diff --git a/app/src/main/kotlin/com/meloda/fast/api/model/attachments/VKAudioAttachment.kt b/app/src/main/kotlin/com/meloda/fast/api/model/base/attachments/BaseVkAudio.kt similarity index 94% rename from app/src/main/kotlin/com/meloda/fast/api/model/attachments/VKAudioAttachment.kt rename to app/src/main/kotlin/com/meloda/fast/api/model/base/attachments/BaseVkAudio.kt index c4e3423b..e25a276f 100644 --- a/app/src/main/kotlin/com/meloda/fast/api/model/attachments/VKAudioAttachment.kt +++ b/app/src/main/kotlin/com/meloda/fast/api/model/base/attachments/BaseVkAudio.kt @@ -1,11 +1,11 @@ -package com.meloda.fast.api.model.attachments +package com.meloda.fast.api.model.base.attachments import android.os.Parcelable import com.google.gson.annotations.SerializedName import kotlinx.parcelize.Parcelize @Parcelize -data class VKAudioAttachment( +data class BaseVkAudio( val id: Int, val title: String, val artist: String, @@ -33,7 +33,7 @@ data class VKAudioAttachment( val storiesAllowed: Boolean, @SerializedName("stories_cover_allowed") val storiesCoverAllowed: Boolean -) : BaseVKAttachment() { +) : BaseVkAttachment() { @Parcelize data class Album( diff --git a/app/src/main/kotlin/com/meloda/fast/api/model/base/attachments/BaseVkCall.kt b/app/src/main/kotlin/com/meloda/fast/api/model/base/attachments/BaseVkCall.kt new file mode 100644 index 00000000..70cd1b80 --- /dev/null +++ b/app/src/main/kotlin/com/meloda/fast/api/model/base/attachments/BaseVkCall.kt @@ -0,0 +1,17 @@ +package com.meloda.fast.api.model.base.attachments + +import android.os.Parcelable +import com.google.gson.annotations.SerializedName +import kotlinx.parcelize.Parcelize + +@Parcelize +data class BaseVkCall( + @SerializedName("initiator_id") + val initiatorId: Int, + @SerializedName("receiver_id") + val receiverId: Int, + val state: String, + val time: Int, + val duration: Int, + val video: Boolean +) : Parcelable \ No newline at end of file diff --git a/app/src/main/kotlin/com/meloda/fast/api/model/attachments/VKFileAttachment.kt b/app/src/main/kotlin/com/meloda/fast/api/model/base/attachments/BaseVkFile.kt similarity index 90% rename from app/src/main/kotlin/com/meloda/fast/api/model/attachments/VKFileAttachment.kt rename to app/src/main/kotlin/com/meloda/fast/api/model/base/attachments/BaseVkFile.kt index f2515255..1791b814 100644 --- a/app/src/main/kotlin/com/meloda/fast/api/model/attachments/VKFileAttachment.kt +++ b/app/src/main/kotlin/com/meloda/fast/api/model/base/attachments/BaseVkFile.kt @@ -1,11 +1,11 @@ -package com.meloda.fast.api.model.attachments +package com.meloda.fast.api.model.base.attachments import android.os.Parcelable import com.google.gson.annotations.SerializedName import kotlinx.parcelize.Parcelize @Parcelize -data class VKFileAttachment( +data class BaseVkFile( val id: Int, @SerializedName("owner_id") val ownerId: Int, @@ -22,7 +22,7 @@ data class VKFileAttachment( val accessKey: String, @SerializedName("web_preview_url") val webPreviewUrl: String? -) : BaseVKAttachment() { +) : BaseVkAttachment() { @Parcelize data class Preview( diff --git a/app/src/main/kotlin/com/meloda/fast/api/model/base/attachments/BaseVkGift.kt b/app/src/main/kotlin/com/meloda/fast/api/model/base/attachments/BaseVkGift.kt new file mode 100644 index 00000000..bba4b6ea --- /dev/null +++ b/app/src/main/kotlin/com/meloda/fast/api/model/base/attachments/BaseVkGift.kt @@ -0,0 +1,16 @@ +package com.meloda.fast.api.model.base.attachments + +import android.os.Parcelable +import com.google.gson.annotations.SerializedName +import kotlinx.parcelize.Parcelize + +@Parcelize +data class BaseVkGift( + val id: Int, + @SerializedName("thumb_256") + val thumb256: String?, + @SerializedName("thumb_96") + val thumb96: String?, + @SerializedName("thumb_48") + val thumb48: String +) : Parcelable \ No newline at end of file diff --git a/app/src/main/kotlin/com/meloda/fast/api/model/base/attachments/BaseVkGraffiti.kt b/app/src/main/kotlin/com/meloda/fast/api/model/base/attachments/BaseVkGraffiti.kt new file mode 100644 index 00000000..d044e3fe --- /dev/null +++ b/app/src/main/kotlin/com/meloda/fast/api/model/base/attachments/BaseVkGraffiti.kt @@ -0,0 +1,17 @@ +package com.meloda.fast.api.model.base.attachments + +import android.os.Parcelable +import com.google.gson.annotations.SerializedName +import kotlinx.parcelize.Parcelize + +@Parcelize +data class BaseVkGraffiti( + val id: Int, + @SerializedName("owner_id") + val ownerId: Int, + val url: String, + val width: Int, + val height: Int, + @SerializedName("access_key") + val accessKey: String +) : Parcelable \ No newline at end of file diff --git a/app/src/main/kotlin/com/meloda/fast/api/model/attachments/VKLinkAttachment.kt b/app/src/main/kotlin/com/meloda/fast/api/model/base/attachments/BaseVkLink.kt similarity index 65% rename from app/src/main/kotlin/com/meloda/fast/api/model/attachments/VKLinkAttachment.kt rename to app/src/main/kotlin/com/meloda/fast/api/model/base/attachments/BaseVkLink.kt index a65be339..baee2679 100644 --- a/app/src/main/kotlin/com/meloda/fast/api/model/attachments/VKLinkAttachment.kt +++ b/app/src/main/kotlin/com/meloda/fast/api/model/base/attachments/BaseVkLink.kt @@ -1,15 +1,15 @@ -package com.meloda.fast.api.model.attachments +package com.meloda.fast.api.model.base.attachments import com.google.gson.annotations.SerializedName import kotlinx.parcelize.Parcelize @Parcelize -data class VKLinkAttachment( +data class BaseVkLink( val url: String, val title: String, val caption: String, - val photo: VKPhotoAttachment, + val photo: BaseVkPhoto, val target: String, @SerializedName("is_favorite") val isFavorite: Boolean -) : BaseVKAttachment() \ No newline at end of file +) : BaseVkAttachment() \ No newline at end of file diff --git a/app/src/main/kotlin/com/meloda/fast/api/model/base/attachments/BaseVkMiniApp.kt b/app/src/main/kotlin/com/meloda/fast/api/model/base/attachments/BaseVkMiniApp.kt new file mode 100644 index 00000000..4c91922b --- /dev/null +++ b/app/src/main/kotlin/com/meloda/fast/api/model/base/attachments/BaseVkMiniApp.kt @@ -0,0 +1,67 @@ +package com.meloda.fast.api.model.base.attachments + +import android.os.Parcelable +import com.google.gson.annotations.SerializedName +import kotlinx.parcelize.Parcelize + +@Parcelize +data class BaseVkMiniApp( + val title: String, + val description: String, + val app: App, + val images: List?, + @SerializedName("button_text") + val buttonText: String +) : Parcelable { + + @Parcelize + data class App( + val type: String, + val id: Int, + val title: String, + @SerializedName("author_owner_id") + val authorOwnerId: Int, + @SerializedName("are_notifications_enabled") + val areNotificationsEnabled: Boolean, + @SerializedName("is_favorite") + val isFavorite: Boolean, + @SerializedName("is_installed") + val isInstalled: Boolean, + @SerializedName("track_code") + val trackCode: String, + @SerializedName("share_url") + val shareUrl: String, + @SerializedName("webview_url") + val webViewUrl: String, + @SerializedName("hide_tabbar") + val hideTabBar: Int, + @SerializedName("icon_75") + val icon75: String?, + @SerializedName("icon_139") + val icon139: String?, + @SerializedName("icon_150") + val icon150: String?, + @SerializedName("icon_278") + val icon278: String?, + @SerializedName("icon_576") + val icon576: String?, + @SerializedName("open_in_external_browser") + val openInExternalBrowser: Boolean, + @SerializedName("need_policy_confirmation") + val needPolicyConfirmation: Boolean, + @SerializedName("is_vkui_internal") + val isVkUiInternal: Boolean, + @SerializedName("has_vk_connect") + val hasVkConnect: Boolean, + @SerializedName("need_show_bottom_menu_tooltip_on_close") + val needShowBottomMenuTooltipOnClose: Boolean + ) : Parcelable + + @Parcelize + data class Image( + val height: Int, + val width: Int, + val url: String + ) : Parcelable + +} \ No newline at end of file diff --git a/app/src/main/kotlin/com/meloda/fast/api/model/attachments/VKPhotoAttachment.kt b/app/src/main/kotlin/com/meloda/fast/api/model/base/attachments/BaseVkPhoto.kt similarity index 87% rename from app/src/main/kotlin/com/meloda/fast/api/model/attachments/VKPhotoAttachment.kt rename to app/src/main/kotlin/com/meloda/fast/api/model/base/attachments/BaseVkPhoto.kt index a62e4e49..9cb21093 100644 --- a/app/src/main/kotlin/com/meloda/fast/api/model/attachments/VKPhotoAttachment.kt +++ b/app/src/main/kotlin/com/meloda/fast/api/model/base/attachments/BaseVkPhoto.kt @@ -1,11 +1,11 @@ -package com.meloda.fast.api.model.attachments +package com.meloda.fast.api.model.base.attachments import android.os.Parcelable import com.google.gson.annotations.SerializedName import kotlinx.parcelize.Parcelize @Parcelize -data class VKPhotoAttachment( +data class BaseVkPhoto( @SerializedName("album_id") val albumId: Int, val date: Int, @@ -20,7 +20,7 @@ data class VKPhotoAttachment( val text: String, @SerializedName("user_id") val userId: Int? -) : BaseVKAttachment() +) : BaseVkAttachment() @Parcelize data class Size( diff --git a/app/src/main/kotlin/com/meloda/fast/api/model/base/attachments/BaseVkPoll.kt b/app/src/main/kotlin/com/meloda/fast/api/model/base/attachments/BaseVkPoll.kt new file mode 100644 index 00000000..c41aa349 --- /dev/null +++ b/app/src/main/kotlin/com/meloda/fast/api/model/base/attachments/BaseVkPoll.kt @@ -0,0 +1,72 @@ +package com.meloda.fast.api.model.base.attachments + +import android.os.Parcelable +import com.google.gson.annotations.SerializedName +import kotlinx.parcelize.Parcelize + +@Parcelize +data class BaseVkPoll( + val multiple: Boolean, + val id: Int, + val votes: Int, + val anonymous: Boolean, + val closed: Boolean, + @SerializedName("end_date") + val endDate: Int, + @SerializedName("is_board") + val isBoard: Boolean, + @SerializedName("can_vote") + val canVote: Boolean, + @SerializedName("can_edit") + val canEdit: Boolean, + @SerializedName("can_report") + val canReport: Boolean, + @SerializedName("can_share") + val canShare: Boolean, + val created: Int, + @SerializedName("owner_id") + val ownerId: Int, + val question: String, + @SerializedName("disable_unvote") + val disableUnVote: Boolean, + val friends: List?, + @SerializedName("embed_hash") + val embedHash: String, + val answers: List, + @SerializedName("author_id") + val authorId: Int, + val background: Background? +) : Parcelable { + + @Parcelize + data class Friend( + val id: Int + ) : Parcelable + + @Parcelize + data class Answer( + val id: Int, + val rate: Double, + val text: String, + val votes: Int + ) : Parcelable + + @Parcelize + data class Background( + val angle: Int, + val color: String, + val id: Int, + val name: String, + val type: String, + val points: List + ) : Parcelable { + + @Parcelize + data class Point( + val color: String, + val position: Double + ) : Parcelable + + } + +} diff --git a/app/src/main/kotlin/com/meloda/fast/api/model/base/attachments/BaseVkSticker.kt b/app/src/main/kotlin/com/meloda/fast/api/model/base/attachments/BaseVkSticker.kt new file mode 100644 index 00000000..14dfb4a0 --- /dev/null +++ b/app/src/main/kotlin/com/meloda/fast/api/model/base/attachments/BaseVkSticker.kt @@ -0,0 +1,35 @@ +package com.meloda.fast.api.model.base.attachments + +import android.os.Parcelable +import com.google.gson.annotations.SerializedName +import kotlinx.parcelize.Parcelize + +@Parcelize +data class BaseVkSticker( + @SerializedName("product_id") + val productId: Int, + @SerializedName("sticker_id") + val stickerId: Int, + val images: List, + @SerializedName("images_with_background") + val imagesWithBackground: List, + @SerializedName("animation_url") + val animationUrl: String?, + val animations: List? +) : Parcelable { + + @Parcelize + data class Image( + val width: Int, + val height: Int, + val url: String + ) : Parcelable + + @Parcelize + data class Animation( + val type: String, + val url: String + ) : Parcelable + + +} \ No newline at end of file diff --git a/app/src/main/kotlin/com/meloda/fast/api/model/attachments/VKVideoAttachment.kt b/app/src/main/kotlin/com/meloda/fast/api/model/base/attachments/BaseVkVideo.kt similarity index 89% rename from app/src/main/kotlin/com/meloda/fast/api/model/attachments/VKVideoAttachment.kt rename to app/src/main/kotlin/com/meloda/fast/api/model/base/attachments/BaseVkVideo.kt index a6782687..707193dd 100644 --- a/app/src/main/kotlin/com/meloda/fast/api/model/attachments/VKVideoAttachment.kt +++ b/app/src/main/kotlin/com/meloda/fast/api/model/base/attachments/BaseVkVideo.kt @@ -1,11 +1,11 @@ -package com.meloda.fast.api.model.attachments +package com.meloda.fast.api.model.base.attachments import android.os.Parcelable import com.google.gson.annotations.SerializedName import kotlinx.parcelize.Parcelize @Parcelize -data class VKVideoAttachment( +data class BaseVkVideo( val id: Int, val title: String, val width: Int, @@ -47,11 +47,11 @@ data class VKVideoAttachment( val image: List, @SerializedName("first_frame") val firstFrame: List, - val files: List, + val files: File, @SerializedName("timeline_thumbs") val timelineThumbs: TimelineThumbs //ads -) : BaseVKAttachment() { +) : BaseVkAttachment() { @Parcelize data class Image( @@ -71,12 +71,12 @@ data class VKVideoAttachment( @Parcelize data class File( - val mp4_240: String, - val mp4_360: String, - val mp4_480: String, - val mp4_720: String, - val mp4_1080: String, - val mp4_1440: String, + val mp4_240: String?, + val mp4_360: String?, + val mp4_480: String?, + val mp4_720: String?, + val mp4_1080: String?, + val mp4_1440: String?, val hls: String, @SerializedName("dash_uni") val dashUni: String, diff --git a/app/src/main/kotlin/com/meloda/fast/api/model/base/attachments/BaseVkVoiceMessage.kt b/app/src/main/kotlin/com/meloda/fast/api/model/base/attachments/BaseVkVoiceMessage.kt new file mode 100644 index 00000000..745fe162 --- /dev/null +++ b/app/src/main/kotlin/com/meloda/fast/api/model/base/attachments/BaseVkVoiceMessage.kt @@ -0,0 +1,23 @@ +package com.meloda.fast.api.model.base.attachments + +import android.os.Parcelable +import com.google.gson.annotations.SerializedName +import kotlinx.parcelize.Parcelize + +@Parcelize +data class BaseVkVoiceMessage( + val id: Int, + @SerializedName("owner_id") + val ownerId: Int, + val duration: Int, + val waveform: List, + @SerializedName("link_ogg") + val linkOgg: String, + @SerializedName("link_mp3") + val linkMp3: String, + @SerializedName("access_key") + val accessKey: String, + @SerializedName("transcript_state") + val transcriptState: String, + val transcript: String +) : Parcelable \ No newline at end of file diff --git a/app/src/main/kotlin/com/meloda/fast/api/model/base/attachments/BaseVkWall.kt b/app/src/main/kotlin/com/meloda/fast/api/model/base/attachments/BaseVkWall.kt new file mode 100644 index 00000000..8637ccce --- /dev/null +++ b/app/src/main/kotlin/com/meloda/fast/api/model/base/attachments/BaseVkWall.kt @@ -0,0 +1,76 @@ +package com.meloda.fast.api.model.base.attachments + +import android.os.Parcelable +import com.google.gson.annotations.SerializedName +import kotlinx.parcelize.Parcelize + +@Parcelize +data class BaseVkWall( + val id: Int, + @SerializedName("from_id") + val fromId: Int, + @SerializedName("to_id") + val toId: Int, + val date: Int, + val text: String, + val attachments: List?, + @SerializedName("post_source") + val postSource: PostSource, + val comments: Comments, + val likes: Likes, + val reposts: Reposts, + val views: Views, + @SerializedName("is_favorite") + val isFavorite: Boolean, + val donut: Donut, + @SerializedName("access_key") + val accessKey: String, + @SerializedName("short_text_rate") + val shortTextRate: Double +) : Parcelable { + + @Parcelize + data class PostSource( + val type: String, + val platform: String + ) : Parcelable + + @Parcelize + data class Comments( + val count: Int, + @SerializedName("can_post") + val canPost: Int, + @SerializedName("groups_can_post") + val groupsCanPost: Boolean + ) : Parcelable + + @Parcelize + data class Likes( + val count: Int, + @SerializedName("user_likes") + val userLikes: Int, + @SerializedName("can_like") + val canLike: Int, + @SerializedName("can_publish") + val canPublish: Int, + ) : Parcelable + + @Parcelize + data class Reposts( + val count: Int, + @SerializedName("user_reposted") + val userReposted: Int + ) : Parcelable + + @Parcelize + data class Views( + val count: Int + ) : Parcelable + + @Parcelize + data class Donut( + @SerializedName("is_donut") + val isDonut: Boolean + ) : Parcelable + +} \ No newline at end of file diff --git a/app/src/main/kotlin/com/meloda/fast/api/model/base/attachments/BaseVkWallReply.kt b/app/src/main/kotlin/com/meloda/fast/api/model/base/attachments/BaseVkWallReply.kt new file mode 100644 index 00000000..5ec039be --- /dev/null +++ b/app/src/main/kotlin/com/meloda/fast/api/model/base/attachments/BaseVkWallReply.kt @@ -0,0 +1,39 @@ +package com.meloda.fast.api.model.base.attachments + +import android.os.Parcelable +import com.google.gson.annotations.SerializedName +import kotlinx.parcelize.Parcelize + +@Parcelize +data class BaseVkWallReply( + val id: Int, + @SerializedName("from_id") + val fromId: Int, + val date: Int, + val text: String, + @SerializedName("post_id") + val postId: Int, + @SerializedName("owner_id") + val ownerId: Int, + @SerializedName("parents_stack") + val parentsStack: List, + val likes: Likes, + @SerializedName("reply_to_user") + val replyToUser: Int?, + @SerializedName("reply_to_comment") + val replyToComment: Int? +) : Parcelable { + + + @Parcelize + data class Likes( + val count: Int, + @SerializedName("can_like") + val canLike: Int, + @SerializedName("user_likes") + val userLikes: Int, + @SerializedName("can_publish") + val canPublish: Int + ) : Parcelable + +} \ No newline at end of file diff --git a/app/src/main/kotlin/com/meloda/fast/api/model/old/VKAttachments.kt b/app/src/main/kotlin/com/meloda/fast/api/model/old/VKAttachments.kt index d74563c3..6286bb6d 100644 --- a/app/src/main/kotlin/com/meloda/fast/api/model/old/VKAttachments.kt +++ b/app/src/main/kotlin/com/meloda/fast/api/model/old/VKAttachments.kt @@ -18,20 +18,20 @@ object VKAttachments { val jsonObject = attachment.optJSONObject(type.value) ?: continue when (type) { - Type.PHOTO -> attachments.add(VKPhoto(jsonObject)) - Type.AUDIO -> attachments.add(VKAudio(jsonObject)) - Type.VIDEO -> attachments.add(VKVideo(jsonObject)) - Type.DOCUMENT -> attachments.add(VKDocument(jsonObject)) - Type.STICKER -> attachments.add(VKSticker(jsonObject)) - Type.LINK -> attachments.add(VKLink(jsonObject)) - Type.GIFT -> attachments.add(VKGift(jsonObject)) - Type.VOICE_MESSAGE -> attachments.add(VKAudioMessage(jsonObject)) - Type.GRAFFITI -> attachments.add(VKGraffiti(jsonObject)) - Type.POLL -> attachments.add(VKPoll(jsonObject)) +// Type.PHOTO -> attachments.add(oldVKPhoto(jsonObject)) +// Type.AUDIO -> attachments.add(oldVKAudio(jsonObject)) +// Type.VIDEO -> attachments.add(oldVKVideo(jsonObject)) +// Type.DOCUMENT -> attachments.add(oldVKDocument(jsonObject)) +// Type.STICKER -> attachments.add(oldVKSticker(jsonObject)) +// Type.LINK -> attachments.add(oldVKLink(jsonObject)) +// Type.GIFT -> attachments.add(VKGift(jsonObject)) +// Type.VOICE_MESSAGE -> attachments.add(oldVKAudioMessage(jsonObject)) +// Type.GRAFFITI -> attachments.add(VKGraffiti(jsonObject)) + Type.POLL -> attachments.add(oldVKPoll(jsonObject)) Type.CALL -> attachments.add(VKCall(jsonObject)) - Type.WALL_POST -> attachments.add(VKWall(jsonObject)) - Type.WALL_REPLY -> attachments.add(VKComment(jsonObject)) - Type.GEOLOCATION -> attachments.add(VKGeolocation(jsonObject)) +// Type.WALL_POST -> attachments.add(VKWall(jsonObject)) + Type.WALL_REPLY -> attachments.add(oldVKComment(jsonObject)) +// Type.GEOLOCATION -> attachments.add(oldVKGeolocation(jsonObject)) else -> continue } } diff --git a/app/src/main/kotlin/com/meloda/fast/api/model/old/VKLongPollHistory.kt b/app/src/main/kotlin/com/meloda/fast/api/model/old/VKLongPollHistory.kt index a4bf14a6..11219a6b 100644 --- a/app/src/main/kotlin/com/meloda/fast/api/model/old/VKLongPollHistory.kt +++ b/app/src/main/kotlin/com/meloda/fast/api/model/old/VKLongPollHistory.kt @@ -9,6 +9,6 @@ class VKLongPollHistory : VKModel() { private val lpMessages: ArrayList? = null private val messages: ArrayList? = null private val profiles: ArrayList? = null - private val groups: ArrayList? = null //TODO: использовать + private val groups: ArrayList? = null //TODO: использовать } \ No newline at end of file diff --git a/app/src/main/kotlin/com/meloda/fast/api/model/old/VKAudio.kt b/app/src/main/kotlin/com/meloda/fast/api/model/old/oldVKAudio.kt similarity index 95% rename from app/src/main/kotlin/com/meloda/fast/api/model/old/VKAudio.kt rename to app/src/main/kotlin/com/meloda/fast/api/model/old/oldVKAudio.kt index c66e456b..8ee77511 100644 --- a/app/src/main/kotlin/com/meloda/fast/api/model/old/VKAudio.kt +++ b/app/src/main/kotlin/com/meloda/fast/api/model/old/oldVKAudio.kt @@ -2,7 +2,7 @@ package com.meloda.fast.api.model.old import org.json.JSONObject -class VKAudio() : VKModel() { +class oldVKAudio() : VKModel() { companion object { const val serialVersionUID: Long = 1L diff --git a/app/src/main/kotlin/com/meloda/fast/api/model/old/VKAudioMessage.kt b/app/src/main/kotlin/com/meloda/fast/api/model/old/oldVKAudioMessage.kt similarity index 94% rename from app/src/main/kotlin/com/meloda/fast/api/model/old/VKAudioMessage.kt rename to app/src/main/kotlin/com/meloda/fast/api/model/old/oldVKAudioMessage.kt index cf0690e3..0d17f961 100644 --- a/app/src/main/kotlin/com/meloda/fast/api/model/old/VKAudioMessage.kt +++ b/app/src/main/kotlin/com/meloda/fast/api/model/old/oldVKAudioMessage.kt @@ -2,7 +2,7 @@ package com.meloda.fast.api.model.old import org.json.JSONObject -class VKAudioMessage() : VKModel() { +class oldVKAudioMessage() : VKModel() { companion object { const val serialVersionUID: Long = 1L diff --git a/app/src/main/kotlin/com/meloda/fast/api/model/old/VKComment.kt b/app/src/main/kotlin/com/meloda/fast/api/model/old/oldVKComment.kt similarity index 77% rename from app/src/main/kotlin/com/meloda/fast/api/model/old/VKComment.kt rename to app/src/main/kotlin/com/meloda/fast/api/model/old/oldVKComment.kt index 018f33de..9cc11bcc 100644 --- a/app/src/main/kotlin/com/meloda/fast/api/model/old/VKComment.kt +++ b/app/src/main/kotlin/com/meloda/fast/api/model/old/oldVKComment.kt @@ -2,7 +2,7 @@ package com.meloda.fast.api.model.old import org.json.JSONObject -class VKComment() : VKModel() { //https://vk.com/dev/objects/comment +class oldVKComment() : VKModel() { //https://vk.com/dev/objects/comment companion object { const val serialVersionUID: Long = 1L diff --git a/app/src/main/kotlin/com/meloda/fast/api/model/old/oldVKConversation.kt b/app/src/main/kotlin/com/meloda/fast/api/model/old/oldVKConversation.kt index 951e90be..56f01e67 100644 --- a/app/src/main/kotlin/com/meloda/fast/api/model/old/oldVKConversation.kt +++ b/app/src/main/kotlin/com/meloda/fast/api/model/old/oldVKConversation.kt @@ -10,7 +10,7 @@ class oldVKConversation() : VKModel(), Cloneable { const val serialVersionUID: Long = 1L var profiles = arrayListOf() - var groups = arrayListOf() + var groups = arrayListOf() var conversationsCount: Int = 0 @@ -56,7 +56,7 @@ class oldVKConversation() : VKModel(), Cloneable { var peerUser: oldVKUser? = null - var peerGroup: VKGroup? = null + var peerGroup: oldVKGroup? = null constructor(o: JSONObject) : this() { inReadMessageId = o.optInt("in_read") diff --git a/app/src/main/kotlin/com/meloda/fast/api/model/old/VKDocument.kt b/app/src/main/kotlin/com/meloda/fast/api/model/old/oldVKDocument.kt similarity index 90% rename from app/src/main/kotlin/com/meloda/fast/api/model/old/VKDocument.kt rename to app/src/main/kotlin/com/meloda/fast/api/model/old/oldVKDocument.kt index 83a4ec14..88ff6170 100644 --- a/app/src/main/kotlin/com/meloda/fast/api/model/old/VKDocument.kt +++ b/app/src/main/kotlin/com/meloda/fast/api/model/old/oldVKDocument.kt @@ -4,7 +4,7 @@ import org.json.JSONObject import java.io.Serializable import java.util.* -class VKDocument() : VKModel() { +class oldVKDocument() : VKModel() { override val attachmentType = VKAttachments.Type.DOCUMENT @@ -47,13 +47,13 @@ class VKDocument() : VKModel() { inner class Photo(o: JSONObject) : Serializable { - var sizes: ArrayList? = null + var sizes: ArrayList? = null init { o.optJSONArray("sizes")?.let { - val sizes = ArrayList() + val sizes = ArrayList() for (i in 0 until it.length()) { - sizes.add(VKPhotoSize(it.optJSONObject(i))) + sizes.add(oldVKPhotoSize(it.optJSONObject(i))) } this.sizes = sizes } diff --git a/app/src/main/kotlin/com/meloda/fast/api/model/old/VKGeolocation.kt b/app/src/main/kotlin/com/meloda/fast/api/model/old/oldVKGeolocation.kt similarity index 86% rename from app/src/main/kotlin/com/meloda/fast/api/model/old/VKGeolocation.kt rename to app/src/main/kotlin/com/meloda/fast/api/model/old/oldVKGeolocation.kt index 3715f101..ad912543 100644 --- a/app/src/main/kotlin/com/meloda/fast/api/model/old/VKGeolocation.kt +++ b/app/src/main/kotlin/com/meloda/fast/api/model/old/oldVKGeolocation.kt @@ -2,7 +2,7 @@ package com.meloda.fast.api.model.old import org.json.JSONObject -class VKGeolocation() : VKModel() { +class oldVKGeolocation() : VKModel() { companion object { const val serialVersionUID: Long = 1L diff --git a/app/src/main/kotlin/com/meloda/fast/api/model/old/VKGift.kt b/app/src/main/kotlin/com/meloda/fast/api/model/old/oldVKGift.kt similarity index 94% rename from app/src/main/kotlin/com/meloda/fast/api/model/old/VKGift.kt rename to app/src/main/kotlin/com/meloda/fast/api/model/old/oldVKGift.kt index 3bb9b73d..693e1c76 100644 --- a/app/src/main/kotlin/com/meloda/fast/api/model/old/VKGift.kt +++ b/app/src/main/kotlin/com/meloda/fast/api/model/old/oldVKGift.kt @@ -2,7 +2,7 @@ package com.meloda.fast.api.model.old import org.json.JSONObject -class VKGift() : VKModel() { +class oldVKGift() : VKModel() { companion object { const val serialVersionUID: Long = 1L diff --git a/app/src/main/kotlin/com/meloda/fast/api/model/old/VKGraffiti.kt b/app/src/main/kotlin/com/meloda/fast/api/model/old/oldVKGraffiti.kt similarity index 94% rename from app/src/main/kotlin/com/meloda/fast/api/model/old/VKGraffiti.kt rename to app/src/main/kotlin/com/meloda/fast/api/model/old/oldVKGraffiti.kt index e6dba70b..d439565b 100644 --- a/app/src/main/kotlin/com/meloda/fast/api/model/old/VKGraffiti.kt +++ b/app/src/main/kotlin/com/meloda/fast/api/model/old/oldVKGraffiti.kt @@ -2,7 +2,7 @@ package com.meloda.fast.api.model.old import org.json.JSONObject -class VKGraffiti() : VKModel() { +class oldVKGraffiti() : VKModel() { companion object { const val serialVersionUID: Long = 1L diff --git a/app/src/main/kotlin/com/meloda/fast/api/model/old/VKGroup.kt b/app/src/main/kotlin/com/meloda/fast/api/model/old/oldVKGroup.kt similarity index 85% rename from app/src/main/kotlin/com/meloda/fast/api/model/old/VKGroup.kt rename to app/src/main/kotlin/com/meloda/fast/api/model/old/oldVKGroup.kt index a60f06a1..d2ededfa 100644 --- a/app/src/main/kotlin/com/meloda/fast/api/model/old/VKGroup.kt +++ b/app/src/main/kotlin/com/meloda/fast/api/model/old/oldVKGroup.kt @@ -3,7 +3,7 @@ package com.meloda.fast.api.model.old import org.json.JSONArray import org.json.JSONObject -open class VKGroup() : VKModel() { +open class oldVKGroup() : VKModel() { override val attachmentType = VKAttachments.Type.NONE @@ -11,11 +11,11 @@ open class VKGroup() : VKModel() { const val serialVersionUID: Long = 1L - fun parse(array: JSONArray): ArrayList { - val groups = ArrayList() + fun parse(array: JSONArray): ArrayList { + val groups = ArrayList() for (i in 0 until array.length()) { - groups.add(VKGroup(array.optJSONObject(i))) + groups.add(oldVKGroup(array.optJSONObject(i))) } return groups } diff --git a/app/src/main/kotlin/com/meloda/fast/api/model/old/VKLink.kt b/app/src/main/kotlin/com/meloda/fast/api/model/old/oldVKLink.kt similarity index 92% rename from app/src/main/kotlin/com/meloda/fast/api/model/old/VKLink.kt rename to app/src/main/kotlin/com/meloda/fast/api/model/old/oldVKLink.kt index 605fa4ca..e11c3ba8 100644 --- a/app/src/main/kotlin/com/meloda/fast/api/model/old/VKLink.kt +++ b/app/src/main/kotlin/com/meloda/fast/api/model/old/oldVKLink.kt @@ -3,7 +3,7 @@ package com.meloda.fast.api.model.old import org.json.JSONObject import java.io.Serializable -class VKLink() : VKModel() { +class oldVKLink() : VKModel() { companion object { const val serialVersionUID: Long = 1L @@ -17,7 +17,7 @@ class VKLink() : VKModel() { var description: String = "" var previewPage: String = "" var previewUrl: String = "" - var photo: VKPhoto? = null + var photo: oldVKPhoto? = null var button: Button? = null constructor(o: JSONObject): this() { @@ -29,7 +29,7 @@ class VKLink() : VKModel() { previewUrl = o.optString("preview_url") o.optJSONObject("photo")?.let { - photo = VKPhoto(it) + photo = oldVKPhoto(it) } o.optJSONObject("button")?.let { diff --git a/app/src/main/kotlin/com/meloda/fast/api/model/old/oldVKMessage.kt b/app/src/main/kotlin/com/meloda/fast/api/model/old/oldVKMessage.kt index bcd8da1d..00519819 100644 --- a/app/src/main/kotlin/com/meloda/fast/api/model/old/oldVKMessage.kt +++ b/app/src/main/kotlin/com/meloda/fast/api/model/old/oldVKMessage.kt @@ -1,7 +1,7 @@ package com.meloda.fast.api.model.old import android.util.ArrayMap -import com.meloda.fast.api.VKUtil +import com.meloda.fast.api.oldVKUtil import org.json.JSONObject open class oldVKMessage() : VKModel() { @@ -11,7 +11,7 @@ open class oldVKMessage() : VKModel() { companion object { var profiles = arrayListOf() - var groups = arrayListOf() + var groups = arrayListOf() var conversations = arrayListOf() const val serialVersionUID: Long = 1L @@ -101,11 +101,11 @@ open class oldVKMessage() : VKModel() { var replyMessage: oldVKMessage? = null - var action: VKMessageAction? = null + var action: oldVKMessageAction? = null var fromUser: oldVKUser? = null - var fromGroup: VKGroup? = null + var fromGroup: oldVKGroup? = null constructor(o: JSONObject) : this() { id = o.optInt("id", -1) @@ -115,7 +115,7 @@ open class oldVKMessage() : VKModel() { editTime = o.optInt("edit_time", -1) isOut = o.optInt("out") == 1 - text = VKUtil.prepareMessageText(o.optString("text")) + text = oldVKUtil.prepareMessageText(o.optString("text")) randomId = o.optInt("random_id", -1) conversationMessageId = o.optInt("conversation_message_id", -1) @@ -138,7 +138,7 @@ open class oldVKMessage() : VKModel() { } o.optJSONObject("action")?.let { - action = VKMessageAction(it) + action = oldVKMessageAction(it) } } diff --git a/app/src/main/kotlin/com/meloda/fast/api/model/old/VKMessageAction.kt b/app/src/main/kotlin/com/meloda/fast/api/model/old/oldVKMessageAction.kt similarity index 97% rename from app/src/main/kotlin/com/meloda/fast/api/model/old/VKMessageAction.kt rename to app/src/main/kotlin/com/meloda/fast/api/model/old/oldVKMessageAction.kt index e875ad65..cdd3e473 100644 --- a/app/src/main/kotlin/com/meloda/fast/api/model/old/VKMessageAction.kt +++ b/app/src/main/kotlin/com/meloda/fast/api/model/old/oldVKMessageAction.kt @@ -2,7 +2,7 @@ package com.meloda.fast.api.model.old import org.json.JSONObject -class VKMessageAction() : VKModel() { +class oldVKMessageAction() : VKModel() { companion object { const val serialVersionUID: Long = 1L diff --git a/app/src/main/kotlin/com/meloda/fast/api/model/old/VKPhoto.kt b/app/src/main/kotlin/com/meloda/fast/api/model/old/oldVKPhoto.kt similarity index 80% rename from app/src/main/kotlin/com/meloda/fast/api/model/old/VKPhoto.kt rename to app/src/main/kotlin/com/meloda/fast/api/model/old/oldVKPhoto.kt index 0fe72342..0e9c8fcb 100644 --- a/app/src/main/kotlin/com/meloda/fast/api/model/old/VKPhoto.kt +++ b/app/src/main/kotlin/com/meloda/fast/api/model/old/oldVKPhoto.kt @@ -3,7 +3,7 @@ package com.meloda.fast.api.model.old import org.json.JSONObject import java.util.* -class VKPhoto() : VKModel() { +class oldVKPhoto() : VKModel() { companion object { const val serialVersionUID: Long = 1L @@ -18,7 +18,7 @@ class VKPhoto() : VKModel() { var date: Int = 0 var width: Int = 0 var height: Int = 0 - var sizes: ArrayList? = null + var sizes: ArrayList? = null constructor(o: JSONObject) : this() { id = o.optInt("id", -1) @@ -30,9 +30,9 @@ class VKPhoto() : VKModel() { height = o.optInt("height") o.optJSONArray("sizes")?.let { - val sizes = ArrayList() + val sizes = ArrayList() for (i in 0 until it.length()) { - sizes.add(VKPhotoSize(it.optJSONObject(i))) + sizes.add(oldVKPhotoSize(it.optJSONObject(i))) } this.sizes = sizes } diff --git a/app/src/main/kotlin/com/meloda/fast/api/model/old/VKPhotoSize.kt b/app/src/main/kotlin/com/meloda/fast/api/model/old/oldVKPhotoSize.kt similarity index 88% rename from app/src/main/kotlin/com/meloda/fast/api/model/old/VKPhotoSize.kt rename to app/src/main/kotlin/com/meloda/fast/api/model/old/oldVKPhotoSize.kt index 94cd6c70..675bf6b7 100644 --- a/app/src/main/kotlin/com/meloda/fast/api/model/old/VKPhotoSize.kt +++ b/app/src/main/kotlin/com/meloda/fast/api/model/old/oldVKPhotoSize.kt @@ -2,7 +2,7 @@ package com.meloda.fast.api.model.old import org.json.JSONObject -class VKPhotoSize(o: JSONObject) : VKModel() { +class oldVKPhotoSize(o: JSONObject) : VKModel() { companion object { const val serialVersionUID: Long = 1L diff --git a/app/src/main/kotlin/com/meloda/fast/api/model/old/VKPoll.kt b/app/src/main/kotlin/com/meloda/fast/api/model/old/oldVKPoll.kt similarity index 97% rename from app/src/main/kotlin/com/meloda/fast/api/model/old/VKPoll.kt rename to app/src/main/kotlin/com/meloda/fast/api/model/old/oldVKPoll.kt index 0d5cd9eb..4427243b 100644 --- a/app/src/main/kotlin/com/meloda/fast/api/model/old/VKPoll.kt +++ b/app/src/main/kotlin/com/meloda/fast/api/model/old/oldVKPoll.kt @@ -2,7 +2,7 @@ package com.meloda.fast.api.model.old import org.json.JSONObject -class VKPoll() : VKModel() { +class oldVKPoll() : VKModel() { companion object { const val serialVersionUID: Long = 1L diff --git a/app/src/main/kotlin/com/meloda/fast/api/model/old/VKSticker.kt b/app/src/main/kotlin/com/meloda/fast/api/model/old/oldVKSticker.kt similarity index 96% rename from app/src/main/kotlin/com/meloda/fast/api/model/old/VKSticker.kt rename to app/src/main/kotlin/com/meloda/fast/api/model/old/oldVKSticker.kt index 5fd582e1..954340f8 100644 --- a/app/src/main/kotlin/com/meloda/fast/api/model/old/VKSticker.kt +++ b/app/src/main/kotlin/com/meloda/fast/api/model/old/oldVKSticker.kt @@ -3,7 +3,7 @@ package com.meloda.fast.api.model.old import org.json.JSONObject import java.util.* -class VKSticker() : VKModel() { +class oldVKSticker() : VKModel() { companion object { const val serialVersionUID: Long = 1L diff --git a/app/src/main/kotlin/com/meloda/fast/api/model/old/VKVideo.kt b/app/src/main/kotlin/com/meloda/fast/api/model/old/oldVKVideo.kt similarity index 98% rename from app/src/main/kotlin/com/meloda/fast/api/model/old/VKVideo.kt rename to app/src/main/kotlin/com/meloda/fast/api/model/old/oldVKVideo.kt index 4bf58508..8423c877 100644 --- a/app/src/main/kotlin/com/meloda/fast/api/model/old/VKVideo.kt +++ b/app/src/main/kotlin/com/meloda/fast/api/model/old/oldVKVideo.kt @@ -4,7 +4,7 @@ import com.meloda.fast.api.model.old.VKAttachments import com.meloda.fast.api.model.old.VKModel import org.json.JSONObject -class VKVideo() : VKModel() { +class oldVKVideo() : VKModel() { companion object { const val serialVersionUID: Long = 1L diff --git a/app/src/main/kotlin/com/meloda/fast/api/model/old/VKWall.kt b/app/src/main/kotlin/com/meloda/fast/api/model/old/oldVKWall.kt similarity index 79% rename from app/src/main/kotlin/com/meloda/fast/api/model/old/VKWall.kt rename to app/src/main/kotlin/com/meloda/fast/api/model/old/oldVKWall.kt index 469426fa..640ffc85 100644 --- a/app/src/main/kotlin/com/meloda/fast/api/model/old/VKWall.kt +++ b/app/src/main/kotlin/com/meloda/fast/api/model/old/oldVKWall.kt @@ -2,7 +2,7 @@ package com.meloda.fast.api.model.old import org.json.JSONObject -class VKWall() : VKModel() { //https://vk.com/dev/objects/post +class oldVKWall() : VKModel() { //https://vk.com/dev/objects/post companion object { const val serialVersionUID: Long = 1L diff --git a/app/src/main/kotlin/com/meloda/fast/api/network/repo/ConversationsRepo.kt b/app/src/main/kotlin/com/meloda/fast/api/network/repo/ConversationsRepo.kt index 62ee65b8..882d8ee9 100644 --- a/app/src/main/kotlin/com/meloda/fast/api/network/repo/ConversationsRepo.kt +++ b/app/src/main/kotlin/com/meloda/fast/api/network/repo/ConversationsRepo.kt @@ -3,14 +3,15 @@ package com.meloda.fast.api.network.repo import com.meloda.fast.api.base.ApiResponse import com.meloda.fast.api.network.Answer import com.meloda.fast.api.network.VKUrls -import com.meloda.fast.api.network.request.ConversationsGetRequest import com.meloda.fast.api.network.response.ConversationsGetResponse -import retrofit2.http.Body +import retrofit2.http.FieldMap +import retrofit2.http.FormUrlEncoded import retrofit2.http.POST interface ConversationsRepo { + @FormUrlEncoded @POST(VKUrls.Conversations.get) - suspend fun getAllChats(@Body params: ConversationsGetRequest): Answer> + suspend fun getAllChats(@FieldMap params: Map): Answer> } \ No newline at end of file diff --git a/app/src/main/kotlin/com/meloda/fast/api/network/repo/UsersRepo.kt b/app/src/main/kotlin/com/meloda/fast/api/network/repo/UsersRepo.kt index 3a705312..4df465d4 100644 --- a/app/src/main/kotlin/com/meloda/fast/api/network/repo/UsersRepo.kt +++ b/app/src/main/kotlin/com/meloda/fast/api/network/repo/UsersRepo.kt @@ -4,12 +4,16 @@ import com.meloda.fast.api.base.ApiResponse import com.meloda.fast.api.model.base.BaseVkUser import com.meloda.fast.api.network.Answer import com.meloda.fast.api.network.VKUrls -import retrofit2.http.GET -import retrofit2.http.QueryMap +import retrofit2.http.FieldMap +import retrofit2.http.FormUrlEncoded +import retrofit2.http.POST interface UsersRepo { - @GET(VKUrls.Users.getById) - suspend fun getById(@QueryMap params: Map): Answer>> + @FormUrlEncoded + @POST(VKUrls.Users.getById) + suspend fun getById( + @FieldMap params: Map? + ): Answer>> } \ No newline at end of file diff --git a/app/src/main/kotlin/com/meloda/fast/api/network/request/ConversationsRequest.kt b/app/src/main/kotlin/com/meloda/fast/api/network/request/ConversationsRequest.kt index 46a3275e..f612d7e5 100644 --- a/app/src/main/kotlin/com/meloda/fast/api/network/request/ConversationsRequest.kt +++ b/app/src/main/kotlin/com/meloda/fast/api/network/request/ConversationsRequest.kt @@ -13,4 +13,16 @@ data class ConversationsGetRequest( val extended: Boolean? = true, @SerializedName("start_message_id") val startMessageId: Int? = null -) : Parcelable \ No newline at end of file +) : Parcelable { + + val map + get() = mutableMapOf( + "fields" to fields, + "filter" to filter + ).apply { + count?.let { this["count"] = it.toString() } + offset?.let { this["offset"] = it.toString() } + extended?.let { this["extended"] = it.toString() } + startMessageId?.let { this["start_message_id"] = it.toString() } + } +} \ No newline at end of file diff --git a/app/src/main/kotlin/com/meloda/fast/api/network/request/UsersRequest.kt b/app/src/main/kotlin/com/meloda/fast/api/network/request/UsersRequest.kt index adeb00f8..053fc785 100644 --- a/app/src/main/kotlin/com/meloda/fast/api/network/request/UsersRequest.kt +++ b/app/src/main/kotlin/com/meloda/fast/api/network/request/UsersRequest.kt @@ -5,17 +5,17 @@ import kotlinx.parcelize.Parcelize @Parcelize data class UsersGetRequest( - val usersIds: List, + val usersIds: List? = null, val fields: String? = null, val nomCase: String? = null ) : Parcelable { val map - get() = mutableMapOf( - "user_ids" to usersIds.joinToString { it.toString() } - ).apply { - fields?.let { this["fields"] = it } - nomCase?.let { this["nom_case"] = it } - } + get() = mutableMapOf() + .apply { + usersIds?.let { this["user_ids"] = it.joinToString { id -> id.toString() } } + fields?.let { this["fields"] = it } + nomCase?.let { this["nom_case"] = it } + } } \ No newline at end of file diff --git a/app/src/main/kotlin/com/meloda/fast/api/network/response/ConversationsResponse.kt b/app/src/main/kotlin/com/meloda/fast/api/network/response/ConversationsResponse.kt index f4cce0a3..ce9bc2f6 100644 --- a/app/src/main/kotlin/com/meloda/fast/api/network/response/ConversationsResponse.kt +++ b/app/src/main/kotlin/com/meloda/fast/api/network/response/ConversationsResponse.kt @@ -3,7 +3,9 @@ package com.meloda.fast.api.network.response import android.os.Parcelable import com.google.gson.annotations.SerializedName import com.meloda.fast.api.model.base.BaseVkConversation +import com.meloda.fast.api.model.base.BaseVkGroup import com.meloda.fast.api.model.base.BaseVkMessage +import com.meloda.fast.api.model.base.BaseVkUser import kotlinx.parcelize.Parcelize @Parcelize @@ -11,7 +13,9 @@ data class ConversationsGetResponse( val count: Int, val items: List, @SerializedName("unread_count") - val unreadCount: Int? + val unreadCount: Int?, + val profiles: List?, + val groups: List? ) : Parcelable @Parcelize diff --git a/app/src/main/kotlin/com/meloda/fast/api/VKUtil.kt b/app/src/main/kotlin/com/meloda/fast/api/oldVKUtil.kt similarity index 91% rename from app/src/main/kotlin/com/meloda/fast/api/VKUtil.kt rename to app/src/main/kotlin/com/meloda/fast/api/oldVKUtil.kt index c7e22979..c2bc1aa5 100644 --- a/app/src/main/kotlin/com/meloda/fast/api/VKUtil.kt +++ b/app/src/main/kotlin/com/meloda/fast/api/oldVKUtil.kt @@ -10,7 +10,7 @@ import java.text.SimpleDateFormat import java.util.* // TODO: 8/31/2021 review -object VKUtil { +object oldVKUtil { private const val TAG = "VKUtil" @@ -122,7 +122,7 @@ object VKUtil { fun getTitle( conversation: oldVKConversation, peerUser: oldVKUser?, - peerGroup: VKGroup? + peerGroup: oldVKGroup? ): String { return when { conversation.isUser() -> peerUser?.let { return it.toString() } ?: "" @@ -140,7 +140,7 @@ object VKUtil { fun getMessageTitle( message: oldVKMessage, fromUser: oldVKUser?, - fromGroup: VKGroup? + fromGroup: oldVKGroup? ): String { return when { message.isFromUser() -> { @@ -158,7 +158,7 @@ object VKUtil { fun getAvatar( conversation: oldVKConversation, peerUser: oldVKUser?, - peerGroup: VKGroup? + peerGroup: oldVKGroup? ): String { return when { conversation.isUser() -> { @@ -180,7 +180,7 @@ object VKUtil { fun getUserAvatar( message: oldVKMessage, fromUser: oldVKUser?, - fromGroup: VKGroup? + fromGroup: oldVKGroup? ): String { return when { message.isFromUser() -> { @@ -211,7 +211,7 @@ object VKUtil { return "" } - fun getGroupPhoto(group: VKGroup): String { + fun getGroupPhoto(group: oldVKGroup): String { if (group.photo200.isEmpty()) { if (group.photo100.isEmpty()) { if (group.photo50.isEmpty()) { @@ -286,19 +286,19 @@ object VKUtil { } if (it.has("source_act")) { - message.action = VKMessageAction().also { action -> + message.action = oldVKMessageAction().also { action -> action.type = - VKMessageAction.Type.fromString(it.optString("source_act")) + oldVKMessageAction.Type.fromString(it.optString("source_act")) when (action.type) { - VKMessageAction.Type.CHAT_CREATE -> { + oldVKMessageAction.Type.CHAT_CREATE -> { action.text = it.optString("source_text") } - VKMessageAction.Type.TITLE_UPDATE -> { + oldVKMessageAction.Type.TITLE_UPDATE -> { action.oldText = it.optString("source_old_text") action.text = it.optString("source_text") } - VKMessageAction.Type.PIN_MESSAGE -> { + oldVKMessageAction.Type.PIN_MESSAGE -> { action.memberId = it.optInt("source_mid") action.conversationMessageId = it.optInt("source_chat_local_id") @@ -306,14 +306,14 @@ object VKUtil { action.message = oldVKMessage(message) } } - VKMessageAction.Type.UNPIN_MESSAGE -> { + oldVKMessageAction.Type.UNPIN_MESSAGE -> { action.memberId = it.optInt("source_mid") action.conversationMessageId = it.optInt("source_chat_local_id") } - VKMessageAction.Type.INVITE_USER, - VKMessageAction.Type.KICK_USER, - VKMessageAction.Type.SCREENSHOT, - VKMessageAction.Type.INVITE_USER_BY_CALL -> { + oldVKMessageAction.Type.INVITE_USER, + oldVKMessageAction.Type.KICK_USER, + oldVKMessageAction.Type.SCREENSHOT, + oldVKMessageAction.Type.INVITE_USER_BY_CALL -> { action.memberId = it.optInt("source_mid") } } diff --git a/app/src/main/kotlin/com/meloda/fast/database/AppDatabase.kt b/app/src/main/kotlin/com/meloda/fast/database/AppDatabase.kt index ea6abb31..523e3adf 100644 --- a/app/src/main/kotlin/com/meloda/fast/database/AppDatabase.kt +++ b/app/src/main/kotlin/com/meloda/fast/database/AppDatabase.kt @@ -3,9 +3,11 @@ package com.meloda.fast.database import androidx.room.Database import androidx.room.RoomDatabase import com.meloda.fast.api.model.VkConversation +import com.meloda.fast.api.model.VkGroup import com.meloda.fast.api.model.VkMessage import com.meloda.fast.api.model.VkUser import com.meloda.fast.database.dao.ConversationsDao +import com.meloda.fast.database.dao.GroupsDao import com.meloda.fast.database.dao.MessagesDao import com.meloda.fast.database.dao.UsersDao @@ -13,9 +15,10 @@ import com.meloda.fast.database.dao.UsersDao entities = [ VkConversation::class, VkMessage::class, - VkUser::class + VkUser::class, + VkGroup::class ], - version = 1, + version = 8, exportSchema = false ) abstract class AppDatabase : RoomDatabase() { @@ -23,5 +26,6 @@ abstract class AppDatabase : RoomDatabase() { abstract fun conversationsDao(): ConversationsDao abstract fun messagesDao(): MessagesDao abstract fun usersDao(): UsersDao + abstract fun groupsDao(): GroupsDao } \ No newline at end of file diff --git a/app/src/main/kotlin/com/meloda/fast/database/dao/ConversationsDao.kt b/app/src/main/kotlin/com/meloda/fast/database/dao/ConversationsDao.kt index 01c1589a..218dcd15 100644 --- a/app/src/main/kotlin/com/meloda/fast/database/dao/ConversationsDao.kt +++ b/app/src/main/kotlin/com/meloda/fast/database/dao/ConversationsDao.kt @@ -1,8 +1,20 @@ package com.meloda.fast.database.dao import androidx.room.Dao +import androidx.room.Insert +import androidx.room.OnConflictStrategy +import androidx.room.Query import com.meloda.fast.api.model.VkConversation @Dao -interface ConversationsDao : KindaDao { +interface ConversationsDao { + + @Query("SELECT * FROM conversations") + suspend fun getAll(): List + + @Insert(onConflict = OnConflictStrategy.REPLACE) + suspend fun insert(values: List) + + suspend fun insert(values: Array) = insert(values.toList()) + } \ No newline at end of file diff --git a/app/src/main/kotlin/com/meloda/fast/database/dao/GroupsDao.kt b/app/src/main/kotlin/com/meloda/fast/database/dao/GroupsDao.kt new file mode 100644 index 00000000..963c7b22 --- /dev/null +++ b/app/src/main/kotlin/com/meloda/fast/database/dao/GroupsDao.kt @@ -0,0 +1,23 @@ +package com.meloda.fast.database.dao + +import androidx.room.Dao +import androidx.room.Insert +import androidx.room.OnConflictStrategy +import androidx.room.Query +import com.meloda.fast.api.model.VkGroup + +@Dao +interface GroupsDao { + + @Query("SELECT * FROM groups") + suspend fun getAll(): List + + @Query("SELECT * FROM groups WHERE id = :id") + suspend fun getById(id: Int): VkGroup? + + @Insert(onConflict = OnConflictStrategy.REPLACE) + suspend fun insert(values: List) + + suspend fun insert(values: Array) = insert(values.toList()) + +} \ No newline at end of file diff --git a/app/src/main/kotlin/com/meloda/fast/database/dao/UsersDao.kt b/app/src/main/kotlin/com/meloda/fast/database/dao/UsersDao.kt index 819bec91..0d7801b1 100644 --- a/app/src/main/kotlin/com/meloda/fast/database/dao/UsersDao.kt +++ b/app/src/main/kotlin/com/meloda/fast/database/dao/UsersDao.kt @@ -9,12 +9,15 @@ import com.meloda.fast.api.model.VkUser @Dao interface UsersDao { - @Insert(onConflict = OnConflictStrategy.REPLACE) - suspend fun insert(values: List) - @Query("SELECT * FROM users") suspend fun getAll(): List + @Query("SELECT * FROM users WHERE id = :id") + suspend fun getById(id: Int): VkUser? + + @Insert(onConflict = OnConflictStrategy.REPLACE) + suspend fun insert(values: List) + suspend fun insert(values: Array) = insert(values.toList()) } \ No newline at end of file diff --git a/app/src/main/kotlin/com/meloda/fast/database/old/storage/ChatsStorage.kt b/app/src/main/kotlin/com/meloda/fast/database/old/storage/ChatsStorage.kt index 2c01c18c..ea799adf 100644 --- a/app/src/main/kotlin/com/meloda/fast/database/old/storage/ChatsStorage.kt +++ b/app/src/main/kotlin/com/meloda/fast/database/old/storage/ChatsStorage.kt @@ -26,7 +26,7 @@ import com.meloda.fast.database.old.DatabaseKeys.UNREAD_COUNT import com.meloda.fast.database.old.DatabaseUtils.TABLE_CHATS import com.meloda.fast.database.old.base.Storage import com.meloda.fast.api.model.old.oldVKConversation -import com.meloda.fast.api.VKUtil +import com.meloda.fast.api.oldVKUtil import org.json.JSONObject @WorkerThread @@ -86,7 +86,7 @@ class ChatsStorage : Storage() { values.put( PHOTOS, - VKUtil.putPhotosToJson( + oldVKUtil.putPhotosToJson( value.photo50, value.photo100, value.photo200 @@ -130,7 +130,7 @@ class ChatsStorage : Storage() { val lastMessage = messagesStorage.getMessageById(conversation.lastMessageId) if (lastMessage != null) conversation.lastMessage = lastMessage - val photos = VKUtil.parseJsonPhotos(JSONObject(CacheStorage.getString(cursor, PHOTOS))) + val photos = oldVKUtil.parseJsonPhotos(JSONObject(CacheStorage.getString(cursor, PHOTOS))) conversation.photo50 = photos[0] conversation.photo100 = photos[1] conversation.photo200 = photos[2] diff --git a/app/src/main/kotlin/com/meloda/fast/database/old/storage/GroupsStorage.kt b/app/src/main/kotlin/com/meloda/fast/database/old/storage/GroupsStorage.kt index 4350fc1d..1c779bcd 100644 --- a/app/src/main/kotlin/com/meloda/fast/database/old/storage/GroupsStorage.kt +++ b/app/src/main/kotlin/com/meloda/fast/database/old/storage/GroupsStorage.kt @@ -17,19 +17,19 @@ import com.meloda.fast.database.old.DatabaseKeys.SCREEN_NAME import com.meloda.fast.database.old.DatabaseKeys.TYPE import com.meloda.fast.database.old.DatabaseUtils.TABLE_GROUPS import com.meloda.fast.database.old.base.Storage -import com.meloda.fast.api.model.old.VKGroup -import com.meloda.fast.api.VKUtil +import com.meloda.fast.api.model.old.oldVKGroup +import com.meloda.fast.api.oldVKUtil import org.json.JSONObject -class GroupsStorage : Storage() { +class GroupsStorage : Storage() { override val tag = "GroupsStorage" @WorkerThread - fun getGroups(ids: IntArray): ArrayList { + fun getGroups(ids: IntArray): ArrayList { val cursor = CacheStorage.selectCursor(TABLE_GROUPS, GROUP_ID, ids) - val groups = ArrayList(cursor.count) + val groups = ArrayList(cursor.count) while (cursor.moveToNext()) groups.add(parseValue(cursor)) cursor.close() @@ -37,15 +37,15 @@ class GroupsStorage : Storage() { } @WorkerThread - fun getGroup(userId: Int): VKGroup? { + fun getGroup(userId: Int): oldVKGroup? { val group = getGroups(intArrayOf(userId)) return if (group.isNotEmpty()) group[0] else null } - override fun getAllValues(): ArrayList { + override fun getAllValues(): ArrayList { val cursor = CacheStorage.selectCursor(TABLE_GROUPS) - val groups = ArrayList() + val groups = ArrayList() while (cursor.moveToNext()) groups.add(parseValue(cursor)) @@ -54,7 +54,7 @@ class GroupsStorage : Storage() { return groups } - override fun insertValues(values: ArrayList, params: Bundle?) { + override fun insertValues(values: ArrayList, params: Bundle?) { if (values.isEmpty()) return database.beginTransaction() @@ -75,7 +75,7 @@ class GroupsStorage : Storage() { Log.d(tag, "Successful cached groups") } - override fun cacheValue(values: ContentValues, value: VKGroup, params: Bundle?) { + override fun cacheValue(values: ContentValues, value: oldVKGroup, params: Bundle?) { values.put(GROUP_ID, value.id) values.put(NAME, value.name) values.put(SCREEN_NAME, value.screenName) @@ -84,22 +84,22 @@ class GroupsStorage : Storage() { values.put(TYPE, value.type.value) val photos = - VKUtil.putPhotosToJson(value.photo50, value.photo100, value.photo200).toString() + oldVKUtil.putPhotosToJson(value.photo50, value.photo100, value.photo200).toString() values.put(PHOTOS, photos) } - override fun parseValue(cursor: Cursor): VKGroup { - val group = VKGroup() + override fun parseValue(cursor: Cursor): oldVKGroup { + val group = oldVKGroup() group.id = getInt(cursor, GROUP_ID) group.name = getString(cursor, NAME) group.screenName = getString(cursor, SCREEN_NAME) group.isClosed = getInt(cursor, IS_CLOSED) == 1 group.deactivated = getString(cursor, DEACTIVATED) - group.type = VKGroup.Type.fromString(getString(cursor, TYPE)) + group.type = oldVKGroup.Type.fromString(getString(cursor, TYPE)) - val photos = VKUtil.parseJsonPhotos(JSONObject(getString(cursor, PHOTOS))) + val photos = oldVKUtil.parseJsonPhotos(JSONObject(getString(cursor, PHOTOS))) group.photo50 = photos[0] group.photo100 = photos[1] diff --git a/app/src/main/kotlin/com/meloda/fast/database/old/storage/MessagesStorage.kt b/app/src/main/kotlin/com/meloda/fast/database/old/storage/MessagesStorage.kt index 8895031f..f84f6822 100644 --- a/app/src/main/kotlin/com/meloda/fast/database/old/storage/MessagesStorage.kt +++ b/app/src/main/kotlin/com/meloda/fast/database/old/storage/MessagesStorage.kt @@ -24,7 +24,7 @@ import com.meloda.fast.database.old.DatabaseUtils.TABLE_MESSAGES import com.meloda.fast.database.old.base.Storage import com.meloda.fast.util.Utils import com.meloda.fast.api.model.old.oldVKMessage -import com.meloda.fast.api.model.old.VKMessageAction +import com.meloda.fast.api.model.old.oldVKMessageAction import com.meloda.fast.api.model.old.VKModel import java.util.stream.Collectors @@ -153,7 +153,7 @@ class MessagesStorage : Storage() { if (replyMessage != null) message.replyMessage = replyMessage val blobAction = Utils.deserialize(CacheStorage.getBlob(cursor, ACTION)) - if (blobAction != null) message.action = blobAction as VKMessageAction + if (blobAction != null) message.action = blobAction as oldVKMessageAction val stringFwdMessages = CacheStorage.getString(cursor, FWD_MESSAGES) if (stringFwdMessages != null) { diff --git a/app/src/main/kotlin/com/meloda/fast/database/old/storage/UsersStorage.kt b/app/src/main/kotlin/com/meloda/fast/database/old/storage/UsersStorage.kt index 44f5857d..11a7ab96 100644 --- a/app/src/main/kotlin/com/meloda/fast/database/old/storage/UsersStorage.kt +++ b/app/src/main/kotlin/com/meloda/fast/database/old/storage/UsersStorage.kt @@ -6,7 +6,7 @@ import android.os.Bundle import android.util.Log import androidx.annotation.WorkerThread import com.meloda.fast.api.UserConfig -import com.meloda.fast.api.VKUtil +import com.meloda.fast.api.oldVKUtil import com.meloda.fast.api.model.old.oldVKUser import com.meloda.fast.database.old.CacheStorage import com.meloda.fast.database.old.DatabaseKeys.DEACTIVATED @@ -135,7 +135,7 @@ class UsersStorage : Storage() { values.put( PHOTOS, - VKUtil.putPhotosToJson( + oldVKUtil.putPhotosToJson( value.photo50, value.photo100, value.photo200 @@ -159,7 +159,7 @@ class UsersStorage : Storage() { user.lastSeen = CacheStorage.getInt(cursor, LAST_SEEN) val photos = - VKUtil.parseJsonPhotos(JSONObject(CacheStorage.getString(cursor, PHOTOS))) + oldVKUtil.parseJsonPhotos(JSONObject(CacheStorage.getString(cursor, PHOTOS))) user.photo50 = photos[0] user.photo100 = photos[1] diff --git a/app/src/main/kotlin/com/meloda/fast/di/DatabaseModule.kt b/app/src/main/kotlin/com/meloda/fast/di/DatabaseModule.kt index d05327e6..8b3900d9 100644 --- a/app/src/main/kotlin/com/meloda/fast/di/DatabaseModule.kt +++ b/app/src/main/kotlin/com/meloda/fast/di/DatabaseModule.kt @@ -3,6 +3,7 @@ package com.meloda.fast.di import com.meloda.fast.common.AppGlobal import com.meloda.fast.database.AppDatabase import com.meloda.fast.database.dao.ConversationsDao +import com.meloda.fast.database.dao.GroupsDao import com.meloda.fast.database.dao.MessagesDao import com.meloda.fast.database.dao.UsersDao import dagger.Module @@ -35,4 +36,9 @@ object DatabaseModule { fun provideMessagesDao(appDatabase: AppDatabase): MessagesDao = appDatabase.messagesDao() + @Provides + @Singleton + fun provideGroupsDao(appDatabase: AppDatabase): GroupsDao = + appDatabase.groupsDao() + } \ No newline at end of file diff --git a/app/src/main/kotlin/com/meloda/fast/extensions/Extensions.kt b/app/src/main/kotlin/com/meloda/fast/extensions/Extensions.kt index 64acf668..c93ae89c 100644 --- a/app/src/main/kotlin/com/meloda/fast/extensions/Extensions.kt +++ b/app/src/main/kotlin/com/meloda/fast/extensions/Extensions.kt @@ -1,3 +1 @@ -package com.meloda.fast.extensions - -fun Boolean.toApiStyle() = (if (this) 1 else 0).toString() \ No newline at end of file +package com.meloda.fast.extensions \ No newline at end of file diff --git a/app/src/main/kotlin/com/meloda/fast/screens/login/LoginViewModel.kt b/app/src/main/kotlin/com/meloda/fast/screens/login/LoginViewModel.kt index f603c24b..23b6ff06 100644 --- a/app/src/main/kotlin/com/meloda/fast/screens/login/LoginViewModel.kt +++ b/app/src/main/kotlin/com/meloda/fast/screens/login/LoginViewModel.kt @@ -5,7 +5,7 @@ import androidx.lifecycle.viewModelScope import com.meloda.fast.api.UserConfig import com.meloda.fast.api.VKConstants import com.meloda.fast.api.VKException -import com.meloda.fast.api.VKUtil +import com.meloda.fast.api.oldVKUtil import com.meloda.fast.api.datasource.AuthDataSource import com.meloda.fast.api.network.request.RequestAuthDirect import com.meloda.fast.base.viewmodel.BaseViewModel @@ -61,13 +61,13 @@ class LoginViewModel @Inject constructor( twoFaCode?.let { sendEvent(CodeSent) } - if (VKUtil.isValidationRequired(it)) { + if (oldVKUtil.isValidationRequired(it)) { it.validationSid?.let { sid -> sendEvent(ValidationRequired(validationSid = sid)) sendSms(sid) } - } else if (VKUtil.isCaptchaRequired(it)) { + } else if (oldVKUtil.isCaptchaRequired(it)) { it.captcha?.let { captcha -> sendEvent(CaptchaRequired(captcha.first to captcha.second)) } diff --git a/app/src/main/kotlin/com/meloda/fast/screens/messages/ConversationsAdapter.kt b/app/src/main/kotlin/com/meloda/fast/screens/messages/ConversationsAdapter.kt index a252c260..b09f9b19 100644 --- a/app/src/main/kotlin/com/meloda/fast/screens/messages/ConversationsAdapter.kt +++ b/app/src/main/kotlin/com/meloda/fast/screens/messages/ConversationsAdapter.kt @@ -1,17 +1,142 @@ package com.meloda.fast.screens.messages import android.content.Context +import android.graphics.Color +import android.graphics.drawable.ColorDrawable +import android.text.SpannableString +import android.text.style.ForegroundColorSpan import android.view.ViewGroup +import androidx.core.content.ContextCompat +import androidx.core.view.isVisible import androidx.recyclerview.widget.DiffUtil +import coil.load +import com.meloda.fast.R +import com.meloda.fast.api.UserConfig +import com.meloda.fast.api.VkUtils import com.meloda.fast.api.model.VkConversation +import com.meloda.fast.api.model.VkGroup +import com.meloda.fast.api.model.VkUser import com.meloda.fast.base.adapter.BaseAdapter import com.meloda.fast.base.adapter.BindingHolder import com.meloda.fast.databinding.ItemConversationBinding +import java.text.SimpleDateFormat -class ConversationsAdapter(context: Context, values: MutableList) : - BaseAdapter( - context, values, COMPARATOR - ) { +class ConversationsAdapter constructor( + context: Context, + values: MutableList, + val profiles: HashMap = hashMapOf(), + val groups: HashMap = hashMapOf() +) : BaseAdapter( + context, values, COMPARATOR +) { + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = + ItemHolder(ItemConversationBinding.inflate(inflater, parent, false)) + + inner class ItemHolder(binding: ItemConversationBinding) : + BindingHolder(binding) { + + private val dateColor = ContextCompat.getColor(context, R.color.date) + private val youPrefix = context.getString(R.string.you_message_prefix) + + override fun bind(position: Int) { + val conversation = getItem(position) + val message = conversation.lastMessage ?: return + + val chatUser: VkUser? = if (conversation.isUser()) { + profiles[conversation.id] +// profiles.find { it.id == conversation.id } + } else null + + val messageUser: VkUser? = if (message.isUser()) { + profiles[message.fromId] +// profiles.find { it.id == message.fromId } + } else null + + val chatGroup: VkGroup? = if (conversation.isGroup()) { + groups[conversation.id] +// groups.find { it.id == conversation.id } + } else null + + val messageGroup: VkGroup? = if (message.isGroup()) { + groups[message.fromId] +// groups.find { it.id == message.fromId } + } else null + + val avatar = when { + chatUser != null && !chatUser.photo200.isNullOrBlank() -> chatUser.photo200 + chatGroup != null && !chatGroup.photo200.isNullOrBlank() -> chatGroup.photo200 + !conversation.photo200.isNullOrBlank() -> conversation.photo200 + else -> null + } + + if (avatar == null) { + binding.avatar.setImageDrawable(ColorDrawable(Color.RED)) + } else { + binding.avatar.load(avatar) { crossfade(200) } + } + + binding.online.isVisible = chatUser?.online == true + + val actionMessage = VkUtils.getActionConversationText( + message = message, + youPrefix = youPrefix, + profiles = profiles, + groups = groups, + messageUser = messageUser, + messageGroup = messageGroup + ) + + val attachmentsMessage = VkUtils.getAttachmentConversationText( + context = context, + message = message + ) + + val forwardsMessage = VkUtils.getForwardsConversationText( + context = context, + message = message + ) + + val messageText = if (actionMessage != null || + attachmentsMessage != null || + forwardsMessage != null + ) "" + else message.text ?: "no_message" + + val coloredMessage = actionMessage ?: attachmentsMessage ?: forwardsMessage ?: "" + + var prefix = when { + actionMessage != null -> "" + message.isOut -> "$youPrefix: " + messageUser != null && messageUser.firstName.isNotBlank() -> "${messageUser.firstName}: " + messageGroup != null && messageGroup.toString() + .isNotBlank() -> "${messageGroup.name}: " + else -> "" + } + + if (!conversation.isChat() && !message.isOut || conversation.id == UserConfig.userId) prefix = + "" + +// if (conversation.isChat() || message.isOut) { + val spanText = "$prefix$coloredMessage $messageText".trim() + + val spanMessage = SpannableString(spanText) + spanMessage.setSpan( + ForegroundColorSpan(dateColor), 0, + prefix.length + coloredMessage.length, + 0 + ) + binding.message.text = spanMessage +// } else { +// binding.message.text = messageText +// } + + binding.title.text = + getItem(position).title ?: chatUser?.toString() ?: chatGroup?.name ?: "..." + + binding.date.text = SimpleDateFormat("HH:mm").format(message.date * 1000) + } + } companion object { private val COMPARATOR = object : DiffUtil.ItemCallback() { @@ -27,15 +152,4 @@ class ConversationsAdapter(context: Context, values: MutableList } } - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = - ItemHolder(ItemConversationBinding.inflate(inflater, parent, false)) - - inner class ItemHolder(binding: ItemConversationBinding) : - BindingHolder(binding) { - - override fun bind(position: Int) { - binding.title.text = getItem(position).title ?: "HUI" - } - } - } \ No newline at end of file diff --git a/app/src/main/kotlin/com/meloda/fast/screens/messages/ConversationsFragment.kt b/app/src/main/kotlin/com/meloda/fast/screens/messages/ConversationsFragment.kt index f33b54ab..65d88939 100644 --- a/app/src/main/kotlin/com/meloda/fast/screens/messages/ConversationsFragment.kt +++ b/app/src/main/kotlin/com/meloda/fast/screens/messages/ConversationsFragment.kt @@ -32,6 +32,8 @@ class ConversationsFragment : override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + viewModel.loadProfileUser() + prepareViews() adapter = ConversationsAdapter(requireContext(), mutableListOf()) @@ -43,7 +45,7 @@ class ConversationsFragment : override fun onEvent(event: VKEvent) { super.onEvent(event) when (event) { - is ConversationsLoaded -> refreshConversations(event.conversations) + is ConversationsLoaded -> refreshConversations(event) is StartProgressEvent -> onProgressStarted() is StopProgressEvent -> onProgressStopped() } @@ -91,10 +93,14 @@ class ConversationsFragment : } } - private fun refreshConversations(conversations: List) { - fillRecyclerView(conversations) + private fun refreshConversations(event: ConversationsLoaded) { +// adapter.profiles.clear() + adapter.profiles += event.profiles - viewModel.loadSomeUsers(listOf(1, 2, 3, 362877006)) +// adapter.groups.clear() + adapter.groups += event.groups + + fillRecyclerView(event.conversations) } private fun fillRecyclerView(values: List) { diff --git a/app/src/main/kotlin/com/meloda/fast/screens/messages/ConversationsViewModel.kt b/app/src/main/kotlin/com/meloda/fast/screens/messages/ConversationsViewModel.kt index de68058d..59030797 100644 --- a/app/src/main/kotlin/com/meloda/fast/screens/messages/ConversationsViewModel.kt +++ b/app/src/main/kotlin/com/meloda/fast/screens/messages/ConversationsViewModel.kt @@ -1,10 +1,13 @@ package com.meloda.fast.screens.messages import androidx.lifecycle.viewModelScope +import com.meloda.fast.api.UserConfig import com.meloda.fast.api.VKConstants import com.meloda.fast.api.datasource.ConversationsDataSource import com.meloda.fast.api.datasource.UsersDataSource import com.meloda.fast.api.model.VkConversation +import com.meloda.fast.api.model.VkGroup +import com.meloda.fast.api.model.VkUser import com.meloda.fast.api.network.request.ConversationsGetRequest import com.meloda.fast.api.network.request.UsersGetRequest import com.meloda.fast.base.viewmodel.BaseViewModel @@ -14,6 +17,7 @@ import com.meloda.fast.base.viewmodel.VKEvent import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch +import java.util.* import javax.inject.Inject @HiltViewModel @@ -27,12 +31,27 @@ class ConversationsViewModel @Inject constructor( dataSource.getAllChats( ConversationsGetRequest( count = 30, +// offset = 37, + extended = true, fields = "${VKConstants.USER_FIELDS},${VKConstants.GROUP_FIELDS}" ) ) }, onAnswer = { it.response?.let { response -> + val profiles = hashMapOf() + response.profiles?.forEach { baseUser -> + baseUser.asVkUser().let { user -> profiles[user.id] = user } + } + + val groups = hashMapOf() + response.groups?.forEach { baseGroup -> + baseGroup.asVkGroup().let { group -> groups[group.id] = group } + } + +// val profiles = response.profiles?.map { profile -> profile.asVkUser() } ?: listOf() +// val groups = response.groups?.map { group -> group.asVkGroup() } ?: listOf() + sendEvent( ConversationsLoaded( count = response.count, @@ -41,14 +60,16 @@ class ConversationsViewModel @Inject constructor( items.conversation.asVkConversation( items.lastMessage.asVkMessage() ) - } + }, + profiles = profiles, + groups = groups ) ) } }, onError = { val er = it - val i = 0 + throw it }, onStart = { sendEvent(StartProgressEvent) @@ -58,34 +79,25 @@ class ConversationsViewModel @Inject constructor( }) } - fun loadSomeUsers(usersIds: List) = viewModelScope.launch { + fun loadProfileUser() = viewModelScope.launch { makeJob({ - usersDataSource.getById( - UsersGetRequest( - usersIds = usersIds, - fields = "sex" - ) - ) + usersDataSource.getById(UsersGetRequest(fields = "online,photo_200")) }, onAnswer = { - val argh = it - val i = 0 it.response?.let { r -> - val users = r.map { user -> user.asVkUser() } - + val users = r.map { u -> u.asVkUser() } usersDataSource.storeUsers(users) - } - }, - onError = { - val e = it - val i = 0 - }) + UserConfig.vkUser = users[0] + } + }) } } data class ConversationsLoaded( val count: Int, val unreadCount: Int, - val conversations: List + val conversations: List, + val profiles: HashMap, + val groups: HashMap ) : VKEvent() \ No newline at end of file diff --git a/app/src/main/kotlin/com/meloda/fast/util/VKUtils.kt b/app/src/main/kotlin/com/meloda/fast/util/VKUtils.kt index 8686cc88..a3b4aa6f 100644 --- a/app/src/main/kotlin/com/meloda/fast/util/VKUtils.kt +++ b/app/src/main/kotlin/com/meloda/fast/util/VKUtils.kt @@ -4,7 +4,7 @@ import android.content.Context import android.graphics.drawable.Drawable import androidx.core.content.ContextCompat import com.meloda.fast.R -import com.meloda.fast.api.VKUtil +import com.meloda.fast.api.oldVKUtil import com.meloda.fast.api.model.old.* import com.meloda.fast.common.AppGlobal import com.meloda.fast.extensions.ContextExtensions.color @@ -31,7 +31,7 @@ object VKUtils { } else { r.getString( R.string.user_last_seen_at, - VKUtil.getLastSeenTime(user.lastSeen * 1000L) + oldVKUtil.getLastSeenTime(user.lastSeen * 1000L) ) } } @@ -195,11 +195,11 @@ object VKUtils { var result = "" when (it.type) { - VKMessageAction.Type.CHAT_CREATE -> result = context.getString( + oldVKMessageAction.Type.CHAT_CREATE -> result = context.getString( R.string.message_action_created_chat, "" ) - VKMessageAction.Type.INVITE_USER -> result = + oldVKMessageAction.Type.INVITE_USER -> result = if (lastMessage.fromId == lastMessage.action!!.memberId) { context.getString(R.string.message_action_returned_to_chat, "") } else { @@ -207,11 +207,11 @@ object VKUtils { // val invited = MemoryCache.getUserById(lastMessage.action!!.memberId) // context.getString(R.string.message_action_invited_user, invited) } - VKMessageAction.Type.INVITE_USER_BY_LINK -> result = context.getString( + oldVKMessageAction.Type.INVITE_USER_BY_LINK -> result = context.getString( R.string.message_action_invited_by_link, "" ) - VKMessageAction.Type.KICK_USER -> result = + oldVKMessageAction.Type.KICK_USER -> result = if (lastMessage.fromId == lastMessage.action!!.memberId) { context.getString(R.string.message_action_left_from_chat, "") } else { @@ -219,23 +219,23 @@ object VKUtils { // val kicked = MemoryCache.getUserById(lastMessage.action!!.memberId) // context.getString(R.string.message_action_kicked_user, kicked) } - VKMessageAction.Type.PHOTO_REMOVE -> result = context.getString( + oldVKMessageAction.Type.PHOTO_REMOVE -> result = context.getString( R.string.message_action_removed_photo, "" ) - VKMessageAction.Type.PHOTO_UPDATE -> result = context.getString( + oldVKMessageAction.Type.PHOTO_UPDATE -> result = context.getString( R.string.message_action_updated_photo, "" ) - VKMessageAction.Type.PIN_MESSAGE -> result = context.getString( + oldVKMessageAction.Type.PIN_MESSAGE -> result = context.getString( R.string.message_action_pinned_message, "" ) - VKMessageAction.Type.UNPIN_MESSAGE -> result = context.getString( + oldVKMessageAction.Type.UNPIN_MESSAGE -> result = context.getString( R.string.message_action_unpinned_message, "" ) - VKMessageAction.Type.TITLE_UPDATE -> result = context.getString( + oldVKMessageAction.Type.TITLE_UPDATE -> result = context.getString( R.string.message_action_updated_title, "" ) diff --git a/app/src/main/res/font/google_sans_regular.ttf b/app/src/main/res/font/google_sans_regular.ttf index e017417b787cc950a07fa83dc7f4f061d82177bf..f8fa337c3c3d0c7829a78cf297500aa6a100f0af 100644 GIT binary patch literal 330872 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 z(iuu;D4n5nhSC{IXDFSabcWIyN@pmYp>&4Q8A@j;ouPDw(iuu;D4n5nhSC{IXDFSa zbcWIyN@pmYp>&4Q8A@j;ouPDw(iuu;D4n5nhSC{IXDFSabcWIyN@pmYp>&4Q8A@j; zouPDw(iuu;D4n5nhSC{IXDFSabcWIyN@pmYp>&4Q8A@j;ouPDw(iuu;D4n5nhSC{I zXDFSabcWIyN@pmYp>&4Q8A@j;ouPDw(iuu;D4n5nhSC{IXDFSabcWIyN@pmYp>&4Q z8A@j;ouPDw(iuu;D4n5nhSC{IXDFSabcWIyN@pmYp>&4Q8A@j;ouPDw(iuu;D4n5n zhSC{IXDFSabcWIyN@pmYp>&4Q8A@j;ouPDw(iuu;D4n5nhSC{IXDFSabcWIyN@pmY zp>&4Q8A@j;ouPDw(iuu;D4n5nhSC{IXDFSabcWIyN@pmYp>&4Q8A@j;ouPDw(iuu; zD4n5nhSC{IXDFSabcWIyN@pmYqjZkaIZEd!ouhP)(m6`!D4nBpj?y_w=O~?{bdJ(F zO6Mq@qjZkaIZEd!ouhP)(m6`!D4nBpj?y_w=O~?{bdJ(FO6Mq@qjZkaIZEd!ouhP) z(m6`!D4nBpj?y_w=O~?{bdJ(FO6Mq@qjZkaIZEd!ouhP)(m6`!D4nBpj?y_w=O~?{ zbdJ(FO6Mq@qjZkaIZEd!ouhP)(m6`!D4nBpj?y_w=O~?{bdJ(FO6Mq@qjZkaIZEd! zouhP)(m6`!D4nBpj?y_w=O~?{bdJ(FO6Mq@qjZkaIZEd!ouhP)(m6`!D4nBpj?y_w z=O~?{bdJ(FO6Mq@qjZkaIZEd!ouhP)(m6`!D4nBpj?y_w=O~?{bdJ(FO6Mq@qjZka zIZEd!ouhP)(m6`!D4nBpj?y_w=O~?{bdJ(FO6Mq@qjZkaIZEd!ouhP)(m6`!D4nBp zj?y_w=O~?{bdJ(FO6Mq@qjZkaIZEd!ouhP)(m6`!D4nBpj?y_w=O~?{bdJ(FO6Mq@ zqjZkaIZEd!ouhP)(m6`!D4nBpj?y_w=O~?{bdJ(FO6Mq@qjZkaIZEd!ouhP)(m6`! zD4nBpj?y_w=O~?{bdJ(FO6Mq@qjZkaIZEd!ouhP)(m6`!D4nBpj?y_w=O~?{bdJ(F zO6Mq@qjZkaIZEd!ouhP)(m6`!D4nBpj?y_w=O~?{bdJ(FO6Mq@qjZ7N1xgnvU7&P< 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
vDgBVlQ`oxTDR~~INjM(T2^@uH9Y-Pj zJh7;MGR!X&D8qZSy@()rp&?IVA5Fw9PUuh8sYw4`d>`qdB1(@q1C+OmC~vbbwh%v8 z$n{g4FU#|6gk%ZPgzU^D0Xvth9Cr60`wHv#aE8>^@ZVT`Y0-?Bl;1~O$#}YlstnO3 zUl+{{_yAsu6Z#Z@CsRet(U<+V@fK-^I7yKSh+`&k(iub;RnO z$Jv+vEc^>jzx)Ma>)sXq4ex_L6aEuB)!!2S3vqDY7M=sI|E2hbXb3wH`4$Sh#aJvC zeuSOz3gPeIhnOlH!?y@u6?zeG)+GEB;@r!HD~RtnBHWNZkWLBzD)r(d&|l(Yj0?g5 zi}n!iOIM|9*xP3JQ9hvW%{$*$C%oHq) z7&~L*W#o|X9*y{WH1~eSe&f3$h7UyvCsyHazmai6i02=VI@X{)EG`PI8k)v*{7^{v zLK6Q7$Pm#_^na#F4Lly>VlB*KkMMnA2Y9-W+rr!}gUo95QY~g-BccW7B2r*6cpI2b z82S>Wb(FrvR^?DFv+su9V)|j|yOh>b`enARL1(!#{#w`wSx>g2^ujL-f18S@77w$z z8u2iUz`kWzfM+qDHayGlbl_P9iJwgj7Wx44grE0(fzC(z`JbOyNPpk^;lKY6%l$Y} diff --git a/app/src/main/res/layout/fragment_conversations.xml b/app/src/main/res/layout/fragment_conversations.xml index 4c3f8723..7681f86b 100644 --- a/app/src/main/res/layout/fragment_conversations.xml +++ b/app/src/main/res/layout/fragment_conversations.xml @@ -8,8 +8,7 @@ + android:layout_height="match_parent"> + tools:listitem="@layout/item_conversation_old" /> - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_main.xml b/app/src/main/res/layout/fragment_main.xml index 72cff9af..1441837d 100644 --- a/app/src/main/res/layout/fragment_main.xml +++ b/app/src/main/res/layout/fragment_main.xml @@ -9,14 +9,14 @@ + android:layout_height="match_parent" /> - + xmlns:tools="http://schemas.android.com/tools"> - + android:layout_height="wrap_content" + android:layout_marginHorizontal="24dp" + android:layout_marginVertical="10dp" + android:orientation="horizontal"> + android:layout_width="56dp" + android:layout_height="56dp"> - + + + + + + + + + - - - - - - - - - - - - - - + android:layout_weight="1" + android:fontFamily="@font/google_sans_regular" + android:maxLines="2" + android:textColor="#201A1A" + android:textSize="22sp" + tools:text="Title" /> - + + + + + + + - - - + - + - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/layout/item_conversation_old.xml b/app/src/main/res/layout/item_conversation_old.xml new file mode 100644 index 00000000..236c3e6d --- /dev/null +++ b/app/src/main/res/layout/item_conversation_old.xml @@ -0,0 +1,186 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values-v31/colors.xml b/app/src/main/res/values-v31/colors.xml index bdde9573..1f96aee1 100644 --- a/app/src/main/res/values-v31/colors.xml +++ b/app/src/main/res/values-v31/colors.xml @@ -1,16 +1,19 @@ - @android:color/system_accent1_10 - @android:color/system_accent1_10 - @android:color/system_accent1_10 + @android:color/system_neutral1_50 + @android:color/system_neutral1_50 + @android:color/system_neutral1_50 @android:color/system_accent1_500 @android:color/system_accent3_500 @android:color/system_accent3_200 @android:color/system_accent1_10 + @android:color/system_accent3_200 + @android:color/system_neutral2_500 + @android:color/system_neutral1_900 - @android:color/system_accent1_10 + @android:color/system_neutral1_50 #E0E0E0 diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 1152bcb5..70ece8a2 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -15,6 +15,10 @@ #99000000 + #00ff00 + #212121 + #000000 + #ff000000 #DE000000 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index a2e533dc..1d7613d4 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -158,5 +158,10 @@ Conversations Code Input code from sms + You + Geolocation + Point + Message + Messages