From d0e262d7cb801d51fd3e8406be37b7af17737b3d Mon Sep 17 00:00:00 2001 From: lilia Date: Wed, 6 May 2015 15:09:03 -0700 Subject: [PATCH] AxolotlStore stores groups in indexeddb --- js/axolotl_store.js | 26 +++++++++++++++++++++++--- js/database.js | 2 ++ test/models/conversations_test.js | 2 +- 3 files changed, 26 insertions(+), 4 deletions(-) diff --git a/js/axolotl_store.js b/js/axolotl_store.js index 02bf34660..3ac72e950 100644 --- a/js/axolotl_store.js +++ b/js/axolotl_store.js @@ -81,6 +81,7 @@ } }); var IdentityKey = Model.extend({ storeName: 'identityKeys' }); + var Group = Model.extend({ storeName: 'groups' }); function AxolotlStore() {} @@ -280,13 +281,32 @@ }); }, getGroup: function(groupId) { - return Promise.resolve(textsecure.storage.get("group" + groupId)); + if (groupId === null || groupId === undefined) + throw new Error("Tried to get group for undefined/null id"); + return new Promise(function(resolve) { + var group = new Group({id: groupId}); + group.fetch().always(function() { + resolve(group.get('data')); + }); + }); }, putGroup: function(groupId, group) { - return Promise.resolve(textsecure.storage.put("group" + groupId, group)); + if (groupId === null || groupId === undefined) + throw new Error("Tried to put group key for undefined/null id"); + if (group === null || group === undefined) + throw new Error("Tried to put undefined/null group object"); + var group = new Group({id: groupId, data: group}); + return new Promise(function(resolve) { + group.save().always(resolve); + }); }, removeGroup: function(groupId) { - return Promise.resolve(textsecure.storage.remove("group" + groupId)); + if (groupId === null || groupId === undefined) + throw new Error("Tried to remove group key for undefined/null id"); + return new Promise(function(resolve) { + var group = new Group({id: groupId}); + group.destroy().always(resolve); + }); }, }; diff --git a/js/database.js b/js/database.js index 466ba2906..affd7d02b 100644 --- a/js/database.js +++ b/js/database.js @@ -34,6 +34,8 @@ conversations.createIndex("group", "members", { unique: false, multiEntry: true }); conversations.createIndex("type", "type", { unique: false }); + var groups = transaction.db.createObjectStore('groups'); + var sessions = transaction.db.createObjectStore('sessions'); var identityKeys = transaction.db.createObjectStore('identityKeys'); diff --git a/test/models/conversations_test.js b/test/models/conversations_test.js index ee4bc8c3f..32c9db0f2 100644 --- a/test/models/conversations_test.js +++ b/test/models/conversations_test.js @@ -126,7 +126,7 @@ }); it('adds conversation to message collection upon leaving group', function() { - var convo = new Whisper.ConversationCollection().add({type: 'group'}); + var convo = new Whisper.ConversationCollection().add({type: 'group', id: 'a random string'}); convo.leaveGroup(); assert.notEqual(convo.messageCollection.length, 0); });