mirror of
https://github.com/He4eT/elseifplayer.git
synced 2026-05-05 01:17:22 +00:00
Bootstrap player
This commit is contained in:
parent
58235e18fb
commit
8dc6ae88c5
2 changed files with 75 additions and 3 deletions
|
|
@ -1,6 +1,78 @@
|
||||||
import { h } from 'preact'
|
import { h } from 'preact'
|
||||||
|
import { useState, useEffect } from 'preact/hooks'
|
||||||
|
|
||||||
|
import CheapGlkOte from 'cheap-glkote'
|
||||||
|
|
||||||
|
const runMachine = ({ Engine, file, handlers }) => {
|
||||||
|
console.log('runMachine')
|
||||||
|
|
||||||
|
const vm = new Engine()
|
||||||
|
const { glkInterface, sendFn } = CheapGlkOte(handlers)
|
||||||
|
|
||||||
|
vm.prepare(file, glkInterface)
|
||||||
|
vm.start()
|
||||||
|
|
||||||
|
return { sendFn, instance: vm }
|
||||||
|
}
|
||||||
|
|
||||||
|
const Handlers = ({
|
||||||
|
setCurrentWindow,
|
||||||
|
setInputType,
|
||||||
|
setInbox
|
||||||
|
}) => ({
|
||||||
|
onInit: () => {},
|
||||||
|
onUpdateWindows: windows => {},
|
||||||
|
onUpdateInputs: type => {},
|
||||||
|
onUpdateContent: messages => {
|
||||||
|
console.log(messages)
|
||||||
|
},
|
||||||
|
onDisable: () => {},
|
||||||
|
onFileNameRequest: (tosave, usage, _, setFileName) => {
|
||||||
|
setFileName({ filename: 'filename', usage })
|
||||||
|
},
|
||||||
|
onFileRead: filename => {
|
||||||
|
return 'content'
|
||||||
|
},
|
||||||
|
onFileWrite: (filename, content) => {},
|
||||||
|
onExit: () => {}
|
||||||
|
})
|
||||||
|
|
||||||
export default function ({ vmParts: { file, engine } }) {
|
export default function ({ vmParts: { file, engine } }) {
|
||||||
|
const [currentWindow, setCurrentWindow] = useState(null)
|
||||||
|
const [inputType, setInputType] = useState(null)
|
||||||
|
const [inbox, setInbox] = useState([])
|
||||||
|
|
||||||
|
const [messages, setMessages] = useState([])
|
||||||
|
|
||||||
|
const [vm, setVm] = useState(null)
|
||||||
|
const [sendMessage, setSendMessage] = useState(null)
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
const handlers = Handlers({
|
||||||
|
setCurrentWindow,
|
||||||
|
setInputType,
|
||||||
|
setInbox
|
||||||
|
})
|
||||||
|
|
||||||
|
const vm = runMachine({
|
||||||
|
Engine: engine,
|
||||||
|
file,
|
||||||
|
handlers
|
||||||
|
})
|
||||||
|
|
||||||
|
setVm(vm)
|
||||||
|
}, [file, engine])
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
setSendMessage(_ => vm
|
||||||
|
? vm.sendFn
|
||||||
|
: null)
|
||||||
|
}, [vm])
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
window.send = sendMessage
|
||||||
|
}, [sendMessage])
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div>
|
<div>
|
||||||
Player
|
Player
|
||||||
|
|
|
||||||
|
|
@ -8,14 +8,14 @@ const decode = encodedUrl => decodeURIComponent(encodedUrl)
|
||||||
export default function ({setTheme, theme, encodedUrl}) {
|
export default function ({setTheme, theme, encodedUrl}) {
|
||||||
useEffect(() => setTheme(theme), [theme])
|
useEffect(() => setTheme(theme), [theme])
|
||||||
|
|
||||||
const [url, setUrl] = useState(decode(encodedUrl))
|
const [targetUrl, setTargetUrl] = useState(decode(encodedUrl))
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
setUrl(decode(encodedUrl))
|
setTargetUrl(decode(encodedUrl))
|
||||||
}, [encodedUrl])
|
}, [encodedUrl])
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<main>
|
<main>
|
||||||
<UrlPlayer url={url} />
|
<UrlPlayer url={targetUrl} />
|
||||||
</main>)
|
</main>)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue