From 7a5ec4f2f4d75ec4877c06a1563e546804c293ad Mon Sep 17 00:00:00 2001 From: Kylart Date: Thu, 11 Jan 2018 12:21:04 +0100 Subject: [PATCH] Releases will now back up to the old data when failed to refresh --- pages/releases.vue | 6 ++++ store/modules/releases/actions.js | 50 ++++++++++++++--------------- store/modules/releases/mutations.js | 20 +++++++++--- store/modules/releases/state.js | 1 + 4 files changed, 47 insertions(+), 30 deletions(-) diff --git a/pages/releases.vue b/pages/releases.vue index e0a9895..5d526e2 100644 --- a/pages/releases.vue +++ b/pages/releases.vue @@ -4,6 +4,9 @@ v-layout(row, wrap, justify-center, style='margin: 0 1% 0 1%;') v-flex.time-container(md4, sm4, xs8) span.update-time Updated {{ lastUpdateTime }}. + v-tooltip(top, v-if='notLoaded') + span.update-time.pl-0(slot='activator') * + span The list was not refreshed due to an error. v-flex(md4, sm1, hidden-xs-only) v-flex(md2, sm3, xs10) v-select.select( @@ -113,6 +116,9 @@ }, fansubList () { return this.$store.state.releases.fansubs + }, + notLoaded () { + return this.$store.state.releases.notLoaded } }, methods: { diff --git a/store/modules/releases/actions.js b/store/modules/releases/actions.js index 1bcb910..7fdba05 100644 --- a/store/modules/releases/actions.js +++ b/store/modules/releases/actions.js @@ -8,7 +8,7 @@ export default { const {data, status} = await axios.get('getLatestNyaa', { params: state.params }) if (status === 200) { - commit('set', data) + commit('set', {data}) if (state.autoRefresh === true) dispatch('autoRefresh') } else if (status === 202) { @@ -26,7 +26,7 @@ export default { const {data, status} = await axios.get('getLatestNyaa', { params: state.params }) if (status === 200) { - commit('set', data) + commit('set', {data}) if (state.autoRefresh === true) dispatch('autoRefresh') } else if (status === 202) { @@ -44,13 +44,13 @@ export default { const {data, status} = await axios.get(`getLatest.json?quality=${state.params.quality}`) if (status === 200) { - commit('set', data) + commit('set', {data}) if (state.autoRefresh === true) dispatch('autoRefresh') } else if (status === 202) { log(`An error occurred while getting the latest releases. Retrying in 45 seconds.`) commit('setInfoSnackbar', 'Could not get the latest releases. Retrying in 45 seconds.', isRoot) - setTimeout(function () { + setTimeout(() => { log(`Retrying to get latest releases.`) dispatch('init').catch(err => { void (err) }) }, 45 * 1000) @@ -62,7 +62,6 @@ export default { } } } catch (e) { - console.error(e) log(`An error occurred while getting the latest releases. Retrying in 45 seconds.`) commit('setInfoSnackbar', 'Could not get the latest releases. Retrying in 45 seconds.', isRoot) setTimeout(() => { @@ -74,39 +73,38 @@ export default { async refresh ({state, commit, dispatch}) { log(`Refreshing Releases...`) + const retryLater = (backUp) => { + log(`An error occurred while getting the latest releases. Retrying in 45 seconds.`) + commit('setInfoSnackbar', 'Could not get the latest releases. Retrying in 45 seconds.', isRoot) + + backUp.length && commit('set', {old: backUp}) + + setTimeout(() => { + log(`Retrying to get latest releases.`) + dispatch('refresh').catch(err => { void (err) }) + }, 45 * 1000) + } + + const backUp = state.releases + commit('empty') try { const {data, status} = await axios.get('getLatestNyaa', { params: state.params }) - if (status === 200) commit('set', data) + if (status === 200) commit('set', {data}) else if (status === 202) { - log(`An error occurred while getting the latest releases. Retrying in 45 seconds.`) - commit('setInfoSnackbar', 'Could not get the latest releases. Retrying in 45 seconds.', isRoot) - setTimeout(() => { - log(`Retrying to get latest releases.`) - dispatch('refresh').catch(err => { void (err) }) - }, 45 * 1000) + retryLater(backUp) } else if (status === 204) { const {data, status} = await axios.get(`getLatest.json?quality=${state.params.quality}`) - if (status === 200) commit('set', data) + if (status === 200) commit('set', {data}) else if (status === 202 || status === 204) { - log(`An error occurred while getting the latest releases. Retrying in 45 seconds.`) - commit('setInfoSnackbar', 'Could not get the latest releases. Retrying in 45 seconds.', isRoot) - setTimeout(() => { - log(`Retrying to get latest releases.`) - dispatch('refresh').catch(err => { void (err) }) - }, 45 * 1000) + retryLater(backUp) } } } catch (e) { - log(`An error occurred while getting the latest releases. Retrying in 45 seconds.`, e) - commit('setInfoSnackbar', 'Could not get the latest releases. Retrying in 45 seconds.', isRoot) - setTimeout(() => { - log(`Retrying to get latest releases.`) - dispatch('refresh').catch(err => { void (err) }) - }, 45 * 1000) + retryLater(backUp) } }, async autoRefresh ({dispatch, commit, state}) { @@ -118,7 +116,7 @@ export default { const {data} = await axios.get('getLatestNyaa', { params: state.params }) if (data.length === 18) { - commit('set', data) + commit('set', {data}) dispatch('autoRefresh') } else { commit('setInfoSnackbar', 'Auto refresh releases failed... Attempting again in 30 minutes.', isRoot) diff --git a/store/modules/releases/mutations.js b/store/modules/releases/mutations.js index 3327df2..d5148fd 100644 --- a/store/modules/releases/mutations.js +++ b/store/modules/releases/mutations.js @@ -1,11 +1,23 @@ import {log, moment} from '../../utils.js' export default { - set (state, data) { - state.releases = data - state.updateTime = moment() + set (state, obj) { + const {old, data} = obj - log(`Releases updated.`) + if (!old) { + state.updateTime = moment() + state.notLoaded = false + + state.releases = data + + log(`Releases updated.`) + } else { + state.notLoaded = true + + state.releases = old + + log('Releases were not updated and put back to a back up.') + } }, setParams (state, data) { state.params = data diff --git a/store/modules/releases/state.js b/store/modules/releases/state.js index 8b34bbb..ec2aa17 100644 --- a/store/modules/releases/state.js +++ b/store/modules/releases/state.js @@ -5,6 +5,7 @@ export default { releases: [], autoRefresh: true, updateTime: moment(), + notLoaded: false, params: { quality: '', fansub: '',