forked from melod1n/fast-messenger
DataSource wrapping
Some refactoring
This commit is contained in:
@@ -81,16 +81,17 @@ dependencies {
|
|||||||
|
|
||||||
implementation("androidx.appcompat:appcompat:1.4.0-alpha03")
|
implementation("androidx.appcompat:appcompat:1.4.0-alpha03")
|
||||||
implementation("com.google.android.material:material:1.4.0")
|
implementation("com.google.android.material:material:1.4.0")
|
||||||
implementation("androidx.core:core-ktx:1.7.0-alpha01")
|
implementation("androidx.core:core-ktx:1.7.0-alpha02")
|
||||||
implementation("androidx.preference:preference-ktx:1.1.1")
|
implementation("androidx.preference:preference-ktx:1.1.1")
|
||||||
implementation("androidx.swiperefreshlayout:swiperefreshlayout:1.2.0-alpha01")
|
implementation("androidx.swiperefreshlayout:swiperefreshlayout:1.2.0-alpha01")
|
||||||
implementation("androidx.recyclerview:recyclerview:1.2.1")
|
implementation("androidx.recyclerview:recyclerview:1.2.1")
|
||||||
implementation("androidx.cardview:cardview:1.0.0")
|
implementation("androidx.cardview:cardview:1.0.0")
|
||||||
implementation("androidx.fragment:fragment-ktx:1.3.6")
|
implementation("androidx.fragment:fragment-ktx:1.3.6")
|
||||||
|
|
||||||
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.1")
|
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.2")
|
||||||
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.1")
|
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.2-native-mt")
|
||||||
|
|
||||||
|
implementation("androidx.room:room-ktx:2.3.0")
|
||||||
implementation("androidx.room:room-runtime:2.3.0")
|
implementation("androidx.room:room-runtime:2.3.0")
|
||||||
kapt("androidx.room:room-compiler:2.3.0")
|
kapt("androidx.room:room-compiler:2.3.0")
|
||||||
|
|
||||||
|
|||||||
+37
-1
@@ -1,10 +1,20 @@
|
|||||||
package com.meloda.fast.api.network
|
package com.meloda.fast.api
|
||||||
|
|
||||||
import com.google.gson.Gson
|
import com.google.gson.Gson
|
||||||
import com.google.gson.GsonBuilder
|
import com.google.gson.GsonBuilder
|
||||||
|
import com.meloda.fast.api.datasource.AuthDataSource
|
||||||
|
import com.meloda.fast.api.datasource.ConversationsDataSource
|
||||||
|
import com.meloda.fast.api.datasource.MessagesDataSource
|
||||||
|
import com.meloda.fast.api.datasource.UsersDataSource
|
||||||
|
import com.meloda.fast.api.network.AuthInterceptor
|
||||||
|
import com.meloda.fast.api.network.ResultCallFactory
|
||||||
import com.meloda.fast.api.network.repo.AuthRepo
|
import com.meloda.fast.api.network.repo.AuthRepo
|
||||||
import com.meloda.fast.api.network.repo.ConversationsRepo
|
import com.meloda.fast.api.network.repo.ConversationsRepo
|
||||||
|
import com.meloda.fast.api.network.repo.MessagesRepo
|
||||||
import com.meloda.fast.api.network.repo.UsersRepo
|
import com.meloda.fast.api.network.repo.UsersRepo
|
||||||
|
import com.meloda.fast.database.dao.ConversationsDao
|
||||||
|
import com.meloda.fast.database.dao.MessagesDao
|
||||||
|
import com.meloda.fast.database.dao.UsersDao
|
||||||
import dagger.Module
|
import dagger.Module
|
||||||
import dagger.Provides
|
import dagger.Provides
|
||||||
import dagger.hilt.InstallIn
|
import dagger.hilt.InstallIn
|
||||||
@@ -67,4 +77,30 @@ class VKModules {
|
|||||||
fun provideUsersRepo(retrofit: Retrofit): UsersRepo =
|
fun provideUsersRepo(retrofit: Retrofit): UsersRepo =
|
||||||
retrofit.create(UsersRepo::class.java)
|
retrofit.create(UsersRepo::class.java)
|
||||||
|
|
||||||
|
@Provides
|
||||||
|
@Singleton
|
||||||
|
fun provideAuthDataSource(
|
||||||
|
repo: AuthRepo
|
||||||
|
): AuthDataSource = AuthDataSource(repo)
|
||||||
|
|
||||||
|
@Provides
|
||||||
|
@Singleton
|
||||||
|
fun provideUsersDataSource(
|
||||||
|
repo: UsersRepo,
|
||||||
|
dao: UsersDao
|
||||||
|
): UsersDataSource = UsersDataSource(repo, dao)
|
||||||
|
|
||||||
|
@Provides
|
||||||
|
@Singleton
|
||||||
|
fun provideConversationsDataSource(
|
||||||
|
repo: ConversationsRepo,
|
||||||
|
dao: ConversationsDao
|
||||||
|
): ConversationsDataSource = ConversationsDataSource(repo, dao)
|
||||||
|
|
||||||
|
@Provides
|
||||||
|
@Singleton
|
||||||
|
fun provideMessagesDataSource(
|
||||||
|
repo: MessagesRepo,
|
||||||
|
dao: MessagesDao
|
||||||
|
): MessagesDataSource = MessagesDataSource(repo, dao)
|
||||||
}
|
}
|
||||||
@@ -2,6 +2,7 @@ package com.meloda.fast.api
|
|||||||
|
|
||||||
import androidx.annotation.WorkerThread
|
import androidx.annotation.WorkerThread
|
||||||
import com.meloda.fast.api.model.*
|
import com.meloda.fast.api.model.*
|
||||||
|
import com.meloda.fast.api.model.old.*
|
||||||
import com.meloda.fast.api.network.VKErrors
|
import com.meloda.fast.api.network.VKErrors
|
||||||
import org.json.JSONArray
|
import org.json.JSONArray
|
||||||
import org.json.JSONObject
|
import org.json.JSONObject
|
||||||
|
|||||||
@@ -0,0 +1,15 @@
|
|||||||
|
package com.meloda.fast.api.datasource
|
||||||
|
|
||||||
|
import com.meloda.fast.api.network.repo.AuthRepo
|
||||||
|
import com.meloda.fast.api.network.request.RequestAuthDirect
|
||||||
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
class AuthDataSource @Inject constructor(
|
||||||
|
private val repo: AuthRepo
|
||||||
|
) {
|
||||||
|
|
||||||
|
suspend fun auth(params: RequestAuthDirect) = repo.auth(params.map)
|
||||||
|
|
||||||
|
suspend fun sendSms(validationSid: String) = repo.sendSms(validationSid)
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
package com.meloda.fast.api.datasource
|
||||||
|
|
||||||
|
import com.meloda.fast.api.model.VkConversation
|
||||||
|
import com.meloda.fast.api.network.repo.ConversationsRepo
|
||||||
|
import com.meloda.fast.api.network.request.ConversationsGetRequest
|
||||||
|
import com.meloda.fast.database.dao.ConversationsDao
|
||||||
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
class ConversationsDataSource @Inject constructor(
|
||||||
|
private val repo: ConversationsRepo,
|
||||||
|
private val dao: ConversationsDao
|
||||||
|
) {
|
||||||
|
|
||||||
|
suspend fun getAllChats(params: ConversationsGetRequest) = repo.getAllChats(params)
|
||||||
|
|
||||||
|
suspend fun storeConversations(conversations: List<VkConversation>) = dao.insert(conversations)
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
package com.meloda.fast.api.datasource
|
||||||
|
|
||||||
|
import com.meloda.fast.api.network.repo.MessagesRepo
|
||||||
|
import com.meloda.fast.database.dao.MessagesDao
|
||||||
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
class MessagesDataSource @Inject constructor(
|
||||||
|
private val repo: MessagesRepo,
|
||||||
|
private val dao: MessagesDao
|
||||||
|
) {
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
package com.meloda.fast.api.datasource
|
||||||
|
|
||||||
|
import com.meloda.fast.api.model.VkUser
|
||||||
|
import com.meloda.fast.api.network.repo.UsersRepo
|
||||||
|
import com.meloda.fast.api.network.request.UsersGetRequest
|
||||||
|
import com.meloda.fast.database.dao.UsersDao
|
||||||
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
class UsersDataSource @Inject constructor(
|
||||||
|
private val repo: UsersRepo,
|
||||||
|
private val dao: UsersDao
|
||||||
|
) {
|
||||||
|
|
||||||
|
suspend fun getById(params: UsersGetRequest) = repo.getById(params.map)
|
||||||
|
|
||||||
|
suspend fun storeUsers(users: List<VkUser>) = dao.insert(users)
|
||||||
|
|
||||||
|
}
|
||||||
@@ -1,15 +1,9 @@
|
|||||||
package com.meloda.fast.api.loader
|
package com.meloda.fast.api.loader
|
||||||
|
|
||||||
import com.meloda.fast.api.model.VkUser
|
import com.meloda.fast.api.model.VkUser
|
||||||
import com.meloda.fast.api.network.repo.UsersRepo
|
|
||||||
import com.meloda.fast.api.network.request.UsersGetRequest
|
|
||||||
import javax.inject.Inject
|
|
||||||
|
|
||||||
class UsersLoader : Loader<VkUser>() {
|
class UsersLoader : Loader<VkUser>() {
|
||||||
|
|
||||||
@Inject
|
|
||||||
lateinit var repo: UsersRepo
|
|
||||||
|
|
||||||
suspend fun load(
|
suspend fun load(
|
||||||
usersIds: List<Int>,
|
usersIds: List<Int>,
|
||||||
fields: String = ""
|
fields: String = ""
|
||||||
@@ -24,12 +18,12 @@ class UsersLoader : Loader<VkUser>() {
|
|||||||
val usersIds: String = params["usersIds"] as String
|
val usersIds: String = params["usersIds"] as String
|
||||||
val fields: String = params["fields"] as String
|
val fields: String = params["fields"] as String
|
||||||
|
|
||||||
val users = repo.getById(
|
// val users = repo.getById(
|
||||||
UsersGetRequest(
|
// UsersGetRequest(
|
||||||
usersIds = usersIds.split(",").map { it.toInt() },
|
// usersIds = usersIds.split(",").map { it.toInt() },
|
||||||
fields = fields
|
// fields = fields
|
||||||
)
|
// )
|
||||||
)
|
// )
|
||||||
|
|
||||||
return emptyList()
|
return emptyList()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,15 @@
|
|||||||
package com.meloda.fast.api.model
|
package com.meloda.fast.api.model
|
||||||
|
|
||||||
|
import androidx.room.Entity
|
||||||
|
import androidx.room.Ignore
|
||||||
|
import androidx.room.PrimaryKey
|
||||||
|
|
||||||
|
@Entity(tableName = "conversations")
|
||||||
data class VkConversation(
|
data class VkConversation(
|
||||||
|
@PrimaryKey(autoGenerate = false)
|
||||||
val id: Int,
|
val id: Int,
|
||||||
val title: String?,
|
val title: String?,
|
||||||
val lastMessage: VkMessage
|
) {
|
||||||
)
|
@Ignore
|
||||||
|
var lastMessage: VkMessage? = null
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,10 +1,19 @@
|
|||||||
package com.meloda.fast.api.model
|
package com.meloda.fast.api.model
|
||||||
|
|
||||||
|
import androidx.room.Entity
|
||||||
|
import androidx.room.PrimaryKey
|
||||||
|
|
||||||
|
@Entity(tableName = "messages")
|
||||||
data class VkMessage(
|
data class VkMessage(
|
||||||
|
@PrimaryKey(autoGenerate = false)
|
||||||
val id: Int,
|
val id: Int,
|
||||||
val text: String?,
|
val text: String?,
|
||||||
val isOut: Boolean,
|
val isOut: Boolean,
|
||||||
val peerId: Int,
|
val peerId: Int,
|
||||||
val fromId: Int,
|
val fromId: Int,
|
||||||
val date: Int
|
val date: Int
|
||||||
)
|
) {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,6 +1,11 @@
|
|||||||
package com.meloda.fast.api.model
|
package com.meloda.fast.api.model
|
||||||
|
|
||||||
|
import androidx.room.Entity
|
||||||
|
import androidx.room.PrimaryKey
|
||||||
|
|
||||||
|
@Entity(tableName = "users")
|
||||||
data class VkUser(
|
data class VkUser(
|
||||||
|
@PrimaryKey(autoGenerate = false)
|
||||||
val id: Int,
|
val id: Int,
|
||||||
val firstName: String,
|
val firstName: String,
|
||||||
val lastName: String
|
val lastName: String
|
||||||
|
|||||||
@@ -2,6 +2,8 @@ package com.meloda.fast.api.model.base
|
|||||||
|
|
||||||
import android.os.Parcelable
|
import android.os.Parcelable
|
||||||
import com.google.gson.annotations.SerializedName
|
import com.google.gson.annotations.SerializedName
|
||||||
|
import com.meloda.fast.api.model.VkConversation
|
||||||
|
import com.meloda.fast.api.model.VkMessage
|
||||||
import kotlinx.parcelize.Parcelize
|
import kotlinx.parcelize.Parcelize
|
||||||
|
|
||||||
@Parcelize
|
@Parcelize
|
||||||
@@ -32,6 +34,11 @@ data class BaseVkConversation(
|
|||||||
val chatSettings: ChatSettings?
|
val chatSettings: ChatSettings?
|
||||||
) : Parcelable {
|
) : Parcelable {
|
||||||
|
|
||||||
|
fun asVkConversation(lastMessage: VkMessage? = null) = VkConversation(
|
||||||
|
id = peer.id,
|
||||||
|
title = chatSettings?.title,
|
||||||
|
).apply { this.lastMessage = lastMessage }
|
||||||
|
|
||||||
@Parcelize
|
@Parcelize
|
||||||
data class Peer(
|
data class Peer(
|
||||||
val id: Int,
|
val id: Int,
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package com.meloda.fast.api.model.base
|
|||||||
|
|
||||||
import android.os.Parcelable
|
import android.os.Parcelable
|
||||||
import com.google.gson.annotations.SerializedName
|
import com.google.gson.annotations.SerializedName
|
||||||
|
import com.meloda.fast.api.model.VkMessage
|
||||||
import kotlinx.parcelize.Parcelize
|
import kotlinx.parcelize.Parcelize
|
||||||
import kotlinx.parcelize.RawValue
|
import kotlinx.parcelize.RawValue
|
||||||
|
|
||||||
@@ -29,6 +30,15 @@ data class BaseVkMessage(
|
|||||||
val geo: Geo?
|
val geo: Geo?
|
||||||
) : Parcelable {
|
) : Parcelable {
|
||||||
|
|
||||||
|
fun asVkMessage() = VkMessage(
|
||||||
|
id = id,
|
||||||
|
text = text,
|
||||||
|
isOut = out == 1,
|
||||||
|
peerId = peerId,
|
||||||
|
fromId = fromId,
|
||||||
|
date = date
|
||||||
|
)
|
||||||
|
|
||||||
@Parcelize
|
@Parcelize
|
||||||
data class Geo(
|
data class Geo(
|
||||||
val type: String,
|
val type: String,
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package com.meloda.fast.api.model.base
|
|||||||
|
|
||||||
import android.os.Parcelable
|
import android.os.Parcelable
|
||||||
import com.google.gson.annotations.SerializedName
|
import com.google.gson.annotations.SerializedName
|
||||||
|
import com.meloda.fast.api.model.VkUser
|
||||||
import kotlinx.parcelize.Parcelize
|
import kotlinx.parcelize.Parcelize
|
||||||
|
|
||||||
@Parcelize
|
@Parcelize
|
||||||
@@ -46,4 +47,10 @@ data class BaseVkUser(
|
|||||||
val appId: Int?
|
val appId: Int?
|
||||||
) : Parcelable
|
) : Parcelable
|
||||||
|
|
||||||
|
fun asVkUser() = VkUser(
|
||||||
|
id = id,
|
||||||
|
firstName = firstName,
|
||||||
|
lastName = lastName
|
||||||
|
)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package com.meloda.fast.api.model
|
package com.meloda.fast.api.model.old
|
||||||
|
|
||||||
import org.json.JSONArray
|
import org.json.JSONArray
|
||||||
import java.util.*
|
import java.util.*
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package com.meloda.fast.api.model
|
package com.meloda.fast.api.model.old
|
||||||
|
|
||||||
import org.json.JSONObject
|
import org.json.JSONObject
|
||||||
|
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package com.meloda.fast.api.model
|
package com.meloda.fast.api.model.old
|
||||||
|
|
||||||
import org.json.JSONObject
|
import org.json.JSONObject
|
||||||
|
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package com.meloda.fast.api.model
|
package com.meloda.fast.api.model.old
|
||||||
|
|
||||||
import org.json.JSONObject
|
import org.json.JSONObject
|
||||||
|
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package com.meloda.fast.api.model
|
package com.meloda.fast.api.model.old
|
||||||
|
|
||||||
import org.json.JSONObject
|
import org.json.JSONObject
|
||||||
|
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package com.meloda.fast.api.model
|
package com.meloda.fast.api.model.old
|
||||||
|
|
||||||
import org.json.JSONObject
|
import org.json.JSONObject
|
||||||
import java.io.Serializable
|
import java.io.Serializable
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package com.meloda.fast.api.model
|
package com.meloda.fast.api.model.old
|
||||||
|
|
||||||
import org.json.JSONObject
|
import org.json.JSONObject
|
||||||
|
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package com.meloda.fast.api.model
|
package com.meloda.fast.api.model.old
|
||||||
|
|
||||||
import org.json.JSONObject
|
import org.json.JSONObject
|
||||||
|
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package com.meloda.fast.api.model
|
package com.meloda.fast.api.model.old
|
||||||
|
|
||||||
import org.json.JSONObject
|
import org.json.JSONObject
|
||||||
|
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package com.meloda.fast.api.model
|
package com.meloda.fast.api.model.old
|
||||||
|
|
||||||
import org.json.JSONArray
|
import org.json.JSONArray
|
||||||
import org.json.JSONObject
|
import org.json.JSONObject
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package com.meloda.fast.api.model
|
package com.meloda.fast.api.model.old
|
||||||
|
|
||||||
import org.json.JSONObject
|
import org.json.JSONObject
|
||||||
import java.io.Serializable
|
import java.io.Serializable
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package com.meloda.fast.api.model
|
package com.meloda.fast.api.model.old
|
||||||
|
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package com.meloda.fast.api.model
|
package com.meloda.fast.api.model.old
|
||||||
|
|
||||||
import org.json.JSONObject
|
import org.json.JSONObject
|
||||||
|
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package com.meloda.fast.api.model
|
package com.meloda.fast.api.model.old
|
||||||
|
|
||||||
import org.json.JSONObject
|
import org.json.JSONObject
|
||||||
|
|
||||||
+2
-1
@@ -1,5 +1,6 @@
|
|||||||
package com.meloda.fast.api.model
|
package com.meloda.fast.api.model.old
|
||||||
|
|
||||||
|
import com.meloda.fast.api.model.old.VKAttachments
|
||||||
import com.meloda.fast.base.adapter.BaseItem
|
import com.meloda.fast.base.adapter.BaseItem
|
||||||
import java.io.Serializable
|
import java.io.Serializable
|
||||||
|
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package com.meloda.fast.api.model
|
package com.meloda.fast.api.model.old
|
||||||
|
|
||||||
import org.json.JSONObject
|
import org.json.JSONObject
|
||||||
import java.util.*
|
import java.util.*
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package com.meloda.fast.api.model
|
package com.meloda.fast.api.model.old
|
||||||
|
|
||||||
import org.json.JSONObject
|
import org.json.JSONObject
|
||||||
|
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package com.meloda.fast.api.model
|
package com.meloda.fast.api.model.old
|
||||||
|
|
||||||
import org.json.JSONObject
|
import org.json.JSONObject
|
||||||
|
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package com.meloda.fast.api.model
|
package com.meloda.fast.api.model.old
|
||||||
|
|
||||||
import org.json.JSONObject
|
import org.json.JSONObject
|
||||||
import java.util.*
|
import java.util.*
|
||||||
+3
-1
@@ -1,5 +1,7 @@
|
|||||||
package com.meloda.fast.api.model
|
package com.meloda.fast.api.model.old
|
||||||
|
|
||||||
|
import com.meloda.fast.api.model.old.VKAttachments
|
||||||
|
import com.meloda.fast.api.model.old.VKModel
|
||||||
import org.json.JSONObject
|
import org.json.JSONObject
|
||||||
|
|
||||||
class VKVideo() : VKModel() {
|
class VKVideo() : VKModel() {
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package com.meloda.fast.api.model
|
package com.meloda.fast.api.model.old
|
||||||
|
|
||||||
import org.json.JSONObject
|
import org.json.JSONObject
|
||||||
|
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package com.meloda.fast.api.model
|
package com.meloda.fast.api.model.old
|
||||||
|
|
||||||
import org.json.JSONObject
|
import org.json.JSONObject
|
||||||
|
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package com.meloda.fast.api.model
|
package com.meloda.fast.api.model.old
|
||||||
|
|
||||||
import android.util.ArrayMap
|
import android.util.ArrayMap
|
||||||
import com.meloda.fast.api.VKUtil
|
import com.meloda.fast.api.VKUtil
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package com.meloda.fast.api.model
|
package com.meloda.fast.api.model.old
|
||||||
|
|
||||||
import org.json.JSONArray
|
import org.json.JSONArray
|
||||||
import org.json.JSONObject
|
import org.json.JSONObject
|
||||||
@@ -3,14 +3,14 @@ package com.meloda.fast.api.network.repo
|
|||||||
import com.meloda.fast.api.base.ApiResponse
|
import com.meloda.fast.api.base.ApiResponse
|
||||||
import com.meloda.fast.api.network.Answer
|
import com.meloda.fast.api.network.Answer
|
||||||
import com.meloda.fast.api.network.VKUrls
|
import com.meloda.fast.api.network.VKUrls
|
||||||
import com.meloda.fast.api.network.response.ConversationsGetResponse
|
|
||||||
import com.meloda.fast.api.network.request.ConversationsGetRequest
|
import com.meloda.fast.api.network.request.ConversationsGetRequest
|
||||||
|
import com.meloda.fast.api.network.response.ConversationsGetResponse
|
||||||
import retrofit2.http.Body
|
import retrofit2.http.Body
|
||||||
import retrofit2.http.POST
|
import retrofit2.http.POST
|
||||||
|
|
||||||
interface ConversationsRepo {
|
interface ConversationsRepo {
|
||||||
|
|
||||||
@POST(VKUrls.Conversations.get)
|
@POST(VKUrls.Conversations.get)
|
||||||
suspend fun getAllChats(@Body param: ConversationsGetRequest): Answer<ApiResponse<ConversationsGetResponse>>
|
suspend fun getAllChats(@Body params: ConversationsGetRequest): Answer<ApiResponse<ConversationsGetResponse>>
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
package com.meloda.fast.api.network.repo
|
||||||
|
|
||||||
|
interface MessagesRepo {
|
||||||
|
}
|
||||||
@@ -4,14 +4,12 @@ import com.meloda.fast.api.base.ApiResponse
|
|||||||
import com.meloda.fast.api.model.base.BaseVkUser
|
import com.meloda.fast.api.model.base.BaseVkUser
|
||||||
import com.meloda.fast.api.network.Answer
|
import com.meloda.fast.api.network.Answer
|
||||||
import com.meloda.fast.api.network.VKUrls
|
import com.meloda.fast.api.network.VKUrls
|
||||||
import com.meloda.fast.api.network.request.UsersGetRequest
|
import retrofit2.http.GET
|
||||||
import dagger.Component
|
import retrofit2.http.QueryMap
|
||||||
import retrofit2.http.Body
|
|
||||||
import retrofit2.http.POST
|
|
||||||
|
|
||||||
interface UsersRepo {
|
interface UsersRepo {
|
||||||
|
|
||||||
@POST(VKUrls.Users.getById)
|
@GET(VKUrls.Users.getById)
|
||||||
suspend fun getById(@Body param: UsersGetRequest): Answer<ApiResponse<List<BaseVkUser>>>
|
suspend fun getById(@QueryMap params: Map<String, String>): Answer<ApiResponse<List<BaseVkUser>>>
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -1,14 +1,21 @@
|
|||||||
package com.meloda.fast.api.network.request
|
package com.meloda.fast.api.network.request
|
||||||
|
|
||||||
import android.os.Parcelable
|
import android.os.Parcelable
|
||||||
import com.google.gson.annotations.SerializedName
|
|
||||||
import kotlinx.parcelize.Parcelize
|
import kotlinx.parcelize.Parcelize
|
||||||
|
|
||||||
@Parcelize
|
@Parcelize
|
||||||
data class UsersGetRequest(
|
data class UsersGetRequest(
|
||||||
@SerializedName("user_ids")
|
|
||||||
val usersIds: List<Int>,
|
val usersIds: List<Int>,
|
||||||
val fields: String? = null,
|
val fields: String? = null,
|
||||||
@SerializedName("nom_case")
|
|
||||||
val nomCase: String? = null
|
val nomCase: String? = null
|
||||||
) : Parcelable
|
) : Parcelable {
|
||||||
|
|
||||||
|
val map
|
||||||
|
get() = mutableMapOf(
|
||||||
|
"user_ids" to usersIds.joinToString { it.toString() }
|
||||||
|
).apply {
|
||||||
|
fields?.let { this["fields"] = it }
|
||||||
|
nomCase?.let { this["nom_case"] = it }
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -13,9 +13,11 @@ import android.os.Handler
|
|||||||
import android.view.inputmethod.InputMethodManager
|
import android.view.inputmethod.InputMethodManager
|
||||||
import androidx.core.content.pm.PackageInfoCompat
|
import androidx.core.content.pm.PackageInfoCompat
|
||||||
import androidx.preference.PreferenceManager
|
import androidx.preference.PreferenceManager
|
||||||
|
import androidx.room.Room
|
||||||
import com.meloda.fast.BuildConfig
|
import com.meloda.fast.BuildConfig
|
||||||
import com.meloda.fast.R
|
import com.meloda.fast.R
|
||||||
import com.meloda.fast.database.DatabaseHelper
|
import com.meloda.fast.database.AppDatabase
|
||||||
|
import com.meloda.fast.database.old.DatabaseHelper
|
||||||
import com.meloda.fast.util.AndroidUtils
|
import com.meloda.fast.util.AndroidUtils
|
||||||
import dagger.hilt.android.HiltAndroidApp
|
import dagger.hilt.android.HiltAndroidApp
|
||||||
import org.acra.ACRA
|
import org.acra.ACRA
|
||||||
@@ -49,8 +51,10 @@ class AppGlobal : Application() {
|
|||||||
lateinit var packageName: String
|
lateinit var packageName: String
|
||||||
lateinit var instance: AppGlobal
|
lateinit var instance: AppGlobal
|
||||||
|
|
||||||
|
lateinit var appDatabase: AppDatabase
|
||||||
|
|
||||||
lateinit var dbHelper: DatabaseHelper
|
lateinit var dbHelper: DatabaseHelper
|
||||||
lateinit var database: SQLiteDatabase
|
lateinit var oldDatabase: SQLiteDatabase
|
||||||
|
|
||||||
lateinit var packageManager: PackageManager
|
lateinit var packageManager: PackageManager
|
||||||
|
|
||||||
@@ -73,12 +77,18 @@ class AppGlobal : Application() {
|
|||||||
ACRA.init(this)
|
ACRA.init(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
appDatabase = Room.databaseBuilder(
|
||||||
|
this, AppDatabase::class.java, "cache"
|
||||||
|
)
|
||||||
|
.fallbackToDestructiveMigration()
|
||||||
|
.build()
|
||||||
|
|
||||||
preferences = PreferenceManager.getDefaultSharedPreferences(this)
|
preferences = PreferenceManager.getDefaultSharedPreferences(this)
|
||||||
handler = Handler(mainLooper)
|
handler = Handler(mainLooper)
|
||||||
locale = Locale.getDefault()
|
locale = Locale.getDefault()
|
||||||
|
|
||||||
dbHelper = DatabaseHelper(this)
|
dbHelper = DatabaseHelper(this)
|
||||||
database = dbHelper.writableDatabase
|
oldDatabase = dbHelper.writableDatabase
|
||||||
|
|
||||||
val info = packageManager.getPackageInfo(this.packageName, PackageManager.GET_ACTIVITIES)
|
val info = packageManager.getPackageInfo(this.packageName, PackageManager.GET_ACTIVITIES)
|
||||||
versionName = info.versionName
|
versionName = info.versionName
|
||||||
@@ -88,7 +98,6 @@ class AppGlobal : Application() {
|
|||||||
Companion.packageName = packageName
|
Companion.packageName = packageName
|
||||||
Companion.packageManager = packageManager
|
Companion.packageManager = packageManager
|
||||||
|
|
||||||
|
|
||||||
screenWidth = AndroidUtils.getDisplayWidth()
|
screenWidth = AndroidUtils.getDisplayWidth()
|
||||||
screenHeight = AndroidUtils.getDisplayHeight()
|
screenHeight = AndroidUtils.getDisplayHeight()
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,27 @@
|
|||||||
|
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.VkMessage
|
||||||
|
import com.meloda.fast.api.model.VkUser
|
||||||
|
import com.meloda.fast.database.dao.ConversationsDao
|
||||||
|
import com.meloda.fast.database.dao.MessagesDao
|
||||||
|
import com.meloda.fast.database.dao.UsersDao
|
||||||
|
|
||||||
|
@Database(
|
||||||
|
entities = [
|
||||||
|
VkConversation::class,
|
||||||
|
VkMessage::class,
|
||||||
|
VkUser::class
|
||||||
|
],
|
||||||
|
version = 1,
|
||||||
|
exportSchema = false
|
||||||
|
)
|
||||||
|
abstract class AppDatabase : RoomDatabase() {
|
||||||
|
|
||||||
|
abstract fun conversationsDao(): ConversationsDao
|
||||||
|
abstract fun messagesDao(): MessagesDao
|
||||||
|
abstract fun usersDao(): UsersDao
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
package com.meloda.fast.database.dao
|
||||||
|
|
||||||
|
import androidx.room.Dao
|
||||||
|
import com.meloda.fast.api.model.VkConversation
|
||||||
|
|
||||||
|
@Dao
|
||||||
|
interface ConversationsDao : KindaDao<VkConversation> {
|
||||||
|
}
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
package com.meloda.fast.database.dao
|
||||||
|
|
||||||
|
import androidx.room.Dao
|
||||||
|
|
||||||
|
@Dao
|
||||||
|
interface MessagesDao {
|
||||||
|
}
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
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.VkUser
|
||||||
|
|
||||||
|
@Dao
|
||||||
|
interface UsersDao : KindaDao<VkUser> {
|
||||||
|
|
||||||
|
// @Insert(onConflict = OnConflictStrategy.REPLACE)
|
||||||
|
// suspend fun insert(values: List<VkUser>)
|
||||||
|
|
||||||
|
// override suspend fun insert(values: List<VkUser>) {
|
||||||
|
// TODO("Not yet implemented")
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
|
@Query("SELECT * FROM users")
|
||||||
|
suspend fun getAll(): List<VkUser>
|
||||||
|
|
||||||
|
suspend fun insert(values: Array<out VkUser>) = insert(values.toList())
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
interface KindaDao<T> {
|
||||||
|
|
||||||
|
|
||||||
|
@Insert(onConflict = OnConflictStrategy.REPLACE)
|
||||||
|
suspend fun insert(values: List<T>)
|
||||||
|
|
||||||
|
}
|
||||||
+22
-22
@@ -1,20 +1,20 @@
|
|||||||
package com.meloda.fast.database
|
package com.meloda.fast.database.old
|
||||||
|
|
||||||
import android.content.ContentValues
|
import android.content.ContentValues
|
||||||
import android.database.Cursor
|
import android.database.Cursor
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import com.meloda.fast.common.AppGlobal.Companion.database
|
import com.meloda.fast.common.AppGlobal.Companion.oldDatabase
|
||||||
import com.meloda.fast.database.DatabaseUtils.TABLE_CHATS
|
import com.meloda.fast.database.old.DatabaseUtils.TABLE_CHATS
|
||||||
import com.meloda.fast.database.DatabaseUtils.TABLE_FRIENDS
|
import com.meloda.fast.database.old.DatabaseUtils.TABLE_FRIENDS
|
||||||
import com.meloda.fast.database.DatabaseUtils.TABLE_MESSAGES
|
import com.meloda.fast.database.old.DatabaseUtils.TABLE_MESSAGES
|
||||||
import com.meloda.fast.database.DatabaseUtils.TABLE_USERS
|
import com.meloda.fast.database.old.DatabaseUtils.TABLE_USERS
|
||||||
import com.meloda.fast.database.storage.ChatsStorage
|
import com.meloda.fast.database.old.storage.ChatsStorage
|
||||||
import com.meloda.fast.database.storage.GroupsStorage
|
import com.meloda.fast.database.old.storage.GroupsStorage
|
||||||
import com.meloda.fast.database.storage.MessagesStorage
|
import com.meloda.fast.database.old.storage.MessagesStorage
|
||||||
import com.meloda.fast.database.storage.UsersStorage
|
import com.meloda.fast.database.old.storage.UsersStorage
|
||||||
import com.meloda.fast.api.model.oldVKConversation
|
import com.meloda.fast.api.model.old.oldVKConversation
|
||||||
import com.meloda.fast.api.model.oldVKMessage
|
import com.meloda.fast.api.model.old.oldVKMessage
|
||||||
import com.meloda.fast.api.model.oldVKUser
|
import com.meloda.fast.api.model.old.oldVKUser
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
object CacheStorage {
|
object CacheStorage {
|
||||||
@@ -27,21 +27,21 @@ object CacheStorage {
|
|||||||
fun selectCursor(tableName: String): Cursor {
|
fun selectCursor(tableName: String): Cursor {
|
||||||
return QueryBuilder.query()
|
return QueryBuilder.query()
|
||||||
.select("*").from(tableName)
|
.select("*").from(tableName)
|
||||||
.asCursor(database)
|
.asCursor(oldDatabase)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun selectCursor(tableName: String, where: String): Cursor {
|
fun selectCursor(tableName: String, where: String): Cursor {
|
||||||
return QueryBuilder.query()
|
return QueryBuilder.query()
|
||||||
.select("*").from(tableName)
|
.select("*").from(tableName)
|
||||||
.where(where)
|
.where(where)
|
||||||
.asCursor(database)
|
.asCursor(oldDatabase)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun selectCursor(tableName: String, columnName: String, value: Any): Cursor {
|
fun selectCursor(tableName: String, columnName: String, value: Any): Cursor {
|
||||||
return QueryBuilder.query()
|
return QueryBuilder.query()
|
||||||
.select("*").from(tableName)
|
.select("*").from(tableName)
|
||||||
.where("$columnName=$value")
|
.where("$columnName=$value")
|
||||||
.asCursor(database)
|
.asCursor(oldDatabase)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun selectCursor(tableName: String, columnName: String, ids: IntArray): Cursor {
|
fun selectCursor(tableName: String, columnName: String, ids: IntArray): Cursor {
|
||||||
@@ -67,7 +67,7 @@ object CacheStorage {
|
|||||||
cursor.getBlob(cursor.getColumnIndexOrThrow(columnName))
|
cursor.getBlob(cursor.getColumnIndexOrThrow(columnName))
|
||||||
|
|
||||||
fun <T> insert(tableName: String, values: ArrayList<T>) {
|
fun <T> insert(tableName: String, values: ArrayList<T>) {
|
||||||
database.beginTransaction()
|
oldDatabase.beginTransaction()
|
||||||
|
|
||||||
val contentValues = ContentValues()
|
val contentValues = ContentValues()
|
||||||
|
|
||||||
@@ -94,20 +94,20 @@ object CacheStorage {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
database.insert(tableName, null, contentValues)
|
oldDatabase.insert(tableName, null, contentValues)
|
||||||
contentValues.clear()
|
contentValues.clear()
|
||||||
}
|
}
|
||||||
|
|
||||||
database.setTransactionSuccessful()
|
oldDatabase.setTransactionSuccessful()
|
||||||
database.endTransaction()
|
oldDatabase.endTransaction()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun delete(tableName: String, whereClause: String, vararg whereArgs: String) {
|
fun delete(tableName: String, whereClause: String, vararg whereArgs: String) {
|
||||||
database.delete(tableName, whereClause, whereArgs)
|
oldDatabase.delete(tableName, whereClause, whereArgs)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun delete(tableName: String) {
|
fun delete(tableName: String) {
|
||||||
database.delete(tableName, null, null)
|
oldDatabase.delete(tableName, null, null)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package com.meloda.fast.database
|
package com.meloda.fast.database.old
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.database.sqlite.SQLiteDatabase
|
import android.database.sqlite.SQLiteDatabase
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package com.meloda.fast.database
|
package com.meloda.fast.database.old
|
||||||
|
|
||||||
object DatabaseKeys {
|
object DatabaseKeys {
|
||||||
|
|
||||||
+45
-45
@@ -1,49 +1,49 @@
|
|||||||
package com.meloda.fast.database
|
package com.meloda.fast.database.old
|
||||||
|
|
||||||
import com.meloda.fast.database.DatabaseKeys.ACTION
|
import com.meloda.fast.database.old.DatabaseKeys.ACTION
|
||||||
import com.meloda.fast.database.DatabaseKeys.ATTACHMENTS
|
import com.meloda.fast.database.old.DatabaseKeys.ATTACHMENTS
|
||||||
import com.meloda.fast.database.DatabaseKeys.CHAT_STATE
|
import com.meloda.fast.database.old.DatabaseKeys.CHAT_STATE
|
||||||
import com.meloda.fast.database.DatabaseKeys.CONVERSATION_ID
|
import com.meloda.fast.database.old.DatabaseKeys.CONVERSATION_ID
|
||||||
import com.meloda.fast.database.DatabaseKeys.CONVERSATION_MESSAGE_ID
|
import com.meloda.fast.database.old.DatabaseKeys.CONVERSATION_MESSAGE_ID
|
||||||
import com.meloda.fast.database.DatabaseKeys.DATE
|
import com.meloda.fast.database.old.DatabaseKeys.DATE
|
||||||
import com.meloda.fast.database.DatabaseKeys.DEACTIVATED
|
import com.meloda.fast.database.old.DatabaseKeys.DEACTIVATED
|
||||||
import com.meloda.fast.database.DatabaseKeys.EDIT_TIME
|
import com.meloda.fast.database.old.DatabaseKeys.EDIT_TIME
|
||||||
import com.meloda.fast.database.DatabaseKeys.FIRST_NAME
|
import com.meloda.fast.database.old.DatabaseKeys.FIRST_NAME
|
||||||
import com.meloda.fast.database.DatabaseKeys.FRIEND_ID
|
import com.meloda.fast.database.old.DatabaseKeys.FRIEND_ID
|
||||||
import com.meloda.fast.database.DatabaseKeys.FROM_ID
|
import com.meloda.fast.database.old.DatabaseKeys.FROM_ID
|
||||||
import com.meloda.fast.database.DatabaseKeys.FWD_MESSAGES
|
import com.meloda.fast.database.old.DatabaseKeys.FWD_MESSAGES
|
||||||
import com.meloda.fast.database.DatabaseKeys.GENDER
|
import com.meloda.fast.database.old.DatabaseKeys.GENDER
|
||||||
import com.meloda.fast.database.DatabaseKeys.GROUP_ID
|
import com.meloda.fast.database.old.DatabaseKeys.GROUP_ID
|
||||||
import com.meloda.fast.database.DatabaseKeys.IN_READ_MESSAGE_ID
|
import com.meloda.fast.database.old.DatabaseKeys.IN_READ_MESSAGE_ID
|
||||||
import com.meloda.fast.database.DatabaseKeys.IS_ALLOWED
|
import com.meloda.fast.database.old.DatabaseKeys.IS_ALLOWED
|
||||||
import com.meloda.fast.database.DatabaseKeys.IS_CLOSED
|
import com.meloda.fast.database.old.DatabaseKeys.IS_CLOSED
|
||||||
import com.meloda.fast.database.DatabaseKeys.IS_GROUP_CHANNEL
|
import com.meloda.fast.database.old.DatabaseKeys.IS_GROUP_CHANNEL
|
||||||
import com.meloda.fast.database.DatabaseKeys.IS_NOTIFICATIONS_DISABLED
|
import com.meloda.fast.database.old.DatabaseKeys.IS_NOTIFICATIONS_DISABLED
|
||||||
import com.meloda.fast.database.DatabaseKeys.IS_ONLINE
|
import com.meloda.fast.database.old.DatabaseKeys.IS_ONLINE
|
||||||
import com.meloda.fast.database.DatabaseKeys.IS_ONLINE_MOBILE
|
import com.meloda.fast.database.old.DatabaseKeys.IS_ONLINE_MOBILE
|
||||||
import com.meloda.fast.database.DatabaseKeys.IS_OUT
|
import com.meloda.fast.database.old.DatabaseKeys.IS_OUT
|
||||||
import com.meloda.fast.database.DatabaseKeys.LAST_MESSAGE_ID
|
import com.meloda.fast.database.old.DatabaseKeys.LAST_MESSAGE_ID
|
||||||
import com.meloda.fast.database.DatabaseKeys.LAST_NAME
|
import com.meloda.fast.database.old.DatabaseKeys.LAST_NAME
|
||||||
import com.meloda.fast.database.DatabaseKeys.LAST_SEEN
|
import com.meloda.fast.database.old.DatabaseKeys.LAST_SEEN
|
||||||
import com.meloda.fast.database.DatabaseKeys.LOCAL_ID
|
import com.meloda.fast.database.old.DatabaseKeys.LOCAL_ID
|
||||||
import com.meloda.fast.database.DatabaseKeys.MEMBERS_COUNT
|
import com.meloda.fast.database.old.DatabaseKeys.MEMBERS_COUNT
|
||||||
import com.meloda.fast.database.DatabaseKeys.MESSAGE_ID
|
import com.meloda.fast.database.old.DatabaseKeys.MESSAGE_ID
|
||||||
import com.meloda.fast.database.DatabaseKeys.NAME
|
import com.meloda.fast.database.old.DatabaseKeys.NAME
|
||||||
import com.meloda.fast.database.DatabaseKeys.NOT_ALLOWED_REASON
|
import com.meloda.fast.database.old.DatabaseKeys.NOT_ALLOWED_REASON
|
||||||
import com.meloda.fast.database.DatabaseKeys.OUT_READ_MESSAGE_ID
|
import com.meloda.fast.database.old.DatabaseKeys.OUT_READ_MESSAGE_ID
|
||||||
import com.meloda.fast.database.DatabaseKeys.PEER_ID
|
import com.meloda.fast.database.old.DatabaseKeys.PEER_ID
|
||||||
import com.meloda.fast.database.DatabaseKeys.PHOTOS
|
import com.meloda.fast.database.old.DatabaseKeys.PHOTOS
|
||||||
import com.meloda.fast.database.DatabaseKeys.PINNED_MESSAGE_ID
|
import com.meloda.fast.database.old.DatabaseKeys.PINNED_MESSAGE_ID
|
||||||
import com.meloda.fast.database.DatabaseKeys.RANDOM_ID
|
import com.meloda.fast.database.old.DatabaseKeys.RANDOM_ID
|
||||||
import com.meloda.fast.database.DatabaseKeys.REPLY_MESSAGE_ID
|
import com.meloda.fast.database.old.DatabaseKeys.REPLY_MESSAGE_ID
|
||||||
import com.meloda.fast.database.DatabaseKeys.SCREEN_NAME
|
import com.meloda.fast.database.old.DatabaseKeys.SCREEN_NAME
|
||||||
import com.meloda.fast.database.DatabaseKeys.SORT_ID
|
import com.meloda.fast.database.old.DatabaseKeys.SORT_ID
|
||||||
import com.meloda.fast.database.DatabaseKeys.STATUS
|
import com.meloda.fast.database.old.DatabaseKeys.STATUS
|
||||||
import com.meloda.fast.database.DatabaseKeys.TEXT
|
import com.meloda.fast.database.old.DatabaseKeys.TEXT
|
||||||
import com.meloda.fast.database.DatabaseKeys.TITLE
|
import com.meloda.fast.database.old.DatabaseKeys.TITLE
|
||||||
import com.meloda.fast.database.DatabaseKeys.TYPE
|
import com.meloda.fast.database.old.DatabaseKeys.TYPE
|
||||||
import com.meloda.fast.database.DatabaseKeys.UNREAD_COUNT
|
import com.meloda.fast.database.old.DatabaseKeys.UNREAD_COUNT
|
||||||
import com.meloda.fast.database.DatabaseKeys.USER_ID
|
import com.meloda.fast.database.old.DatabaseKeys.USER_ID
|
||||||
|
|
||||||
object DatabaseUtils {
|
object DatabaseUtils {
|
||||||
|
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package com.meloda.fast.database
|
package com.meloda.fast.database.old
|
||||||
|
|
||||||
import android.database.Cursor
|
import android.database.Cursor
|
||||||
import android.database.sqlite.SQLiteDatabase
|
import android.database.sqlite.SQLiteDatabase
|
||||||
+2
-2
@@ -1,4 +1,4 @@
|
|||||||
package com.meloda.fast.database.base
|
package com.meloda.fast.database.old.base
|
||||||
|
|
||||||
import android.content.ContentValues
|
import android.content.ContentValues
|
||||||
import android.database.Cursor
|
import android.database.Cursor
|
||||||
@@ -10,7 +10,7 @@ abstract class Storage<T> {
|
|||||||
|
|
||||||
abstract val tag: String
|
abstract val tag: String
|
||||||
|
|
||||||
protected var database = AppGlobal.database
|
protected var database = AppGlobal.oldDatabase
|
||||||
|
|
||||||
@WorkerThread
|
@WorkerThread
|
||||||
abstract fun getAllValues(): ArrayList<T>
|
abstract fun getAllValues(): ArrayList<T>
|
||||||
+22
-22
@@ -1,31 +1,31 @@
|
|||||||
package com.meloda.fast.database.storage
|
package com.meloda.fast.database.old.storage
|
||||||
|
|
||||||
import android.content.ContentValues
|
import android.content.ContentValues
|
||||||
import android.database.Cursor
|
import android.database.Cursor
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import androidx.annotation.WorkerThread
|
import androidx.annotation.WorkerThread
|
||||||
import com.meloda.fast.database.CacheStorage
|
import com.meloda.fast.database.old.CacheStorage
|
||||||
import com.meloda.fast.database.CacheStorage.messagesStorage
|
import com.meloda.fast.database.old.CacheStorage.messagesStorage
|
||||||
import com.meloda.fast.database.DatabaseKeys.CHAT_STATE
|
import com.meloda.fast.database.old.DatabaseKeys.CHAT_STATE
|
||||||
import com.meloda.fast.database.DatabaseKeys.CONVERSATION_ID
|
import com.meloda.fast.database.old.DatabaseKeys.CONVERSATION_ID
|
||||||
import com.meloda.fast.database.DatabaseKeys.IN_READ_MESSAGE_ID
|
import com.meloda.fast.database.old.DatabaseKeys.IN_READ_MESSAGE_ID
|
||||||
import com.meloda.fast.database.DatabaseKeys.IS_ALLOWED
|
import com.meloda.fast.database.old.DatabaseKeys.IS_ALLOWED
|
||||||
import com.meloda.fast.database.DatabaseKeys.IS_GROUP_CHANNEL
|
import com.meloda.fast.database.old.DatabaseKeys.IS_GROUP_CHANNEL
|
||||||
import com.meloda.fast.database.DatabaseKeys.IS_NOTIFICATIONS_DISABLED
|
import com.meloda.fast.database.old.DatabaseKeys.IS_NOTIFICATIONS_DISABLED
|
||||||
import com.meloda.fast.database.DatabaseKeys.LAST_MESSAGE_ID
|
import com.meloda.fast.database.old.DatabaseKeys.LAST_MESSAGE_ID
|
||||||
import com.meloda.fast.database.DatabaseKeys.LOCAL_ID
|
import com.meloda.fast.database.old.DatabaseKeys.LOCAL_ID
|
||||||
import com.meloda.fast.database.DatabaseKeys.MEMBERS_COUNT
|
import com.meloda.fast.database.old.DatabaseKeys.MEMBERS_COUNT
|
||||||
import com.meloda.fast.database.DatabaseKeys.NOT_ALLOWED_REASON
|
import com.meloda.fast.database.old.DatabaseKeys.NOT_ALLOWED_REASON
|
||||||
import com.meloda.fast.database.DatabaseKeys.OUT_READ_MESSAGE_ID
|
import com.meloda.fast.database.old.DatabaseKeys.OUT_READ_MESSAGE_ID
|
||||||
import com.meloda.fast.database.DatabaseKeys.PHOTOS
|
import com.meloda.fast.database.old.DatabaseKeys.PHOTOS
|
||||||
import com.meloda.fast.database.DatabaseKeys.PINNED_MESSAGE_ID
|
import com.meloda.fast.database.old.DatabaseKeys.PINNED_MESSAGE_ID
|
||||||
import com.meloda.fast.database.DatabaseKeys.TITLE
|
import com.meloda.fast.database.old.DatabaseKeys.TITLE
|
||||||
import com.meloda.fast.database.DatabaseKeys.TYPE
|
import com.meloda.fast.database.old.DatabaseKeys.TYPE
|
||||||
import com.meloda.fast.database.DatabaseKeys.UNREAD_COUNT
|
import com.meloda.fast.database.old.DatabaseKeys.UNREAD_COUNT
|
||||||
import com.meloda.fast.database.DatabaseUtils.TABLE_CHATS
|
import com.meloda.fast.database.old.DatabaseUtils.TABLE_CHATS
|
||||||
import com.meloda.fast.database.base.Storage
|
import com.meloda.fast.database.old.base.Storage
|
||||||
import com.meloda.fast.api.model.oldVKConversation
|
import com.meloda.fast.api.model.old.oldVKConversation
|
||||||
import com.meloda.fast.api.VKUtil
|
import com.meloda.fast.api.VKUtil
|
||||||
import org.json.JSONObject
|
import org.json.JSONObject
|
||||||
|
|
||||||
+14
-14
@@ -1,23 +1,23 @@
|
|||||||
package com.meloda.fast.database.storage
|
package com.meloda.fast.database.old.storage
|
||||||
|
|
||||||
import android.content.ContentValues
|
import android.content.ContentValues
|
||||||
import android.database.Cursor
|
import android.database.Cursor
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import androidx.annotation.WorkerThread
|
import androidx.annotation.WorkerThread
|
||||||
import com.meloda.fast.database.CacheStorage
|
import com.meloda.fast.database.old.CacheStorage
|
||||||
import com.meloda.fast.database.CacheStorage.getInt
|
import com.meloda.fast.database.old.CacheStorage.getInt
|
||||||
import com.meloda.fast.database.CacheStorage.getString
|
import com.meloda.fast.database.old.CacheStorage.getString
|
||||||
import com.meloda.fast.database.DatabaseKeys.DEACTIVATED
|
import com.meloda.fast.database.old.DatabaseKeys.DEACTIVATED
|
||||||
import com.meloda.fast.database.DatabaseKeys.GROUP_ID
|
import com.meloda.fast.database.old.DatabaseKeys.GROUP_ID
|
||||||
import com.meloda.fast.database.DatabaseKeys.IS_CLOSED
|
import com.meloda.fast.database.old.DatabaseKeys.IS_CLOSED
|
||||||
import com.meloda.fast.database.DatabaseKeys.NAME
|
import com.meloda.fast.database.old.DatabaseKeys.NAME
|
||||||
import com.meloda.fast.database.DatabaseKeys.PHOTOS
|
import com.meloda.fast.database.old.DatabaseKeys.PHOTOS
|
||||||
import com.meloda.fast.database.DatabaseKeys.SCREEN_NAME
|
import com.meloda.fast.database.old.DatabaseKeys.SCREEN_NAME
|
||||||
import com.meloda.fast.database.DatabaseKeys.TYPE
|
import com.meloda.fast.database.old.DatabaseKeys.TYPE
|
||||||
import com.meloda.fast.database.DatabaseUtils.TABLE_GROUPS
|
import com.meloda.fast.database.old.DatabaseUtils.TABLE_GROUPS
|
||||||
import com.meloda.fast.database.base.Storage
|
import com.meloda.fast.database.old.base.Storage
|
||||||
import com.meloda.fast.api.model.VKGroup
|
import com.meloda.fast.api.model.old.VKGroup
|
||||||
import com.meloda.fast.api.VKUtil
|
import com.meloda.fast.api.VKUtil
|
||||||
import org.json.JSONObject
|
import org.json.JSONObject
|
||||||
|
|
||||||
+21
-21
@@ -1,31 +1,31 @@
|
|||||||
package com.meloda.fast.database.storage
|
package com.meloda.fast.database.old.storage
|
||||||
|
|
||||||
import android.content.ContentValues
|
import android.content.ContentValues
|
||||||
import android.database.Cursor
|
import android.database.Cursor
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import androidx.annotation.WorkerThread
|
import androidx.annotation.WorkerThread
|
||||||
import com.meloda.fast.database.CacheStorage
|
import com.meloda.fast.database.old.CacheStorage
|
||||||
import com.meloda.fast.database.CacheStorage.selectCursor
|
import com.meloda.fast.database.old.CacheStorage.selectCursor
|
||||||
import com.meloda.fast.database.DatabaseKeys.ACTION
|
import com.meloda.fast.database.old.DatabaseKeys.ACTION
|
||||||
import com.meloda.fast.database.DatabaseKeys.ATTACHMENTS
|
import com.meloda.fast.database.old.DatabaseKeys.ATTACHMENTS
|
||||||
import com.meloda.fast.database.DatabaseKeys.CONVERSATION_MESSAGE_ID
|
import com.meloda.fast.database.old.DatabaseKeys.CONVERSATION_MESSAGE_ID
|
||||||
import com.meloda.fast.database.DatabaseKeys.DATE
|
import com.meloda.fast.database.old.DatabaseKeys.DATE
|
||||||
import com.meloda.fast.database.DatabaseKeys.EDIT_TIME
|
import com.meloda.fast.database.old.DatabaseKeys.EDIT_TIME
|
||||||
import com.meloda.fast.database.DatabaseKeys.FROM_ID
|
import com.meloda.fast.database.old.DatabaseKeys.FROM_ID
|
||||||
import com.meloda.fast.database.DatabaseKeys.FWD_MESSAGES
|
import com.meloda.fast.database.old.DatabaseKeys.FWD_MESSAGES
|
||||||
import com.meloda.fast.database.DatabaseKeys.IS_OUT
|
import com.meloda.fast.database.old.DatabaseKeys.IS_OUT
|
||||||
import com.meloda.fast.database.DatabaseKeys.MESSAGE_ID
|
import com.meloda.fast.database.old.DatabaseKeys.MESSAGE_ID
|
||||||
import com.meloda.fast.database.DatabaseKeys.PEER_ID
|
import com.meloda.fast.database.old.DatabaseKeys.PEER_ID
|
||||||
import com.meloda.fast.database.DatabaseKeys.RANDOM_ID
|
import com.meloda.fast.database.old.DatabaseKeys.RANDOM_ID
|
||||||
import com.meloda.fast.database.DatabaseKeys.REPLY_MESSAGE_ID
|
import com.meloda.fast.database.old.DatabaseKeys.REPLY_MESSAGE_ID
|
||||||
import com.meloda.fast.database.DatabaseKeys.TEXT
|
import com.meloda.fast.database.old.DatabaseKeys.TEXT
|
||||||
import com.meloda.fast.database.DatabaseUtils.TABLE_MESSAGES
|
import com.meloda.fast.database.old.DatabaseUtils.TABLE_MESSAGES
|
||||||
import com.meloda.fast.database.base.Storage
|
import com.meloda.fast.database.old.base.Storage
|
||||||
import com.meloda.fast.util.Utils
|
import com.meloda.fast.util.Utils
|
||||||
import com.meloda.fast.api.model.oldVKMessage
|
import com.meloda.fast.api.model.old.oldVKMessage
|
||||||
import com.meloda.fast.api.model.VKMessageAction
|
import com.meloda.fast.api.model.old.VKMessageAction
|
||||||
import com.meloda.fast.api.model.VKModel
|
import com.meloda.fast.api.model.old.VKModel
|
||||||
import java.util.stream.Collectors
|
import java.util.stream.Collectors
|
||||||
|
|
||||||
@WorkerThread
|
@WorkerThread
|
||||||
+20
-20
@@ -1,4 +1,4 @@
|
|||||||
package com.meloda.fast.database.storage
|
package com.meloda.fast.database.old.storage
|
||||||
|
|
||||||
import android.content.ContentValues
|
import android.content.ContentValues
|
||||||
import android.database.Cursor
|
import android.database.Cursor
|
||||||
@@ -7,25 +7,25 @@ import android.util.Log
|
|||||||
import androidx.annotation.WorkerThread
|
import androidx.annotation.WorkerThread
|
||||||
import com.meloda.fast.api.UserConfig
|
import com.meloda.fast.api.UserConfig
|
||||||
import com.meloda.fast.api.VKUtil
|
import com.meloda.fast.api.VKUtil
|
||||||
import com.meloda.fast.api.model.oldVKUser
|
import com.meloda.fast.api.model.old.oldVKUser
|
||||||
import com.meloda.fast.database.CacheStorage
|
import com.meloda.fast.database.old.CacheStorage
|
||||||
import com.meloda.fast.database.DatabaseKeys.DEACTIVATED
|
import com.meloda.fast.database.old.DatabaseKeys.DEACTIVATED
|
||||||
import com.meloda.fast.database.DatabaseKeys.FIRST_NAME
|
import com.meloda.fast.database.old.DatabaseKeys.FIRST_NAME
|
||||||
import com.meloda.fast.database.DatabaseKeys.FRIEND_ID
|
import com.meloda.fast.database.old.DatabaseKeys.FRIEND_ID
|
||||||
import com.meloda.fast.database.DatabaseKeys.GENDER
|
import com.meloda.fast.database.old.DatabaseKeys.GENDER
|
||||||
import com.meloda.fast.database.DatabaseKeys.IS_ONLINE
|
import com.meloda.fast.database.old.DatabaseKeys.IS_ONLINE
|
||||||
import com.meloda.fast.database.DatabaseKeys.IS_ONLINE_MOBILE
|
import com.meloda.fast.database.old.DatabaseKeys.IS_ONLINE_MOBILE
|
||||||
import com.meloda.fast.database.DatabaseKeys.LAST_NAME
|
import com.meloda.fast.database.old.DatabaseKeys.LAST_NAME
|
||||||
import com.meloda.fast.database.DatabaseKeys.LAST_SEEN
|
import com.meloda.fast.database.old.DatabaseKeys.LAST_SEEN
|
||||||
import com.meloda.fast.database.DatabaseKeys.PHOTOS
|
import com.meloda.fast.database.old.DatabaseKeys.PHOTOS
|
||||||
import com.meloda.fast.database.DatabaseKeys.SCREEN_NAME
|
import com.meloda.fast.database.old.DatabaseKeys.SCREEN_NAME
|
||||||
import com.meloda.fast.database.DatabaseKeys.SORT_ID
|
import com.meloda.fast.database.old.DatabaseKeys.SORT_ID
|
||||||
import com.meloda.fast.database.DatabaseKeys.STATUS
|
import com.meloda.fast.database.old.DatabaseKeys.STATUS
|
||||||
import com.meloda.fast.database.DatabaseKeys.USER_ID
|
import com.meloda.fast.database.old.DatabaseKeys.USER_ID
|
||||||
import com.meloda.fast.database.DatabaseUtils.TABLE_FRIENDS
|
import com.meloda.fast.database.old.DatabaseUtils.TABLE_FRIENDS
|
||||||
import com.meloda.fast.database.DatabaseUtils.TABLE_USERS
|
import com.meloda.fast.database.old.DatabaseUtils.TABLE_USERS
|
||||||
import com.meloda.fast.database.QueryBuilder
|
import com.meloda.fast.database.old.QueryBuilder
|
||||||
import com.meloda.fast.database.base.Storage
|
import com.meloda.fast.database.old.base.Storage
|
||||||
import org.json.JSONObject
|
import org.json.JSONObject
|
||||||
|
|
||||||
@WorkerThread
|
@WorkerThread
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
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.MessagesDao
|
||||||
|
import com.meloda.fast.database.dao.UsersDao
|
||||||
|
import dagger.Module
|
||||||
|
import dagger.Provides
|
||||||
|
import dagger.hilt.InstallIn
|
||||||
|
import dagger.hilt.components.SingletonComponent
|
||||||
|
import javax.inject.Singleton
|
||||||
|
|
||||||
|
@InstallIn(SingletonComponent::class)
|
||||||
|
@Module
|
||||||
|
object DatabaseModule {
|
||||||
|
|
||||||
|
@Provides
|
||||||
|
@Singleton
|
||||||
|
fun provideAppDatabase(): AppDatabase =
|
||||||
|
AppGlobal.appDatabase
|
||||||
|
|
||||||
|
@Provides
|
||||||
|
@Singleton
|
||||||
|
fun provideUsersDao(appDatabase: AppDatabase): UsersDao =
|
||||||
|
appDatabase.usersDao()
|
||||||
|
|
||||||
|
@Provides
|
||||||
|
@Singleton
|
||||||
|
fun provideConversationsDao(appDatabase: AppDatabase): ConversationsDao =
|
||||||
|
appDatabase.conversationsDao()
|
||||||
|
|
||||||
|
@Provides
|
||||||
|
@Singleton
|
||||||
|
fun provideMessagesDao(appDatabase: AppDatabase): MessagesDao =
|
||||||
|
appDatabase.messagesDao()
|
||||||
|
|
||||||
|
}
|
||||||
@@ -1 +0,0 @@
|
|||||||
package com.meloda.fast.di
|
|
||||||
@@ -6,7 +6,7 @@ import com.meloda.fast.api.UserConfig
|
|||||||
import com.meloda.fast.api.VKConstants
|
import com.meloda.fast.api.VKConstants
|
||||||
import com.meloda.fast.api.VKException
|
import com.meloda.fast.api.VKException
|
||||||
import com.meloda.fast.api.VKUtil
|
import com.meloda.fast.api.VKUtil
|
||||||
import com.meloda.fast.api.network.repo.AuthRepo
|
import com.meloda.fast.api.datasource.AuthDataSource
|
||||||
import com.meloda.fast.api.network.request.RequestAuthDirect
|
import com.meloda.fast.api.network.request.RequestAuthDirect
|
||||||
import com.meloda.fast.base.viewmodel.BaseViewModel
|
import com.meloda.fast.base.viewmodel.BaseViewModel
|
||||||
import com.meloda.fast.base.viewmodel.StartProgressEvent
|
import com.meloda.fast.base.viewmodel.StartProgressEvent
|
||||||
@@ -18,7 +18,7 @@ import javax.inject.Inject
|
|||||||
|
|
||||||
@HiltViewModel
|
@HiltViewModel
|
||||||
class LoginViewModel @Inject constructor(
|
class LoginViewModel @Inject constructor(
|
||||||
private val repo: AuthRepo
|
private val dataSource: AuthDataSource
|
||||||
) : BaseViewModel() {
|
) : BaseViewModel() {
|
||||||
|
|
||||||
fun login(
|
fun login(
|
||||||
@@ -29,7 +29,7 @@ class LoginViewModel @Inject constructor(
|
|||||||
) = viewModelScope.launch {
|
) = viewModelScope.launch {
|
||||||
makeJob(
|
makeJob(
|
||||||
{
|
{
|
||||||
repo.auth(
|
dataSource.auth(
|
||||||
RequestAuthDirect(
|
RequestAuthDirect(
|
||||||
grantType = VKConstants.Auth.GrantType.PASSWORD,
|
grantType = VKConstants.Auth.GrantType.PASSWORD,
|
||||||
clientId = VKConstants.VK_APP_ID,
|
clientId = VKConstants.VK_APP_ID,
|
||||||
@@ -41,7 +41,7 @@ class LoginViewModel @Inject constructor(
|
|||||||
twoFaCode = twoFaCode,
|
twoFaCode = twoFaCode,
|
||||||
captchaSid = captcha?.first,
|
captchaSid = captcha?.first,
|
||||||
captchaKey = captcha?.second
|
captchaKey = captcha?.second
|
||||||
).map
|
)
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
onAnswer = {
|
onAnswer = {
|
||||||
@@ -79,7 +79,7 @@ class LoginViewModel @Inject constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun sendSms(validationSid: String) = viewModelScope.launch {
|
fun sendSms(validationSid: String) = viewModelScope.launch {
|
||||||
makeJob({ repo.sendSms(validationSid) },
|
makeJob({ dataSource.sendSms(validationSid) },
|
||||||
onAnswer = { sendEvent(CodeSent) },
|
onAnswer = { sendEvent(CodeSent) },
|
||||||
onError = {},
|
onError = {},
|
||||||
onStart = {},
|
onStart = {},
|
||||||
|
|||||||
@@ -1,16 +1,12 @@
|
|||||||
package com.meloda.fast.screens.messages
|
package com.meloda.fast.screens.messages
|
||||||
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.util.Log
|
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.viewbinding.library.fragment.viewBinding
|
import android.viewbinding.library.fragment.viewBinding
|
||||||
import androidx.core.view.isVisible
|
import androidx.core.view.isVisible
|
||||||
import androidx.fragment.app.viewModels
|
import androidx.fragment.app.viewModels
|
||||||
import androidx.lifecycle.lifecycleScope
|
|
||||||
import com.meloda.fast.R
|
import com.meloda.fast.R
|
||||||
import com.meloda.fast.api.LoadManager
|
|
||||||
import com.meloda.fast.api.model.VkConversation
|
import com.meloda.fast.api.model.VkConversation
|
||||||
import com.meloda.fast.api.model.VkMessage
|
|
||||||
import com.meloda.fast.base.BaseViewModelFragment
|
import com.meloda.fast.base.BaseViewModelFragment
|
||||||
import com.meloda.fast.base.viewmodel.StartProgressEvent
|
import com.meloda.fast.base.viewmodel.StartProgressEvent
|
||||||
import com.meloda.fast.base.viewmodel.StopProgressEvent
|
import com.meloda.fast.base.viewmodel.StopProgressEvent
|
||||||
@@ -18,9 +14,7 @@ import com.meloda.fast.base.viewmodel.VKEvent
|
|||||||
import com.meloda.fast.databinding.FragmentConversationsBinding
|
import com.meloda.fast.databinding.FragmentConversationsBinding
|
||||||
import com.meloda.fast.util.AndroidUtils
|
import com.meloda.fast.util.AndroidUtils
|
||||||
import dagger.hilt.android.AndroidEntryPoint
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
import kotlinx.coroutines.launch
|
|
||||||
import kotlin.math.roundToInt
|
import kotlin.math.roundToInt
|
||||||
import kotlin.system.measureTimeMillis
|
|
||||||
|
|
||||||
@AndroidEntryPoint
|
@AndroidEntryPoint
|
||||||
class ConversationsFragment :
|
class ConversationsFragment :
|
||||||
@@ -30,9 +24,6 @@ class ConversationsFragment :
|
|||||||
val TAG: String = ConversationsFragment::class.java.name
|
val TAG: String = ConversationsFragment::class.java.name
|
||||||
}
|
}
|
||||||
|
|
||||||
// @Inject
|
|
||||||
// lateinit var loadManager: LoadManager
|
|
||||||
|
|
||||||
override val viewModel: ConversationsViewModel by viewModels()
|
override val viewModel: ConversationsViewModel by viewModels()
|
||||||
private val binding: FragmentConversationsBinding by viewBinding()
|
private val binding: FragmentConversationsBinding by viewBinding()
|
||||||
|
|
||||||
@@ -52,7 +43,7 @@ class ConversationsFragment :
|
|||||||
override fun onEvent(event: VKEvent) {
|
override fun onEvent(event: VKEvent) {
|
||||||
super.onEvent(event)
|
super.onEvent(event)
|
||||||
when (event) {
|
when (event) {
|
||||||
is ConversationsLoaded -> prepareData(event)
|
is ConversationsLoaded -> refreshConversations(event.conversations)
|
||||||
is StartProgressEvent -> onProgressStarted()
|
is StartProgressEvent -> onProgressStarted()
|
||||||
is StopProgressEvent -> onProgressStopped()
|
is StopProgressEvent -> onProgressStopped()
|
||||||
}
|
}
|
||||||
@@ -74,7 +65,7 @@ class ConversationsFragment :
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun prepareRecyclerView() {
|
private fun prepareRecyclerView() {
|
||||||
|
binding.recyclerView.itemAnimator = null
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun prepareRefreshLayout() {
|
private fun prepareRefreshLayout() {
|
||||||
@@ -100,42 +91,16 @@ class ConversationsFragment :
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun prepareData(event: ConversationsLoaded) {
|
private fun refreshConversations(conversations: List<VkConversation>) {
|
||||||
val conversations = mutableListOf<VkConversation>()
|
|
||||||
|
|
||||||
val timeInMillis = measureTimeMillis {
|
|
||||||
for (i in event.conversations.indices) {
|
|
||||||
val baseConversation = event.conversations[i]
|
|
||||||
val baseMessage = event.messages[i]
|
|
||||||
|
|
||||||
conversations += VkConversation(
|
|
||||||
id = baseConversation.peer.id,
|
|
||||||
title = baseConversation.chatSettings?.title,
|
|
||||||
lastMessage = VkMessage(
|
|
||||||
id = baseMessage.id,
|
|
||||||
text = baseMessage.text,
|
|
||||||
isOut = baseMessage.out == 1,
|
|
||||||
peerId = baseMessage.peerId,
|
|
||||||
fromId = baseMessage.fromId,
|
|
||||||
date = baseMessage.date
|
|
||||||
)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Log.d(TAG, "prepareData: $timeInMillis ms")
|
|
||||||
|
|
||||||
fillRecyclerView(conversations)
|
fillRecyclerView(conversations)
|
||||||
|
|
||||||
lifecycleScope.launch {
|
viewModel.loadSomeUsers(listOf(1, 2, 3, 362877006))
|
||||||
LoadManager.users.load(listOf(1, 2, 3))
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun fillRecyclerView(values: List<VkConversation>) {
|
private fun fillRecyclerView(values: List<VkConversation>) {
|
||||||
adapter.values.clear()
|
adapter.values.clear()
|
||||||
adapter.values += values
|
adapter.values += values
|
||||||
adapter.notifyDataSetChanged()
|
adapter.notifyItemRangeChanged(0, adapter.itemCount)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -2,10 +2,11 @@ package com.meloda.fast.screens.messages
|
|||||||
|
|
||||||
import androidx.lifecycle.viewModelScope
|
import androidx.lifecycle.viewModelScope
|
||||||
import com.meloda.fast.api.VKConstants
|
import com.meloda.fast.api.VKConstants
|
||||||
import com.meloda.fast.api.model.base.BaseVkConversation
|
import com.meloda.fast.api.datasource.ConversationsDataSource
|
||||||
import com.meloda.fast.api.model.base.BaseVkMessage
|
import com.meloda.fast.api.datasource.UsersDataSource
|
||||||
import com.meloda.fast.api.network.repo.ConversationsRepo
|
import com.meloda.fast.api.model.VkConversation
|
||||||
import com.meloda.fast.api.network.request.ConversationsGetRequest
|
import com.meloda.fast.api.network.request.ConversationsGetRequest
|
||||||
|
import com.meloda.fast.api.network.request.UsersGetRequest
|
||||||
import com.meloda.fast.base.viewmodel.BaseViewModel
|
import com.meloda.fast.base.viewmodel.BaseViewModel
|
||||||
import com.meloda.fast.base.viewmodel.StartProgressEvent
|
import com.meloda.fast.base.viewmodel.StartProgressEvent
|
||||||
import com.meloda.fast.base.viewmodel.StopProgressEvent
|
import com.meloda.fast.base.viewmodel.StopProgressEvent
|
||||||
@@ -17,12 +18,13 @@ import javax.inject.Inject
|
|||||||
|
|
||||||
@HiltViewModel
|
@HiltViewModel
|
||||||
class ConversationsViewModel @Inject constructor(
|
class ConversationsViewModel @Inject constructor(
|
||||||
private val repo: ConversationsRepo
|
private val dataSource: ConversationsDataSource,
|
||||||
|
private val usersDataSource: UsersDataSource
|
||||||
) : BaseViewModel() {
|
) : BaseViewModel() {
|
||||||
|
|
||||||
fun loadConversations() = viewModelScope.launch(Dispatchers.Default) {
|
fun loadConversations() = viewModelScope.launch(Dispatchers.Default) {
|
||||||
makeJob({
|
makeJob({
|
||||||
repo.getAllChats(
|
dataSource.getAllChats(
|
||||||
ConversationsGetRequest(
|
ConversationsGetRequest(
|
||||||
count = 30,
|
count = 30,
|
||||||
fields = "${VKConstants.USER_FIELDS},${VKConstants.GROUP_FIELDS}"
|
fields = "${VKConstants.USER_FIELDS},${VKConstants.GROUP_FIELDS}"
|
||||||
@@ -35,8 +37,11 @@ class ConversationsViewModel @Inject constructor(
|
|||||||
ConversationsLoaded(
|
ConversationsLoaded(
|
||||||
count = response.count,
|
count = response.count,
|
||||||
unreadCount = response.unreadCount ?: 0,
|
unreadCount = response.unreadCount ?: 0,
|
||||||
messages = response.items.map { items -> items.lastMessage },
|
conversations = response.items.map { items ->
|
||||||
conversations = response.items.map { items -> items.conversation }
|
items.conversation.asVkConversation(
|
||||||
|
items.lastMessage.asVkMessage()
|
||||||
|
)
|
||||||
|
}
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -52,11 +57,35 @@ class ConversationsViewModel @Inject constructor(
|
|||||||
sendEvent(StopProgressEvent)
|
sendEvent(StopProgressEvent)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun loadSomeUsers(usersIds: List<Int>) = viewModelScope.launch {
|
||||||
|
makeJob({
|
||||||
|
usersDataSource.getById(
|
||||||
|
UsersGetRequest(
|
||||||
|
usersIds = usersIds,
|
||||||
|
fields = "sex"
|
||||||
|
)
|
||||||
|
)
|
||||||
|
},
|
||||||
|
onAnswer = {
|
||||||
|
val argh = it
|
||||||
|
val i = 0
|
||||||
|
it.response?.let { r ->
|
||||||
|
val users = r.map { user -> user.asVkUser() }
|
||||||
|
|
||||||
|
usersDataSource.storeUsers(users)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
onError = {
|
||||||
|
val e = it
|
||||||
|
val i = 0
|
||||||
|
})
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
data class ConversationsLoaded(
|
data class ConversationsLoaded(
|
||||||
val count: Int,
|
val count: Int,
|
||||||
val unreadCount: Int,
|
val unreadCount: Int,
|
||||||
val messages: List<BaseVkMessage>,
|
val conversations: List<VkConversation>
|
||||||
val conversations: List<BaseVkConversation>
|
|
||||||
) : VKEvent()
|
) : VKEvent()
|
||||||
@@ -6,7 +6,7 @@ import android.os.IBinder
|
|||||||
import android.util.Log
|
import android.util.Log
|
||||||
import androidx.annotation.WorkerThread
|
import androidx.annotation.WorkerThread
|
||||||
import com.meloda.fast.api.UserConfig
|
import com.meloda.fast.api.UserConfig
|
||||||
import com.meloda.fast.api.model.VKLongPollServer
|
import com.meloda.fast.api.model.old.VKLongPollServer
|
||||||
import com.meloda.fast.util.AndroidUtils
|
import com.meloda.fast.util.AndroidUtils
|
||||||
import org.json.JSONArray
|
import org.json.JSONArray
|
||||||
import org.json.JSONObject
|
import org.json.JSONObject
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import android.graphics.drawable.Drawable
|
|||||||
import androidx.core.content.ContextCompat
|
import androidx.core.content.ContextCompat
|
||||||
import com.meloda.fast.R
|
import com.meloda.fast.R
|
||||||
import com.meloda.fast.api.VKUtil
|
import com.meloda.fast.api.VKUtil
|
||||||
import com.meloda.fast.api.model.*
|
import com.meloda.fast.api.model.old.*
|
||||||
import com.meloda.fast.common.AppGlobal
|
import com.meloda.fast.common.AppGlobal
|
||||||
import com.meloda.fast.extensions.ContextExtensions.color
|
import com.meloda.fast.extensions.ContextExtensions.color
|
||||||
import com.meloda.fast.extensions.ContextExtensions.drawable
|
import com.meloda.fast.extensions.ContextExtensions.drawable
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ import com.google.android.material.snackbar.Snackbar
|
|||||||
import com.meloda.fast.extensions.ContextExtensions.color
|
import com.meloda.fast.extensions.ContextExtensions.color
|
||||||
import com.meloda.fast.R
|
import com.meloda.fast.R
|
||||||
import com.meloda.fast.widget.CircleImageView
|
import com.meloda.fast.widget.CircleImageView
|
||||||
import com.meloda.fast.api.model.oldVKUser
|
import com.meloda.fast.api.model.old.oldVKUser
|
||||||
|
|
||||||
|
|
||||||
object ViewUtils {
|
object ViewUtils {
|
||||||
|
|||||||
Reference in New Issue
Block a user