aboutsummaryrefslogtreecommitdiffstats
path: root/src/main/java/de/pixart/messenger/persistance/DatabaseBackend.java
diff options
context:
space:
mode:
authorChristian Schneppe <christian@pix-art.de>2018-11-11 13:51:15 +0100
committerChristian Schneppe <christian@pix-art.de>2018-11-11 13:51:15 +0100
commitb38fe1e8f0a9a1aa479b4a61f65f61ae78db6665 (patch)
tree3cd92b820a39ee463fca74a92841b3a31e3f6062 /src/main/java/de/pixart/messenger/persistance/DatabaseBackend.java
parent13586d7b797cd6ce9ec967e2657a0180340dcfb5 (diff)
implement message deletion
fixed #208
Diffstat (limited to 'src/main/java/de/pixart/messenger/persistance/DatabaseBackend.java')
-rw-r--r--src/main/java/de/pixart/messenger/persistance/DatabaseBackend.java32
1 files changed, 17 insertions, 15 deletions
diff --git a/src/main/java/de/pixart/messenger/persistance/DatabaseBackend.java b/src/main/java/de/pixart/messenger/persistance/DatabaseBackend.java
index dac626718..b4de5cd92 100644
--- a/src/main/java/de/pixart/messenger/persistance/DatabaseBackend.java
+++ b/src/main/java/de/pixart/messenger/persistance/DatabaseBackend.java
@@ -60,7 +60,7 @@ import rocks.xmpp.addr.Jid;
public class DatabaseBackend extends SQLiteOpenHelper {
public static final String DATABASE_NAME = "history";
- public static final int DATABASE_VERSION = 43; // = Conversations DATABASE_VERSION + 1
+ public static final int DATABASE_VERSION = 44; // = Conversations DATABASE_VERSION + 2
private static DatabaseBackend instance = null;
private static String CREATE_CONTATCS_STATEMENT = "create table "
@@ -228,6 +228,7 @@ public class DatabaseBackend extends SQLiteOpenHelper {
+ Message.CARBON + " INTEGER, "
+ Message.EDITED + " TEXT, "
+ Message.READ + " NUMBER DEFAULT 1, "
+ + Message.DELETED + " NUMBER DEFAULT 0, "
+ Message.OOB + " INTEGER, "
+ Message.ERROR_MESSAGE + " TEXT,"
+ Message.READ_BY_MARKERS + " TEXT,"
@@ -527,9 +528,13 @@ public class DatabaseBackend extends SQLiteOpenHelper {
db.execSQL(COPY_PREEXISTING_ENTRIES);
}
- if (oldVersion < 42 && newVersion >= 42) {
+ if (oldVersion < 43 && newVersion >= 43) {
db.execSQL("DROP TRIGGER IF EXISTS after_message_delete");
}
+
+ if (oldVersion < 44 && newVersion >= 44) {
+ db.execSQL("ALTER TABLE " + Message.TABLENAME + " ADD COLUMN " + Message.DELETED + " NUMBER DEFAULT 0");
+ }
}
private void canonicalizeJids(SQLiteDatabase db) {
@@ -716,21 +721,19 @@ public class DatabaseBackend extends SQLiteOpenHelper {
return getMessages(conversations, limit, -1);
}
- public ArrayList<Message> getMessages(Conversation conversation, int limit,
- long timestamp) {
+ public ArrayList<Message> getMessages(Conversation conversation, int limit, long timestamp) {
ArrayList<Message> list = new ArrayList<>();
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor;
if (timestamp == -1) {
- String[] selectionArgs = {conversation.getUuid()};
+ String[] selectionArgs = {conversation.getUuid(), "1"};
cursor = db.query(Message.TABLENAME, null, Message.CONVERSATION
- + "=?", selectionArgs, null, null, Message.TIME_SENT
+ + "=? and " + Message.DELETED + "<?", selectionArgs, null, null, Message.TIME_SENT
+ " DESC", String.valueOf(limit));
} else {
- String[] selectionArgs = {conversation.getUuid(),
- Long.toString(timestamp)};
+ String[] selectionArgs = {conversation.getUuid(), Long.toString(timestamp), "1"};
cursor = db.query(Message.TABLENAME, null, Message.CONVERSATION
- + "=? and " + Message.TIME_SENT + "<?", selectionArgs,
+ + "=? and " + Message.TIME_SENT + "<? and " + Message.DELETED + "<?", selectionArgs,
null, null, Message.TIME_SENT + " DESC",
String.valueOf(limit));
}
@@ -738,7 +741,7 @@ public class DatabaseBackend extends SQLiteOpenHelper {
cursor.moveToLast();
do {
Message message = Message.fromCursor(cursor, conversation);
- if (message != null) {
+ if (message != null && !message.isMessageDeleted()) {
list.add(message);
}
} while (cursor.moveToPrevious());
@@ -944,12 +947,11 @@ public class DatabaseBackend extends SQLiteOpenHelper {
public void deleteMessageInConversation(Message message) {
long start = SystemClock.elapsedRealtime();
final SQLiteDatabase db = this.getWritableDatabase();
- db.beginTransaction();
+ ContentValues values = new ContentValues();
+ values.put(Message.DELETED, "1");
String[] args = {message.getUuid()};
- db.delete("messages_index", "uuid =?", args);
- db.setTransactionSuccessful();
- db.endTransaction();
- Log.d(Config.LOGTAG, "deleted single message in " + (SystemClock.elapsedRealtime() - start) + "ms");
+ int rows = db.update("messages", values, "uuid =?", args);
+ Log.d(Config.LOGTAG, "deleted " + rows + " message in " + (SystemClock.elapsedRealtime() - start) + "ms");
}
public void deleteMessagesInConversation(Conversation conversation) {