public Pair <long, long> CopyMessageInbox(long messageId) { var message = Get(messageId); var newMessage = new Message { Type = (message.Type & ~MessageTypes.BASE_TYPE_MASK) | MessageTypes.BASE_INBOX_TYPE, Address = message.Address, AddressDeviceId = message.AddressDeviceId, DateReceived = TimeUtil.GetDateTimeMillis(), DateSent = message.DateSent, //Protocol = 31337, Read = false, Body = message.Body, ThreadId = message.ThreadId }; long newMessageId = conn.Insert(newMessage); DatabaseFactory.getThreadDatabase().Update(message.ThreadId); notifyConversationListeners(message.ThreadId); //jobManager.add(new TrimThreadJob(context, record.getThreadId())); //reader.close(); return(new Pair <long, long>(newMessageId, message.ThreadId)); }
private async Task updateTypeBitmask(long messageId, long maskOff, long maskOn) { Debug.WriteLine($"MessageDatabase: Updating ID: {messageId} to base type: {maskOn}"); var message = conn.Get <Message>(messageId); message.PropertyChanged += (s, e) => { Debug.WriteLine("property changed"); }; message.Type = (MessageTypes.TOTAL_MASK - maskOff) | maskOn; Debug.WriteLine("before save"); conn.Update(message); Debug.WriteLine("after save"); DatabaseFactory.getThreadDatabase().Refresh(message.ThreadId); }
private void UpdateTypeBitmask(long messageId, long maskOff, long maskOn) { Log.Debug($"MessageDatabase: Updating ID: {messageId} to base type: {maskOn}"); var message = conn.Get <Message>(messageId); message.Type = message.Type & (MessageTypes.TOTAL_MASK - maskOff) | maskOn; conn.Update(message); DatabaseFactory.getThreadDatabase().Refresh(message.ThreadId); notifyConversationListeners(message.ThreadId); notifyConversationListListeners(); }
protected Pair <long, long> updateMessageBodyAndType(long messageId, string body, long maskOff, long maskOn) { var message = Get(messageId); message.Body = body; message.Type = (MessageTypes.TOTAL_MASK - maskOff) | maskOn; conn.Update(message); long threadId = GetThreadIdForMessage(messageId); DatabaseFactory.getThreadDatabase().Update(threadId, true); notifyConversationListeners(threadId); notifyConversationListListeners(); return(new Pair <long, long>(messageId, threadId)); }
public long InsertMessageOutbox(long threadId, OutgoingTextMessage message, DateTime date) { var type = MessageTypes.BASE_OUTBOX_TYPE; if (message.IsKeyExchange) { type |= MessageTypes.KEY_EXCHANGE_BIT; } else if (message.IsSecureMessage) { type |= MessageTypes.SECURE_MESSAGE_BIT; } else if (message.IsEndSession) { type |= MessageTypes.END_SESSION_BIT; } var insert = new Message(); insert.Address = message.Recipients.PrimaryRecipient.Number; // PhoneNumberUtils.formatNumber(message.Recipients.getPrimaryRecipient().getNumber()); // TODO: insert.ThreadId = threadId; insert.Body = message.MessageBody; insert.DateReceived = TimeUtil.GetDateTimeMillis(); insert.DateSent = date; insert.Read = true; insert.Type = type; var tmp = new TextMessageRecord(insert); // TODO: debug conn.Insert(insert); long messageId = insert.MessageId; DatabaseFactory.getThreadDatabase().Update(threadId); notifyConversationListeners(threadId); //jobManager.add(new TrimThreadJob(context, threadId)); return(messageId); }
/*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)); }