Commit 4f449962 by Jonathan Thomas

Fixing some race condition errors when quickly switching between editor and projects page

parent 3eac0c05
...@@ -94,6 +94,9 @@ export default createStore({ ...@@ -94,6 +94,9 @@ export default createStore({
state.files.push(fileObj) state.files.push(fileObj)
}, },
updateFileThumbnail(state, payload) { updateFileThumbnail(state, payload) {
if (!state.project?.url || !Array.isArray(payload.obj.projects)) {
return
}
if (payload.obj.projects.includes(state.project.url)) { if (payload.obj.projects.includes(state.project.url)) {
state.files = [ state.files = [
...state.files = state.files.filter(file => file.id != payload.obj.id), ...state.files = state.files.filter(file => file.id != payload.obj.id),
...@@ -124,6 +127,9 @@ export default createStore({ ...@@ -124,6 +127,9 @@ export default createStore({
state.clips = state.clips.filter(clip => clip.id != clip_id) state.clips = state.clips.filter(clip => clip.id != clip_id)
}, },
updateClipThumbnail(state, payload) { updateClipThumbnail(state, payload) {
if (!state.project?.url) {
return
}
if (state.project.url == payload.obj.project) { if (state.project.url == payload.obj.project) {
state.clips = [ state.clips = [
...state.clips = state.clips.filter(clip => clip.id != payload.obj.id), ...state.clips = state.clips.filter(clip => clip.id != payload.obj.id),
...@@ -232,7 +238,7 @@ export default createStore({ ...@@ -232,7 +238,7 @@ export default createStore({
commit('setUser', user_object) commit('setUser', user_object)
} catch(err) { } catch(err) {
commit('setUser', null) commit('setUser', null)
commit('addError', err.response.data) commit('addError', err.response?.data || err.message)
} }
}, },
async loadProjects({commit, dispatch}) { async loadProjects({commit, dispatch}) {
...@@ -253,7 +259,7 @@ export default createStore({ ...@@ -253,7 +259,7 @@ export default createStore({
try { try {
return instance.get(`projects/${project_id}/`) return instance.get(`projects/${project_id}/`)
} catch(err) { } catch(err) {
commit('addError', err.response.data) commit('addError', err.response?.data || err.message)
} }
}, },
async createProject({commit, dispatch}, payload) { async createProject({commit, dispatch}, payload) {
...@@ -264,7 +270,7 @@ export default createStore({ ...@@ -264,7 +270,7 @@ export default createStore({
dispatch('attachThumbnail', thumbnail_payload) dispatch('attachThumbnail', thumbnail_payload)
return response.data return response.data
} catch(err) { } catch(err) {
commit('addError', err.response.data) commit('addError', err.response?.data || err.message)
return null return null
} }
}, },
...@@ -288,7 +294,7 @@ export default createStore({ ...@@ -288,7 +294,7 @@ export default createStore({
await instance.patch(`${payload.url}`, payload) await instance.patch(`${payload.url}`, payload)
commit('setProject', payload) commit('setProject', payload)
} catch(err) { } catch(err) {
commit('addError', err.response.data) commit('addError', err.response?.data || err.message)
} }
}, },
async deleteProject({commit}, project_id) { async deleteProject({commit}, project_id) {
...@@ -296,7 +302,7 @@ export default createStore({ ...@@ -296,7 +302,7 @@ export default createStore({
await instance.delete(`projects/${project_id}/`) await instance.delete(`projects/${project_id}/`)
commit('deleteProject', project_id) commit('deleteProject', project_id)
} catch(err) { } catch(err) {
commit('addError', err.response.data) commit('addError', err.response?.data || err.message)
} }
}, },
async loadFiles({commit, dispatch}, project_id) { async loadFiles({commit, dispatch}, project_id) {
...@@ -313,7 +319,7 @@ export default createStore({ ...@@ -313,7 +319,7 @@ export default createStore({
} }
commit('setFiles', files) commit('setFiles', files)
} catch(err) { } catch(err) {
commit('addError', err.response.data) commit('addError', err.response?.data || err.message)
} }
}, },
async loadClips({commit, dispatch}, project_id) { async loadClips({commit, dispatch}, project_id) {
...@@ -332,7 +338,7 @@ export default createStore({ ...@@ -332,7 +338,7 @@ export default createStore({
dispatch('attachThumbnail', thumbnail_payload) dispatch('attachThumbnail', thumbnail_payload)
} }
} catch(err) { } catch(err) {
commit('addError', err.response.data) commit('addError', err.response?.data || err.message)
} }
}, },
async createClip({dispatch, commit}, payload) { async createClip({dispatch, commit}, payload) {
...@@ -348,7 +354,7 @@ export default createStore({ ...@@ -348,7 +354,7 @@ export default createStore({
await dispatch('attachThumbnail', thumbnail_payload) await dispatch('attachThumbnail', thumbnail_payload)
return clipObj return clipObj
} catch(err) { } catch(err) {
commit('addError', err.response.data) commit('addError', err.response?.data || err.message)
return null return null
} }
}, },
...@@ -364,7 +370,7 @@ export default createStore({ ...@@ -364,7 +370,7 @@ export default createStore({
commit('setScrollToClip', payload.data) commit('setScrollToClip', payload.data)
} }
} catch(err) { } catch(err) {
commit('addError', err.response.data) commit('addError', err.response?.data || err.message)
} }
}, },
async moveClip({dispatch, getters}, payload) { async moveClip({dispatch, getters}, payload) {
...@@ -402,7 +408,7 @@ export default createStore({ ...@@ -402,7 +408,7 @@ export default createStore({
commit('deleteClip', clip_id) commit('deleteClip', clip_id)
await dispatch('normalizeClipPositions') await dispatch('normalizeClipPositions')
} catch(err) { } catch(err) {
commit('addError', err.response.data) commit('addError', err.response?.data || err.message)
} }
}, },
async deleteFile({commit, dispatch, state}, file_id) { async deleteFile({commit, dispatch, state}, file_id) {
...@@ -428,7 +434,7 @@ export default createStore({ ...@@ -428,7 +434,7 @@ export default createStore({
await instance.delete(`files/${file_id}/`) await instance.delete(`files/${file_id}/`)
commit('deleteFile', normalizedFileId) commit('deleteFile', normalizedFileId)
} catch(err) { } catch(err) {
commit('addError', err.response.data) commit('addError', err.response?.data || err.message)
} }
}, },
async createFile({commit, dispatch}, payload) { async createFile({commit, dispatch}, payload) {
...@@ -455,17 +461,21 @@ export default createStore({ ...@@ -455,17 +461,21 @@ export default createStore({
dispatch('attachThumbnail', thumbnail_payload) dispatch('attachThumbnail', thumbnail_payload)
} catch(err) { } catch(err) {
commit('removeUpload', uploadID) commit('removeUpload', uploadID)
commit('addError', err.response.data) commit('addError', err.response?.data || err.message)
} }
}, },
async attachThumbnail({commit}, payload) { async attachThumbnail({commit}, payload) {
let Obj = payload.obj let Obj = payload.obj
if (!Obj) {
console.warn('attachThumbnail: missing object data', payload)
return
}
let objectType = null let objectType = null
if (payload.obj.file) { if (Obj.file) {
// Clip passed in // Clip passed in
Obj = payload.obj.fileObj Obj = Obj.fileObj
objectType = 'clip' objectType = 'clip'
} else if (payload.obj.media) { } else if (Obj.media) {
// File passed in // File passed in
objectType = 'file' objectType = 'file'
} else { } else {
...@@ -473,7 +483,11 @@ export default createStore({ ...@@ -473,7 +483,11 @@ export default createStore({
objectType = 'project' objectType = 'project'
} }
if (!Obj) { if (!Obj) {
console.warn('attachThumbnail: missing object data', payload) console.warn('attachThumbnail: missing nested object data', payload)
return
}
if (!Obj.url) {
console.warn('attachThumbnail: object missing url', payload)
return return
} }
let sessionKey = `${objectType}-${Obj.id}-frame${payload.frame}` let sessionKey = `${objectType}-${Obj.id}-frame${payload.frame}`
...@@ -522,7 +536,7 @@ export default createStore({ ...@@ -522,7 +536,7 @@ export default createStore({
} }
} catch(err) { } catch(err) {
commit('addError', err.response.data) commit('addError', err.response?.data || err.message)
} }
}, },
async createExport({commit}, payload) { async createExport({commit}, payload) {
...@@ -530,7 +544,7 @@ export default createStore({ ...@@ -530,7 +544,7 @@ export default createStore({
const response = await instance.post('/exports/', payload) const response = await instance.post('/exports/', payload)
commit('setExport', response.data) commit('setExport', response.data)
} catch(err) { } catch(err) {
commit('addError', err.response.data) commit('addError', err.response?.data || err.message)
} }
}, },
async loadExports({commit}, project_id) { async loadExports({commit}, project_id) {
...@@ -543,7 +557,7 @@ export default createStore({ ...@@ -543,7 +557,7 @@ export default createStore({
commit('setExport', export_response.data) commit('setExport', export_response.data)
} }
} catch(err) { } catch(err) {
commit('addError', err.response.data) commit('addError', err.response?.data || err.message)
} }
}, },
async checkExportProgress({commit}, exportObj) { async checkExportProgress({commit}, exportObj) {
...@@ -551,7 +565,7 @@ export default createStore({ ...@@ -551,7 +565,7 @@ export default createStore({
const export_response = await instance.get(exportObj.url) const export_response = await instance.get(exportObj.url)
commit('setExport', export_response.data) commit('setExport', export_response.data)
} catch(err) { } catch(err) {
commit('addError', err.response.data) commit('addError', err.response?.data || err.message)
} }
}, },
async loadEffects({commit}, project_id) { async loadEffects({commit}, project_id) {
...@@ -559,7 +573,7 @@ export default createStore({ ...@@ -559,7 +573,7 @@ export default createStore({
const effects_response = await instance.get(`projects/${project_id}/effects/`) const effects_response = await instance.get(`projects/${project_id}/effects/`)
commit('setEffects', effects_response.data.results) commit('setEffects', effects_response.data.results)
} catch(err) { } catch(err) {
commit('addError', err.response.data) commit('addError', err.response?.data || err.message)
} }
}, },
async loadEffectCatalog({state, commit}) { async loadEffectCatalog({state, commit}) {
...@@ -581,7 +595,7 @@ export default createStore({ ...@@ -581,7 +595,7 @@ export default createStore({
const response = await instance.post('/effects/', payload) const response = await instance.post('/effects/', payload)
commit('addEffect', response.data) commit('addEffect', response.data)
} catch(err) { } catch(err) {
commit('addError', err.response.data) commit('addError', err.response?.data || err.message)
} }
}, },
async updateEffect({commit}, payload) { async updateEffect({commit}, payload) {
...@@ -590,7 +604,7 @@ export default createStore({ ...@@ -590,7 +604,7 @@ export default createStore({
commit('setEffect', payload) commit('setEffect', payload)
} catch(err) { } catch(err) {
console.log(err) console.log(err)
commit('addError', err.response.data) commit('addError', err.response?.data || err.message)
} }
}, },
async normalizeClipPositions({getters, dispatch}) { async normalizeClipPositions({getters, dispatch}) {
......
...@@ -61,15 +61,17 @@ export default { ...@@ -61,15 +61,17 @@ export default {
this.hasData = true this.hasData = true
} catch(err) { } catch(err) {
// Handle 404 // Handle 404
this.addError(err.response.data) this.addError(err.response?.data || err.message)
await this.$router.push(`/`) await this.$router.push(`/`)
} }
this.exportPollInterval = setInterval(this.pollForExports, 1000) this.exportPollInterval = setInterval(this.pollForExports, 1000)
}, },
unmounted() { unmounted() {
// Update project thumbnail // Update project thumbnail
let thumbnail_payload = { obj: this.project, frame: 1, clobber: true } if (this.project) {
this.attachThumbnail(thumbnail_payload) let thumbnail_payload = { obj: this.project, frame: 1, clobber: true }
this.attachThumbnail(thumbnail_payload)
}
this.setProject(null) this.setProject(null)
this.setExports([]) this.setExports([])
if (this.exportPollInterval) { if (this.exportPollInterval) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment