summaryrefslogtreecommitdiff
path: root/frontend/site/projects/museum
diff options
context:
space:
mode:
authorJules Laplace <julescarbon@gmail.com>2021-04-28 23:15:53 +0200
committerJules Laplace <julescarbon@gmail.com>2021-04-28 23:15:53 +0200
commit51288f81110850e346e6303115a0780b3d4668b4 (patch)
tree1337a298ea2941df22aecffe628fad29cd97aed9 /frontend/site/projects/museum
parent938545387a234b2cd34bd5f52e0efe5fdd1b71c0 (diff)
preloading...
Diffstat (limited to 'frontend/site/projects/museum')
-rw-r--r--frontend/site/projects/museum/views/nav.overlay.js62
1 files changed, 61 insertions, 1 deletions
diff --git a/frontend/site/projects/museum/views/nav.overlay.js b/frontend/site/projects/museum/views/nav.overlay.js
index f8c2923..bf43c52 100644
--- a/frontend/site/projects/museum/views/nav.overlay.js
+++ b/frontend/site/projects/museum/views/nav.overlay.js
@@ -10,7 +10,7 @@ import { ARTISTS, ARTIST_ORDER, PROJECT_PAGE_SET, BACK_TO_KW } from "site/projec
import { ArrowLeft, ArrowRight } from "site/projects/museum/icons"
import MuteButton from "site/audio/mute.button"
import { history } from "site/store"
-import { isMobile } from "app/utils"
+import { isMobile, preloadVideo, preloadImage, preloadAudio } from "app/utils"
import LandscapeWarning from './landscape.warning'
import TextOverlay from './text.overlay'
@@ -37,6 +37,7 @@ class NavOverlay extends Component {
constructor(props) {
super(props)
+ this.preloaded = {}
this.footerRef = React.createRef()
this.previousArtist = this.previousArtist.bind(this)
this.nextArtist = this.nextArtist.bind(this)
@@ -61,6 +62,7 @@ class NavOverlay extends Component {
const pathkey = pathPartz[0]
const path_chapter = pathPartz[1]
// console.log(pathkey)
+ this.preloadNextPages()
if (pathkey === 'start') {
this.setState({
showHome: false,
@@ -143,6 +145,63 @@ class NavOverlay extends Component {
})
}
}
+
+ preloadNextPages() {
+ const { page_name } = this.props.match.params
+ const page_path = ["", "thelastmuseum", page_name].join('/')
+ console.log("preload", page_path)
+ console.log(this.props.graph)
+ console.log(this.props.graph.pages[page_path])
+ const nextPagePaths = this.props.graph.pages[page_path].tiles.reduce((lookup, tile) => {
+ if (tile.href) {
+ lookup[tile.href] = true
+ }
+ return lookup
+ }, {})
+ Object.keys(nextPagePaths).forEach(nextPagePath => this.preloadNextPage(nextPagePath))
+ }
+
+ preloadNextPage(nextPagePath) {
+ const { graph } = this.props
+ const nextPage = graph.pages[nextPagePath]
+ if (!nextPage) return
+ nextPage.tiles.forEach(tile => {
+ if (tile.type === 'video' && !this.preloaded[tile.settings.url]) {
+ this.preloaded[tile.settings.url] = true
+ preloadVideo(tile.settings.url)
+ .then(video => {
+ // console.log("preloaded", video.src)
+ // video.src = null
+ })
+ } else if (tile.type === 'image' && !this.preloaded[tile.settings.url]) {
+ this.preloaded[tile.settings.url] = true
+ preloadImage(tile.settings.url)
+ .then(image => {
+ // console.log("preloaded", image.src)
+ // image.src = null
+ })
+ }
+ if (tile.settings.custom_cursor_id) {
+ const cursor = graph.uploads.find(upload => upload.id === tile.settings.custom_cursor_id)
+ if (cursor.url && !this.preloaded[cursor.url]) {
+ this.preloaded[cursor.url] = true
+ preloadImage(cursor.url)
+ .then(image => {
+ // console.log("preloaded", image.src)
+ // image.src = null
+ })
+ }
+ }
+ })
+ if (nextPage.settings.audio && !this.preloaded[nextPage.settings.audio]) {
+ this.preloaded[nextPage.settings.audio] = true
+ preloadAudio("/thelastmuseum" + nextPage.settings.audio)
+ .then(audio => {
+ // console.log("preloaded", audio.src)
+ // audio.src = null
+ })
+ }
+ }
hideRoadblock() {
const roadblock = document.querySelector('.roadblock')
@@ -266,6 +325,7 @@ function exitLink(language) {
const mapStateToProps = state => ({
language: state.site.language,
+ graph: state.site.graph,
})
export default connect(mapStateToProps)(NavOverlay)