1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- import { openDb } from 'idb'
- let objDb = null
- class DB {
- static curDBUserId = localStorage.getItem('user_id');
- static async initDb () {
- let userId = localStorage.getItem('user_id')
- if (!objDb || DB.curDBUserId != userId) {
- // 切换用户
- if (DB.curDBUserId != userId) DB.curDBUserId = userId
- objDb = await initDb()
- }
- return objDb
- }
- static async init (tableName) {
- await DB.initDb()
- if (objDb) {
- return objDb.transaction(tableName, 'readwrite').objectStore(tableName)
- } else {
- return null
- }
- }
- }
- async function initDb () {
- let userId = DB.curDBUserId
- if (!userId) return null
- let dbName = `database_${userId}`
- let version = 3
- let objDb = await openDb(dbName, version, upgradeDB => {
- console.log(`oldVersion:${upgradeDB.oldVersion}, version:${version}`)
- // Note: we don't use 'break' in this switch statement,
- // the fall-through behaviour is what we want.
- switch (upgradeDB.oldVersion) {
- case 0:
- let objMessage = upgradeDB.createObjectStore('message', { keyPath: 'hash' })
- objMessage.createIndex('group_id', 'group_id', { unique: false })
- objMessage.createIndex('msg_num', 'msg_num', { unique: false })
- objMessage.createIndex('create_time_int', 'create_time_int', { unique: false })
- let objUser = upgradeDB.createObjectStore('user', { keyPath: 'user_id' })
- objUser.createIndex('user_name', 'user_name', { unique: true })
- objUser.createIndex('nick_name', 'nick_name', { unique: false })
- objUser.createIndex('is_admin', 'is_admin', { unique: false })
- objUser.createIndex('is_block', 'is_block', { unique: false })
- // falls through
- case 1:
- let objSession = upgradeDB.createObjectStore('session', { keyPath: 'session_id' })
- objSession.createIndex('pin_time_int', ['pin_time_int', 'update_time_int'], { unique: false })
- objSession.createIndex('is_pin', 'is_pin', { unique: false })
- objSession.createIndex('update_time_int', 'update_time_int', { unique: false })
- // falls through
- case 2:
- objMessage = upgradeDB.transaction.objectStore('message')
- objMessage.deleteIndex('group_id')
- objMessage.createIndex('session_id', ['session_id', 'create_time_int'], { unique: false })
- }
- }).catch(function (ex) {
- console.error('initDb error:' + ex.message)
- // alert('initDb error:' + ex.message)
- })
- return objDb
- }
- export default DB
|