@ -3,19 +3,15 @@ package org.thoughtcrime.securesms.loki
import android.content.Context
import android.os.Handler
import android.util.Log
import org.thoughtcrime.securesms.attachments.Attachment
import org.thoughtcrime.securesms.contactshare.Contact
import org.thoughtcrime.securesms.crypto.IdentityKeyUtil
import org.thoughtcrime.securesms.database.Address
import org.thoughtcrime.securesms.database.DatabaseFactory
import org.thoughtcrime.securesms.database.ThreadDatabase
import org.thoughtcrime.securesms.database.documents.IdentityKeyMismatch
import org.thoughtcrime.securesms.database.documents.NetworkFailure
import org.thoughtcrime.securesms.jobs.PushDecryptJob
import org.thoughtcrime.securesms.linkpreview.LinkPreview
import org.thoughtcrime.securesms.linkpreview.LinkPreviewRepository
import org.thoughtcrime.securesms.linkpreview.LinkPreviewUtil
import org.thoughtcrime.securesms.mms.OutgoingMediaMessage
import org.thoughtcrime.securesms.mms.QuoteModel
import org.thoughtcrime.securesms.recipients.Recipient
import org.thoughtcrime.securesms.util.GroupUtil
import org.thoughtcrime.securesms.util.TextSecurePreferences
@ -28,7 +24,6 @@ import org.whispersystems.signalservice.api.push.SignalServiceAddress
import org.whispersystems.signalservice.loki.api.LokiGroupChat
import org.whispersystems.signalservice.loki.api.LokiGroupChatAPI
import org.whispersystems.signalservice.loki.api.LokiGroupMessage
import java.util.*
class LokiGroupChatPoller ( private val context : Context , private val group : LokiGroupChat ) {
private val handler = Handler ( )
@ -102,12 +97,22 @@ class LokiGroupChatPoller(private val context: Context, private val group: LokiG
fun processIncomingMessage ( message : LokiGroupMessage ) {
val id = group . id . toByteArray ( )
val x1 = SignalServiceGroup ( SignalServiceGroup . Type . UPDATE , id , null , null , null )
val x2 = SignalServiceDataMessage ( message . timestamp , x1 , null , message . body )
val quote : SignalServiceDataMessage . Quote ?
if ( message . quote != null ) {
quote = SignalServiceDataMessage . Quote ( message . quote !! . quotedMessageTimestamp , SignalServiceAddress ( message . quote !! . quoteeHexEncodedPublicKey ) , message . quote !! . quotedMessageBody , listOf ( ) )
} else {
quote = null
}
val x2 = SignalServiceDataMessage ( message . timestamp , x1 , listOf ( ) , message . body , false , 0 , false , null , false , quote , null , null , null )
val x3 = SignalServiceContent ( x2 , message . hexEncodedPublicKey , SignalServiceAddress . DEFAULT _DEVICE _ID , message . timestamp , false )
val senderDisplayName = " ${message.displayName} (... ${message.hexEncodedPublicKey.takeLast(8)} ) "
DatabaseFactory . getLokiUserDatabase ( context ) . setServerDisplayName ( group . id , message . hexEncodedPublicKey , senderDisplayName )
if ( quote != null ) {
PushDecryptJob ( context ) . handleMediaMessage ( x3 , x2 , Optional . absent ( ) , Optional . of ( message . serverID ) )
} else {
PushDecryptJob ( context ) . handleTextMessage ( x3 , x2 , Optional . absent ( ) , Optional . of ( message . serverID ) )
}
}
fun processOutgoingMessage ( message : LokiGroupMessage ) {
val messageServerID = message . serverID ?: return
val lokiMessageDatabase = DatabaseFactory . getLokiMessageDatabase ( context )
@ -116,8 +121,14 @@ class LokiGroupChatPoller(private val context: Context, private val group: LokiG
val id = group . id . toByteArray ( )
val mmsDatabase = DatabaseFactory . getMmsDatabase ( context )
val recipient = Recipient . from ( context , Address . fromSerialized ( GroupUtil . getEncodedId ( id , false ) ) , false )
val signalMessage = OutgoingMediaMessage ( recipient , message . body , ArrayList < Attachment > ( ) , message . timestamp , 0 , 0 , ThreadDatabase . DistributionTypes . DEFAULT ,
null , ArrayList < Contact > ( ) , ArrayList < LinkPreview > ( ) , ArrayList < NetworkFailure > ( ) , ArrayList < IdentityKeyMismatch > ( ) )
val quote : QuoteModel ?
if ( message . quote != null ) {
quote = QuoteModel ( message . quote !! . quotedMessageTimestamp , Address . fromSerialized ( message . quote !! . quoteeHexEncodedPublicKey ) , message . quote !! . quotedMessageBody , false , listOf ( ) )
} else {
quote = null
}
val signalMessage = OutgoingMediaMessage ( recipient , message . body , listOf ( ) , message . timestamp , 0 , 0 ,
ThreadDatabase . DistributionTypes . DEFAULT , quote , listOf ( ) , listOf ( ) , listOf ( ) , listOf ( ) )
val threadID = DatabaseFactory . getThreadDatabase ( context ) . getThreadIdFor ( recipient )
fun finalize ( ) {
val messageID = mmsDatabase . insertMessageOutbox ( signalMessage , threadID , false , null )