2020-05-11 08:19:26 +02:00
|
|
|
package org.thoughtcrime.securesms.loki.utilities
|
2020-02-25 01:28:56 +01:00
|
|
|
|
|
|
|
import android.content.Context
|
|
|
|
import nl.komponents.kovenant.Promise
|
|
|
|
import nl.komponents.kovenant.then
|
|
|
|
import org.thoughtcrime.securesms.ApplicationContext
|
|
|
|
import org.thoughtcrime.securesms.crypto.ProfileKeyUtil
|
|
|
|
import org.thoughtcrime.securesms.database.DatabaseFactory
|
|
|
|
import org.thoughtcrime.securesms.groups.GroupManager
|
|
|
|
import org.thoughtcrime.securesms.util.TextSecurePreferences
|
2020-07-15 04:24:43 +02:00
|
|
|
import org.whispersystems.signalservice.loki.api.opengroups.PublicChat
|
2020-02-25 01:28:56 +01:00
|
|
|
|
|
|
|
object OpenGroupUtilities {
|
2020-02-28 03:04:57 +01:00
|
|
|
|
2020-07-15 04:24:43 +02:00
|
|
|
@JvmStatic fun addGroup(context: Context, url: String, channel: Long): Promise<PublicChat, Exception> {
|
2020-02-28 03:04:57 +01:00
|
|
|
// Check for an existing group
|
2020-07-15 04:24:43 +02:00
|
|
|
val groupID = PublicChat.getId(channel, url)
|
2020-05-12 08:33:04 +02:00
|
|
|
val threadID = GroupManager.getOpenGroupThreadID(groupID, context)
|
2020-02-25 01:28:56 +01:00
|
|
|
val openGroup = DatabaseFactory.getLokiThreadDatabase(context).getPublicChat(threadID)
|
2020-02-28 03:04:57 +01:00
|
|
|
if (openGroup != null) { return Promise.of(openGroup) }
|
2020-02-25 01:28:56 +01:00
|
|
|
// Add the new group
|
|
|
|
val application = ApplicationContext.getInstance(context)
|
|
|
|
val displayName = TextSecurePreferences.getProfileName(context)
|
2020-07-15 04:24:43 +02:00
|
|
|
val lokiPublicChatAPI = application.publicChatAPI ?: throw Error("LokiPublicChatAPI is not initialized.")
|
2020-07-15 06:26:20 +02:00
|
|
|
return application.publicChatManager.addChat(url, channel).then { group ->
|
2020-02-25 01:28:56 +01:00
|
|
|
DatabaseFactory.getLokiAPIDatabase(context).removeLastMessageServerID(channel, url)
|
|
|
|
DatabaseFactory.getLokiAPIDatabase(context).removeLastDeletionServerID(channel, url)
|
|
|
|
lokiPublicChatAPI.getMessages(channel, url)
|
|
|
|
lokiPublicChatAPI.setDisplayName(displayName, url)
|
|
|
|
lokiPublicChatAPI.join(channel, url)
|
|
|
|
val profileKey: ByteArray = ProfileKeyUtil.getProfileKey(context)
|
2020-05-11 08:19:26 +02:00
|
|
|
val profileUrl: String? = TextSecurePreferences.getProfilePictureURL(context)
|
2020-02-25 01:28:56 +01:00
|
|
|
lokiPublicChatAPI.setProfilePicture(url, profileKey, profileUrl)
|
|
|
|
group
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|