Commit Graph

217 Commits (feat/database/query-result-fetch-associative-fetch-num)

Author SHA1 Message Date
John Molakvoæ d591510253
fix(files): legacy humanFileSize tests
Signed-off-by: John Molakvoæ <skjnldsv@protonmail.com>
2023-10-04 08:44:57 +07:00
Ferdinand Thiessen 39e0a42ed2 fix: Upload progress shows number of files to upload and current index
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2023-08-21 23:18:45 +07:00
Ferdinand Thiessen c87ce4bafc fix: Make smooth bitrate and remaining upload time work when unset
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2023-08-21 23:18:45 +07:00
Phlogi 0609aeeb0a Smooth time remaining, bitrate and stabilize user information
Besides the existing moving average, a smoothing factor is introduced for the time remaining display as well as the bitrate.
Furthermore, half of the buffer needs to be filled before the first prediction is displayed to the user. This reduces volatile and jumping durations towards the user and improves usability.

Signed-off-by: Cyrill H. <phlogi@posteo.de>
Co-authored-by: Carl Schwan <carl@carlschwan.eu>
2023-08-21 23:18:45 +07:00
Julius Härtl e23aa8883e
feat(s3): Use multipart upload for chunked uploading
This allows to stream file chunks directly to S3 during upload.

Signed-off-by: Julius Härtl <jus@bitgrid.net>
2023-03-08 14:00:04 +07:00
julia.kirschenheuter 3485450b20 Replace custom tooltips with native ones in files
Signed-off-by: julia.kirschenheuter <julia.kirschenheuter@nextcloud.com>
2022-12-22 14:43:26 +07:00
Vincent Petry feda03b6ed
Also cancel XHR when cancelling uploads
Fixes issue when cancelling a long list of uploads.

Signed-off-by: Vincent Petry <vincent@nextcloud.com>
2022-11-18 15:47:19 +07:00
luz paz 9d26671f05 Fix typos in apps/ subdirectory
Found via `codespell -q 3 -S l10n,./apps/files_external/3rdparty -L adn,ba,boxs,keypair,jus,optionel,ressource,tabel ./apps/`

Signed-off-by: luz paz <luzpaz@github.com>
Signed-off-by: nextcloud-command <nextcloud-command@users.noreply.github.com>
2022-09-05 12:59:54 +07:00
Vincent Petry bb2557c389
Replace files app ids to classes
Replaced ids to classes for the following:

- #filestable -> .files-filestable
- #fileList -> .files-fileList
- #controls -> .files-controls
- #emptycontent -> .emptyfilelist.emptycontent

