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.
		
		
		
		
		
			
		
			
	
	
		
			93 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			JavaScript
		
	
		
		
			
		
	
	
			93 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			JavaScript
		
	
| 
											7 years ago
										 | /* 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(); | ||
|  |     }, | ||
|  |   }; | ||
|  | })(); |