|  |  |  | (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; | 
					
						
							|  |  |  | })(); |