Signed-off-by: Vincent Petry <vincent@nextcloud.com>
2022-07-26 10:19:19 +07:00
Daniel Calviño Sánchez e15b43d976 Fix default toast message for failed uploads with HTTP/2
When an upload fails a toast is shown with either a specific message or
just the textual part of the HTTP error code (which comes from the
upload failure handler and set by "jQuery.ajax()". However, if there
is neither a message nor an error then the toast will show the default
message from the Toastify-js library, which is an undescriptive "Hi
there!".

When HTTP/2 is used Chromium does not provide the textual part of the
HTTP error code, so when an upload fails the toast can receive an empty
message and thus just show "Hi there!". Now an explicit message is
provided as a fallback to prevent that.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2022-06-14 16:07:35 +07:00
Vincent Petry 11c7e100ae
Properly hide progress bar after error
Whenever an error occurs, also hide the progress bar.

The logic was also adjusted to properly detect uploads that are pending
deletion, in which case the progress bar can already be hidden.

Signed-off-by: Vincent Petry <vincent@nextcloud.com>
2022-01-12 20:21:12 +07:00
Vincent Petry 6c4d4d8bc4
Properly abort uploads
Add a new approach for flagging an upload as aborted because we can't
rely on the browser fully cancelling the request as we now seem to
receive an error response from the server instead of a jQuery "abort"
message.

Signed-off-by: Vincent Petry <vincent@nextcloud.com>
2022-01-12 20:21:12 +07:00
Louis Chemineau d92cbf5149 Typing corrections
Signed-off-by: Louis Chemineau <louis@chmn.me>
2022-01-11 17:12:55 +07:00
Julien Veyssier 742703c92f
refs #11864 handle empty dir drop in Files UI
Signed-off-by: Julien Veyssier <eneiluj@posteo.net>
2021-11-08 12:22:57 +07:00
Louis ed533bd128
Merge pull request #28250 from pjft/patch-3
Fix bug introduced on drag and drop external files
2021-10-14 10:59:45 +07:00
pjft 5c8e7be4a7 Fix bug introduced on drag and drop external files
Drag and drop of external (OS filesystem) to subdirectories in the browser would fail on specific cases, mainly when the subdirectory was no longer off the root folder.
This seemed to have been an issue introduced with the subdirectory free space calculation [here](f9536b0809) and it seems to fail for any subdirectory that doesn't belong to the root folder.

Bug reports:
- https://help.nextcloud.com/t/drag-drop-into-subfolders/120731
- https://github.com/nextcloud/server/issues/24720

I couldn't find any reference on scenarios or quota management that would suggest when a subdirectory's free space would be different to the parent's free space, other than when on the root folder, where subdirectories can be external mounts.

As such, if my understanding is correct (please review), this calculation can - and should - be made by getting the free space from the first subdirectory in the total path, which caters for all subdirectory scenarios.

Please advise, happy to help improve this.

Co-authored-by: John Molakvoæ <skjnldsv@users.noreply.github.com>
Signed-off-by: pjft <pjft@users.noreply.github.com>
2021-08-13 12:57:39 +07:00
szaimen b11741cf58 Change the concurrent upload limit to less than 10
Signed-off-by: szaimen <szaimen@e.mail.de>
2021-08-08 20:17:09 +07:00
Jakub Onderka 296ffc7d34 file-upload: Correctly handle error responses for HTTP2
Signed-off-by: Jakub Onderka <ahoj@jakubonderka.cz>
2021-03-10 16:30:37 +07:00
Daniel Calviño Sánchez fc2069c1dd Fix total upload size overwritten by next upload
The upload progress is based on the "totalToUpload" variable. However,
as the variable is set when an upload is submitted, if another upload is
submitted before the previous one finished the upload progress only took
into account the size of the new upload (although the upload itself
worked fine; the files of the new submitted upload are added to the
active one). Now "totalToUpload" is either increased or set depending on
whether an upload is active or not.

Note that although "data.total" holds the total size of the files being
uploaded "totalToUpload" needs to be used in "fileuploadprogressall"
instead; "totalToUpload" is calculated when the upload is submitted, but
since 7c4c5fe6ae the actual upload of the files, and thus updating the
value of "data.total", may be deferred until the parent folders were
created.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2020-12-23 18:53:01 +07:00
Julius Härtl f9536b0809
Check for target folder available quota when uploading
Signed-off-by: Julius Härtl <jus@bitgrid.net>
Signed-off-by: Christoph Wurst <christoph@winzerhof-wurst.at>
2020-11-17 09:43:44 +07:00
Joas Schilling 3fb6a625aa
Better error message when blocked by access control
Signed-off-by: Joas Schilling <coding@schilljs.com>
2020-09-04 08:51:35 +07:00
John Molakvoæ (skjnldsv) 754fd40e40
Fix IE11 upload fallback methods
Signed-off-by: John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
2020-04-22 13:40:23 +07:00
Christoph Wurst bb1d8b3189
Remove deprecated global variables
Signed-off-by: Christoph Wurst <christoph@winzerhof-wurst.at>
2020-03-09 13:31:50 +07:00
Julius Härtl dbd9622bc3
Also set X-OC-Mtime header for files that are smaller than 10MB
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2019-11-07 20:16:00 +07:00
John Molakvoæ (skjnldsv) b9bc2417e7
Comply to eslint
Signed-off-by: John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
2019-10-01 17:16:09 +07:00
Valdnet 07c36654b1
Update file-upload.js
Change the location of the translation file.
2019-05-09 14:30:43 +07:00
Evilham de648f6a3e [app:files] Use current directory for hashing.
This fixes collisions that were causing uploads to break in a very
terrible way.

Kudos to @kesselb for finding the problematic place and to
@hottwister for the proposed solution.

Fixes #10527.
2019-03-13 22:21:32 +07:00
Tomasz Grobelny 7c4c5fe6ae Limit number of simultaneous MKCOL requests to server to increase upload reliability
Signed-off-by: Tomasz Grobelny <tomasz@grobelny.net>
2019-02-16 23:27:50 +07:00
Tomasz Grobelny 08919eb193 Merge branch 'master' into operation_progress_improvements3
Signed-off-by: Tomasz Grobelny <tomasz@grobelny.net>
2019-01-29 21:26:44 +07:00
Daniel Calviño Sánchez 038e665db9 Fix dropping a folder on a folder row
When the uploaded files have a relative path (that is, when a folder is
uploaded) it is first ensured that all the parent folders exist, which
is done by trying to create them. When a folder is created in the
currently opened folder the file list is updated and a row for the new
folder is added. However, this was done too when the folder already
existed, which caused the previous row to be removed and a new one added
to replace it.

For security reasons, some special headers need to be set in requests;
this is done automatically for jQuery by handling the "ajaxSend" event
in the document. In the case of DAV requests, if the headers are not set
the server rejects the request with "CSRF check not passed".

When a file or folder is dropped on a folder row the jQuery upload
events are chained from the initial drop event, which has the row as its
target. In order to upload the file jQuery performs a request, which
triggers the "ajaxSend" event in the row; this event then bubbles up to
the document, which is then handled by adding the special headers to the
request.

However, when a folder was dropped on a folder row that folder row was
removed when ensuring that the folder exists. The jQuery upload events
were still triggered on the row, but as it had been removed it had no
parent nodes, and thus the events did not bubble up. Due to this the
"ajaxSend" event never reached the document when triggered on the
removed row, the headers were not set, and the upload failed.

All this is simply fixed by not removing the folder row when trying to
create it if it existed already.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2019-01-29 13:04:19 +07:00
Tomasz Grobelny f99ce0d546 Throttle getstoragestats.php calls and allow simultaneous uploads
Signed-off-by: Tomasz Grobelny <tomasz@grobelny.net>
2019-01-27 22:59:14 +07:00
Tigran Mkrtchyan 0573413134 apps: file-upload: fix typo in comments
Signed-off-by: Tigran Mkrtchyan <tigran.mkrtchyan@desy.de>
2019-01-21 19:11:13 +07:00
Roeland Jago Douma 9204ce7d3d
Do not show general warning on free space error
Fixes #12588
Probably needs more fixing for the other cases. But this is the quick
fix I could come up with for now.

Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-12-05 22:40:07 +07:00
Tomasz Grobelny e99340dc4d Move progress bar to separate component
Signed-off-by: Tomasz Grobelny <tomasz@grobelny.net>
2018-11-24 23:55:17 +07:00
Tomasz Grobelny 296e69fe04 Restructuring code in file-upload.js
Signed-off-by: Tomasz Grobelny <tomasz@grobelny.net>
2018-11-24 23:55:01 +07:00
John Molakvoæ (skjnldsv) a793b1027c
Ask before cancelling an ongoing upload
Signed-off-by: John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
2018-11-05 10:11:50 +07:00
Daniel Calviño Sánchez 1fe16501bd Do not hide the progress bar while the chunked upload is being assembled
Large files are not uploaded in a single operation, but uploaded in
several chunks; once all the chunks are uploaded then the server needs
to assemble them to get the final file.

Before, once the chunks were uploaded the progress bar was hidden.
However, this was confusing for the users, as the file could still need
some time to appear in the file list due to the assembling. Now once all
the chunks are uploaded the text in the progress bar changes to inform
the user that there are still some pending operations, and only when the
file is finally assembled the progress bar is hidden.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2018-09-07 19:59:08 +07:00
Daniel Calviño Sánchez 4eafae4178 Do not show an error message when draging and dropping text
When the browser reports a drag of items other than files (for example,
text) and then triggers a drop event with no files no error message
should be shown to the user, as in that case there would be no highlight
of the drop zone and no indication that the drop would be valid (except
for the mouse cursor); the error message should be shown only when
the drop event with no files follows a file drag.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2018-06-08 20:37:43 +07:00
Daniel Calviño Sánchez 463d92c339 Remove no longer needed special handling for Firefox
The highlighting was removed in Firefox when the cursor was no longer
moving to handle the behaviour of reporting a file drag and then
providing no files in the drop event. That behaviour (which was only
present in Firefox 48 and 49) is already handled with the "dropnofiles"
callback, so that special handling is no longer needed.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2018-06-08 20:01:41 +07:00
Daniel Calviño Sánchez d8251344c1 Use "dropnofiles" callback to disable the drop state in the UI
When a file is dragged from the desktop to the file list the file list
is highlighted, and when the file is finally dropped or the drag
operation is cancelled the highlighting is removed. In some cases, due
to a wrong implementation, a browser may end a file drag with a drop
with no files (for example, when a folder or text is dragged), which
would cause the highlight to not be removed. Now those cases are handled
with the "dropnofiles" callback, which restores the UI and also shows a
message to the user.

The error message is just a generic one, as in some cases it is not even
possible to know whether the problem came from a text drag or a folder
drag, and whether the problem appears or not depends on the browser,
version and even operating system.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2018-06-08 19:15:28 +07:00
Daniel Calviño Sánchez 74ab68872f Remove duplicated code
"disableDropState" was set as the event handler in 8d4e5747f3, but
the duplicated code was accidentally added back in 786e858d23.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2018-06-08 11:10:46 +07:00
Daniel Calviño Sánchez 375a55b0ad
Fix race condition when preparing upload folder
Before any upload is submitted the upload is registered in a list of
known uploads; this is needed to retrieve the upload object at several
points of the upload process. When a chunked upload is submitted first a
directory to upload all the chunks is created and, once that is done,
the chunks are sent; in order to send a chunk the upload object needs to
be retrieved from the list of known uploads.

When all the active uploads were finished the list of known uploads was
cleared. However, an upload is not active until it actually starts
sending the data, so while waiting for the upload directory to be
created the upload is already in the list of known uploads yet not
active. Due to all this, if the active uploads finished while another
pending upload was waiting for the upload directory to be created that
pending upload would be removed from the list of known uploads too, and
once the directory was created and thus the chunks were sent a field of
a null upload object would be accessed thus causing a failure.

Instead of removing all the known uploads at once when the active
uploads finish now each upload is explicitly removed when it finishes.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2018-04-22 20:38:11 +07:00
Daniel Calviño Sánchez bcfe8431b4 Fix progress bar hidden before the upload ends
The jQuery File Upload plugin triggers the "stop" event once there are
no more files being uploaded (even if some of them were added when
another upload was already in progress). Therefore, the progress bar
should be hidden in the "fileuploadstop" callback.

In some cases the "stop" event is not triggered and thus the progress
bar is not hidden once no more files are being uploaded. This is caused
by a race condition and it will be fixed in another commit; except in
buggy cases like that one (that need to be fixed anyway) it is safe to
hide the progress bar in the "fileuploadstop" callback.

In any case, note that the callbacks in "fileuploaddone" may be called
after the "stop" event was triggered and handled when using chunked
uploads. In that case once all the chunks are uploaded the assembled
file is moved to its final destination, so its promise could be resolved
after the "stop" event was triggered. Therefore a different approach
would be needed to keep the progress bar visible until the chunked
upload is truly finished, but for the time being the current one is good
enough.

Before this commit the progress bar was being hidden when the first
upload finished, either successfully or with an error, no matter if
there were other files being uploaded too.

The progress bar was being explicitly hidden also when the upload was
cancelled. When an upload is cancelled all the single uploads are
aborted, which triggers a "fail" event for each of them. However, the
"stop" event is always triggered when no more files are being uploaded,
so it is triggered too once all the single uploads were aborted. As all
the single uploads are immediately aborted in a loop when the general
upload is cancelled it makes no difference to hide the progress bar when
the first single upload is aborted or when all the single uploads were
aborted, so the progress bar is no longer explicitly hidden in the
former case.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2018-04-05 11:12:33 +07:00
Roeland Jago Douma d4f163b230
Don't encode paths passed to the OC.Files.Client
This is handled already in the client. So double encoding breaks things
in some situations.

Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-01-10 08:35:40 +07:00
Morris Jobke 876238ce8b
Merge pull request #7533 from nextcloud/oc-28545-handle-oc-total-length-in-new-chunking
[oc] Handle OC-Total-Length in new chunking
2018-01-03 16:18:24 +07:00
John Molakvoæ (skjnldsv) 0cb45f681f
Update quota on file upload and deletion
Signed-off-by: John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
2017-12-21 10:48:43 +07:00
Vincent Petry ec8bf53356 Only set X-OC-Mtime when browser provided lastModified on upload
Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2017-12-15 14:46:53 +07:00
Thomas Müller f39de4ab37 Transmit OC-Total-Length in browser as well
Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2017-12-15 14:46:48 +07:00
Vincent Petry dfc91a253c Parse Sabre Exception in OC.Files.Client and file-upload
In case of error, instead of a generic error message, an upload will
display whichever message is returned in the Sabre Exception, if
applicable.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2017-11-13 12:19:14 +07:00
Vincent Petry cd8d13b9e6 Enable chunking for bigger files in authenticated web upload
This commit adds chunked uploads in the Web UI (for authenticated users,
but not for public uploads). To do that the server endpoint used by the
uploader is changed from WebDAV v1 to WebDAV v2. The chunking itself is
done automatically by the jQuery-File-Upload plugin when the
"maxChunkSize" parameter is set; in "fileuploadchunksend" the request is
adjusted to adapt the behaviour of the plugin to the one expected by
"uploads/" in WebDAV v2.

The chunk size to be used by the Web UI can be set in the
"max_chunk_size" parameter of the Files app configuration. By default it
is set to 10MiB.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2017-11-03 17:19:23 +07:00