Пример #1
0
        /*protected Pair<long, long> updateMessageBodyAndType(long messageId, String body, long maskOff, long maskOn)
         * {
         *  SQLiteDatabase db = databaseHelper.getWritableDatabase();
         *  db.execSQL("UPDATE " + TABLE_NAME + " SET " + BODY + " = ?, " +
         *                 TYPE + " = (" + TYPE + " & " + (MessageTypes.TOTAL_MASK - maskOff) + " | " + maskOn + ") " +
         *                 "WHERE " + ID + " = ?",
         *             new String[] { body, messageId + "" });
         *
         *  long threadId = getThreadIdForMessage(messageId);
         *
         *  DatabaseFactory.getThreadDatabase().update(threadId);
         *  notifyConversationListeners(threadId);
         *  //notifyConversationListListeners();
         *
         *  return new Pair<long, long>(messageId, threadId);
         * }
         *
         * public Pair<long, long> copyMessageInbox(long messageId)
         * {
         *  Reader reader = readerFor(getMessage(messageId));
         *  SmsMessageRecord record = reader.getNext();
         *
         *  ContentValues contentValues = new ContentValues();
         *  contentValues.put(TYPE, (record.getType() & ~MessageTypes.BASE_TYPE_MASK) | MessageTypes.BASE_INBOX_TYPE);
         *  contentValues.put(ADDRESS, record.getIndividualRecipient().getNumber());
         *  contentValues.put(ADDRESS_DEVICE_ID, record.getRecipientDeviceId());
         *  contentValues.put(DATE_RECEIVED, System.currentTimeMillis());
         *  contentValues.put(DATE_SENT, record.getDateSent());
         *  contentValues.put(PROTOCOL, 31337);
         *  contentValues.put(READ, 0);
         *  contentValues.put(BODY, record.getBody().getBody());
         *  contentValues.put(THREAD_ID, record.getThreadId());
         *
         *  SQLiteDatabase db = databaseHelper.getWritableDatabase();
         *  long newMessageId = db.insert(TABLE_NAME, null, contentValues);
         *
         *  DatabaseFactory.getThreadDatabase(context).update(record.getThreadId());
         *  notifyConversationListeners(record.getThreadId());
         *
         *  jobManager.add(new TrimThreadJob(context, record.getThreadId()));
         *  reader.close();
         *
         *  return new Pair<>(newMessageId, record.getThreadId());
         * }
         */
        protected Pair <long, long> insertMessageInbox(IncomingTextMessage message, long type)
        {
            if (message.isPreKeyBundle())
            {
                type |= MessageTypes.KEY_EXCHANGE_BIT | MessageTypes.KEY_EXCHANGE_BUNDLE_BIT;
            }
            else if (message.isSecureMessage())
            {
                type |= MessageTypes.SECURE_MESSAGE_BIT;
            }

            /*else if (message.isGroup()) TODO: GROUP enable
             * {
             *  type |= MessageTypes.SECURE_MESSAGE_BIT;
             *  if (((IncomingGroupMessage)message).isUpdate()) type |= MessageTypes.GROUP_UPDATE_BIT;
             *  else if (((IncomingGroupMessage)message).isQuit()) type |= MessageTypes.GROUP_QUIT_BIT;
             * }*/
            else if (message.isEndSession())
            {
                type |= MessageTypes.SECURE_MESSAGE_BIT;
                type |= MessageTypes.END_SESSION_BIT;
            }

            if (message.isPush())
            {
                type |= MessageTypes.PUSH_MESSAGE_BIT;
            }

            Recipients recipients;

            if (message.getSender() != null)
            {
                recipients = RecipientFactory.getRecipientsFromString(message.getSender(), true);
            }
            else
            {
                //Log.w(TAG, "Sender is null, returning unknown recipient");
                recipients = new Recipients(Recipient.getUnknownRecipient());
            }

            Recipients groupRecipients;

            if (message.getGroupId() == null)
            {
                groupRecipients = null;
            }
            else
            {
                groupRecipients = RecipientFactory.getRecipientsFromString(message.getGroupId(), true);
            }

            bool unread = /*org.thoughtcrime.securesms.util.Util.isDefaultSmsProvider() ||*/
                          message.isSecureMessage() || message.isPreKeyBundle();

            long threadId;

            if (groupRecipients == null)
            {
                threadId = DatabaseFactory.getThreadDatabase().GetThreadIdForRecipients(recipients);                          // TODO CHECK
            }
            else
            {
                threadId = DatabaseFactory.getThreadDatabase().GetThreadIdForRecipients(groupRecipients);
            }

            /*ContentValues values = new ContentValues(6);
             * values.put(ADDRESS, message.getSender());
             * values.put(ADDRESS_DEVICE_ID, message.getSenderDeviceId());
             * values.put(DATE_RECEIVED, System.currentTimeMillis());
             * values.put(DATE_SENT, message.getSentTimestampMillis());
             * values.put(PROTOCOL, message.getProtocol());
             * values.put(READ, unread ? 0 : 1);
             *
             * if (!TextUtils.isEmpty(message.getPseudoSubject()))
             *  values.put(SUBJECT, message.getPseudoSubject());
             *
             * values.put(REPLY_PATH_PRESENT, message.isReplyPathPresent());
             * values.put(SERVICE_CENTER, message.getServiceCenterAddress());
             * values.put(BODY, message.getMessageBody());
             * values.put(TYPE, type);
             * values.put(THREAD_ID, threadId);*/

            var insert = new Message()
            {
                Address         = message.getSender(),
                AddressDeviceId = message.getSenderDeviceId(),
                DateReceived    = TimeUtil.GetDateTimeMillis(), // force precision to millis not to ticks
                DateSent        = TimeUtil.GetDateTime(message.getSentTimestampMillis()),
                Read            = !unread,
                Body            = message.getMessageBody(),
                Type            = type,
                ThreadId        = threadId
            };

            long rows = conn.Insert(insert);

            long messageId = insert.MessageId;

            if (unread)
            {
                DatabaseFactory.getThreadDatabase().SetUnread(threadId);
            }

            DatabaseFactory.getThreadDatabase().Refresh(threadId);
            notifyConversationListeners(threadId);
            //jobManager.add(new TrimThreadJob(context, threadId)); // TODO

            return(new Pair <long, long>(messageId, threadId));
        }