93 lines
		
	
	
	
		
			2 KiB
			
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			93 lines
		
	
	
	
		
			2 KiB
			
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 
								 | 
							
								/* global Backbone, Whisper */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* eslint-disable more/no-then */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// eslint-disable-next-line func-names
							 | 
						||
| 
								 | 
							
								(function() {
							 | 
						||
| 
								 | 
							
								  'use strict';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  window.Whisper = window.Whisper || {};
							 | 
						||
| 
								 | 
							
								  const Item = Backbone.Model.extend({
							 | 
						||
| 
								 | 
							
								    database: Whisper.Database,
							 | 
						||
| 
								 | 
							
								    storeName: 'items',
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								  const ItemCollection = Backbone.Collection.extend({
							 | 
						||
| 
								 | 
							
								    model: Item,
							 | 
						||
| 
								 | 
							
								    storeName: 'items',
							 | 
						||
| 
								 | 
							
								    database: Whisper.Database,
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  let ready = false;
							 | 
						||
| 
								 | 
							
								  const items = new ItemCollection();
							 | 
						||
| 
								 | 
							
								  items.on('reset', () => {
							 | 
						||
| 
								 | 
							
								    ready = true;
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								  window.legacyStorage = {
							 | 
						||
| 
								 | 
							
								    /** ***************************
							 | 
						||
| 
								 | 
							
								     *** Base Storage Routines ***
							 | 
						||
| 
								 | 
							
								     **************************** */
							 | 
						||
| 
								 | 
							
								    put(key, value) {
							 | 
						||
| 
								 | 
							
								      if (value === undefined) {
							 | 
						||
| 
								 | 
							
								        throw new Error('Tried to store undefined');
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      if (!ready) {
							 | 
						||
| 
								 | 
							
								        window.log.warn(
							 | 
						||
| 
								 | 
							
								          'Called storage.put before storage is ready. key:',
							 | 
						||
| 
								 | 
							
								          key
							 | 
						||
| 
								 | 
							
								        );
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      const item = items.add({ id: key, value }, { merge: true });
							 | 
						||
| 
								 | 
							
								      return new Promise((resolve, reject) => {
							 | 
						||
| 
								 | 
							
								        item.save().then(resolve, reject);
							 | 
						||
| 
								 | 
							
								      });
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    get(key, defaultValue) {
							 | 
						||
| 
								 | 
							
								      const item = items.get(`${key}`);
							 | 
						||
| 
								 | 
							
								      if (!item) {
							 | 
						||
| 
								 | 
							
								        return defaultValue;
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      return item.get('value');
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    remove(key) {
							 | 
						||
| 
								 | 
							
								      const item = items.get(`${key}`);
							 | 
						||
| 
								 | 
							
								      if (item) {
							 | 
						||
| 
								 | 
							
								        items.remove(item);
							 | 
						||
| 
								 | 
							
								        return new Promise((resolve, reject) => {
							 | 
						||
| 
								 | 
							
								          item.destroy().then(resolve, reject);
							 | 
						||
| 
								 | 
							
								        });
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      return Promise.resolve();
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    onready(callback) {
							 | 
						||
| 
								 | 
							
								      if (ready) {
							 | 
						||
| 
								 | 
							
								        callback();
							 | 
						||
| 
								 | 
							
								      } else {
							 | 
						||
| 
								 | 
							
								        items.on('reset', callback);
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    fetch() {
							 | 
						||
| 
								 | 
							
								      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() {
							 | 
						||
| 
								 | 
							
								      items.reset();
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								})();
							 |