You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
220 lines
7.0 KiB
220 lines
7.0 KiB
package com.gyf.csams.activity.model
|
|
|
|
import android.app.Application
|
|
import android.net.Uri
|
|
import androidx.lifecycle.LiveData
|
|
import androidx.lifecycle.MutableLiveData
|
|
import androidx.lifecycle.ViewModel
|
|
import androidx.lifecycle.viewModelScope
|
|
import com.google.gson.reflect.TypeToken
|
|
import com.gyf.csams.MainApplication
|
|
import com.gyf.csams.module.*
|
|
import com.gyf.csams.uikit.AbstractComment
|
|
import com.gyf.csams.uikit.ActivityDetailMenu
|
|
import com.gyf.csams.uikit.TopMenuInterface
|
|
import com.gyf.lib.model.ScrollViewModel
|
|
import com.gyf.lib.uikit.ValidStringForm
|
|
import com.gyf.lib.util.*
|
|
import kotlinx.coroutines.launch
|
|
import java.io.File
|
|
|
|
/**
|
|
* 活动详情菜单通用状态
|
|
*
|
|
*/
|
|
class ActivityDetailViewModel : ViewModel(), TopMenuInterface<ActivityDetailMenu> {
|
|
override val _currentMenu: MutableLiveData<ActivityDetailMenu> = MutableLiveData()
|
|
override val currentMenu: LiveData<ActivityDetailMenu> = _currentMenu
|
|
}
|
|
|
|
|
|
/**
|
|
* 活动信息
|
|
*
|
|
*/
|
|
class ActivityInfoViewModel : ViewModel() {
|
|
private val _activityDetailVo = MutableLiveData<ActivityDetailVo>()
|
|
val activityDetailVo: LiveData<ActivityDetailVo> = _activityDetailVo
|
|
|
|
val tendency = MutableLiveData<CheckTendencyResVo>()
|
|
|
|
fun checkTendency(activityId: Int) {
|
|
viewModelScope.launch {
|
|
HttpClient.post(url = Api.buildUrl(ActivityApi.CheckTendency),
|
|
callback = HttpCallback<CheckTendencyResVo>(action = "检查用户倾向",
|
|
onSuccess = {
|
|
it.body?.apply { tendency.postValue(this) }
|
|
}, typeToken = object : TypeToken<ApiResponse<CheckTendencyResVo>>() {}.type
|
|
),
|
|
jsonParam =
|
|
CheckTendencyVo(activityId = activityId, token = TokenManager.getToken())
|
|
)
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 记录用户倾向
|
|
*
|
|
* @param type
|
|
* @param activityId
|
|
* @param callback
|
|
*/
|
|
fun tendency(type: TendencyType, activityId: Int, callback: (flag: Boolean) -> Unit) {
|
|
viewModelScope.launch {
|
|
HttpClient.post(url = Api.buildUrl(ActivityApi.Tendency),
|
|
callback = HttpCallback<Boolean>(action = "记录用户倾向",
|
|
onSuccess = {
|
|
it.body?.let(callback)
|
|
}, typeToken = object : TypeToken<ApiResponse<Boolean>>() {}.type
|
|
),
|
|
jsonParam =
|
|
TendencyVo(activityId = activityId, type = type, token = TokenManager.getToken())
|
|
)
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 加载活动详情
|
|
*
|
|
* @param activityId
|
|
*/
|
|
fun load(activityId: Int) {
|
|
viewModelScope.launch {
|
|
HttpClient.post(url = Api.buildUrl(ActivityApi.Show),
|
|
callback = HttpCallback<ActivityDetailVo>(action = "加载活动详情",
|
|
onSuccess = { it ->
|
|
it.body?.let {
|
|
_activityDetailVo.postValue(it)
|
|
}
|
|
}, typeToken = object : TypeToken<ApiResponse<ActivityDetailVo>>() {}.type
|
|
),
|
|
jsonParam = ShowActivityVo(activityId = activityId, token = TokenManager.getToken())
|
|
)
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
|
|
/**
|
|
* 活动相册数据状态管理
|
|
*
|
|
*/
|
|
class ActivityPhotoViewModel(application: Application) :
|
|
ScrollViewModel<ActivityPhotoVo>(application) {
|
|
|
|
val name = ValidStringForm("照片名", textLength = 10)
|
|
|
|
/**
|
|
* 上传照片
|
|
*
|
|
* @param uri
|
|
*/
|
|
fun upload(activityId: Int, uri: Uri, callback: (message: String) -> Unit) {
|
|
val resolver = getApplication<MainApplication>().contentResolver
|
|
resolver.openInputStream(uri)?.readBytes()?.apply {
|
|
name.clean()
|
|
viewModelScope.launch {
|
|
val context = getApplication<MainApplication>()
|
|
runCatching {
|
|
val cacheFile = File(context.cacheDir, "${System.currentTimeMillis()}")
|
|
cacheFile.writeBytes(this@apply)
|
|
HttpClient.uploadFile(url = Api.buildUrl(ActivityApi.UploadPhoto),
|
|
callback = HttpCallback<Boolean>(action = "上传照片",
|
|
onSuccess = {
|
|
callback("上传成功")
|
|
}, typeToken = object : TypeToken<ApiResponse<Boolean>>() {}.type
|
|
),
|
|
params = mapOf(
|
|
"activityId" to "$activityId",
|
|
"name" to name.getValue()
|
|
),
|
|
fileList = arrayOf(cacheFile)
|
|
)
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 加载相册
|
|
*
|
|
*/
|
|
fun load(activityId: Int) {
|
|
viewModelScope.launch {
|
|
HttpClient.post(
|
|
url = Api.buildUrl(ActivityApi.Photo),
|
|
callback = HttpCallback<MutableList<ActivityPhotoVo>>(
|
|
action = "加载相册",
|
|
onSuccess = {
|
|
_data.postValue(it.body)
|
|
},
|
|
typeToken = object :
|
|
TypeToken<ApiResponse<MutableList<ActivityPhotoVo>>>() {}.type
|
|
),
|
|
jsonParam = SearchActivityPhotoVo(activityId = activityId)
|
|
)
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
class ActivityMemberViewModel(application: Application) :
|
|
ScrollViewModel<UserInfoVo>(application) {
|
|
|
|
|
|
}
|
|
|
|
class BBSCommentModel : AbstractComment() {
|
|
override val newContent = ValidStringForm(formDesc = "评论内容", textLength = 80)
|
|
|
|
var activityId: Int? = null
|
|
|
|
|
|
/**
|
|
* 发送评论
|
|
* @param callback
|
|
*/
|
|
override fun send(callback: (message: String) -> Unit) {
|
|
viewModelScope.launch {
|
|
HttpClient.post(url = Api.buildUrl(ActivityApi.SendComment),
|
|
callback = HttpCallback<Boolean>(action = "发送评论",
|
|
onSuccess = {
|
|
callback(it.message)
|
|
}, typeToken = object : TypeToken<ApiResponse<Boolean>>() {}.type
|
|
),
|
|
jsonParam =
|
|
SendBBSVo(
|
|
content = newContent.getValue(),
|
|
token = TokenManager.getToken(),
|
|
activityId = activityId ?: throw IllegalArgumentException("活动id没有初始化")
|
|
)
|
|
)
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 交流区数据状态管理
|
|
*
|
|
*/
|
|
class BBSViewModel(application: Application) : ScrollViewModel<BBSVo>(application) {
|
|
|
|
|
|
/**
|
|
* 加载评论
|
|
*/
|
|
fun load(activityId: Int) {
|
|
viewModelScope.launch {
|
|
HttpClient.post(url = Api.buildUrl(ActivityApi.Comment),
|
|
callback = HttpCallback<MutableList<BBSVo>>(action = "加载评论",
|
|
onSuccess = {
|
|
_data.postValue(it.body)
|
|
}, typeToken = object : TypeToken<ApiResponse<MutableList<BBSVo>>>() {}.type
|
|
),
|
|
jsonParam = SearchCommentVo(activityId = activityId)
|
|
)
|
|
}
|
|
}
|
|
} |