storage.js 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. /*
  2. * vim: ts=4:sw=4:expandtab
  3. */
  4. ;(function() {
  5. 'use strict';
  6. window.Whisper = window.Whisper || {};
  7. var Item = Backbone.Model.extend({
  8. database: Whisper.Database,
  9. storeName: 'items'
  10. });
  11. var ItemCollection = Backbone.Collection.extend({
  12. model: Item,
  13. storeName: 'items',
  14. database: Whisper.Database,
  15. });
  16. var ready = false;
  17. var items = new ItemCollection();
  18. items.on('reset', function() { ready = true; });
  19. window.storage = {
  20. /*****************************
  21. *** Base Storage Routines ***
  22. *****************************/
  23. put: function(key, value) {
  24. if (value === undefined) {
  25. throw new Error("Tried to store undefined");
  26. }
  27. if (!ready) {
  28. console.log('Called storage.put before storage is ready. key:', key);
  29. }
  30. var item = items.add({id: key, value: value}, {merge: true});
  31. item.save();
  32. },
  33. get: function(key, defaultValue) {
  34. var item = items.get("" + key);
  35. if (!item) {
  36. return defaultValue;
  37. }
  38. return item.get('value');
  39. },
  40. remove: function(key) {
  41. var item = items.get("" + key);
  42. if (item) {
  43. items.remove(item);
  44. item.destroy();
  45. }
  46. },
  47. onready: function(callback) {
  48. if (ready) {
  49. callback();
  50. } else {
  51. items.on('reset', callback);
  52. }
  53. },
  54. fetch: function() {
  55. return new Promise(function(resolve) {
  56. items.fetch({reset: true}).fail(function() {
  57. console.log('Failed to fetch from storage');
  58. }).always(resolve);
  59. });
  60. }
  61. };
  62. window.textsecure = window.textsecure || {};
  63. window.textsecure.storage = window.textsecure.storage || {};
  64. window.textsecure.storage.impl = window.storage;
  65. })();