From c55fb09cf15ae8787f6cde7adb9f454e15769411 Mon Sep 17 00:00:00 2001 From: Stas Safyanov Date: Wed, 15 Nov 2017 12:44:25 +0200 Subject: [PATCH] fixed queries --- .../mobile/communicator/data/DataManager.java | 4 +- .../mobile/communicator/data/db/DbHelper.java | 57 +++++++++++++++++-- 2 files changed, 55 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/com/nynja/mobile/communicator/data/DataManager.java b/app/src/main/java/com/nynja/mobile/communicator/data/DataManager.java index cc7019be86..9d01bd1214 100644 --- a/app/src/main/java/com/nynja/mobile/communicator/data/DataManager.java +++ b/app/src/main/java/com/nynja/mobile/communicator/data/DataManager.java @@ -228,7 +228,9 @@ public class DataManager { mDbHelper.updateLocalContact(newContact); if (getProfile() != null) { mDbHelper.saveContact(newContact, getProfile().getRoster()); - mDbHelper.saveMember(Member.generateMember(newContact)); + if (Contact.Statuses.INTERNAL.equals(newContact.status)) { + mDbHelper.updateMember(Member.generateMember(newContact)); + } } } } else if (serverObj instanceof Roster) {//=============================================Roster diff --git a/app/src/main/java/com/nynja/mobile/communicator/data/db/DbHelper.java b/app/src/main/java/com/nynja/mobile/communicator/data/db/DbHelper.java index 7acb9832d3..c3ea148cfe 100644 --- a/app/src/main/java/com/nynja/mobile/communicator/data/db/DbHelper.java +++ b/app/src/main/java/com/nynja/mobile/communicator/data/db/DbHelper.java @@ -525,11 +525,13 @@ public class DbHelper { private void saveDesc(Message message) { if (message.files != null) { for (Desc desc : message.files) { - updateInsert(DescTable.TABLE_NAME, DescTable.toContentValues(desc, message), - DescTable.Column.TARGET_TYPE + " = " + DescTable.TYPE_MESSAGE + - " AND " + DescTable.Column.TARGET_ID + " = '" + message.id + "'" + - " AND " + DescTable.Column.PAYLOAD + " = '" + desc.payload + "'" + - " AND " + DescTable.Column.MIME + " = '" + desc.mime + "'"); + String whereArgs = DescTable.Column.TARGET_TYPE + " = " + DescTable.TYPE_MESSAGE + + " AND " + DescTable.Column.TARGET_ID + " = '" + message.id + "'" + + " AND " + DescTable.Column.MIME + " = '" + desc.mime + "'"; + if (desc.payload != null) { + whereArgs += " AND " + DescTable.Column.PAYLOAD + " = '" + desc.payload + "'"; + } + updateInsert(DescTable.TABLE_NAME, DescTable.toContentValues(desc, message), whereArgs); } } } @@ -1246,6 +1248,26 @@ public class DbHelper { } } + private long update(String tableName, ContentValues cv, @Nullable String where) { + long cntRows = -1; + StringBuilder builder = new StringBuilder() + .append("SELECT * FROM ") + .append(tableName); + if (StringUtils.isNotEmpty(where)) { + builder.append(" WHERE "); + builder.append(where); + } + String query = builder.toString(); + Cursor cursor = mDb.query(query); + if (cursor != null) { + if (cursor.getCount() > 0) { + cntRows = mDb.update(tableName, cv, where); + } + cursor.close(); + } + return cntRows; + } + private void delete(String tableName, @Nullable String where) { mDb.delete(tableName, where, (String[]) null); } @@ -1275,4 +1297,29 @@ public class DbHelper { query.close(); return room; } + + public void updateMember(Member member) { + String whereArgs = MemberTable.Column._ID + " = " + member.id; + if (member.status != null) { + if (Contact.Statuses.INTERNAL.equals(member.status)) { + whereArgs = MemberTable.Column.PHONE_ID + " = '" + member.phone_id + "'"; + } else if (Contact.Statuses.LST_MSG.equals(member.status)) { + whereArgs = null; + } + } + if (whereArgs == null) return; + BriteDatabase.Transaction transaction = mDb.newTransaction(); + try { + long cntRows = update(MemberTable.TABLE_NAME, MemberTable.toContentValues(member), whereArgs); + if (cntRows > 0) { + saveMemberFeatures(member); + saveFeedByType(member); + } + transaction.markSuccessful(); + } catch (Exception e) { + Timber.e(e); + } finally { + transaction.end(); + } + } } -- GitLab