Commit f0b85b9f authored by Leonardo Aramaki's avatar Leonardo Aramaki

Save permissions when loading chatrooms

parent 385c30bd
...@@ -48,7 +48,7 @@ class ChatRoomPresenter @Inject constructor( ...@@ -48,7 +48,7 @@ class ChatRoomPresenter @Inject constructor(
getSettingsInteractor: GetSettingsInteractor, getSettingsInteractor: GetSettingsInteractor,
serverInteractor: GetCurrentServerInteractor, serverInteractor: GetCurrentServerInteractor,
private val getChatRoomsInteractor: GetChatRoomsInteractor, private val getChatRoomsInteractor: GetChatRoomsInteractor,
private val permissions: GetPermissionsInteractor, private val permissions: PermissionsInteractor,
private val uriInteractor: UriInteractor, private val uriInteractor: UriInteractor,
private val messagesRepository: MessagesRepository, private val messagesRepository: MessagesRepository,
private val usersRepository: UsersRepository, private val usersRepository: UsersRepository,
...@@ -73,6 +73,7 @@ class ChatRoomPresenter @Inject constructor( ...@@ -73,6 +73,7 @@ class ChatRoomPresenter @Inject constructor(
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 {
......
...@@ -23,6 +23,7 @@ import chat.rocket.core.internal.model.Subscription ...@@ -23,6 +23,7 @@ import chat.rocket.core.internal.model.Subscription
import chat.rocket.core.internal.realtime.socket.model.State import chat.rocket.core.internal.realtime.socket.model.State
import chat.rocket.core.internal.realtime.socket.model.StreamMessage import chat.rocket.core.internal.realtime.socket.model.StreamMessage
import chat.rocket.core.internal.realtime.socket.model.Type import chat.rocket.core.internal.realtime.socket.model.Type
import chat.rocket.core.internal.rest.permissions
import chat.rocket.core.internal.rest.spotlight import chat.rocket.core.internal.rest.spotlight
import chat.rocket.core.model.ChatRoom import chat.rocket.core.model.ChatRoom
import chat.rocket.core.model.Room import chat.rocket.core.model.Room
...@@ -45,6 +46,7 @@ class ChatRoomsPresenter @Inject constructor( ...@@ -45,6 +46,7 @@ class ChatRoomsPresenter @Inject constructor(
private val refreshSettingsInteractor: RefreshSettingsInteractor, private val refreshSettingsInteractor: RefreshSettingsInteractor,
private val viewModelMapper: ViewModelMapper, private val viewModelMapper: ViewModelMapper,
private val jobSchedulerInteractor: JobSchedulerInteractor, private val jobSchedulerInteractor: JobSchedulerInteractor,
private val permissionsInteractor: PermissionsInteractor,
settingsRepository: SettingsRepository, settingsRepository: SettingsRepository,
factory: ConnectionManagerFactory factory: ConnectionManagerFactory
) { ) {
...@@ -64,6 +66,7 @@ class ChatRoomsPresenter @Inject constructor( ...@@ -64,6 +66,7 @@ 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)
......
...@@ -23,7 +23,6 @@ import chat.rocket.android.helper.SharedPreferenceHelper ...@@ -23,7 +23,6 @@ import chat.rocket.android.helper.SharedPreferenceHelper
import chat.rocket.android.infrastructure.LocalRepository import chat.rocket.android.infrastructure.LocalRepository
import chat.rocket.android.server.domain.GetCurrentServerInteractor import chat.rocket.android.server.domain.GetCurrentServerInteractor
import chat.rocket.android.server.domain.SettingsRepository import chat.rocket.android.server.domain.SettingsRepository
import chat.rocket.android.server.domain.showLastMessage
import chat.rocket.android.util.extensions.* import chat.rocket.android.util.extensions.*
import chat.rocket.android.widget.DividerItemDecoration import chat.rocket.android.widget.DividerItemDecoration
import chat.rocket.common.model.RoomType import chat.rocket.common.model.RoomType
...@@ -37,10 +36,14 @@ import timber.log.Timber ...@@ -37,10 +36,14 @@ import timber.log.Timber
import javax.inject.Inject import javax.inject.Inject
class ChatRoomsFragment : Fragment(), ChatRoomsView { class ChatRoomsFragment : Fragment(), ChatRoomsView {
@Inject lateinit var presenter: ChatRoomsPresenter @Inject
@Inject lateinit var serverInteractor: GetCurrentServerInteractor lateinit var presenter: ChatRoomsPresenter
@Inject lateinit var settingsRepository: SettingsRepository @Inject
@Inject lateinit var localRepository: LocalRepository lateinit var serverInteractor: GetCurrentServerInteractor
@Inject
lateinit var settingsRepository: SettingsRepository
@Inject
lateinit var localRepository: LocalRepository
private lateinit var preferences: SharedPreferences private lateinit var preferences: SharedPreferences
private var searchView: SearchView? = null private var searchView: SearchView? = null
private val handler = Handler() private val handler = Handler()
...@@ -146,9 +149,9 @@ class ChatRoomsFragment : Fragment(), ChatRoomsView { ...@@ -146,9 +149,9 @@ class ChatRoomsFragment : Fragment(), ChatRoomsView {
return super.onOptionsItemSelected(item) return super.onOptionsItemSelected(item)
} }
private fun invalidateQueryOnSearch(){ private fun invalidateQueryOnSearch() {
searchView?.let { searchView?.let {
if (!searchView!!.isIconified){ if (!searchView!!.isIconified) {
queryChatRoomsByName(searchView!!.query.toString()) queryChatRoomsByName(searchView!!.query.toString())
} }
} }
...@@ -179,7 +182,7 @@ class ChatRoomsFragment : Fragment(), ChatRoomsView { ...@@ -179,7 +182,7 @@ class ChatRoomsFragment : Fragment(), ChatRoomsView {
ui { text_no_data_to_display.setVisible(true) } ui { text_no_data_to_display.setVisible(true) }
} }
override fun showLoading(){ override fun showLoading() {
ui { view_loading.setVisible(true) } ui { view_loading.setVisible(true) }
} }
...@@ -241,10 +244,9 @@ class ChatRoomsFragment : Fragment(), ChatRoomsView { ...@@ -241,10 +244,9 @@ class ChatRoomsFragment : Fragment(), ChatRoomsView {
recycler_view.itemAnimator = DefaultItemAnimator() recycler_view.itemAnimator = DefaultItemAnimator()
// TODO - use a ViewModel Mapper instead of using settings on the adapter // TODO - use a ViewModel Mapper instead of using settings on the adapter
println(serverInteractor.get() + " -> ${settingsRepository.get(serverInteractor.get()!!).showLastMessage()}")
val baseAdapter = ChatRoomsAdapter(it, val baseAdapter = ChatRoomsAdapter(it,
settingsRepository.get(serverInteractor.get()!!), localRepository) { settingsRepository.get(serverInteractor.get()!!), localRepository) { chatRoom ->
chatRoom -> presenter.loadChatRoom(chatRoom) presenter.loadChatRoom(chatRoom)
} }
sectionedAdapter = SimpleSectionedRecyclerViewAdapter(it, sectionedAdapter = SimpleSectionedRecyclerViewAdapter(it,
......
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.core.model.Permission
import javax.inject.Inject import javax.inject.Inject
// Creating rooms // Creating rooms
...@@ -15,7 +16,7 @@ const val EDIT_MESSAGE = "edit-message" ...@@ -15,7 +16,7 @@ const val EDIT_MESSAGE = "edit-message"
const val PIN_MESSAGE = "pin-message" const val PIN_MESSAGE = "pin-message"
const val POST_READONLY = "post-readonly" const val POST_READONLY = "post-readonly"
class GetPermissionsInteractor @Inject constructor( class PermissionsInteractor @Inject constructor(
private val settingsRepository: SettingsRepository, private val settingsRepository: SettingsRepository,
private val permissionsRepository: PermissionsRepository, private val permissionsRepository: PermissionsRepository,
private val localRepository: LocalRepository, private val localRepository: LocalRepository,
...@@ -24,6 +25,11 @@ class GetPermissionsInteractor @Inject constructor( ...@@ -24,6 +25,11 @@ class GetPermissionsInteractor @Inject constructor(
private fun publicSettings(): PublicSettings? = settingsRepository.get(getCurrentServerUrl()!!) private fun publicSettings(): PublicSettings? = settingsRepository.get(getCurrentServerUrl()!!)
fun saveAll(permissions: List<Permission>) {
val url = getCurrentServerUrl()!!
permissions.forEach { permissionsRepository.save(url, it) }
}
/** /**
* Check whether user is allowed to delete a message. * Check whether user is allowed to delete a message.
*/ */
......
...@@ -18,7 +18,7 @@ interface PermissionsRepository { ...@@ -18,7 +18,7 @@ interface PermissionsRepository {
* @param url The server url from where we're interested on getting the permissions. * @param url The server url from where we're interested on getting the permissions.
* @param permissionId the id of the permission to get. * @param permissionId the id of the permission to get.
* *
* @return The interested permission or null if not found. * @return The interested [Permission] or null if not found.
*/ */
fun get(url: String, permissionId: String): Permission? fun get(url: String, permissionId: String): Permission?
} }
\ No newline at end of file
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