Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
When double-clicking on a file, the behavior is:
First click: open the viewer
Second click: close the viewer

But the second click does not correctly close the Viewer, as the method used to cancel the requests does not work.

This PR use modern API to cancel the requests. The requests are now correctly aborted, and the `openFile` method exit because the request call throws an exception.

Fix #893

https://axios-http.com/docs/cancellation
https://developer.mozilla.org/en-US/docs/Web/API/AbortController

Signed-off-by: Louis Chemineau <[email protected]>
Signed-off-by: nextcloud-command <[email protected]>
  • Loading branch information
artonge authored and nextcloud-command committed May 17, 2022
commit 5b203eec77c449a17c53296c49ff6844bccd6f29
4 changes: 2 additions & 2 deletions js/viewer-main.js

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions js/viewer-main.js.LICENSE.txt
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,7 @@ object-assign
*
* @author Marco Ambrosini <[email protected]>
* @author John Molakvoæ <[email protected]>
* @author Louis Chemineau <[email protected]>
*
* @license AGPL-3.0-or-later
*
Expand Down
2 changes: 1 addition & 1 deletion js/viewer-main.js.map

Large diffs are not rendered by default.

13 changes: 4 additions & 9 deletions src/utils/CancelableRequest.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
*
* @author Marco Ambrosini <[email protected]>
* @author John Molakvoæ <[email protected]>
* @author Louis Chemineau <[email protected]>
*
* @license AGPL-3.0-or-later
*
Expand All @@ -21,20 +22,14 @@
*
*/

import axios from '@nextcloud/axios'

/**
* Creates a cancelable axios 'request object'.
*
* @param {Function} request the axios promise request
* @return {object}
*/
const CancelableRequest = function(request) {
/**
* Generate an axios cancel token
*/
const CancelToken = axios.CancelToken
const source = CancelToken.source()
const controller = new AbortController()

/**
* Execute the request
Expand All @@ -45,12 +40,12 @@ const CancelableRequest = function(request) {
const fetch = async function(url, options) {
return request(
url,
Object.assign({ cancelToken: source.token }, { options })
{ ...options, signal: controller.signal }
)
}
return {
request: fetch,
cancel: source.cancel,
cancel: () => controller.abort(),
}
}

Expand Down