Commit 36a7c349 authored by Leonardo Aramaki's avatar Leonardo Aramaki

Load permissions just after loading list of chats

parent f0b85b9f
...@@ -70,10 +70,16 @@ class ChatRoomPresenter @Inject constructor( ...@@ -70,10 +70,16 @@ class ChatRoomPresenter @Inject constructor(
private val stateChannel = Channel<State>() private val stateChannel = Channel<State>()
private var lastState = manager.state private var lastState = manager.state
fun setupChatRoom() {
launchUI(strategy) {
val canPost = permissions.canPostToReadOnlyChannels()
view.onRoomChanged(canPost)
}
}
fun loadMessages(chatRoomId: String, chatRoomType: String, offset: Long = 0) { fun loadMessages(chatRoomId: String, chatRoomType: String, offset: Long = 0) {
this.chatRoomId = chatRoomId this.chatRoomId = chatRoomId
this.chatRoomType = chatRoomType this.chatRoomType = chatRoomType
println(permissions.canPostToReadOnlyChannels())
launchUI(strategy) { launchUI(strategy) {
view.showLoading() view.showLoading()
try { try {
......
...@@ -120,4 +120,6 @@ interface ChatRoomView : LoadingView, MessageView { ...@@ -120,4 +120,6 @@ interface ChatRoomView : LoadingView, MessageView {
* @param commands The list of available commands. * @param commands The list of available commands.
*/ */
fun populateCommandSuggestions(commands: List<CommandSuggestionViewModel>) fun populateCommandSuggestions(commands: List<CommandSuggestionViewModel>)
fun onRoomChanged(canPost: Boolean)
} }
\ No newline at end of file
...@@ -124,11 +124,11 @@ class ChatRoomFragment : Fragment(), ChatRoomView, EmojiKeyboardListener, EmojiR ...@@ -124,11 +124,11 @@ class ChatRoomFragment : Fragment(), ChatRoomView, EmojiKeyboardListener, EmojiR
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
setupToolbar(chatRoomName) setupToolbar(chatRoomName)
presenter.setupChatRoom()
presenter.loadMessages(chatRoomId, chatRoomType) presenter.loadMessages(chatRoomId, chatRoomType)
presenter.loadChatRooms() presenter.loadChatRooms()
setupRecyclerView() setupRecyclerView()
setupFab() setupFab()
setupMessageComposer()
setupSuggestionsView() setupSuggestionsView()
setupActionSnackbar() setupActionSnackbar()
activity?.apply { activity?.apply {
...@@ -227,6 +227,10 @@ class ChatRoomFragment : Fragment(), ChatRoomView, EmojiKeyboardListener, EmojiR ...@@ -227,6 +227,10 @@ class ChatRoomFragment : Fragment(), ChatRoomView, EmojiKeyboardListener, EmojiR
} }
} }
override fun onRoomChanged(canPost: Boolean) {
setupMessageComposer()
}
private fun toggleNoChatView(size: Int) { private fun toggleNoChatView(size: Int) {
if (size == 0){ if (size == 0){
image_chat_icon.setVisible(true) image_chat_icon.setVisible(true)
......
...@@ -66,12 +66,13 @@ class ChatRoomsPresenter @Inject constructor( ...@@ -66,12 +66,13 @@ class ChatRoomsPresenter @Inject constructor(
view.showLoading() view.showLoading()
subscribeStatusChange() subscribeStatusChange()
try { try {
permissionsInteractor.saveAll(client.permissions())
// If we still don't have 'Store_Last_Message' setting, refresh the settings // If we still don't have 'Store_Last_Message' setting, refresh the settings
if (!settings.hasShowLastMessage()) { if (!settings.hasShowLastMessage()) {
refreshSettingsInteractor.refresh(currentServer) refreshSettingsInteractor.refresh(currentServer)
} }
view.updateChatRooms(getUserChatRooms()) view.updateChatRooms(getUserChatRooms())
val permissions = retryIO { client.permissions() }
permissionsInteractor.saveAll(permissions)
} catch (ex: RocketChatException) { } catch (ex: RocketChatException) {
ex.message?.let { ex.message?.let {
view.showMessage(it) view.showMessage(it)
...@@ -96,6 +97,7 @@ class ChatRoomsPresenter @Inject constructor( ...@@ -96,6 +97,7 @@ class ChatRoomsPresenter @Inject constructor(
chatRoom.name chatRoom.name
} }
println("Owner -> ${chatRoom.user}")
navigator.toChatRoom(chatRoom.id, roomName, navigator.toChatRoom(chatRoom.id, roomName,
chatRoom.type.toString(), chatRoom.readonly ?: false, chatRoom.type.toString(), chatRoom.readonly ?: false,
chatRoom.lastSeen ?: -1, chatRoom.lastSeen ?: -1,
......
package chat.rocket.android.server.domain package chat.rocket.android.server.domain
import chat.rocket.android.infrastructure.LocalRepository import chat.rocket.android.infrastructure.LocalRepository
import chat.rocket.common.model.User
import chat.rocket.core.model.Permission import chat.rocket.core.model.Permission
import javax.inject.Inject import javax.inject.Inject
...@@ -57,12 +58,21 @@ class PermissionsInteractor @Inject constructor( ...@@ -57,12 +58,21 @@ class PermissionsInteractor @Inject constructor(
fun canPostToReadOnlyChannels(): Boolean { fun canPostToReadOnlyChannels(): Boolean {
val url = getCurrentServerUrl()!! val url = getCurrentServerUrl()!!
val currentUserRoles = localRepository.getCurrentUser(url)?.roles val currentUserRoles = currentUser()?.roles
return permissionsRepository.get(url, POST_READONLY)?.let { permission -> return permissionsRepository.get(url, POST_READONLY)?.let { permission ->
currentUserRoles?.isNotEmpty() == true && permission.roles.any { currentUserRoles?.isNotEmpty() == true && permission.roles.any {
currentUserRoles.contains(it) currentUserRoles.contains(it)
} }
} == true } == true || isAdmin()
}
private fun currentUser(): User? {
val url = getCurrentServerUrl()!!
return localRepository.getCurrentUser(url)
}
private fun isAdmin(): Boolean {
return currentUser()?.roles?.find { it.equals("admin", ignoreCase = true) } != null
} }
private fun getCurrentServerUrl(): String? { private fun getCurrentServerUrl(): String? {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment