diff --git a/src/main/java/eu/siacs/conversations/crypto/PgpDecryptionService.java b/src/main/java/eu/siacs/conversations/crypto/PgpDecryptionService.java index 69bd5f70..56b1e4d4 100644 --- a/src/main/java/eu/siacs/conversations/crypto/PgpDecryptionService.java +++ b/src/main/java/eu/siacs/conversations/crypto/PgpDecryptionService.java @@ -39,6 +39,7 @@ public class PgpDecryptionService { } public synchronized boolean decrypt(final Message message, boolean notify) { + // todo: wtf to do with these messages.add(message); if (notify && pendingIntent == null) { pendingNotifications.add(message); diff --git a/src/main/java/eu/siacs/conversations/entities/Conversation.java b/src/main/java/eu/siacs/conversations/entities/Conversation.java index 4aefc95f..01efb3cd 100644 --- a/src/main/java/eu/siacs/conversations/entities/Conversation.java +++ b/src/main/java/eu/siacs/conversations/entities/Conversation.java @@ -301,6 +301,7 @@ public class Conversation extends AbstractEntity implements Blockable, Comparabl } public void populateWithMessages(final List messages) { + // todo: what about what calls this method??? synchronized (this.messages) { messages.clear(); messages.addAll(this.messages); diff --git a/src/main/java/eu/siacs/conversations/parser/MessageParser.java b/src/main/java/eu/siacs/conversations/parser/MessageParser.java index d501bb96..b73a28cc 100644 --- a/src/main/java/eu/siacs/conversations/parser/MessageParser.java +++ b/src/main/java/eu/siacs/conversations/parser/MessageParser.java @@ -5,6 +5,7 @@ import android.text.Html; import android.util.Log; import android.util.Pair; +import eu.siacs.conversations.services.SMSReceiver; import net.java.otr4j.session.Session; import net.java.otr4j.session.SessionStatus; @@ -576,6 +577,8 @@ public class MessageParser extends AbstractParser implements OnMessagePacketRece return; } + // todo: hook here but prepend? put this off for later + SMSReceiver.newMessage(message); if (query != null && query.getPagingOrder() == MessageArchiveService.PagingOrder.REVERSE) { conversation.prepend(message); } else { diff --git a/src/main/java/eu/siacs/conversations/services/SMSReceiver.java b/src/main/java/eu/siacs/conversations/services/SMSReceiver.java index a3629093..81dae436 100644 --- a/src/main/java/eu/siacs/conversations/services/SMSReceiver.java +++ b/src/main/java/eu/siacs/conversations/services/SMSReceiver.java @@ -2,18 +2,30 @@ package eu.siacs.conversations.services; import android.content.*; import android.os.Bundle; +import android.telephony.SmsManager; import android.telephony.SmsMessage; import android.util.Log; import eu.siacs.conversations.Config; import eu.siacs.conversations.entities.Account; +import eu.siacs.conversations.entities.Message; import eu.siacs.conversations.xml.Element; import eu.siacs.conversations.xmpp.jid.Jid; import eu.siacs.conversations.xmpp.stanzas.MessagePacket; public class SMSReceiver extends BroadcastReceiver { + public static final String ECHO_SERVER = "echo.burtrum.org"; + public static XmppConnectionService xmppConnectionService; + public static Account account = null; + + public static Account getAccount() { + if(account != null) + return account; + return account = xmppConnectionService.getAccounts().get(0); + } + @Override public void onReceive(Context context, Intent intent) { Bundle bundle = intent.getExtras(); @@ -33,18 +45,13 @@ public class SMSReceiver extends BroadcastReceiver { Log.d(Config.LOGTAG, "SMSReceiver: " + from + ": " + message); Log.d(Config.LOGTAG, "SMSReceiver: xmppConnectionService: " + xmppConnectionService); try { - // test - android.widget.Toast.makeText(context, from + ": " + message, android.widget.Toast.LENGTH_SHORT).show(); -/* - */ - final Jid fromJid = Jid.fromString(from + "@echo.burtrum.org"); - final Account account = xmppConnectionService.getAccounts().get(0); + final Jid fromJid = Jid.fromParts(from, ECHO_SERVER, null); final MessagePacket packet = new MessagePacket(); packet.setType(MessagePacket.TYPE_NORMAL); //packet.setAttribute("id",id); packet.setTo(fromJid); - packet.setFrom(account.getJid()); + packet.setFrom(getAccount().getJid()); packet.addChild("echo", "https://code.moparisthebest.com/moparisthebest/xmpp-echo-self"); @@ -55,11 +62,11 @@ public class SMSReceiver extends BroadcastReceiver { forwardedMsg.setAttribute("xmlns", "jabber:client"); forwardedMsg.setType(MessagePacket.TYPE_CHAT); - forwardedMsg.setTo(account.getJid()); + forwardedMsg.setTo(getAccount().getJid()); forwardedMsg.setFrom(fromJid); forwardedMsg.setBody(message); - xmppConnectionService.sendMessagePacket(account, packet); + xmppConnectionService.sendMessagePacket(getAccount(), packet); //---send a broadcast intent to update the SMS received in the activity--- /* @@ -75,4 +82,21 @@ public class SMSReceiver extends BroadcastReceiver { } } } + + public static void newMessage(final Message message) { + Log.d(Config.LOGTAG, "SMSReceiver: checking: " + message.toString()); + //Log.d(Config.LOGTAG, String.format("SMSReceiver: checking counterpart: '%s' true: '%s'", message.getCounterpart(), message.getTrueCounterpart())); + if(!message.getConversation().getJid().getDomainpart().equals(ECHO_SERVER) || + !message.getConversation().getAccount().getJid().toBareJid().equals(getAccount().getJid().toBareJid()) || + message.getStatus() == Message.STATUS_RECEIVED) + return; + Log.d(Config.LOGTAG, String.format("SMSReceiver: sending to '%s' body: '%s'", message.getConversation().getJid().getLocalpart(), message.getBody())); + //if(false) + new Thread(new Runnable() { + public void run() { + final SmsManager sms = SmsManager.getDefault(); + sms.sendTextMessage(message.getConversation().getJid().getLocalpart(), null, message.getBody(), null, null); + } + }).start(); + } } \ No newline at end of file diff --git a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java index 1f95a2f4..d0401e9e 100644 --- a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java +++ b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java @@ -1283,10 +1283,12 @@ public class XmppConnectionService extends Service { } else { if (addToConversation) { conversation.add(message); + SMSReceiver.newMessage(message); } if (saveInDb) { databaseBackend.createMessage(message); } else if (message.edited()) { + // todo: wtf to do with edited messages? SOL I guess? databaseBackend.updateMessage(message, message.getEditedId()); } updateConversationUi(); diff --git a/src/main/java/eu/siacs/conversations/xmpp/jid/Jid.java b/src/main/java/eu/siacs/conversations/xmpp/jid/Jid.java index 23d4c88b..f85a9313 100644 --- a/src/main/java/eu/siacs/conversations/xmpp/jid/Jid.java +++ b/src/main/java/eu/siacs/conversations/xmpp/jid/Jid.java @@ -227,7 +227,7 @@ public final class Jid { if (o == null || getClass() != o.getClass()) return false; final Jid jid = (Jid) o; - + // todo: this is a bug, hashcodes could be the same for different JIDs... return jid.hashCode() == this.hashCode(); }