Search in sources :

Example 1 with PduBody

use of ws.com.google.android.mms.pdu.PduBody in project Signal-Android by WhisperSystems.

the class MmsSendJob method constructSendPdu.

private SendReq constructSendPdu(MasterSecret masterSecret, OutgoingMediaMessage message) throws UndeliverableMessageException {
    SendReq sendReq = new SendReq();
    PduBody body = new PduBody();
    List<String> numbers = message.getRecipients().toNumberStringList(true);
    for (String number : numbers) {
        if (message.getDistributionType() == DistributionTypes.CONVERSATION) {
            sendReq.addTo(new EncodedStringValue(Util.toIsoBytes(number)));
        } else {
            sendReq.addBcc(new EncodedStringValue(Util.toIsoBytes(number)));
        }
    }
    sendReq.setDate(message.getSentTimeMillis() / 1000L);
    if (!TextUtils.isEmpty(message.getBody())) {
        PduPart part = new PduPart();
        part.setData(Util.toUtf8Bytes(message.getBody()));
        part.setCharset(CharacterSets.UTF_8);
        part.setContentType(ContentType.TEXT_PLAIN.getBytes());
        part.setContentId((System.currentTimeMillis() + "").getBytes());
        part.setName(("Text" + System.currentTimeMillis()).getBytes());
        body.addPart(part);
    }
    List<Attachment> scaledAttachments = scaleAttachments(masterSecret, MediaConstraints.MMS_CONSTRAINTS, message.getAttachments());
    for (Attachment attachment : scaledAttachments) {
        try {
            if (attachment.getDataUri() == null)
                throw new IOException("Assertion failed, attachment for outgoing MMS has no data!");
            PduPart part = new PduPart();
            part.setData(Util.readFully(PartAuthority.getAttachmentStream(context, masterSecret, attachment.getDataUri())));
            part.setContentType(Util.toIsoBytes(attachment.getContentType()));
            part.setContentId((System.currentTimeMillis() + "").getBytes());
            part.setName((System.currentTimeMillis() + "").getBytes());
            body.addPart(part);
        } catch (IOException e) {
            Log.w(TAG, e);
        }
    }
    sendReq.setBody(body);
    return sendReq;
}
Also used : EncodedStringValue(ws.com.google.android.mms.pdu.EncodedStringValue) PduBody(ws.com.google.android.mms.pdu.PduBody) PduPart(ws.com.google.android.mms.pdu.PduPart) Attachment(org.thoughtcrime.securesms.attachments.Attachment) IOException(java.io.IOException) SendReq(ws.com.google.android.mms.pdu.SendReq)

Example 2 with PduBody

use of ws.com.google.android.mms.pdu.PduBody in project Signal-Android by WhisperSystems.

the class MmsDownloadJob method storeRetrievedMms.

private void storeRetrievedMms(MasterSecret masterSecret, String contentLocation, long messageId, long threadId, RetrieveConf retrieved, int subscriptionId) throws MmsException, NoSessionException, DuplicateMessageException, InvalidMessageException, LegacyMessageException {
    MmsDatabase database = DatabaseFactory.getMmsDatabase(context);
    SingleUseBlobProvider provider = SingleUseBlobProvider.getInstance();
    String from = null;
    List<String> to = new LinkedList<>();
    List<String> cc = new LinkedList<>();
    String body = null;
    List<Attachment> attachments = new LinkedList<>();
    if (retrieved.getFrom() != null) {
        from = Util.toIsoString(retrieved.getFrom().getTextString());
    }
    if (retrieved.getTo() != null) {
        for (EncodedStringValue toValue : retrieved.getTo()) {
            to.add(Util.toIsoString(toValue.getTextString()));
        }
    }
    if (retrieved.getCc() != null) {
        for (EncodedStringValue ccValue : retrieved.getCc()) {
            cc.add(Util.toIsoString(ccValue.getTextString()));
        }
    }
    if (retrieved.getBody() != null) {
        body = PartParser.getMessageText(retrieved.getBody());
        PduBody media = PartParser.getSupportedMediaParts(retrieved.getBody());
        for (int i = 0; i < media.getPartsNum(); i++) {
            PduPart part = media.getPart(i);
            if (part.getData() != null) {
                Uri uri = provider.createUri(part.getData());
                attachments.add(new UriAttachment(uri, Util.toIsoString(part.getContentType()), AttachmentDatabase.TRANSFER_PROGRESS_DONE, part.getData().length));
            }
        }
    }
    IncomingMediaMessage message = new IncomingMediaMessage(from, to, cc, body, retrieved.getDate() * 1000L, attachments, subscriptionId, 0, false);
    Optional<InsertResult> insertResult = database.insertMessageInbox(new MasterSecretUnion(masterSecret), message, contentLocation, threadId);
    if (insertResult.isPresent()) {
        database.delete(messageId);
        MessageNotifier.updateNotification(context, masterSecret, insertResult.get().getThreadId());
    }
}
Also used : InsertResult(org.thoughtcrime.securesms.database.MessagingDatabase.InsertResult) EncodedStringValue(ws.com.google.android.mms.pdu.EncodedStringValue) MasterSecretUnion(org.thoughtcrime.securesms.crypto.MasterSecretUnion) PduBody(ws.com.google.android.mms.pdu.PduBody) IncomingMediaMessage(org.thoughtcrime.securesms.mms.IncomingMediaMessage) UriAttachment(org.thoughtcrime.securesms.attachments.UriAttachment) Attachment(org.thoughtcrime.securesms.attachments.Attachment) Uri(android.net.Uri) LinkedList(java.util.LinkedList) SingleUseBlobProvider(org.thoughtcrime.securesms.providers.SingleUseBlobProvider) PduPart(ws.com.google.android.mms.pdu.PduPart) UriAttachment(org.thoughtcrime.securesms.attachments.UriAttachment) MmsDatabase(org.thoughtcrime.securesms.database.MmsDatabase)

Aggregations

Attachment (org.thoughtcrime.securesms.attachments.Attachment)2 EncodedStringValue (ws.com.google.android.mms.pdu.EncodedStringValue)2 PduBody (ws.com.google.android.mms.pdu.PduBody)2 PduPart (ws.com.google.android.mms.pdu.PduPart)2 Uri (android.net.Uri)1 IOException (java.io.IOException)1 LinkedList (java.util.LinkedList)1 UriAttachment (org.thoughtcrime.securesms.attachments.UriAttachment)1 MasterSecretUnion (org.thoughtcrime.securesms.crypto.MasterSecretUnion)1 InsertResult (org.thoughtcrime.securesms.database.MessagingDatabase.InsertResult)1 MmsDatabase (org.thoughtcrime.securesms.database.MmsDatabase)1 IncomingMediaMessage (org.thoughtcrime.securesms.mms.IncomingMediaMessage)1 SingleUseBlobProvider (org.thoughtcrime.securesms.providers.SingleUseBlobProvider)1 SendReq (ws.com.google.android.mms.pdu.SendReq)1