Use DB sending type rather than in-memory hashtable.

pull/1/head
Moxie Marlinspike 11 years ago
parent 79c554fcc7
commit 0b172cebce

@ -151,6 +151,14 @@ public class SmsDatabase extends Database implements MmsSmsColumns {
updateTypeBitmask(id, Types.ENCRYPTION_MASK, Types.ENCRYPTION_REMOTE_BIT); 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) { public void markAsSent(long id) {
updateTypeBitmask(id, Types.BASE_TYPE_MASK, Types.BASE_SENT_TYPE); updateTypeBitmask(id, Types.BASE_TYPE_MASK, Types.BASE_SENT_TYPE);
} }

@ -35,13 +35,8 @@ import org.thoughtcrime.securesms.service.SendReceiveService.ToastHandler;
import org.thoughtcrime.securesms.transport.UndeliverableMessageException; import org.thoughtcrime.securesms.transport.UndeliverableMessageException;
import org.thoughtcrime.securesms.transport.UniversalTransport; import org.thoughtcrime.securesms.transport.UniversalTransport;
import java.util.HashSet;
import java.util.Set;
public class SmsSender { public class SmsSender {
private final Set<Long> pendingMessages = new HashSet<Long>();
private final Context context; private final Context context;
private final ToastHandler toastHandler; private final ToastHandler toastHandler;
@ -75,10 +70,8 @@ public class SmsSender {
else reader = database.getOutgoingMessages(masterSecret); else reader = database.getOutgoingMessages(masterSecret);
while (reader != null && (record = reader.getNext()) != null) { while (reader != null && (record = reader.getNext()) != null) {
if (!pendingMessages.contains(record.getId())) { database.markAsSending(record.getId());
pendingMessages.add(record.getId()); transport.deliver(record);
transport.deliver(record);
}
} }
} catch (UndeliverableMessageException ude) { } catch (UndeliverableMessageException ude) {
Log.w("SmsSender", ude); Log.w("SmsSender", ude);
@ -100,6 +93,7 @@ public class SmsSender {
DatabaseFactory.getSmsDatabase(context).markAsSent(messageId); DatabaseFactory.getSmsDatabase(context).markAsSent(messageId);
unregisterForRadioChanges(); unregisterForRadioChanges();
} else if (result == SmsManager.RESULT_ERROR_NO_SERVICE || result == SmsManager.RESULT_ERROR_RADIO_OFF) { } else if (result == SmsManager.RESULT_ERROR_NO_SERVICE || result == SmsManager.RESULT_ERROR_RADIO_OFF) {
DatabaseFactory.getSmsDatabase(context).markAsOutbox(messageId);
toastHandler toastHandler
.obtainMessage(0, context.getString(R.string.SmsReceiver_currently_unable_to_send_your_sms_message)) .obtainMessage(0, context.getString(R.string.SmsReceiver_currently_unable_to_send_your_sms_message))
.sendToTarget(); .sendToTarget();
@ -112,8 +106,6 @@ public class SmsSender {
MessageNotifier.notifyMessageDeliveryFailed(context, recipients, threadId); MessageNotifier.notifyMessageDeliveryFailed(context, recipients, threadId);
unregisterForRadioChanges(); unregisterForRadioChanges();
} }
pendingMessages.remove(messageId);
} }
private void handleDeliveredMessage(Intent intent) { private void handleDeliveredMessage(Intent intent) {

Loading…
Cancel
Save