From 0b172cebce69f60b04f5268c4f7ba9d193bd7bd7 Mon Sep 17 00:00:00 2001 From: Moxie Marlinspike Date: Sun, 5 May 2013 19:11:11 -0700 Subject: [PATCH] Use DB sending type rather than in-memory hashtable. --- .../securesms/database/SmsDatabase.java | 8 ++++++++ .../thoughtcrime/securesms/service/SmsSender.java | 14 +++----------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/org/thoughtcrime/securesms/database/SmsDatabase.java b/src/org/thoughtcrime/securesms/database/SmsDatabase.java index 551cb6a091..979d6a47e0 100644 --- a/src/org/thoughtcrime/securesms/database/SmsDatabase.java +++ b/src/org/thoughtcrime/securesms/database/SmsDatabase.java @@ -151,6 +151,14 @@ public class SmsDatabase extends Database implements MmsSmsColumns { updateTypeBitmask(id, Types.ENCRYPTION_MASK, Types.ENCRYPTION_REMOTE_BIT); } + public void markAsOutbox(long id) { + updateTypeBitmask(id, Types.BASE_TYPE_MASK, Types.BASE_OUTBOX_TYPE); + } + + public void markAsSending(long id) { + updateTypeBitmask(id, Types.BASE_TYPE_MASK, Types.BASE_SENDING_TYPE); + } + public void markAsSent(long id) { updateTypeBitmask(id, Types.BASE_TYPE_MASK, Types.BASE_SENT_TYPE); } diff --git a/src/org/thoughtcrime/securesms/service/SmsSender.java b/src/org/thoughtcrime/securesms/service/SmsSender.java index 263e8c20da..c35cce6dee 100644 --- a/src/org/thoughtcrime/securesms/service/SmsSender.java +++ b/src/org/thoughtcrime/securesms/service/SmsSender.java @@ -35,13 +35,8 @@ import org.thoughtcrime.securesms.service.SendReceiveService.ToastHandler; import org.thoughtcrime.securesms.transport.UndeliverableMessageException; import org.thoughtcrime.securesms.transport.UniversalTransport; -import java.util.HashSet; -import java.util.Set; - public class SmsSender { - private final Set pendingMessages = new HashSet(); - private final Context context; private final ToastHandler toastHandler; @@ -75,10 +70,8 @@ public class SmsSender { else reader = database.getOutgoingMessages(masterSecret); while (reader != null && (record = reader.getNext()) != null) { - if (!pendingMessages.contains(record.getId())) { - pendingMessages.add(record.getId()); - transport.deliver(record); - } + database.markAsSending(record.getId()); + transport.deliver(record); } } catch (UndeliverableMessageException ude) { Log.w("SmsSender", ude); @@ -100,6 +93,7 @@ public class SmsSender { DatabaseFactory.getSmsDatabase(context).markAsSent(messageId); unregisterForRadioChanges(); } else if (result == SmsManager.RESULT_ERROR_NO_SERVICE || result == SmsManager.RESULT_ERROR_RADIO_OFF) { + DatabaseFactory.getSmsDatabase(context).markAsOutbox(messageId); toastHandler .obtainMessage(0, context.getString(R.string.SmsReceiver_currently_unable_to_send_your_sms_message)) .sendToTarget(); @@ -112,8 +106,6 @@ public class SmsSender { MessageNotifier.notifyMessageDeliveryFailed(context, recipients, threadId); unregisterForRadioChanges(); } - - pendingMessages.remove(messageId); } private void handleDeliveredMessage(Intent intent) {