Search in sources :

Example 6 with InvalidNumberException

use of org.whispersystems.signalservice.api.util.InvalidNumberException in project Signal-Android by WhisperSystems.

the class SmsDatabase method incrementDeliveryReceiptCount.

public void incrementDeliveryReceiptCount(SyncMessageId messageId) {
    SQLiteDatabase database = databaseHelper.getWritableDatabase();
    Cursor cursor = null;
    boolean foundMessage = false;
    try {
        cursor = database.query(TABLE_NAME, new String[] { ID, THREAD_ID, ADDRESS, TYPE }, DATE_SENT + " = ?", new String[] { String.valueOf(messageId.getTimetamp()) }, null, null, null, null);
        while (cursor.moveToNext()) {
            if (Types.isOutgoingMessageType(cursor.getLong(cursor.getColumnIndexOrThrow(TYPE)))) {
                try {
                    String theirAddress = canonicalizeNumber(context, messageId.getAddress());
                    String ourAddress = canonicalizeNumber(context, cursor.getString(cursor.getColumnIndexOrThrow(ADDRESS)));
                    if (ourAddress.equals(theirAddress)) {
                        long threadId = cursor.getLong(cursor.getColumnIndexOrThrow(THREAD_ID));
                        database.execSQL("UPDATE " + TABLE_NAME + " SET " + RECEIPT_COUNT + " = " + RECEIPT_COUNT + " + 1 WHERE " + ID + " = ?", new String[] { String.valueOf(cursor.getLong(cursor.getColumnIndexOrThrow(ID))) });
                        DatabaseFactory.getThreadDatabase(context).update(threadId, false);
                        notifyConversationListeners(threadId);
                        foundMessage = true;
                    }
                } catch (InvalidNumberException e) {
                    Log.w(TAG, e);
                }
            }
        }
        if (!foundMessage) {
            try {
                earlyReceiptCache.increment(messageId.getTimetamp(), canonicalizeNumber(context, messageId.getAddress()));
            } catch (InvalidNumberException e) {
                Log.w(TAG, e);
            }
        }
    } finally {
        if (cursor != null)
            cursor.close();
    }
}
Also used : SQLiteDatabase(android.database.sqlite.SQLiteDatabase) InvalidNumberException(org.whispersystems.signalservice.api.util.InvalidNumberException) Cursor(android.database.Cursor)

Example 7 with InvalidNumberException

use of org.whispersystems.signalservice.api.util.InvalidNumberException in project Signal-Android by WhisperSystems.

the class MultiDeviceBlockedUpdateJob method onRun.

@Override
public void onRun(MasterSecret masterSecret) throws IOException, UntrustedIdentityException {
    RecipientPreferenceDatabase database = DatabaseFactory.getRecipientPreferenceDatabase(context);
    SignalServiceMessageSender messageSender = messageSenderFactory.create();
    BlockedReader reader = database.readerForBlocked(database.getBlocked());
    List<String> blocked = new LinkedList<>();
    Recipients recipients;
    while ((recipients = reader.getNext()) != null) {
        if (recipients.isSingleRecipient()) {
            try {
                blocked.add(Util.canonicalizeNumber(context, recipients.getPrimaryRecipient().getNumber()));
            } catch (InvalidNumberException e) {
                Log.w(TAG, e);
            }
        }
    }
    messageSender.sendMessage(SignalServiceSyncMessage.forBlocked(new BlockedListMessage(blocked)));
}
Also used : RecipientPreferenceDatabase(org.thoughtcrime.securesms.database.RecipientPreferenceDatabase) Recipients(org.thoughtcrime.securesms.recipients.Recipients) InvalidNumberException(org.whispersystems.signalservice.api.util.InvalidNumberException) SignalServiceMessageSender(org.whispersystems.signalservice.api.SignalServiceMessageSender) BlockedReader(org.thoughtcrime.securesms.database.RecipientPreferenceDatabase.BlockedReader) BlockedListMessage(org.whispersystems.signalservice.api.messages.multidevice.BlockedListMessage) LinkedList(java.util.LinkedList)

Example 8 with InvalidNumberException

use of org.whispersystems.signalservice.api.util.InvalidNumberException in project Signal-Android by WhisperSystems.

the class MultiDeviceContactUpdateJob method generateSingleContactUpdate.

private void generateSingleContactUpdate(long recipientId) throws IOException, UntrustedIdentityException, NetworkException {
    SignalServiceMessageSender messageSender = messageSenderFactory.create();
    File contactDataFile = createTempFile("multidevice-contact-update");
    try {
        DeviceContactsOutputStream out = new DeviceContactsOutputStream(new FileOutputStream(contactDataFile));
        Recipient recipient = RecipientFactory.getRecipientForId(context, recipientId, false);
        out.write(new DeviceContact(Util.canonicalizeNumber(context, recipient.getNumber()), Optional.fromNullable(recipient.getName()), getAvatar(recipient.getContactUri()), Optional.fromNullable(recipient.getColor().serialize())));
        out.close();
        sendUpdate(messageSender, contactDataFile);
    } catch (InvalidNumberException e) {
        Log.w(TAG, e);
    } finally {
        if (contactDataFile != null)
            contactDataFile.delete();
    }
}
Also used : DeviceContact(org.whispersystems.signalservice.api.messages.multidevice.DeviceContact) DeviceContactsOutputStream(org.whispersystems.signalservice.api.messages.multidevice.DeviceContactsOutputStream) InvalidNumberException(org.whispersystems.signalservice.api.util.InvalidNumberException) FileOutputStream(java.io.FileOutputStream) SignalServiceMessageSender(org.whispersystems.signalservice.api.SignalServiceMessageSender) Recipient(org.thoughtcrime.securesms.recipients.Recipient) File(java.io.File)

