From 4f902d8210d50a586c7ece1bb7da2ab26fd18da5 Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Mon, 27 Jan 2014 20:40:42 +0100 Subject: conversation archiveable. new conversation will find or restart old conversations --- .../gultsch/chat/persistance/DatabaseBackend.java | 64 ++++++++++++++++++---- 1 file changed, 52 insertions(+), 12 deletions(-) (limited to 'src/de/gultsch/chat/persistance/DatabaseBackend.java') diff --git a/src/de/gultsch/chat/persistance/DatabaseBackend.java b/src/de/gultsch/chat/persistance/DatabaseBackend.java index 06b9af16..0689851f 100644 --- a/src/de/gultsch/chat/persistance/DatabaseBackend.java +++ b/src/de/gultsch/chat/persistance/DatabaseBackend.java @@ -3,6 +3,8 @@ package de.gultsch.chat.persistance; import java.util.ArrayList; import java.util.List; +import de.gultsch.chat.entities.Account; +import de.gultsch.chat.entities.Contact; import de.gultsch.chat.entities.Conversation; import de.gultsch.chat.entities.Message; import android.content.Context; @@ -24,12 +26,16 @@ public class DatabaseBackend extends SQLiteOpenHelper { @Override public void onCreate(SQLiteDatabase db) { db.execSQL("create table " + Conversation.TABLENAME + " (" - + Conversation.UUID + " TEXT, " + Conversation.NAME + " TEXT, " - + Conversation.PHOTO_URI + " TEXT, " + Conversation.ACCOUNT - + " TEXT, " + Conversation.CONTACT + " TEXT, " - + Conversation.CREATED + " NUMBER, " + Conversation.STATUS + + Conversation.UUID + " TEXT PRIMARY KEY, " + Conversation.NAME + + " TEXT, " + Conversation.PHOTO_URI + " TEXT, " + + Conversation.ACCOUNT + " TEXT, " + Conversation.CONTACT + + " TEXT, " + Conversation.CREATED + " NUMBER, " + + Conversation.STATUS + " NUMBER)"); + db.execSQL("create table " + Message.TABLENAME + "( " + Message.UUID + + " TEXT PRIMARY KEY, " + Message.CONVERSATION + " TEXT, " + Message.TIME_SENT +" NUMBER, " + + Message.COUNTERPART + " TEXT, " + Message.BODY + " TEXT, " + + Message.ENCRYPTION + " NUMBER, " + Message.STATUS + " NUMBER)"); - db.execSQL("create table "+Message.TABLENAME+ "()"); } @Override @@ -45,15 +51,20 @@ public class DatabaseBackend extends SQLiteOpenHelper { return instance; } - public void addConversation(Conversation conversation) { + public void createConversation(Conversation conversation) { SQLiteDatabase db = this.getWritableDatabase(); - db.insert("conversations", null, conversation.getContentValues()); + db.insert(Conversation.TABLENAME, null, conversation.getContentValues()); + } + + public void createMessage(Message message) { + SQLiteDatabase db = this.getWritableDatabase(); + db.insert(Message.TABLENAME, null, message.getContentValues()); } public int getConversationCount() { SQLiteDatabase db = this.getReadableDatabase(); Cursor cursor = db.rawQuery( - "select count(uuid) as count from conversations", null); + "select count(uuid) as count from "+Conversation.TABLENAME+" where "+Conversation.STATUS+"="+Conversation.STATUS_AVAILABLE, null); cursor.moveToFirst(); return cursor.getInt(0); } @@ -62,14 +73,43 @@ public class DatabaseBackend extends SQLiteOpenHelper { List list = new ArrayList(); SQLiteDatabase db = this.getReadableDatabase(); String[] selectionArgs = { "" + status }; - Cursor cursor = db - .rawQuery( - "select * from conversations where status = ? order by created desc", - selectionArgs); + Cursor cursor = db.rawQuery("select * from " + Conversation.TABLENAME + + " where " + Conversation.STATUS + " = ? order by " + + Conversation.CREATED + " desc", selectionArgs); while (cursor.moveToNext()) { list.add(Conversation.fromCursor(cursor)); } return list; } + public List getMessages(Conversation conversation, int limit) { + List list = new ArrayList(); + SQLiteDatabase db = this.getReadableDatabase(); + String[] selectionArgs = { conversation.getUuid() }; + Cursor cursor = db.query(Message.TABLENAME, null,Message.CONVERSATION +"=?", selectionArgs, null, null, + Message.TIME_SENT+" DESC",String.valueOf(limit)); + if (cursor.getCount() > 0 ) { + cursor.moveToLast(); + do { + list.add(Message.fromCursor(cursor)); + } while (cursor.moveToPrevious()); + } + return list; + } + + public Conversation findConversation(Account account, Contact contact) { + SQLiteDatabase db = this.getReadableDatabase(); + String[] selectionArgs = { account.getUuid() , contact.getJid() }; + Cursor cursor = db.query(Conversation.TABLENAME, null,Conversation.ACCOUNT+"=? AND "+Conversation.CONTACT+"=?", selectionArgs, null, null, null); + if (cursor.getCount() == 0) return null; + cursor.moveToFirst(); + return Conversation.fromCursor(cursor); + } + + public void updateConversation(Conversation conversation) { + SQLiteDatabase db = this.getReadableDatabase(); + String[] args = {conversation.getUuid()}; + db.update(Conversation.TABLENAME, conversation.getContentValues(),Conversation.UUID+"=?",args); + } + } -- cgit v1.2.3