# HG changeset patch # User Nikita Kozlov # Date 1306276561 -7200 # Node ID c2eb19cd703208822fef6663b864d47d5352b321 # Parent 6c77794969c515a8a6f9929ed5cf2788b0fe6048 fix otr message in history diff -r 6c77794969c5 -r c2eb19cd7032 src/com/beem/project/beem/service/ChatAdapter.java --- a/src/com/beem/project/beem/service/ChatAdapter.java Tue May 24 15:15:08 2011 +0200 +++ b/src/com/beem/project/beem/service/ChatAdapter.java Wed May 25 00:36:01 2011 +0200 @@ -62,7 +62,6 @@ import android.os.Environment; import android.os.RemoteCallbackList; import android.os.RemoteException; -import android.util.AndroidException; import android.util.Log; import com.beem.project.beem.otr.BeemOtrManager; @@ -114,22 +113,35 @@ */ @Override public void sendMessage(com.beem.project.beem.service.Message message) throws RemoteException { + sendMessage(message, true); + } + + /** + * private method for sending message. + * @param message the message to send + * @param log do we want to log (in memory and history) the message? + */ + private void sendMessage(com.beem.project.beem.service.Message message, boolean log) { org.jivesoftware.smack.packet.Message send = new org.jivesoftware.smack.packet.Message(); String msgBody = message.getBody(); + String otrBody = null; send.setTo(message.getTo()); Log.w(TAG, "message to " + message.getTo()); if (mOtrSessionId != null) { - String body; + try { - body = BeemOtrManager.getInstance().getOtrManager().transformSending(mOtrSessionId, msgBody); - msgBody = body; + otrBody = BeemOtrManager.getInstance().getOtrManager().transformSending(mOtrSessionId, msgBody); + send.setBody(otrBody); } catch (OtrException e) { e.printStackTrace(); } + } else { + send.setBody(msgBody); + otrBody = msgBody; } - send.setBody(msgBody); + send.setThread(message.getThread()); send.setSubject(message.getSubject()); send.setType(org.jivesoftware.smack.packet.Message.Type.chat); @@ -137,12 +149,13 @@ // send.set try { mAdaptee.sendMessage(send); - mMessages.add(message); + if (log && otrBody != null) + mMessages.add(message); } catch (XMPPException e) { e.printStackTrace(); } String state = Environment.getExternalStorageState(); - if (mIsHistory && Environment.MEDIA_MOUNTED.equals(state)) + if (log && mIsHistory && Environment.MEDIA_MOUNTED.equals(state)) saveHistory(message, mAccountUser); } @@ -153,11 +166,7 @@ public void sendMessage(String msg) { Message msgToSend = new Message(mParticipant.getJIDWithRes(), Message.MSG_TYPE_CHAT); msgToSend.setBody(msg); - try { - sendMessage(msgToSend); - } catch (RemoteException e) { - e.printStackTrace(); - } + sendMessage(msgToSend, false); } /** @@ -328,9 +337,10 @@ public void processMessage(Chat chat, org.jivesoftware.smack.packet.Message message) { Message msg = new Message(message); Log.d(TAG, "new msg " + msg.getBody()); + String body; if (mOtrSessionId != null) { - String body; + try { body = BeemOtrManager.getInstance().getOtrManager().transformReceiving(mOtrSessionId, msg.getBody()); msg.setBody(body); @@ -379,7 +389,7 @@ * This method is executed when the otr session status change. * @param otrState the new state of otr session. */ - public void otrStateChanged(final String otrState) { + public void otrStateChanged(final String otrState) { final int n = mRemoteListeners.beginBroadcast(); for (int i = 0; i < n; i++) { @@ -413,13 +423,13 @@ @Override public void endOtrSession() throws RemoteException { try { - localEndOtrSession(); + localEndOtrSession(); } catch (OtrException e) { e.printStackTrace(); throw new RemoteException(); } } - + /** * end an Otr session. * @return false if something bad happened. @@ -427,7 +437,7 @@ public boolean localEndOtrSession() throws OtrException { if (mOtrSessionId == null) return true; - + BeemOtrManager.getInstance().getOtrManager().endSession(mOtrSessionId); BeemOtrManager.getInstance().removeChat(mOtrSessionId); mOtrSessionId = null; @@ -450,7 +460,7 @@ public String getLocalOtrFingerprint() throws RemoteException { if (mOtrSessionId == null) return null; - + return BeemOtrManager.getInstance().getLocalFingerprint(mOtrSessionId); } @@ -458,7 +468,7 @@ public String getRemoteOtrFingerprint() throws RemoteException { if (mOtrSessionId == null) return null; - + return BeemOtrManager.getInstance().getRemoteFingerprint(mOtrSessionId); } }