Example 9 with InvalidNumberException

use of org.whispersystems.signalservice.api.util.InvalidNumberException in project Signal-Android by WhisperSystems.

the class MultiDeviceContactUpdateJob method generateFullContactUpdate.

private void generateFullContactUpdate() throws IOException, UntrustedIdentityException, NetworkException {
    SignalServiceMessageSender messageSender = messageSenderFactory.create();
    File contactDataFile = createTempFile("multidevice-contact-update");
    try {
        DeviceContactsOutputStream out = new DeviceContactsOutputStream(new FileOutputStream(contactDataFile));
        Collection<ContactData> contacts = ContactAccessor.getInstance().getContactsWithPush(context);
        for (ContactData contactData : contacts) {
            Uri contactUri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_URI, String.valueOf(contactData.id));
            String number = Util.canonicalizeNumber(context, contactData.numbers.get(0).number);
            Optional<String> name = Optional.fromNullable(contactData.name);
            Optional<String> color = getColor(number);
            out.write(new DeviceContact(number, name, getAvatar(contactUri), color));
        }
        out.close();
        sendUpdate(messageSender, contactDataFile);
    } catch (InvalidNumberException e) {
        Log.w(TAG, e);
    } finally {
        if (contactDataFile != null)
            contactDataFile.delete();
    }
}
Also used : DeviceContact(org.whispersystems.signalservice.api.messages.multidevice.DeviceContact) DeviceContactsOutputStream(org.whispersystems.signalservice.api.messages.multidevice.DeviceContactsOutputStream) InvalidNumberException(org.whispersystems.signalservice.api.util.InvalidNumberException) FileOutputStream(java.io.FileOutputStream) ContactData(org.thoughtcrime.securesms.contacts.ContactAccessor.ContactData) SignalServiceMessageSender(org.whispersystems.signalservice.api.SignalServiceMessageSender) File(java.io.File) Uri(android.net.Uri)

Example 10 with InvalidNumberException

use of org.whispersystems.signalservice.api.util.InvalidNumberException in project Signal-Android by WhisperSystems.

the class MessageSender method isPushMediaSend.

private static boolean isPushMediaSend(Context context, Recipients recipients) {
    try {
        if (!TextSecurePreferences.isPushRegistered(context)) {
            return false;
        }
        if (recipients.getRecipientsList().size() > 1) {
            return false;
        }
        Recipient recipient = recipients.getPrimaryRecipient();
        String destination = Util.canonicalizeNumber(context, recipient.getNumber());
        return isPushDestination(context, destination);
    } catch (InvalidNumberException e) {
        Log.w(TAG, e);
        return false;
    }
}
Also used : InvalidNumberException(org.whispersystems.signalservice.api.util.InvalidNumberException) Recipient(org.thoughtcrime.securesms.recipients.Recipient)

Aggregations

InvalidNumberException (org.whispersystems.signalservice.api.util.InvalidNumberException)20 Cursor (android.database.Cursor)7 SQLiteDatabase (android.database.sqlite.SQLiteDatabase)6 Recipient (org.thoughtcrime.securesms.recipients.Recipient)5 SignalServiceMessageSender (org.whispersystems.signalservice.api.SignalServiceMessageSender)5 ContentValues (android.content.ContentValues)4 Uri (android.net.Uri)4 LinkedList (java.util.LinkedList)4 IOException (java.io.IOException)3 SignalServiceAddress (org.whispersystems.signalservice.api.push.SignalServiceAddress)3 Pair (android.util.Pair)2 File (java.io.File)2 FileOutputStream (java.io.FileOutputStream)2 TrimThreadJob (org.thoughtcrime.securesms.jobs.TrimThreadJob)2 InsecureFallbackApprovalException (org.thoughtcrime.securesms.transport.InsecureFallbackApprovalException)2 RetryLaterException (org.thoughtcrime.securesms.transport.RetryLaterException)2 UndeliverableMessageException (org.thoughtcrime.securesms.transport.UndeliverableMessageException)2 SignalServiceDataMessage (org.whispersystems.signalservice.api.messages.SignalServiceDataMessage)2 DeviceContact (org.whispersystems.signalservice.api.messages.multidevice.DeviceContact)2 DeviceContactsOutputStream (org.whispersystems.signalservice.api.messages.multidevice.DeviceContactsOutputStream)2