fix: Disable typing and message requests in read-only open groups

pull/990/head
charles 2 years ago
parent fbd1721eaf
commit ffa280bc1b

@ -466,6 +466,7 @@ class ConversationActivityV2 : PassphraseRequiredActionBarActivity(), InputBarDe
// called from onCreate
private fun setUpInputBar() {
binding!!.inputBar.isVisible = viewModel.openGroup == null || viewModel.openGroup?.canWrite == true
binding!!.inputBar.delegate = this
binding!!.inputBarRecordingView.delegate = this
// GIF button

@ -153,12 +153,13 @@ class VisibleMessageView : LinearLayout {
if (isGroupThread && !message.isOutgoing) {
if (isEndOfMessageCluster) {
val openGroup = lokiThreadDb.getOpenGroupChat(threadID)
binding.profilePictureView.root.publicKey = senderSessionID
binding.profilePictureView.root.glide = glide
binding.profilePictureView.root.update(message.individualRecipient)
binding.profilePictureView.root.setOnClickListener {
if (thread.isOpenGroupRecipient) {
if (IdPrefix.fromValue(senderSessionID) == IdPrefix.BLINDED) {
if (IdPrefix.fromValue(senderSessionID) == IdPrefix.BLINDED && openGroup?.canWrite == true) {
val intent = Intent(context, ConversationActivityV2::class.java)
intent.putExtra(ConversationActivityV2.FROM_GROUP_THREAD_ID, threadID)
intent.putExtra(ConversationActivityV2.ADDRESS, Address.fromSerialized(senderSessionID))
@ -169,7 +170,7 @@ class VisibleMessageView : LinearLayout {
}
}
if (thread.isOpenGroupRecipient) {
val openGroup = lokiThreadDb.getOpenGroupChat(threadID) ?: return
openGroup ?: return
var standardPublicKey = ""
var blindedPublicKey: String? = null
if (IdPrefix.fromValue(senderSessionID) == IdPrefix.BLINDED) {

@ -83,7 +83,7 @@ object OpenGroupManager {
if (threadID < 0) {
threadID = GroupManager.createOpenGroup(openGroupID, context, null, info.name).threadId
}
val openGroup = OpenGroup(server, room, info.name, info.infoUpdates, publicKey)
val openGroup = OpenGroup(server, room, info.name, info.infoUpdates, publicKey, info.write)
threadDB.setOpenGroupChat(openGroup, threadID)
}

@ -12,15 +12,17 @@ data class OpenGroup(
val name: String,
val publicKey: String,
val infoUpdates: Int,
val canWrite: Boolean,
) {
constructor(server: String, room: String, name: String, infoUpdates: Int, publicKey: String) : this(
constructor(server: String, room: String, name: String, infoUpdates: Int, publicKey: String, canWrite: Boolean) : this(
server = server,
room = room,
id = "$server.$room",
name = name,
publicKey = publicKey,
infoUpdates = infoUpdates,
canWrite = canWrite
)
companion object {
@ -29,13 +31,13 @@ data class OpenGroup(
return try {
val json = JsonUtil.fromJson(jsonAsString)
if (!json.has("room")) return null
val room = json.get("room").asText().toLowerCase(Locale.US)
val server = json.get("server").asText().toLowerCase(Locale.US)
val room = json.get("room").asText().lowercase(Locale.US)
val server = json.get("server").asText().lowercase(Locale.US)
val displayName = json.get("displayName").asText()
val publicKey = json.get("publicKey").asText()
val infoUpdates = json.get("infoUpdates")?.asText()?.toIntOrNull() ?: 0
val capabilities = json.get("capabilities")?.asText()?.split(",") ?: emptyList()
OpenGroup(server, room, displayName, infoUpdates, publicKey)
val canWrite = json.get("canWrite")?.asText()?.toBoolean() ?: true
OpenGroup(server, room, displayName, infoUpdates, publicKey, canWrite)
} catch (e: Exception) {
Log.w("Loki", "Couldn't parse open group from JSON: $jsonAsString.", e);
null
@ -59,6 +61,7 @@ data class OpenGroup(
"displayName" to name,
"publicKey" to publicKey,
"infoUpdates" to infoUpdates.toString(),
"canWrite" to canWrite.toString()
)
val joinURL: String get() = "$server/$room?public_key=$publicKey"

@ -126,6 +126,7 @@ class OpenGroupPoller(private val server: String, private val executorService: S
name = pollInfo.details?.name ?: "",
infoUpdates = pollInfo.details?.infoUpdates ?: 0,
publicKey = publicKey,
canWrite = pollInfo.write
)
// - Open Group changes
storage.updateOpenGroup(openGroup)

Loading…
Cancel
Save