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("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.swiperefreshlayout:swiperefreshlayout:1.2.0-alpha01")
|
||||
implementation("androidx.recyclerview:recyclerview:1.2.1")
|
||||
implementation("androidx.cardview:cardview:1.0.0")
|
||||
implementation("androidx.fragment:fragment-ktx:1.3.6")
|
||||
|
||||
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.1")
|
||||
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.1")
|
||||
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.2")
|
||||
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")
|
||||
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.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.ConversationsRepo
|
||||
import com.meloda.fast.api.network.repo.MessagesRepo
|
||||
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.Provides
|
||||
import dagger.hilt.InstallIn
|
||||
@@ -67,4 +77,30 @@ class VKModules {
|
||||
fun provideUsersRepo(retrofit: Retrofit): UsersRepo =
|
||||
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 com.meloda.fast.api.model.*
|
||||
import com.meloda.fast.api.model.old.*
|
||||
import com.meloda.fast.api.network.VKErrors
|
||||
import org.json.JSONArray
|
||||
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
|
||||
|
||||
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>() {
|
||||
|
||||
@Inject
|
||||
lateinit var repo: UsersRepo
|
||||
|
||||
suspend fun load(
|
||||
usersIds: List<Int>,
|
||||
fields: String = ""
|
||||
@@ -24,12 +18,12 @@ class UsersLoader : Loader<VkUser>() {
|
||||
val usersIds: String = params["usersIds"] as String
|
||||
val fields: String = params["fields"] as String
|
||||
|
||||
val users = repo.getById(
|
||||
UsersGetRequest(
|
||||
usersIds = usersIds.split(",").map { it.toInt() },
|
||||
fields = fields
|
||||
)
|
||||
)
|
||||
// val users = repo.getById(
|
||||
// UsersGetRequest(
|
||||
// usersIds = usersIds.split(",").map { it.toInt() },
|
||||
// fields = fields
|
||||
// )
|
||||
// )
|
||||
|
||||
return emptyList()
|
||||
}
|
||||
|
||||
@@ -1,7 +1,15 @@
|
||||
package com.meloda.fast.api.model
|
||||
|
||||
import androidx.room.Entity
|
||||
import androidx.room.Ignore
|
||||
import androidx.room.PrimaryKey
|
||||
|
||||
@Entity(tableName = "conversations")
|
||||
data class VkConversation(
|
||||
@PrimaryKey(autoGenerate = false)
|
||||
val id: Int,
|
||||
val title: String?,
|
||||
val lastMessage: VkMessage
|
||||
)
|
||||
) {
|
||||
@Ignore
|
||||
var lastMessage: VkMessage? = null
|
||||
}
|
||||
|
||||
@@ -1,10 +1,19 @@
|
||||
package com.meloda.fast.api.model
|
||||
|
||||
import androidx.room.Entity
|
||||
import androidx.room.PrimaryKey
|
||||
|
||||
@Entity(tableName = "messages")
|
||||
data class VkMessage(
|
||||
@PrimaryKey(autoGenerate = false)
|
||||
val id: Int,
|
||||
val text: String?,
|
||||
val isOut: Boolean,
|
||||
val peerId: Int,
|
||||
val fromId: Int,
|
||||
val date: Int
|
||||
)
|
||||
) {
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -1,6 +1,11 @@
|
||||
package com.meloda.fast.api.model
|
||||
|
||||
import androidx.room.Entity
|
||||
import androidx.room.PrimaryKey
|
||||
|
||||
@Entity(tableName = "users")
|
||||
data class VkUser(
|
||||
@PrimaryKey(autoGenerate = false)
|
||||
val id: Int,
|
||||
val firstName: String,
|
||||
val lastName: String
|
||||
|
||||
@@ -2,6 +2,8 @@ package com.meloda.fast.api.model.base
|
||||
|
||||
import android.os.Parcelable
|
||||
import com.google.gson.annotations.SerializedName
|
||||
import com.meloda.fast.api.model.VkConversation
|
||||
import com.meloda.fast.api.model.VkMessage
|
||||
import kotlinx.parcelize.Parcelize
|
||||
|
||||
@Parcelize
|
||||
@@ -32,6 +34,11 @@ data class BaseVkConversation(
|
||||
val chatSettings: ChatSettings?
|
||||
) : Parcelable {
|
||||
|
||||
fun asVkConversation(lastMessage: VkMessage? = null) = VkConversation(
|
||||
id = peer.id,
|
||||
title = chatSettings?.title,
|
||||
).apply { this.lastMessage = lastMessage }
|
||||
|
||||
@Parcelize
|
||||
data class Peer(
|
||||
val id: Int,
|
||||
|
||||
@@ -2,6 +2,7 @@ package com.meloda.fast.api.model.base
|
||||
|
||||
import android.os.Parcelable
|
||||
import com.google.gson.annotations.SerializedName
|
||||
import com.meloda.fast.api.model.VkMessage
|
||||
import kotlinx.parcelize.Parcelize
|
||||
import kotlinx.parcelize.RawValue
|
||||
|
||||
@@ -29,6 +30,15 @@ data class BaseVkMessage(
|
||||
val geo: Geo?
|
||||
) : Parcelable {
|
||||
|
||||
fun asVkMessage() = VkMessage(
|
||||
id = id,
|
||||
text = text,
|
||||
isOut = out == 1,
|
||||
peerId = peerId,
|
||||
fromId = fromId,
|
||||
date = date
|
||||
)
|
||||
|
||||
@Parcelize
|
||||
data class Geo(
|
||||
val type: String,
|
||||
|
||||
@@ -2,6 +2,7 @@ package com.meloda.fast.api.model.base
|
||||
|
||||
import android.os.Parcelable
|
||||
import com.google.gson.annotations.SerializedName
|
||||
import com.meloda.fast.api.model.VkUser
|
||||
import kotlinx.parcelize.Parcelize
|
||||
|
||||
@Parcelize
|
||||
@@ -46,4 +47,10 @@ data class BaseVkUser(
|
||||
val appId: Int?
|
||||
) : 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 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
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package com.meloda.fast.api.model
|
||||
package com.meloda.fast.api.model.old
|
||||
|
||||
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
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package com.meloda.fast.api.model
|
||||
package com.meloda.fast.api.model.old
|
||||
|
||||
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 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
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package com.meloda.fast.api.model
|
||||
package com.meloda.fast.api.model.old
|
||||
|
||||
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
|
||||
|
||||
+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.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 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.*
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package com.meloda.fast.api.model
|
||||
package com.meloda.fast.api.model.old
|
||||
|
||||
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
|
||||
|
||||
+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 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 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
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package com.meloda.fast.api.model
|
||||
package com.meloda.fast.api.model.old
|
||||
|
||||
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 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
|
||||
|
||||
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
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package com.meloda.fast.api.model
|
||||
package com.meloda.fast.api.model.old
|
||||
|
||||
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 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.JSONObject
|
||||
@@ -3,14 +3,14 @@ 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.response.ConversationsGetResponse
|
||||
import com.meloda.fast.api.network.request.ConversationsGetRequest
|
||||
import com.meloda.fast.api.network.response.ConversationsGetResponse
|
||||
import retrofit2.http.Body
|
||||
import retrofit2.http.POST
|
||||
|
||||
interface ConversationsRepo {
|
||||
|
||||
@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.network.Answer
|
||||
import com.meloda.fast.api.network.VKUrls
|
||||
import com.meloda.fast.api.network.request.UsersGetRequest
|
||||
import dagger.Component
|
||||
import retrofit2.http.Body
|
||||
import retrofit2.http.POST
|
||||
import retrofit2.http.GET
|
||||
import retrofit2.http.QueryMap
|
||||
|
||||
interface UsersRepo {
|
||||
|
||||
@POST(VKUrls.Users.getById)
|
||||
suspend fun getById(@Body param: UsersGetRequest): Answer<ApiResponse<List<BaseVkUser>>>
|
||||
@GET(VKUrls.Users.getById)
|
||||
suspend fun getById(@QueryMap params: Map<String, String>): Answer<ApiResponse<List<BaseVkUser>>>
|
||||
|
||||
}
|
||||
@@ -1,14 +1,21 @@
|
||||
package com.meloda.fast.api.network.request
|
||||
|
||||
import android.os.Parcelable
|
||||
import com.google.gson.annotations.SerializedName
|
||||
import kotlinx.parcelize.Parcelize
|
||||
|
||||
@Parcelize
|
||||
data class UsersGetRequest(
|
||||
@SerializedName("user_ids")
|
||||
val usersIds: List<Int>,
|
||||
val fields: String? = null,
|
||||
@SerializedName("nom_case")
|
||||
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 androidx.core.content.pm.PackageInfoCompat
|
||||
import androidx.preference.PreferenceManager
|
||||
import androidx.room.Room
|
||||
import com.meloda.fast.BuildConfig
|
||||
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 dagger.hilt.android.HiltAndroidApp
|
||||
import org.acra.ACRA
|
||||
@@ -49,8 +51,10 @@ class AppGlobal : Application() {
|
||||
lateinit var packageName: String
|
||||
lateinit var instance: AppGlobal
|
||||
|
||||
lateinit var appDatabase: AppDatabase
|
||||
|
||||
lateinit var dbHelper: DatabaseHelper
|
||||
lateinit var database: SQLiteDatabase
|
||||
lateinit var oldDatabase: SQLiteDatabase
|
||||
|
||||
lateinit var packageManager: PackageManager
|
||||
|
||||
@@ -73,12 +77,18 @@ class AppGlobal : Application() {
|
||||
ACRA.init(this)
|
||||
}
|
||||
|
||||
appDatabase = Room.databaseBuilder(
|
||||
this, AppDatabase::class.java, "cache"
|
||||
)
|
||||
.fallbackToDestructiveMigration()
|
||||
.build()
|
||||
|
||||
preferences = PreferenceManager.getDefaultSharedPreferences(this)
|
||||
handler = Handler(mainLooper)
|
||||
locale = Locale.getDefault()
|
||||
|
||||
dbHelper = DatabaseHelper(this)
|
||||
database = dbHelper.writableDatabase
|
||||
oldDatabase = dbHelper.writableDatabase
|
||||
|
||||
val info = packageManager.getPackageInfo(this.packageName, PackageManager.GET_ACTIVITIES)
|
||||
versionName = info.versionName
|
||||
@@ -88,7 +98,6 @@ class AppGlobal : Application() {
|
||||
Companion.packageName = packageName
|
||||
Companion.packageManager = packageManager
|
||||
|
||||
|
||||
screenWidth = AndroidUtils.getDisplayWidth()
|
||||
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.database.Cursor
|
||||
import android.os.Bundle
|
||||
import com.meloda.fast.common.AppGlobal.Companion.database
|
||||
import com.meloda.fast.database.DatabaseUtils.TABLE_CHATS
|
||||
import com.meloda.fast.database.DatabaseUtils.TABLE_FRIENDS
|
||||
import com.meloda.fast.database.DatabaseUtils.TABLE_MESSAGES
|
||||
import com.meloda.fast.database.DatabaseUtils.TABLE_USERS
|
||||
import com.meloda.fast.database.storage.ChatsStorage
|
||||
import com.meloda.fast.database.storage.GroupsStorage
|
||||
import com.meloda.fast.database.storage.MessagesStorage
|
||||
import com.meloda.fast.database.storage.UsersStorage
|
||||
import com.meloda.fast.api.model.oldVKConversation
|
||||
import com.meloda.fast.api.model.oldVKMessage
|
||||
import com.meloda.fast.api.model.oldVKUser
|
||||
import com.meloda.fast.common.AppGlobal.Companion.oldDatabase
|
||||
import com.meloda.fast.database.old.DatabaseUtils.TABLE_CHATS
|
||||
import com.meloda.fast.database.old.DatabaseUtils.TABLE_FRIENDS
|
||||
import com.meloda.fast.database.old.DatabaseUtils.TABLE_MESSAGES
|
||||
import com.meloda.fast.database.old.DatabaseUtils.TABLE_USERS
|
||||
import com.meloda.fast.database.old.storage.ChatsStorage
|
||||
import com.meloda.fast.database.old.storage.GroupsStorage
|
||||
import com.meloda.fast.database.old.storage.MessagesStorage
|
||||
import com.meloda.fast.database.old.storage.UsersStorage
|
||||
import com.meloda.fast.api.model.old.oldVKConversation
|
||||
import com.meloda.fast.api.model.old.oldVKMessage
|
||||
import com.meloda.fast.api.model.old.oldVKUser
|
||||
import java.util.*
|
||||
|
||||
object CacheStorage {
|
||||
@@ -27,21 +27,21 @@ object CacheStorage {
|
||||
fun selectCursor(tableName: String): Cursor {
|
||||
return QueryBuilder.query()
|
||||
.select("*").from(tableName)
|
||||
.asCursor(database)
|
||||
.asCursor(oldDatabase)
|
||||
}
|
||||
|
||||
fun selectCursor(tableName: String, where: String): Cursor {
|
||||
return QueryBuilder.query()
|
||||
.select("*").from(tableName)
|
||||
.where(where)
|
||||
.asCursor(database)
|
||||
.asCursor(oldDatabase)
|
||||
}
|
||||
|
||||
fun selectCursor(tableName: String, columnName: String, value: Any): Cursor {
|
||||
return QueryBuilder.query()
|
||||
.select("*").from(tableName)
|
||||
.where("$columnName=$value")
|
||||
.asCursor(database)
|
||||
.asCursor(oldDatabase)
|
||||
}
|
||||
|
||||
fun selectCursor(tableName: String, columnName: String, ids: IntArray): Cursor {
|
||||
@@ -67,7 +67,7 @@ object CacheStorage {
|
||||
cursor.getBlob(cursor.getColumnIndexOrThrow(columnName))
|
||||
|
||||
fun <T> insert(tableName: String, values: ArrayList<T>) {
|
||||
database.beginTransaction()
|
||||
oldDatabase.beginTransaction()
|
||||
|
||||
val contentValues = ContentValues()
|
||||
|
||||
@@ -94,20 +94,20 @@ object CacheStorage {
|
||||
}
|
||||
}
|
||||
|
||||
database.insert(tableName, null, contentValues)
|
||||
oldDatabase.insert(tableName, null, contentValues)
|
||||
contentValues.clear()
|
||||
}
|
||||
|
||||
database.setTransactionSuccessful()
|
||||
database.endTransaction()
|
||||
oldDatabase.setTransactionSuccessful()
|
||||
oldDatabase.endTransaction()
|
||||
}
|
||||
|
||||
fun delete(tableName: String, whereClause: String, vararg whereArgs: String) {
|
||||
database.delete(tableName, whereClause, whereArgs)
|
||||
oldDatabase.delete(tableName, whereClause, whereArgs)
|
||||
}
|
||||
|
||||
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.database.sqlite.SQLiteDatabase
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package com.meloda.fast.database
|
||||
package com.meloda.fast.database.old
|
||||
|
||||
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.DatabaseKeys.ATTACHMENTS
|
||||
import com.meloda.fast.database.DatabaseKeys.CHAT_STATE
|
||||
import com.meloda.fast.database.DatabaseKeys.CONVERSATION_ID
|
||||
import com.meloda.fast.database.DatabaseKeys.CONVERSATION_MESSAGE_ID
|
||||
import com.meloda.fast.database.DatabaseKeys.DATE
|
||||
import com.meloda.fast.database.DatabaseKeys.DEACTIVATED
|
||||
import com.meloda.fast.database.DatabaseKeys.EDIT_TIME
|
||||
import com.meloda.fast.database.DatabaseKeys.FIRST_NAME
|
||||
import com.meloda.fast.database.DatabaseKeys.FRIEND_ID
|
||||
import com.meloda.fast.database.DatabaseKeys.FROM_ID
|
||||
import com.meloda.fast.database.DatabaseKeys.FWD_MESSAGES
|
||||
import com.meloda.fast.database.DatabaseKeys.GENDER
|
||||
import com.meloda.fast.database.DatabaseKeys.GROUP_ID
|
||||
import com.meloda.fast.database.DatabaseKeys.IN_READ_MESSAGE_ID
|
||||
import com.meloda.fast.database.DatabaseKeys.IS_ALLOWED
|
||||
import com.meloda.fast.database.DatabaseKeys.IS_CLOSED
|
||||
import com.meloda.fast.database.DatabaseKeys.IS_GROUP_CHANNEL
|
||||
import com.meloda.fast.database.DatabaseKeys.IS_NOTIFICATIONS_DISABLED
|
||||
import com.meloda.fast.database.DatabaseKeys.IS_ONLINE
|
||||
import com.meloda.fast.database.DatabaseKeys.IS_ONLINE_MOBILE
|
||||
import com.meloda.fast.database.DatabaseKeys.IS_OUT
|
||||
import com.meloda.fast.database.DatabaseKeys.LAST_MESSAGE_ID
|
||||
import com.meloda.fast.database.DatabaseKeys.LAST_NAME
|
||||
import com.meloda.fast.database.DatabaseKeys.LAST_SEEN
|
||||
import com.meloda.fast.database.DatabaseKeys.LOCAL_ID
|
||||
import com.meloda.fast.database.DatabaseKeys.MEMBERS_COUNT
|
||||
import com.meloda.fast.database.DatabaseKeys.MESSAGE_ID
|
||||
import com.meloda.fast.database.DatabaseKeys.NAME
|
||||
import com.meloda.fast.database.DatabaseKeys.NOT_ALLOWED_REASON
|
||||
import com.meloda.fast.database.DatabaseKeys.OUT_READ_MESSAGE_ID
|
||||
import com.meloda.fast.database.DatabaseKeys.PEER_ID
|
||||
import com.meloda.fast.database.DatabaseKeys.PHOTOS
|
||||
import com.meloda.fast.database.DatabaseKeys.PINNED_MESSAGE_ID
|
||||
import com.meloda.fast.database.DatabaseKeys.RANDOM_ID
|
||||
import com.meloda.fast.database.DatabaseKeys.REPLY_MESSAGE_ID
|
||||
import com.meloda.fast.database.DatabaseKeys.SCREEN_NAME
|
||||
import com.meloda.fast.database.DatabaseKeys.SORT_ID
|
||||
import com.meloda.fast.database.DatabaseKeys.STATUS
|
||||
import com.meloda.fast.database.DatabaseKeys.TEXT
|
||||
import com.meloda.fast.database.DatabaseKeys.TITLE
|
||||
import com.meloda.fast.database.DatabaseKeys.TYPE
|
||||
import com.meloda.fast.database.DatabaseKeys.UNREAD_COUNT
|
||||
import com.meloda.fast.database.DatabaseKeys.USER_ID
|
||||
import com.meloda.fast.database.old.DatabaseKeys.ACTION
|
||||
import com.meloda.fast.database.old.DatabaseKeys.ATTACHMENTS
|
||||
import com.meloda.fast.database.old.DatabaseKeys.CHAT_STATE
|
||||
import com.meloda.fast.database.old.DatabaseKeys.CONVERSATION_ID
|
||||
import com.meloda.fast.database.old.DatabaseKeys.CONVERSATION_MESSAGE_ID
|
||||
import com.meloda.fast.database.old.DatabaseKeys.DATE
|
||||
import com.meloda.fast.database.old.DatabaseKeys.DEACTIVATED
|
||||
import com.meloda.fast.database.old.DatabaseKeys.EDIT_TIME
|
||||
import com.meloda.fast.database.old.DatabaseKeys.FIRST_NAME
|
||||
import com.meloda.fast.database.old.DatabaseKeys.FRIEND_ID
|
||||
import com.meloda.fast.database.old.DatabaseKeys.FROM_ID
|
||||
import com.meloda.fast.database.old.DatabaseKeys.FWD_MESSAGES
|
||||
import com.meloda.fast.database.old.DatabaseKeys.GENDER
|
||||
import com.meloda.fast.database.old.DatabaseKeys.GROUP_ID
|
||||
import com.meloda.fast.database.old.DatabaseKeys.IN_READ_MESSAGE_ID
|
||||
import com.meloda.fast.database.old.DatabaseKeys.IS_ALLOWED
|
||||
import com.meloda.fast.database.old.DatabaseKeys.IS_CLOSED
|
||||
import com.meloda.fast.database.old.DatabaseKeys.IS_GROUP_CHANNEL
|
||||
import com.meloda.fast.database.old.DatabaseKeys.IS_NOTIFICATIONS_DISABLED
|
||||
import com.meloda.fast.database.old.DatabaseKeys.IS_ONLINE
|
||||
import com.meloda.fast.database.old.DatabaseKeys.IS_ONLINE_MOBILE
|
||||
import com.meloda.fast.database.old.DatabaseKeys.IS_OUT
|
||||
import com.meloda.fast.database.old.DatabaseKeys.LAST_MESSAGE_ID
|
||||
import com.meloda.fast.database.old.DatabaseKeys.LAST_NAME
|
||||
import com.meloda.fast.database.old.DatabaseKeys.LAST_SEEN
|
||||
import com.meloda.fast.database.old.DatabaseKeys.LOCAL_ID
|
||||
import com.meloda.fast.database.old.DatabaseKeys.MEMBERS_COUNT
|
||||
import com.meloda.fast.database.old.DatabaseKeys.MESSAGE_ID
|
||||
import com.meloda.fast.database.old.DatabaseKeys.NAME
|
||||
import com.meloda.fast.database.old.DatabaseKeys.NOT_ALLOWED_REASON
|
||||
import com.meloda.fast.database.old.DatabaseKeys.OUT_READ_MESSAGE_ID
|
||||
import com.meloda.fast.database.old.DatabaseKeys.PEER_ID
|
||||
import com.meloda.fast.database.old.DatabaseKeys.PHOTOS
|
||||
import com.meloda.fast.database.old.DatabaseKeys.PINNED_MESSAGE_ID
|
||||
import com.meloda.fast.database.old.DatabaseKeys.RANDOM_ID
|
||||
import com.meloda.fast.database.old.DatabaseKeys.REPLY_MESSAGE_ID
|
||||
import com.meloda.fast.database.old.DatabaseKeys.SCREEN_NAME
|
||||
import com.meloda.fast.database.old.DatabaseKeys.SORT_ID
|
||||
import com.meloda.fast.database.old.DatabaseKeys.STATUS
|
||||
import com.meloda.fast.database.old.DatabaseKeys.TEXT
|
||||
import com.meloda.fast.database.old.DatabaseKeys.TITLE
|
||||
import com.meloda.fast.database.old.DatabaseKeys.TYPE
|
||||
import com.meloda.fast.database.old.DatabaseKeys.UNREAD_COUNT
|
||||
import com.meloda.fast.database.old.DatabaseKeys.USER_ID
|
||||
|
||||
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.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.database.Cursor
|
||||
@@ -10,7 +10,7 @@ abstract class Storage<T> {
|
||||
|
||||
abstract val tag: String
|
||||
|
||||
protected var database = AppGlobal.database
|
||||
protected var database = AppGlobal.oldDatabase
|
||||
|
||||
@WorkerThread
|
||||
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.database.Cursor
|
||||
import android.os.Bundle
|
||||
import android.util.Log
|
||||
import androidx.annotation.WorkerThread
|
||||
import com.meloda.fast.database.CacheStorage
|
||||
import com.meloda.fast.database.CacheStorage.messagesStorage
|
||||
import com.meloda.fast.database.DatabaseKeys.CHAT_STATE
|
||||
import com.meloda.fast.database.DatabaseKeys.CONVERSATION_ID
|
||||
import com.meloda.fast.database.DatabaseKeys.IN_READ_MESSAGE_ID
|
||||
import com.meloda.fast.database.DatabaseKeys.IS_ALLOWED
|
||||
import com.meloda.fast.database.DatabaseKeys.IS_GROUP_CHANNEL
|
||||
import com.meloda.fast.database.DatabaseKeys.IS_NOTIFICATIONS_DISABLED
|
||||
import com.meloda.fast.database.DatabaseKeys.LAST_MESSAGE_ID
|
||||
import com.meloda.fast.database.DatabaseKeys.LOCAL_ID
|
||||
import com.meloda.fast.database.DatabaseKeys.MEMBERS_COUNT
|
||||
import com.meloda.fast.database.DatabaseKeys.NOT_ALLOWED_REASON
|
||||
import com.meloda.fast.database.DatabaseKeys.OUT_READ_MESSAGE_ID
|
||||
import com.meloda.fast.database.DatabaseKeys.PHOTOS
|
||||
import com.meloda.fast.database.DatabaseKeys.PINNED_MESSAGE_ID
|
||||
import com.meloda.fast.database.DatabaseKeys.TITLE
|
||||
import com.meloda.fast.database.DatabaseKeys.TYPE
|
||||
import com.meloda.fast.database.DatabaseKeys.UNREAD_COUNT
|
||||
import com.meloda.fast.database.DatabaseUtils.TABLE_CHATS
|
||||
import com.meloda.fast.database.base.Storage
|
||||
import com.meloda.fast.api.model.oldVKConversation
|
||||
import com.meloda.fast.database.old.CacheStorage
|
||||
import com.meloda.fast.database.old.CacheStorage.messagesStorage
|
||||
import com.meloda.fast.database.old.DatabaseKeys.CHAT_STATE
|
||||
import com.meloda.fast.database.old.DatabaseKeys.CONVERSATION_ID
|
||||
import com.meloda.fast.database.old.DatabaseKeys.IN_READ_MESSAGE_ID
|
||||
import com.meloda.fast.database.old.DatabaseKeys.IS_ALLOWED
|
||||
import com.meloda.fast.database.old.DatabaseKeys.IS_GROUP_CHANNEL
|
||||
import com.meloda.fast.database.old.DatabaseKeys.IS_NOTIFICATIONS_DISABLED
|
||||
import com.meloda.fast.database.old.DatabaseKeys.LAST_MESSAGE_ID
|
||||
import com.meloda.fast.database.old.DatabaseKeys.LOCAL_ID
|
||||
import com.meloda.fast.database.old.DatabaseKeys.MEMBERS_COUNT
|
||||
import com.meloda.fast.database.old.DatabaseKeys.NOT_ALLOWED_REASON
|
||||
import com.meloda.fast.database.old.DatabaseKeys.OUT_READ_MESSAGE_ID
|
||||
import com.meloda.fast.database.old.DatabaseKeys.PHOTOS
|
||||
import com.meloda.fast.database.old.DatabaseKeys.PINNED_MESSAGE_ID
|
||||
import com.meloda.fast.database.old.DatabaseKeys.TITLE
|
||||
import com.meloda.fast.database.old.DatabaseKeys.TYPE
|
||||
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 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.database.Cursor
|
||||
import android.os.Bundle
|
||||
import android.util.Log
|
||||
import androidx.annotation.WorkerThread
|
||||
import com.meloda.fast.database.CacheStorage
|
||||
import com.meloda.fast.database.CacheStorage.getInt
|
||||
import com.meloda.fast.database.CacheStorage.getString
|
||||
import com.meloda.fast.database.DatabaseKeys.DEACTIVATED
|
||||
import com.meloda.fast.database.DatabaseKeys.GROUP_ID
|
||||
import com.meloda.fast.database.DatabaseKeys.IS_CLOSED
|
||||
import com.meloda.fast.database.DatabaseKeys.NAME
|
||||
import com.meloda.fast.database.DatabaseKeys.PHOTOS
|
||||
import com.meloda.fast.database.DatabaseKeys.SCREEN_NAME
|
||||
import com.meloda.fast.database.DatabaseKeys.TYPE
|
||||
import com.meloda.fast.database.DatabaseUtils.TABLE_GROUPS
|
||||
import com.meloda.fast.database.base.Storage
|
||||
import com.meloda.fast.api.model.VKGroup
|
||||
import com.meloda.fast.database.old.CacheStorage
|
||||
import com.meloda.fast.database.old.CacheStorage.getInt
|
||||
import com.meloda.fast.database.old.CacheStorage.getString
|
||||
import com.meloda.fast.database.old.DatabaseKeys.DEACTIVATED
|
||||
import com.meloda.fast.database.old.DatabaseKeys.GROUP_ID
|
||||
import com.meloda.fast.database.old.DatabaseKeys.IS_CLOSED
|
||||
import com.meloda.fast.database.old.DatabaseKeys.NAME
|
||||
import com.meloda.fast.database.old.DatabaseKeys.PHOTOS
|
||||
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 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.database.Cursor
|
||||
import android.os.Bundle
|
||||
import android.util.Log
|
||||
import androidx.annotation.WorkerThread
|
||||
import com.meloda.fast.database.CacheStorage
|
||||
import com.meloda.fast.database.CacheStorage.selectCursor
|
||||
import com.meloda.fast.database.DatabaseKeys.ACTION
|
||||
import com.meloda.fast.database.DatabaseKeys.ATTACHMENTS
|
||||
import com.meloda.fast.database.DatabaseKeys.CONVERSATION_MESSAGE_ID
|
||||
import com.meloda.fast.database.DatabaseKeys.DATE
|
||||
import com.meloda.fast.database.DatabaseKeys.EDIT_TIME
|
||||
import com.meloda.fast.database.DatabaseKeys.FROM_ID
|
||||
import com.meloda.fast.database.DatabaseKeys.FWD_MESSAGES
|
||||
import com.meloda.fast.database.DatabaseKeys.IS_OUT
|
||||
import com.meloda.fast.database.DatabaseKeys.MESSAGE_ID
|
||||
import com.meloda.fast.database.DatabaseKeys.PEER_ID
|
||||
import com.meloda.fast.database.DatabaseKeys.RANDOM_ID
|
||||
import com.meloda.fast.database.DatabaseKeys.REPLY_MESSAGE_ID
|
||||
import com.meloda.fast.database.DatabaseKeys.TEXT
|
||||
import com.meloda.fast.database.DatabaseUtils.TABLE_MESSAGES
|
||||
import com.meloda.fast.database.base.Storage
|
||||
import com.meloda.fast.database.old.CacheStorage
|
||||
import com.meloda.fast.database.old.CacheStorage.selectCursor
|
||||
import com.meloda.fast.database.old.DatabaseKeys.ACTION
|
||||
import com.meloda.fast.database.old.DatabaseKeys.ATTACHMENTS
|
||||
import com.meloda.fast.database.old.DatabaseKeys.CONVERSATION_MESSAGE_ID
|
||||
import com.meloda.fast.database.old.DatabaseKeys.DATE
|
||||
import com.meloda.fast.database.old.DatabaseKeys.EDIT_TIME
|
||||
import com.meloda.fast.database.old.DatabaseKeys.FROM_ID
|
||||
import com.meloda.fast.database.old.DatabaseKeys.FWD_MESSAGES
|
||||
import com.meloda.fast.database.old.DatabaseKeys.IS_OUT
|
||||
import com.meloda.fast.database.old.DatabaseKeys.MESSAGE_ID
|
||||
import com.meloda.fast.database.old.DatabaseKeys.PEER_ID
|
||||
import com.meloda.fast.database.old.DatabaseKeys.RANDOM_ID
|
||||
import com.meloda.fast.database.old.DatabaseKeys.REPLY_MESSAGE_ID
|
||||
import com.meloda.fast.database.old.DatabaseKeys.TEXT
|
||||
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.oldVKMessage
|
||||
import com.meloda.fast.api.model.VKMessageAction
|
||||
import com.meloda.fast.api.model.VKModel
|
||||
import com.meloda.fast.api.model.old.oldVKMessage
|
||||
import com.meloda.fast.api.model.old.VKMessageAction
|
||||
import com.meloda.fast.api.model.old.VKModel
|
||||
import java.util.stream.Collectors
|
||||
|
||||
@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.database.Cursor
|
||||
@@ -7,25 +7,25 @@ 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.model.oldVKUser
|
||||
import com.meloda.fast.database.CacheStorage
|
||||
import com.meloda.fast.database.DatabaseKeys.DEACTIVATED
|
||||
import com.meloda.fast.database.DatabaseKeys.FIRST_NAME
|
||||
import com.meloda.fast.database.DatabaseKeys.FRIEND_ID
|
||||
import com.meloda.fast.database.DatabaseKeys.GENDER
|
||||
import com.meloda.fast.database.DatabaseKeys.IS_ONLINE
|
||||
import com.meloda.fast.database.DatabaseKeys.IS_ONLINE_MOBILE
|
||||
import com.meloda.fast.database.DatabaseKeys.LAST_NAME
|
||||
import com.meloda.fast.database.DatabaseKeys.LAST_SEEN
|
||||
import com.meloda.fast.database.DatabaseKeys.PHOTOS
|
||||
import com.meloda.fast.database.DatabaseKeys.SCREEN_NAME
|
||||
import com.meloda.fast.database.DatabaseKeys.SORT_ID
|
||||
import com.meloda.fast.database.DatabaseKeys.STATUS
|
||||
import com.meloda.fast.database.DatabaseKeys.USER_ID
|
||||
import com.meloda.fast.database.DatabaseUtils.TABLE_FRIENDS
|
||||
import com.meloda.fast.database.DatabaseUtils.TABLE_USERS
|
||||
import com.meloda.fast.database.QueryBuilder
|
||||
import com.meloda.fast.database.base.Storage
|
||||
import com.meloda.fast.api.model.old.oldVKUser
|
||||
import com.meloda.fast.database.old.CacheStorage
|
||||
import com.meloda.fast.database.old.DatabaseKeys.DEACTIVATED
|
||||
import com.meloda.fast.database.old.DatabaseKeys.FIRST_NAME
|
||||
import com.meloda.fast.database.old.DatabaseKeys.FRIEND_ID
|
||||
import com.meloda.fast.database.old.DatabaseKeys.GENDER
|
||||
import com.meloda.fast.database.old.DatabaseKeys.IS_ONLINE
|
||||
import com.meloda.fast.database.old.DatabaseKeys.IS_ONLINE_MOBILE
|
||||
import com.meloda.fast.database.old.DatabaseKeys.LAST_NAME
|
||||
import com.meloda.fast.database.old.DatabaseKeys.LAST_SEEN
|
||||
import com.meloda.fast.database.old.DatabaseKeys.PHOTOS
|
||||
import com.meloda.fast.database.old.DatabaseKeys.SCREEN_NAME
|
||||
import com.meloda.fast.database.old.DatabaseKeys.SORT_ID
|
||||
import com.meloda.fast.database.old.DatabaseKeys.STATUS
|
||||
import com.meloda.fast.database.old.DatabaseKeys.USER_ID
|
||||
import com.meloda.fast.database.old.DatabaseUtils.TABLE_FRIENDS
|
||||
import com.meloda.fast.database.old.DatabaseUtils.TABLE_USERS
|
||||
import com.meloda.fast.database.old.QueryBuilder
|
||||
import com.meloda.fast.database.old.base.Storage
|
||||
import org.json.JSONObject
|
||||
|
||||
@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.VKException
|
||||
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.base.viewmodel.BaseViewModel
|
||||
import com.meloda.fast.base.viewmodel.StartProgressEvent
|
||||
@@ -18,7 +18,7 @@ import javax.inject.Inject
|
||||
|
||||
@HiltViewModel
|
||||
class LoginViewModel @Inject constructor(
|
||||
private val repo: AuthRepo
|
||||
private val dataSource: AuthDataSource
|
||||
) : BaseViewModel() {
|
||||
|
||||
fun login(
|
||||
@@ -29,7 +29,7 @@ class LoginViewModel @Inject constructor(
|
||||
) = viewModelScope.launch {
|
||||
makeJob(
|
||||
{
|
||||
repo.auth(
|
||||
dataSource.auth(
|
||||
RequestAuthDirect(
|
||||
grantType = VKConstants.Auth.GrantType.PASSWORD,
|
||||
clientId = VKConstants.VK_APP_ID,
|
||||
@@ -41,7 +41,7 @@ class LoginViewModel @Inject constructor(
|
||||
twoFaCode = twoFaCode,
|
||||
captchaSid = captcha?.first,
|
||||
captchaKey = captcha?.second
|
||||
).map
|
||||
)
|
||||
)
|
||||
},
|
||||
onAnswer = {
|
||||
@@ -79,7 +79,7 @@ class LoginViewModel @Inject constructor(
|
||||
}
|
||||
|
||||
fun sendSms(validationSid: String) = viewModelScope.launch {
|
||||
makeJob({ repo.sendSms(validationSid) },
|
||||
makeJob({ dataSource.sendSms(validationSid) },
|
||||
onAnswer = { sendEvent(CodeSent) },
|
||||
onError = {},
|
||||
onStart = {},
|
||||
|
||||
@@ -1,16 +1,12 @@
|
||||
package com.meloda.fast.screens.messages
|
||||
|
||||
import android.os.Bundle
|
||||
import android.util.Log
|
||||
import android.view.View
|
||||
import android.viewbinding.library.fragment.viewBinding
|
||||
import androidx.core.view.isVisible
|
||||
import androidx.fragment.app.viewModels
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import com.meloda.fast.R
|
||||
import com.meloda.fast.api.LoadManager
|
||||
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.viewmodel.StartProgressEvent
|
||||
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.util.AndroidUtils
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlin.math.roundToInt
|
||||
import kotlin.system.measureTimeMillis
|
||||
|
||||
@AndroidEntryPoint
|
||||
class ConversationsFragment :
|
||||
@@ -30,9 +24,6 @@ class ConversationsFragment :
|
||||
val TAG: String = ConversationsFragment::class.java.name
|
||||
}
|
||||
|
||||
// @Inject
|
||||
// lateinit var loadManager: LoadManager
|
||||
|
||||
override val viewModel: ConversationsViewModel by viewModels()
|
||||
private val binding: FragmentConversationsBinding by viewBinding()
|
||||
|
||||
@@ -52,7 +43,7 @@ class ConversationsFragment :
|
||||
override fun onEvent(event: VKEvent) {
|
||||
super.onEvent(event)
|
||||
when (event) {
|
||||
is ConversationsLoaded -> prepareData(event)
|
||||
is ConversationsLoaded -> refreshConversations(event.conversations)
|
||||
is StartProgressEvent -> onProgressStarted()
|
||||
is StopProgressEvent -> onProgressStopped()
|
||||
}
|
||||
@@ -74,7 +65,7 @@ class ConversationsFragment :
|
||||
}
|
||||
|
||||
private fun prepareRecyclerView() {
|
||||
|
||||
binding.recyclerView.itemAnimator = null
|
||||
}
|
||||
|
||||
private fun prepareRefreshLayout() {
|
||||
@@ -100,42 +91,16 @@ class ConversationsFragment :
|
||||
}
|
||||
}
|
||||
|
||||
private fun prepareData(event: ConversationsLoaded) {
|
||||
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")
|
||||
|
||||
private fun refreshConversations(conversations: List<VkConversation>) {
|
||||
fillRecyclerView(conversations)
|
||||
|
||||
lifecycleScope.launch {
|
||||
LoadManager.users.load(listOf(1, 2, 3))
|
||||
}
|
||||
viewModel.loadSomeUsers(listOf(1, 2, 3, 362877006))
|
||||
}
|
||||
|
||||
private fun fillRecyclerView(values: List<VkConversation>) {
|
||||
adapter.values.clear()
|
||||
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 com.meloda.fast.api.VKConstants
|
||||
import com.meloda.fast.api.model.base.BaseVkConversation
|
||||
import com.meloda.fast.api.model.base.BaseVkMessage
|
||||
import com.meloda.fast.api.network.repo.ConversationsRepo
|
||||
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.network.request.ConversationsGetRequest
|
||||
import com.meloda.fast.api.network.request.UsersGetRequest
|
||||
import com.meloda.fast.base.viewmodel.BaseViewModel
|
||||
import com.meloda.fast.base.viewmodel.StartProgressEvent
|
||||
import com.meloda.fast.base.viewmodel.StopProgressEvent
|
||||
@@ -17,12 +18,13 @@ import javax.inject.Inject
|
||||
|
||||
@HiltViewModel
|
||||
class ConversationsViewModel @Inject constructor(
|
||||
private val repo: ConversationsRepo
|
||||
private val dataSource: ConversationsDataSource,
|
||||
private val usersDataSource: UsersDataSource
|
||||
) : BaseViewModel() {
|
||||
|
||||
fun loadConversations() = viewModelScope.launch(Dispatchers.Default) {
|
||||
makeJob({
|
||||
repo.getAllChats(
|
||||
dataSource.getAllChats(
|
||||
ConversationsGetRequest(
|
||||
count = 30,
|
||||
fields = "${VKConstants.USER_FIELDS},${VKConstants.GROUP_FIELDS}"
|
||||
@@ -35,8 +37,11 @@ class ConversationsViewModel @Inject constructor(
|
||||
ConversationsLoaded(
|
||||
count = response.count,
|
||||
unreadCount = response.unreadCount ?: 0,
|
||||
messages = response.items.map { items -> items.lastMessage },
|
||||
conversations = response.items.map { items -> items.conversation }
|
||||
conversations = response.items.map { items ->
|
||||
items.conversation.asVkConversation(
|
||||
items.lastMessage.asVkMessage()
|
||||
)
|
||||
}
|
||||
)
|
||||
)
|
||||
}
|
||||
@@ -52,11 +57,35 @@ class ConversationsViewModel @Inject constructor(
|
||||
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(
|
||||
val count: Int,
|
||||
val unreadCount: Int,
|
||||
val messages: List<BaseVkMessage>,
|
||||
val conversations: List<BaseVkConversation>
|
||||
val conversations: List<VkConversation>
|
||||
) : VKEvent()
|
||||
@@ -6,7 +6,7 @@ import android.os.IBinder
|
||||
import android.util.Log
|
||||
import androidx.annotation.WorkerThread
|
||||
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 org.json.JSONArray
|
||||
import org.json.JSONObject
|
||||
|
||||
@@ -5,7 +5,7 @@ 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.model.*
|
||||
import com.meloda.fast.api.model.old.*
|
||||
import com.meloda.fast.common.AppGlobal
|
||||
import com.meloda.fast.extensions.ContextExtensions.color
|
||||
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.R
|
||||
import com.meloda.fast.widget.CircleImageView
|
||||
import com.meloda.fast.api.model.oldVKUser
|
||||
import com.meloda.fast.api.model.old.oldVKUser
|
||||
|
||||
|
||||
object ViewUtils {
|
||||
|
||||
Reference in New Issue
Block a user