Compare commits
3 Commits
06479610f9
...
6f267109a4
Author | SHA1 | Date | |
---|---|---|---|
6f267109a4 | |||
c37086cfcd | |||
e5c9623092 |
14
demo.html
Normal file
14
demo.html
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="zh">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8" />
|
||||||
|
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
|
<title>DEMO</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<script type="module">
|
||||||
|
import './src/store.js'
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
@ -22,6 +22,7 @@
|
|||||||
"dependencies": {
|
"dependencies": {
|
||||||
"express": "^4.18.2",
|
"express": "^4.18.2",
|
||||||
"express-ws": "^5.0.2",
|
"express-ws": "^5.0.2",
|
||||||
|
"idb": "^7.1.1",
|
||||||
"node-turn": "^0.0.6"
|
"node-turn": "^0.0.6"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
1
src/communication.js
Normal file
1
src/communication.js
Normal file
@ -0,0 +1 @@
|
|||||||
|
// 通信
|
@ -17,7 +17,7 @@ export default class IndexedDB {
|
|||||||
}
|
}
|
||||||
request.onupgradeneeded = (event) => {
|
request.onupgradeneeded = (event) => {
|
||||||
const db = event.target.result
|
const db = event.target.result
|
||||||
if (!db.objectStoreNames.contains('todo')) {
|
if (!db.objectStoreNames.contains(name)) {
|
||||||
db.createObjectStore(name, { keyPath: 'id' })
|
db.createObjectStore(name, { keyPath: 'id' })
|
||||||
console.log('store created:', name)
|
console.log('store created:', name)
|
||||||
}
|
}
|
||||||
|
13
src/main.js
13
src/main.js
@ -1,5 +1,4 @@
|
|||||||
import 'virtual:windi.css'
|
import 'virtual:windi.css'
|
||||||
//import 'virtual:windi-devtools'
|
|
||||||
|
|
||||||
import IndexedDB from './indexeddb.js'
|
import IndexedDB from './indexeddb.js'
|
||||||
import MusicList from './music.js'
|
import MusicList from './music.js'
|
||||||
@ -19,15 +18,13 @@ function appendBuffer(buffer1, buffer2) {
|
|||||||
return tmp.buffer
|
return tmp.buffer
|
||||||
}
|
}
|
||||||
|
|
||||||
//// 读取本地图像
|
|
||||||
//const imageStore = new IndexedDB('musicDatabase', 1, 'imageObjectStore')
|
|
||||||
//await imageStore.open()
|
|
||||||
|
|
||||||
// 读取本地音乐列表并标识为缓存状态(本地缓存)
|
// 读取本地音乐列表并标识为缓存状态(本地缓存)
|
||||||
const database = new IndexedDB('musicDatabase', 1)
|
const database = new IndexedDB('musicDatabase', 1)
|
||||||
const musicStore = await database.store('musicObjectStore')
|
await database.store('musicObjectStore') // 音乐(为什么会用这么丑的格式呢)
|
||||||
|
//await database.store('imageObjectStore') // 图像(为什么会用这么丑的格式呢)
|
||||||
|
//await database.store('chatsObjectStore') // 聊天室
|
||||||
|
|
||||||
//// 读取本地音乐列表并标识为缓存状态(本地缓存)
|
// 读取本地音乐列表并标识为缓存状态(本地缓存)
|
||||||
const list = (await database.getAll('musicObjectStore')).map(item => {
|
const list = (await database.getAll('musicObjectStore')).map(item => {
|
||||||
return { save: true, ...item }
|
return { save: true, ...item }
|
||||||
})
|
})
|
||||||
@ -36,7 +33,6 @@ const list = (await database.getAll('musicObjectStore')).map(item => {
|
|||||||
const name = localStorage.getItem('username') ?? '匿'
|
const name = localStorage.getItem('username') ?? '匿'
|
||||||
const avatar = localStorage.getItem('avatar') ?? '/favicon.ico'
|
const avatar = localStorage.getItem('avatar') ?? '/favicon.ico'
|
||||||
|
|
||||||
|
|
||||||
// 初始化客户端列表
|
// 初始化客户端列表
|
||||||
const clientList = new ClientList({
|
const clientList = new ClientList({
|
||||||
name,
|
name,
|
||||||
@ -56,7 +52,6 @@ const clientList = new ClientList({
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
// 初始化音乐列表(加入本地缓存)
|
// 初始化音乐列表(加入本地缓存)
|
||||||
const musicList = new MusicList({
|
const musicList = new MusicList({
|
||||||
list,
|
list,
|
||||||
|
53
src/store.js
Normal file
53
src/store.js
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
// 使用封装为支持异步的 IndexedDB
|
||||||
|
import { openDB, deleteDB, wrap, unwrap } from 'idb'
|
||||||
|
const storenames = ['music', 'chat', 'user']
|
||||||
|
const database = await openDB('database', 1, {
|
||||||
|
upgrade(db) {
|
||||||
|
storenames.forEach(name => db.createObjectStore(name, { keyPath: 'id' }))
|
||||||
|
console.log('store created:', storenames)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
export class Store {
|
||||||
|
constructor(data) {
|
||||||
|
this.name = data.name
|
||||||
|
this.info = data.info
|
||||||
|
}
|
||||||
|
|
||||||
|
create(data) {
|
||||||
|
const id = window.crypto.randomUUID()
|
||||||
|
return { id, ...data }
|
||||||
|
}
|
||||||
|
|
||||||
|
delete(id) {}
|
||||||
|
|
||||||
|
query() {}
|
||||||
|
}
|
||||||
|
|
||||||
|
export const musicStore = new Store({
|
||||||
|
name: '音乐(资源类型)',
|
||||||
|
info: '音乐(类型说明)',
|
||||||
|
存储时间: 1000 * 60 * 60 * 24 * 7, // 7天不使用的资源将被删除
|
||||||
|
list: [{
|
||||||
|
id: 'uuid',
|
||||||
|
name: 'Dear big sisterremix ver.mp3',
|
||||||
|
arrayBuffer: 'ArrayBuffer',
|
||||||
|
createdAt: 1580000000000, // 创建时间
|
||||||
|
updatedAt: 1580000000000, // 更新时间
|
||||||
|
lastUsedAt: 1580000000000, // 最后使用时间
|
||||||
|
}]
|
||||||
|
})
|
||||||
|
|
||||||
|
export const chatStore = new Store({
|
||||||
|
name: '聊天(资源类型)',
|
||||||
|
info: '聊天(类型说明)',
|
||||||
|
存储时间: 1000 * 60 * 60 * 24 * 7, // 7天不使用的资源将被删除
|
||||||
|
list: [{
|
||||||
|
id: 'uuid',
|
||||||
|
name: 'Dear big sisterremix ver.mp3',
|
||||||
|
arrayBuffer: 'ArrayBuffer',
|
||||||
|
createdAt: 1580000000000, // 创建时间
|
||||||
|
updatedAt: 1580000000000, // 更新时间
|
||||||
|
lastUsedAt: 1580000000000, // 最后使用时间
|
||||||
|
}]
|
||||||
|
})
|
Loading…
Reference in New Issue
Block a user