mirror of
https://github.com/captbaritone/webamp.git
synced 2026-07-23 18:17:38 +00:00
| .. | ||
| redux | ||
| algolia.js | ||
| App.css | ||
| App.js | ||
| App.test.js | ||
| constants.js | ||
| Disposable.js | ||
| FocusedSkin.js | ||
| Head.js | ||
| Header.js | ||
| index.js | ||
| logo.svg | ||
| Overlay.js | ||
| Readme.js | ||
| registerServiceWorker.js | ||
| Skin.js | ||
| skins.json | ||
| SkinTable.js | ||
| utils.js | ||
| WebampComponent.js | ||
import React from "react";
import JSZip from "jszip";
import { switchMap } from "rxjs/operators";
import { from, empty } from "rxjs";
import Disposable from "./Disposable";
export default class Readme extends React.Component {
constructor(props) {
super(props);
this._disposable = new Disposable();
this.state = { readmeText: null };
}
componentDidMount() {
this._fetchReadme();
}
componentDidUpdate(_, oldState) {
if (this.state.skinUrl != oldState.skinUrl) {
this._fetchReadme();
}
}
componentWillUnmount() {
this._disposable.dispose();
}
_fetchReadme() {
this._disposable.add(
from(fetch(this.props.skinUrl))
.pipe(
switchMap(response => response.blob()),
switchMap(blob => JSZip.loadAsync(blob)),
switchMap(zip => {
const readme = zip.file("readme.txt");
if (readme == null) {
return empty();
}
return readme.async("string");
})
)
.subscribe(text => {
console.log(text);
// this.setState({ readmeText: text });
})
);
}
render() {
return (
this.state.readmeText && (
<pre
style={{
backgroundColor: "white",
color: "black",
position: "absolute",
width: "500px",
right: 0
}}
>
{this.state.readmeText}
</pre>
)
);
}
}