diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationItem.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationItem.java index 6849f9cc7d..b89a7b6962 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationItem.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationItem.java @@ -56,6 +56,8 @@ import org.session.libsession.messaging.jobs.AttachmentDownloadJob; import org.session.libsession.messaging.jobs.JobQueue; import org.session.libsession.messaging.open_groups.OpenGroup; import org.session.libsession.messaging.open_groups.OpenGroupAPI; +import org.session.libsession.messaging.open_groups.OpenGroupAPIV2; +import org.session.libsession.messaging.open_groups.OpenGroupV2; import org.session.libsession.messaging.sending_receiving.attachments.AttachmentTransferProgress; import org.session.libsession.messaging.sending_receiving.attachments.DatabaseAttachment; import org.session.libsession.messaging.sending_receiving.link_preview.LinkPreview; @@ -88,6 +90,7 @@ import org.thoughtcrime.securesms.database.model.MmsMessageRecord; import org.thoughtcrime.securesms.database.model.Quote; import org.thoughtcrime.securesms.linkpreview.LinkPreviewUtil; import org.thoughtcrime.securesms.loki.utilities.MentionUtilities; +import org.thoughtcrime.securesms.loki.utilities.OpenGroupUtilities; import org.thoughtcrime.securesms.loki.views.MessageAudioView; import org.thoughtcrime.securesms.loki.views.ProfilePictureView; import org.thoughtcrime.securesms.mms.GlideRequests; @@ -724,9 +727,9 @@ public class ConversationItem extends LinearLayout String publicKey = recipient.getAddress().toString(); profilePictureView.setPublicKey(publicKey); String displayName = recipient.getName(); - OpenGroup publicChat = DatabaseFactory.getLokiThreadDatabase(context).getPublicChat(threadID); - if (displayName == null && publicChat != null) { - displayName = DatabaseFactory.getLokiUserDatabase(context).getServerDisplayName(publicChat.getId(), publicKey); + OpenGroup openGroup = DatabaseFactory.getLokiThreadDatabase(context).getPublicChat(threadID); + if (displayName == null && openGroup != null) { + displayName = DatabaseFactory.getLokiUserDatabase(context).getServerDisplayName(openGroup.getId(), publicKey); } profilePictureView.setDisplayName(displayName); profilePictureView.setAdditionalPublicKey(null); @@ -867,7 +870,12 @@ public class ConversationItem extends LinearLayout try { String serverId = GroupUtil.getDecodedGroupID(conversationRecipient.getAddress().serialize()); String senderDisplayName = DatabaseFactory.getLokiUserDatabase(context).getServerDisplayName(serverId, recipient.getAddress().serialize()); - if (senderDisplayName != null) { displayName = senderDisplayName; } + if (senderDisplayName != null) { + displayName = senderDisplayName; + } else { + // opengroupv2 format + displayName = OpenGroupUtilities.getDisplayName(recipient); + } } catch (Exception e) { // Do nothing } @@ -912,9 +920,13 @@ public class ConversationItem extends LinearLayout int visibility = View.GONE; OpenGroup publicChat = DatabaseFactory.getLokiThreadDatabase(context).getPublicChat(messageRecord.getThreadId()); + OpenGroupV2 openGroupV2 = DatabaseFactory.getLokiThreadDatabase(context).getOpenGroupChat(messageRecord.getThreadId()); if (publicChat != null) { boolean isModerator = OpenGroupAPI.isUserModerator(current.getRecipient().getAddress().toString(), publicChat.getChannel(), publicChat.getServer()); visibility = isModerator ? View.VISIBLE : View.GONE; + } else if (openGroupV2 != null) { + boolean isModerator = OpenGroupAPIV2.isUserModerator(current.getRecipient().getAddress().toString(), openGroupV2.getRoom(), openGroupV2.getServer()); + visibility = isModerator ? View.VISIBLE : View.GONE; } moderatorIconImageView.setVisibility(visibility); diff --git a/app/src/main/java/org/thoughtcrime/securesms/loki/activities/JoinPublicChatActivity.kt b/app/src/main/java/org/thoughtcrime/securesms/loki/activities/JoinPublicChatActivity.kt index 5d15fe3b41..b32599d95d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/loki/activities/JoinPublicChatActivity.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/loki/activities/JoinPublicChatActivity.kt @@ -102,7 +102,7 @@ class JoinPublicChatActivity : PassphraseRequiredActionBarActivity(), ScanQRCode threadID to groupID } else { val channel: Long = 1 - val group = OpenGroupUtilities.addGroup(this@JoinPublicChatActivity, url, channel) + val group = OpenGroupUtilities.addGroup(this@JoinPublicChatActivity, properString, channel) val threadID = GroupManager.getOpenGroupThreadID(group.id, this@JoinPublicChatActivity) val groupID = GroupUtil.getEncodedOpenGroupID(group.id.toByteArray()) threadID to groupID diff --git a/app/src/main/java/org/thoughtcrime/securesms/loki/utilities/OpenGroupUtilities.kt b/app/src/main/java/org/thoughtcrime/securesms/loki/utilities/OpenGroupUtilities.kt index 41f887396a..e88ead980f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/loki/utilities/OpenGroupUtilities.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/loki/utilities/OpenGroupUtilities.kt @@ -8,12 +8,14 @@ import org.session.libsession.messaging.open_groups.OpenGroup import org.session.libsession.messaging.open_groups.OpenGroupAPI import org.session.libsession.messaging.open_groups.OpenGroupAPIV2 import org.session.libsession.messaging.open_groups.OpenGroupV2 +import org.session.libsession.messaging.threads.recipients.Recipient import org.session.libsession.utilities.GroupUtil import org.session.libsession.utilities.TextSecurePreferences import org.session.libsession.utilities.preferences.ProfileKeyUtil import org.thoughtcrime.securesms.ApplicationContext import org.thoughtcrime.securesms.database.DatabaseFactory import org.thoughtcrime.securesms.groups.GroupManager +import java.util.* //TODO Refactor so methods declare specific type of checked exceptions and not generalized Exception. object OpenGroupUtilities { @@ -92,5 +94,15 @@ object OpenGroupUtilities { EventBus.getDefault().post(GroupInfoUpdatedEvent(url, channel)) } + /** + * Return a generated name for users in the style of `$name (...$hex.takeLast(8))` for public groups + */ + @JvmStatic + fun getDisplayName(recipient: Recipient): String { + return String.format(Locale.ROOT, PUBLIC_GROUP_STRING_FORMAT, recipient.name, recipient.address.serialize().takeLast(8)) + } + + const val PUBLIC_GROUP_STRING_FORMAT = "%s (...%s)" + data class GroupInfoUpdatedEvent(val url: String, val channel: Long) } \ No newline at end of file diff --git a/libsession/src/main/java/org/session/libsession/messaging/sending_receiving/pollers/OpenGroupV2Poller.kt b/libsession/src/main/java/org/session/libsession/messaging/sending_receiving/pollers/OpenGroupV2Poller.kt index 6d892aa207..930af4f3e1 100644 --- a/libsession/src/main/java/org/session/libsession/messaging/sending_receiving/pollers/OpenGroupV2Poller.kt +++ b/libsession/src/main/java/org/session/libsession/messaging/sending_receiving/pollers/OpenGroupV2Poller.kt @@ -34,7 +34,7 @@ class OpenGroupV2Poller(private val openGroups: List, private val e } val sampleWindow = System.currentTimeMillis() - pollForNewMessagesInterval * 2 val numberInSample = receivedQueue.toList().filter { it > sampleWindow }.size.coerceAtLeast(1) - return ((2 + (50 / numberInSample / 20)*10) * 1000).toLong() + return ((2 + (50 / numberInSample / 20)*5) * 1000).toLong() } // region Settings @@ -80,7 +80,6 @@ class OpenGroupV2Poller(private val openGroups: List, private val e isPollOngoing = false if (!isBackgroundPoll) { val delay = calculatePollInterval() - Log.d("Loki", "polling in ${delay}ms") executorService?.schedule(this@OpenGroupV2Poller::compactPoll, delay, TimeUnit.MILLISECONDS) } }