|  |  |  | /* | 
					
						
							|  |  |  |  * vim: ts=4:sw=4:expandtab | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | (function () { | 
					
						
							|  |  |  |     'use strict'; | 
					
						
							|  |  |  |     window.Whisper             = window.Whisper             || {}; | 
					
						
							|  |  |  |     window.Whisper.Database    = window.Whisper.Database    || {}; | 
					
						
							|  |  |  |     window.Whisper.Database.id = window.Whisper.Database.id || 'signal'; | 
					
						
							|  |  |  |     window.Whisper.Database.nolog = true; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     Whisper.Database.migrations = [ | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             version: "1.0", | 
					
						
							|  |  |  |             migrate: function(transaction, next) { | 
					
						
							|  |  |  |                 console.log('migration 1.0'); | 
					
						
							|  |  |  |                 var messages = transaction.db.createObjectStore("messages"); | 
					
						
							|  |  |  |                 messages.createIndex("conversation", ["conversationId", "received_at"], { unique: false }); | 
					
						
							|  |  |  |                 messages.createIndex("receipt", "sent_at", { unique: false }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 var conversations = transaction.db.createObjectStore("conversations"); | 
					
						
							|  |  |  |                 conversations.createIndex("inbox", "active_at", { unique: false }); | 
					
						
							|  |  |  |                 conversations.createIndex("group", "members", { unique: false, multiEntry: true }); | 
					
						
							|  |  |  |                 conversations.createIndex("type", "type", { unique: false }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 var groups = transaction.db.createObjectStore('groups'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 var sessions = transaction.db.createObjectStore('sessions'); | 
					
						
							|  |  |  |                 var identityKeys = transaction.db.createObjectStore('identityKeys'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 var preKeys = transaction.db.createObjectStore("preKeys"); | 
					
						
							|  |  |  |                 var signedPreKeys = transaction.db.createObjectStore("signedPreKeys"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 var items = transaction.db.createObjectStore("items"); | 
					
						
							|  |  |  |                 next(); | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             version: "2.0", | 
					
						
							|  |  |  |             migrate: function(transaction, next) { | 
					
						
							|  |  |  |                 var conversations = transaction.objectStore("conversations"); | 
					
						
							|  |  |  |                 conversations.createIndex("search", "tokens", { unique: false, multiEntry: true }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 var all = new Whisper.ConversationCollection(); | 
					
						
							|  |  |  |                 all.fetch().then(function() { | 
					
						
							|  |  |  |                     all.each(function(model) { | 
					
						
							|  |  |  |                         model.updateTokens(); | 
					
						
							|  |  |  |                         model.save(); | 
					
						
							|  |  |  |                     }); | 
					
						
							|  |  |  |                 }); | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             version: "3.0", | 
					
						
							|  |  |  |             migrate: function(transaction, next) { | 
					
						
							|  |  |  |                 var conversations = transaction.objectStore("items"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 var all = new Whisper.ConversationCollection(); | 
					
						
							|  |  |  |                 all.fetch().then(function() { | 
					
						
							|  |  |  |                     var unreadCount = all.reduce(function(total, model) { | 
					
						
							|  |  |  |                         var count = model.get('unreadCount'); | 
					
						
							|  |  |  |                         if (count === undefined) { | 
					
						
							|  |  |  |                             count = 0; | 
					
						
							|  |  |  |                         } | 
					
						
							|  |  |  |                         return total + count; | 
					
						
							|  |  |  |                     }, 0); | 
					
						
							|  |  |  |                     storage.remove('unreadCount'); | 
					
						
							|  |  |  |                     storage.put('unreadCount', unreadCount); | 
					
						
							|  |  |  |                 }); | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             version: "4.0", | 
					
						
							|  |  |  |             migrate: function(transaction, next) { | 
					
						
							|  |  |  |                 var all = new Whisper.ConversationCollection(); | 
					
						
							|  |  |  |                 all.fetch().then(function() { | 
					
						
							|  |  |  |                     all.each(function(c) { | 
					
						
							|  |  |  |                         c.updateTokens(); | 
					
						
							|  |  |  |                         c.save(); | 
					
						
							|  |  |  |                     }); | 
					
						
							|  |  |  |                 }); | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     ]; | 
					
						
							|  |  |  | }()); |