You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			87 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			JavaScript
		
	
			
		
		
	
	
			87 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			JavaScript
		
	
(function() {
 | 
						|
  'use strict';
 | 
						|
  window.Whisper = window.Whisper || {};
 | 
						|
  var Item = Backbone.Model.extend({
 | 
						|
    database: Whisper.Database,
 | 
						|
    storeName: 'items',
 | 
						|
  });
 | 
						|
  var ItemCollection = Backbone.Collection.extend({
 | 
						|
    model: Item,
 | 
						|
    storeName: 'items',
 | 
						|
    database: Whisper.Database,
 | 
						|
  });
 | 
						|
 | 
						|
  var ready = false;
 | 
						|
  var items = new ItemCollection();
 | 
						|
  items.on('reset', function() {
 | 
						|
    ready = true;
 | 
						|
  });
 | 
						|
  window.storage = {
 | 
						|
    /*****************************
 | 
						|
     *** Base Storage Routines ***
 | 
						|
     *****************************/
 | 
						|
    put: function(key, value) {
 | 
						|
      if (value === undefined) {
 | 
						|
        throw new Error('Tried to store undefined');
 | 
						|
      }
 | 
						|
      if (!ready) {
 | 
						|
        console.log('Called storage.put before storage is ready. key:', key);
 | 
						|
      }
 | 
						|
      var item = items.add({ id: key, value: value }, { merge: true });
 | 
						|
      return new Promise(function(resolve, reject) {
 | 
						|
        item.save().then(resolve, reject);
 | 
						|
      });
 | 
						|
    },
 | 
						|
 | 
						|
    get: function(key, defaultValue) {
 | 
						|
      var item = items.get('' + key);
 | 
						|
      if (!item) {
 | 
						|
        return defaultValue;
 | 
						|
      }
 | 
						|
      return item.get('value');
 | 
						|
    },
 | 
						|
 | 
						|
    remove: function(key) {
 | 
						|
      var item = items.get('' + key);
 | 
						|
      if (item) {
 | 
						|
        items.remove(item);
 | 
						|
        return new Promise(function(resolve, reject) {
 | 
						|
          item.destroy().then(resolve, reject);
 | 
						|
        });
 | 
						|
      }
 | 
						|
      return Promise.resolve();
 | 
						|
    },
 | 
						|
 | 
						|
    onready: function(callback) {
 | 
						|
      if (ready) {
 | 
						|
        callback();
 | 
						|
      } else {
 | 
						|
        items.on('reset', callback);
 | 
						|
      }
 | 
						|
    },
 | 
						|
 | 
						|
    fetch: function() {
 | 
						|
      return new Promise((resolve, reject) => {
 | 
						|
        items
 | 
						|
          .fetch({ reset: true })
 | 
						|
          .fail(() =>
 | 
						|
            reject(
 | 
						|
              new Error(
 | 
						|
                'Failed to fetch from storage.' +
 | 
						|
                  ' This may be due to an unexpected database version.'
 | 
						|
              )
 | 
						|
            )
 | 
						|
          )
 | 
						|
          .always(resolve);
 | 
						|
      });
 | 
						|
    },
 | 
						|
 | 
						|
    reset: function() {
 | 
						|
      items.reset();
 | 
						|
    },
 | 
						|
  };
 | 
						|
  window.textsecure = window.textsecure || {};
 | 
						|
  window.textsecure.storage = window.textsecure.storage || {};
 | 
						|
  window.textsecure.storage.impl = window.storage;
 | 
						|
})();
 |