From 851f79c58fe23e51acb832ffa187c7d8e2b01b25 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8F=B6=E5=AD=90=E7=BB=B4?= Date: Tue, 11 Apr 2023 10:31:05 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E8=AE=BA=E5=9D=9B=E5=AD=90=E7=89=88?= =?UTF-8?q?=E5=9D=97=E6=96=B0=E5=A2=9E=E5=8F=91=E5=B8=96=E6=9D=83=E9=99=90?= =?UTF-8?q?=E9=99=90=E5=88=B6=E2=80=94=E5=AE=A2=E6=88=B7=E7=AB=AF=20https:?= =?UTF-8?q?//jira.shanqu.cc/browse/GHZS-1909?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/gh/base/BaseRichEditorViewModel.kt | 17 +++++++++++++++++ .../gh/gamecenter/entity/ForumDetailEntity.kt | 3 ++- .../qa/article/edit/ArticleEditActivity.kt | 2 ++ .../qa/dialog/ChooseSectionDialogFragment.kt | 10 +++++++++- .../qa/dialog/ChooseSectionViewModel.kt | 13 +++++++++---- .../qa/questions/edit/QuestionEditActivity.kt | 2 ++ .../qa/video/publish/VideoPublishFragment.kt | 2 ++ .../qa/video/publish/VideoPublishViewModel.kt | 13 +++++++++++++ 8 files changed, 56 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/com/gh/base/BaseRichEditorViewModel.kt b/app/src/main/java/com/gh/base/BaseRichEditorViewModel.kt index 8a9a109d7d..2a731a285b 100644 --- a/app/src/main/java/com/gh/base/BaseRichEditorViewModel.kt +++ b/app/src/main/java/com/gh/base/BaseRichEditorViewModel.kt @@ -1,5 +1,6 @@ package com.gh.base +import android.annotation.SuppressLint import android.app.Application import android.content.Intent import android.graphics.Bitmap @@ -17,6 +18,7 @@ import com.gh.gamecenter.core.runOnUiThread import com.gh.gamecenter.core.utils.MD5Utils import com.gh.gamecenter.core.utils.ToastUtils import com.gh.gamecenter.common.entity.ErrorEntity +import com.gh.gamecenter.common.retrofit.BiResponse import com.gh.gamecenter.entity.ForumDetailEntity import com.gh.gamecenter.entity.LocalVideoEntity import com.gh.gamecenter.entity.QuoteCountEntity @@ -29,7 +31,9 @@ import com.google.gson.JsonObject import com.lightgame.utils.Utils import com.zhihu.matisse.Matisse import com.zhihu.matisse.internal.utils.PathUtils +import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.disposables.Disposable +import io.reactivex.schedulers.Schedulers import okhttp3.ResponseBody import retrofit2.HttpException import java.io.File @@ -58,6 +62,7 @@ abstract class BaseRichEditorViewModel(application: Application) : AndroidViewMo var videoId = ""//更改封面视频id val quoteCountEntity = QuoteCountEntity()//数据上报用 val sectionListLiveData = MutableLiveData>() + var isModerator = false fun setUploadVideoListener(uploadVideoListener: UploadVideoListener) { this.mUploadVideoListener = uploadVideoListener @@ -423,6 +428,18 @@ abstract class BaseRichEditorViewModel(application: Application) : AndroidViewMo }) } + @SuppressLint("CheckResult") + fun getModeratorsInfo(bbsId: String) { + mApi.getModeratorsInfo(bbsId) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(object : BiResponse() { + override fun onSuccess(data: JsonObject) { + isModerator = data["is_moderators"].asBoolean + } + }) + } + private fun getVideoType(): String { return when (type) { BbsType.GAME_BBS.value -> { diff --git a/app/src/main/java/com/gh/gamecenter/entity/ForumDetailEntity.kt b/app/src/main/java/com/gh/gamecenter/entity/ForumDetailEntity.kt index 7df4bf79ff..3d61589599 100644 --- a/app/src/main/java/com/gh/gamecenter/entity/ForumDetailEntity.kt +++ b/app/src/main/java/com/gh/gamecenter/entity/ForumDetailEntity.kt @@ -51,7 +51,8 @@ class ForumDetailEntity( class Section( @SerializedName("_id") var id: String = "", - var name: String = "" + var name: String = "", + var permissions: String = "" ) : Parcelable fun convertForumDetailEntityToForumEntity(): ForumEntity { diff --git a/app/src/main/java/com/gh/gamecenter/qa/article/edit/ArticleEditActivity.kt b/app/src/main/java/com/gh/gamecenter/qa/article/edit/ArticleEditActivity.kt index bdc338ad57..f931b59d49 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/article/edit/ArticleEditActivity.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/article/edit/ArticleEditActivity.kt @@ -368,6 +368,7 @@ class ArticleEditActivity : BaseRichEditorActivity(), Keyb this, mViewModel.mSelectCommunityData?.id ?: "", mViewModel.selectSection?.id ?: "", + mViewModel.isModerator, "editorActivity" ) }, delayTime) @@ -658,6 +659,7 @@ class ArticleEditActivity : BaseRichEditorActivity(), Keyb mBinding.clearIv.performClick() mViewModel.mSelectCommunityData?.id?.let { mViewModel.getForumSections(it) + mViewModel.getModeratorsInfo(it) } } diff --git a/app/src/main/java/com/gh/gamecenter/qa/dialog/ChooseSectionDialogFragment.kt b/app/src/main/java/com/gh/gamecenter/qa/dialog/ChooseSectionDialogFragment.kt index 472fc14215..409c12c74b 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/dialog/ChooseSectionDialogFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/dialog/ChooseSectionDialogFragment.kt @@ -41,7 +41,12 @@ class ChooseSectionDialogFragment : BaseDialogFragment() { val bbsId = requireArguments().getString(EntranceConsts.KEY_BBS_ID) ?: "" mLastSelectSectionId = requireArguments().getString(TAG_SECTION_ID) ?: "" - mViewModel = viewModelProvider(ChooseSectionViewModel.Factory(bbsId)) + mViewModel = viewModelProvider( + ChooseSectionViewModel.Factory( + bbsId, + requireArguments().getBoolean(IS_MODERATOR) + ) + ) mAdapter = ChooseSectionAdapter(requireContext(), ForumDetailEntity.Section(id = mLastSelectSectionId)) { val intent = Intent().apply { putExtra(EntranceConsts.KEY_DATA, mAdapter?.selectedSection) @@ -92,18 +97,21 @@ class ChooseSectionDialogFragment : BaseDialogFragment() { companion object { const val TAG_SECTION_ID = "tagSectionId" + const val IS_MODERATOR = "is_moderator" const val REQUEST_CODE = 1106 fun show( activity: AppCompatActivity, bbsId: String, tagSectionId: String? = "", + isModerator: Boolean = false, parentTag: String ) { ChooseSectionDialogFragment().apply { arguments = bundleOf( TAG_SECTION_ID to tagSectionId, EntranceConsts.KEY_BBS_ID to bbsId, + IS_MODERATOR to isModerator, EntranceConsts.KEY_PARENT_TAG to parentTag ) }.show(activity.supportFragmentManager, ChooseSectionDialogFragment::class.java.name) diff --git a/app/src/main/java/com/gh/gamecenter/qa/dialog/ChooseSectionViewModel.kt b/app/src/main/java/com/gh/gamecenter/qa/dialog/ChooseSectionViewModel.kt index e2686ee5db..89fda220a0 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/dialog/ChooseSectionViewModel.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/dialog/ChooseSectionViewModel.kt @@ -11,7 +11,8 @@ import com.gh.gamecenter.entity.ForumDetailEntity import com.gh.gamecenter.retrofit.RetrofitManager import com.halo.assistant.HaloApp -class ChooseSectionViewModel(application: Application, val bbsId: String) : AndroidViewModel(application) { +class ChooseSectionViewModel(application: Application, val bbsId: String, val isModerator: Boolean) : + AndroidViewModel(application) { private val mNewApi = RetrofitManager.getInstance().newApi val sectionListLiveData = MutableLiveData>() @@ -25,15 +26,19 @@ class ChooseSectionViewModel(application: Application, val bbsId: String) : Andr .subscribe(object : Response>() { override fun onResponse(response: List?) { response?.run { - sectionListLiveData.postValue(this) + val validSectionList = ArrayList(this).apply { + removeAll { it.permissions == "moderators" && !isModerator } + } + sectionListLiveData.postValue(validSectionList) } } }) } - class Factory(private val bbsId: String) : ViewModelProvider.NewInstanceFactory() { + class Factory(private val bbsId: String, private val isModerator: Boolean) : + ViewModelProvider.NewInstanceFactory() { override fun create(modelClass: Class): T { - return ChooseSectionViewModel(HaloApp.getInstance().application, bbsId) as T + return ChooseSectionViewModel(HaloApp.getInstance().application, bbsId, isModerator) as T } } } \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/qa/questions/edit/QuestionEditActivity.kt b/app/src/main/java/com/gh/gamecenter/qa/questions/edit/QuestionEditActivity.kt index 2fbb138d07..44ae16089a 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/questions/edit/QuestionEditActivity.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/questions/edit/QuestionEditActivity.kt @@ -255,6 +255,7 @@ class QuestionEditActivity : BaseRichEditorActivity(), this, mViewModel.communityEntity?.id ?: "", mViewModel.selectSection?.id ?: "", + mViewModel.isModerator, "editorActivity" ) }, delayTime) @@ -870,6 +871,7 @@ class QuestionEditActivity : BaseRichEditorActivity(), mBinding.clearIv.performClick() mViewModel.communityEntity?.id?.let { mViewModel.getForumSections(it) + mViewModel.getModeratorsInfo(it) } } diff --git a/app/src/main/java/com/gh/gamecenter/qa/video/publish/VideoPublishFragment.kt b/app/src/main/java/com/gh/gamecenter/qa/video/publish/VideoPublishFragment.kt index f60927a3fe..669c082a05 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/video/publish/VideoPublishFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/video/publish/VideoPublishFragment.kt @@ -194,6 +194,7 @@ class VideoPublishFragment : ToolbarFragment(), KeyboardHeightObserver { requireActivity() as AppCompatActivity, mViewModel.communityEntity?.id ?: "", mViewModel.selectSection?.id ?: "", + mViewModel.isModerator, tag ?: "" ) }, delayTime) @@ -682,6 +683,7 @@ class VideoPublishFragment : ToolbarFragment(), KeyboardHeightObserver { mBinding.clearIv.performClick() mViewModel.communityEntity?.id?.let { mViewModel.getForumSections(it) + mViewModel.getModeratorsInfo(it) } } diff --git a/app/src/main/java/com/gh/gamecenter/qa/video/publish/VideoPublishViewModel.kt b/app/src/main/java/com/gh/gamecenter/qa/video/publish/VideoPublishViewModel.kt index 61d8aba86c..a97343e9e8 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/video/publish/VideoPublishViewModel.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/video/publish/VideoPublishViewModel.kt @@ -51,6 +51,7 @@ class VideoPublishViewModel(application: Application) : AndroidViewModel(applica val processDialog = MediatorLiveData() val postLiveData = MediatorLiveData>() val sectionListLiveData = MutableLiveData>() + var isModerator = false fun postVideoPosterAndContent( isDraft: Boolean, @@ -254,4 +255,16 @@ class VideoPublishViewModel(application: Application) : AndroidViewModel(applica } }) } + + @SuppressLint("CheckResult") + fun getModeratorsInfo(bbsId: String) { + mApi.getModeratorsInfo(bbsId) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(object : BiResponse() { + override fun onSuccess(data: JsonObject) { + isModerator = data["is_moderators"].asBoolean + } + }) + } } \ No newline at end of file