mirror of
https://github.com/cuiocean/ZY-Player.git
synced 2026-07-01 09:06:12 +08:00
由于找不到合适的数据存储插件, 暂停开发. 准备先开发一个 ts 的 indexedDB 插件
This commit is contained in:
@@ -1,41 +0,0 @@
|
||||
const videoSchema = {
|
||||
version: 0,
|
||||
type: 'object',
|
||||
properties: {
|
||||
name: {
|
||||
type: 'string'
|
||||
},
|
||||
type: {
|
||||
type: 'string'
|
||||
},
|
||||
time: {
|
||||
type: 'string'
|
||||
},
|
||||
detail: {
|
||||
type: 'string',
|
||||
primary: true
|
||||
},
|
||||
urls: {
|
||||
type: 'array'
|
||||
},
|
||||
index: {
|
||||
type: 'number'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const settingSchema = {
|
||||
version: 0,
|
||||
type: 'object',
|
||||
properties: {
|
||||
theme: {
|
||||
type: 'string',
|
||||
default: 'light'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export {
|
||||
videoSchema,
|
||||
settingSchema
|
||||
}
|
||||
133
src/plugins/tinydb/Table.ts
Normal file
133
src/plugins/tinydb/Table.ts
Normal file
@@ -0,0 +1,133 @@
|
||||
export class Table {
|
||||
name: string
|
||||
db: IDBDatabase
|
||||
constructor (name: string, db:IDBDatabase) {
|
||||
this.name = name
|
||||
this.db = db
|
||||
}
|
||||
// create transaction
|
||||
transaction (mode = true) {
|
||||
return this.db.transaction([this.name], mode === true ? 'readwrite' : 'readonly')
|
||||
}
|
||||
// open or conntect this table
|
||||
request () {
|
||||
return this.transaction().objectStore(this.name)
|
||||
}
|
||||
// get
|
||||
select (selector: any) {
|
||||
let index: string
|
||||
let indexValue: any
|
||||
for (let name in selector) {
|
||||
index = name
|
||||
indexValue = selector[name]
|
||||
}
|
||||
return new Promise((resolve, reject) => {
|
||||
const selectRequest = this.request().index(index).getAll(indexValue)
|
||||
selectRequest.onsuccess = (e:any) => {
|
||||
resolve(e.target.result)
|
||||
}
|
||||
selectRequest.onerror = (e:any) => {
|
||||
reject(e.target.result)
|
||||
}
|
||||
})
|
||||
}
|
||||
selectId (id:number) {
|
||||
return new Promise((resolve, reject) => {
|
||||
const selectRequest = this.request().get(id)
|
||||
selectRequest.onsuccess = (e:any) => {
|
||||
resolve(e.target.result)
|
||||
}
|
||||
selectRequest.onerror = (e:any) => {
|
||||
reject(e.target.result)
|
||||
}
|
||||
})
|
||||
}
|
||||
selectAll () {
|
||||
return new Promise((resolve, reject) => {
|
||||
const selectRequest = this.request().getAll()
|
||||
selectRequest.onsuccess = (e:any) => {
|
||||
resolve(e.target.result)
|
||||
}
|
||||
selectRequest.onerror = (e:any) => {
|
||||
reject(e.target.result)
|
||||
}
|
||||
})
|
||||
}
|
||||
// some
|
||||
some (index: any, start:any, end:any) {
|
||||
return new Promise((resolve, reject) => {
|
||||
const temp:any = []
|
||||
const cursor = this.request().index(index)
|
||||
const range = IDBKeyRange.bound(start, end)
|
||||
cursor.openCursor(range).onsuccess = (ev:any) => {
|
||||
const res = ev.target.result
|
||||
if (res) {
|
||||
temp.push(res.value)
|
||||
res.continue()
|
||||
} else {
|
||||
resolve(temp)
|
||||
}
|
||||
}
|
||||
cursor.openCursor(range).onerror = (ev: any) => {
|
||||
reject(ev)
|
||||
}
|
||||
})
|
||||
}
|
||||
// put
|
||||
update (data: any) {
|
||||
return new Promise((resolve, reject) => {
|
||||
const updateRequest = this.request().put(data)
|
||||
updateRequest.onsuccess = (e:any) => {
|
||||
resolve(e)
|
||||
}
|
||||
updateRequest.onerror = (e:any) => {
|
||||
reject(e)
|
||||
}
|
||||
})
|
||||
}
|
||||
// add
|
||||
insert (data: any) {
|
||||
return new Promise((resolve, reject) => {
|
||||
const addRequest = this.request().add(data)
|
||||
addRequest.onsuccess = (e:any) => {
|
||||
resolve(e)
|
||||
}
|
||||
addRequest.onerror = (e:any) => {
|
||||
reject(e)
|
||||
}
|
||||
})
|
||||
}
|
||||
// get -> delete
|
||||
delete (selector: any) {
|
||||
return new Promise((resolve, reject) => {
|
||||
this.select(selector).then((res: any) => {
|
||||
if (res.length) {
|
||||
res.forEach((item: any, index: any, arr: any) => {
|
||||
const request = this.request()
|
||||
const keyPath = request.keyPath as string
|
||||
const deleteRequest = request.delete(item[keyPath])
|
||||
deleteRequest.onsuccess = (e: any) => {
|
||||
if (index === arr.length - 1) {
|
||||
resolve(e)
|
||||
}
|
||||
}
|
||||
deleteRequest.onerror = (e: any) => {
|
||||
reject(e)
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
clear () {
|
||||
return new Promise((resolve, reject) => {
|
||||
const deleteRequest = this.request().clear()
|
||||
deleteRequest.onsuccess = (e: any) => {
|
||||
resolve(e)
|
||||
}
|
||||
deleteRequest.onerror = (e: any) => {
|
||||
reject(e)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
5
src/plugins/tinydb/index.ts
Normal file
5
src/plugins/tinydb/index.ts
Normal file
@@ -0,0 +1,5 @@
|
||||
import tiny from 'tinydb'
|
||||
|
||||
const db = {}
|
||||
|
||||
export default db
|
||||
34
src/plugins/tinydb/types.ts
Normal file
34
src/plugins/tinydb/types.ts
Normal file
@@ -0,0 +1,34 @@
|
||||
export interface Database {
|
||||
databaseName: string
|
||||
tables: Array<DatabaseTable>
|
||||
version?: number
|
||||
}
|
||||
|
||||
export interface DatabaseTable {
|
||||
name: string
|
||||
keyPath: string
|
||||
autoIncrement: boolean
|
||||
indexs: Array<RuleIndex>
|
||||
}
|
||||
|
||||
export interface RuleIndex {
|
||||
index: string
|
||||
relativeIndex: string
|
||||
unique: boolean
|
||||
}
|
||||
|
||||
export interface TinyDBRule {
|
||||
db: IDBDatabase
|
||||
name: string
|
||||
version: number
|
||||
table: IDBObjectStore
|
||||
tables: Array<DatabaseTable>
|
||||
connect(): Promise<IDBDatabase>
|
||||
}
|
||||
|
||||
export interface TableFn {
|
||||
select(): any
|
||||
update(): any
|
||||
insert(): any
|
||||
delete(): any
|
||||
}
|
||||
Reference in New Issue
Block a user