Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/photos.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJulius Härtl <jus@bitgrid.net>2020-02-11 14:25:39 +0300
committernpmbuildbot[bot] <npmbuildbot[bot]@users.noreply.github.com>2020-02-24 17:27:20 +0300
commitdb41e780bee7a1bb853a770197c1a662953be13e (patch)
treedd82717c7d60405cd2c50cf090de62f97882f98d /src
parent1ebb5d05b3f97632a367b9716b4a44fe0bc9a737 (diff)
Avoid passing an incomplete cancel token object to axios
Signed-off-by: Julius Härtl <jus@bitgrid.net> Signed-off-by: npmbuildbot[bot] <npmbuildbot[bot]@users.noreply.github.com>
Diffstat (limited to 'src')
-rw-r--r--src/components/Folder.vue9
-rw-r--r--src/components/Tag.vue10
-rw-r--r--src/patchedRequest.js2
-rw-r--r--src/utils/CancelableRequest.js14
-rw-r--r--src/views/Tags.vue36
-rw-r--r--src/views/Timeline.vue12
6 files changed, 59 insertions, 24 deletions
diff --git a/src/components/Folder.vue b/src/components/Folder.vue
index 8180936f..9dc94f83 100644
--- a/src/components/Folder.vue
+++ b/src/components/Folder.vue
@@ -63,7 +63,7 @@ export default {
data() {
return {
- cancelRequest: () => {},
+ cancelRequest: null,
}
},
@@ -103,11 +103,16 @@ export default {
console.error('Failed to get folder content', this.folder, error.response)
}
// else we just cancelled the request
+ } finally {
+ this.cancelRequest = null
}
},
beforeDestroy() {
- this.cancelRequest('Navigated away')
+ // cancel any pending requests
+ if (this.cancelRequest) {
+ this.cancelRequest('Navigated away')
+ }
},
}
</script>
diff --git a/src/components/Tag.vue b/src/components/Tag.vue
index 8e2998a0..07d31255 100644
--- a/src/components/Tag.vue
+++ b/src/components/Tag.vue
@@ -56,7 +56,7 @@ export default {
data() {
return {
- cancelRequest: () => {},
+ cancelRequest: null,
}
},
@@ -82,7 +82,10 @@ export default {
},
beforeDestroy() {
- this.cancelRequest('Navigated away')
+ // cancel any pending requests
+ if (this.cancelRequest) {
+ this.cancelRequest('Navigated away')
+ }
},
async created() {
@@ -99,7 +102,8 @@ export default {
if (error.response && error.response.status) {
console.error('Failed to get folder content', this.id, error.response)
}
- // else we just cancelled the request
+ } finally {
+ this.cancelRequest = null
}
},
diff --git a/src/patchedRequest.js b/src/patchedRequest.js
index 5a4ab3ee..cabb64cd 100644
--- a/src/patchedRequest.js
+++ b/src/patchedRequest.js
@@ -31,7 +31,7 @@ const oldPrepareRequestOptions = request.prepareRequestOptions
request.prepareRequestOptions = function(requestOptions, methodOptions) {
// add our cancelToken support
if (methodOptions.cancelToken && typeof methodOptions.cancelToken === 'object') {
- requestOptions.cancelToken = Object.assign({}, requestOptions.cancelToken || {}, methodOptions.cancelToken)
+ requestOptions.cancelToken = methodOptions.cancelToken
}
// exploit old method
diff --git a/src/utils/CancelableRequest.js b/src/utils/CancelableRequest.js
index a442810f..e0d0d62d 100644
--- a/src/utils/CancelableRequest.js
+++ b/src/utils/CancelableRequest.js
@@ -24,6 +24,12 @@
import axios from '@nextcloud/axios'
/**
+ * Create a cancel token
+ * @returns {CancelTokenSource}
+ */
+const createCancelToken = () => axios.CancelToken.source()
+
+/**
* Creates a cancelable axios 'request object'.
*
* @param {function} request the axios promise request
@@ -33,8 +39,7 @@ const CancelableRequest = function(request) {
/**
* Generate an axios cancel token
*/
- const CancelToken = axios.CancelToken
- const source = CancelToken.source()
+ const cancelToken = createCancelToken()
/**
* Execute the request
@@ -45,12 +50,13 @@ const CancelableRequest = function(request) {
const fetch = async function(url, options) {
return request(
url,
- Object.assign({ cancelToken: source.token }, options)
+ Object.assign({ cancelToken: cancelToken.token }, options)
)
}
+
return {
request: fetch,
- cancel: source.cancel,
+ cancel: cancelToken.cancel,
}
}
diff --git a/src/views/Tags.vue b/src/views/Tags.vue
index 10b1bbd5..56020f21 100644
--- a/src/views/Tags.vue
+++ b/src/views/Tags.vue
@@ -105,7 +105,7 @@ export default {
data() {
return {
error: null,
- cancelRequest: () => {},
+ cancelRequest: null,
}
},
@@ -157,7 +157,10 @@ export default {
},
beforeDestroy() {
- this.cancelRequest('Changed view')
+ // cancel any pending requests
+ if (this.cancelRequest) {
+ this.cancelRequest('Navigated away')
+ }
},
async beforeMount() {
@@ -176,7 +179,9 @@ export default {
methods: {
async fetchRootContent() {
// cancel any pending requests
- this.cancelRequest('Changed folder')
+ if (this.cancelRequest) {
+ this.cancelRequest('Changed folder')
+ }
// close any potential opened viewer
OCA.Viewer.close()
@@ -201,13 +206,16 @@ export default {
} finally {
// done loading
this.$emit('update:loading', false)
+ this.cancelRequest = null
}
},
async fetchContent() {
// cancel any pending requests
- this.cancelRequest()
+ if (this.cancelRequest) {
+ this.cancelRequest()
+ }
// close any potential opened viewer
OCA.Viewer.close()
@@ -222,13 +230,19 @@ export default {
const { request, cancel } = cancelableRequest(getTaggedImages)
this.cancelRequest = cancel
- // get data
- const files = await request(this.tagId)
- this.$store.dispatch('updateTag', { id: this.tagId, files })
- this.$store.dispatch('appendFiles', files)
-
- // done loading
- this.$emit('update:loading', false)
+ try {
+ // get data
+ const files = await request(this.tagId)
+ this.$store.dispatch('updateTag', { id: this.tagId, files })
+ this.$store.dispatch('appendFiles', files)
+ } catch (error) {
+ console.error(error)
+ this.error = true
+ } finally {
+ // done loading
+ this.$emit('update:loading', false)
+ this.cancelRequest = null
+ }
},
},
diff --git a/src/views/Timeline.vue b/src/views/Timeline.vue
index 0674b14d..e41d17c2 100644
--- a/src/views/Timeline.vue
+++ b/src/views/Timeline.vue
@@ -92,7 +92,7 @@ export default {
data() {
return {
- cancelRequest: () => {},
+ cancelRequest: null,
done: false,
error: null,
loadingPage: false,
@@ -136,7 +136,10 @@ export default {
},
beforeDestroy() {
- this.cancelRequest()
+ // cancel any pending requests
+ if (this.cancelRequest) {
+ this.cancelRequest('Changed view')
+ }
},
methods: {
@@ -147,7 +150,9 @@ export default {
}
// cancel any pending requests
- this.cancelRequest('Changed view')
+ if (this.cancelRequest) {
+ this.cancelRequest('Changed view')
+ }
// if we don't already have some cached data let's show a loader
if (this.timeline.length === 0) {
@@ -196,6 +201,7 @@ export default {
// done loading even with errors
this.$emit('update:loading', false)
this.loadingPage = false
+ this.cancelRequest = null
}
},