feat: 1.新增视频播放插件。2.新增插件中心
This commit is contained in:
1 parent
f5e0bd4a56
commit
1f6c924e11
13 files changed
+2465
-44
No files matched your search
@@ -0,0 +1,60 @@
|
||||
import useViretualPages from "@/hooks/useVirtualPages"
|
||||
import VirtualDirectory, { VirtualFile } from "./VirtualDirectory"
|
||||
|
||||
type plugin = {
|
||||
// 用于显示的名字
|
||||
name: string
|
||||
// 判断是否可以使用这个组件
|
||||
// 使用组件即调用下面的func
|
||||
filter: (VDirectorys: VirtualDirectory[], VFiles: VirtualFile[]) => boolean
|
||||
func: (VDirectorys: VirtualDirectory[], VFiles: VirtualFile[]) => void
|
||||
}
|
||||
|
||||
export default class PluginCenter {
|
||||
constructor() {
|
||||
this.pluginsMap = {}
|
||||
}
|
||||
pluginsMap: {
|
||||
[key: string]: plugin
|
||||
}
|
||||
|
||||
register(key: string, plugin: plugin){
|
||||
this.pluginsMap[key] = plugin
|
||||
console.log(this.pluginsMap)
|
||||
}
|
||||
|
||||
/**
|
||||
* 便捷地注册一个组件为插件,触发时直接用新页面打开
|
||||
*/
|
||||
registerComponent(key: string,name: string, component: any, filter:(VDirectorys: VirtualDirectory[], VFiles: VirtualFile[]) => boolean): void {
|
||||
this.register(key, {
|
||||
name,
|
||||
filter,
|
||||
func: (VDirectorys: VirtualDirectory[], VFiles: VirtualFile[]) => {
|
||||
if(filter(VDirectorys, VFiles) === false){
|
||||
return
|
||||
}
|
||||
const views = useViretualPages()
|
||||
views.push(component, VDirectorys, VFiles)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
getUsablePlugin(VDirectorys: VirtualDirectory[], VFiles: VirtualFile[]) {
|
||||
const usableList = []
|
||||
for(let key of Object.keys(this.pluginsMap)) {
|
||||
if(this.pluginsMap[key].filter(VDirectorys, VFiles)) {
|
||||
usableList.push(key)
|
||||
}
|
||||
}
|
||||
return usableList.map(key=>({
|
||||
key,
|
||||
...this.pluginsMap[key]
|
||||
}))
|
||||
}
|
||||
|
||||
usePlugin(key: string, VDirectorys: VirtualDirectory[], VFiles: VirtualFile[]) {
|
||||
this.pluginsMap[key].func(VDirectorys, VFiles)
|
||||
}
|
||||
|
||||
}
|
||||
Reference in new issue
Block a user