diff --git a/CHANGELOG.md b/CHANGELOG.md index 562caf6dd630276a0d1b45553dcd455b90b55814..32873c18f3343d5f230c2e9e73966f9aac7feb4c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ TBD - Resolve additional json being appended to downloaded files ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/902)) ### Tweaks - Add extended debug logging to help troubleshoot MFA issues ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/898)) +- Change upload progress bar to monitor chunk processing ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/896)) ### Lang TBD

diff --git a/app/classes/web/routes/api/crafty/upload/index.py b/app/classes/web/routes/api/crafty/upload/index.py index 67043bbe9dc82561245d3f6150afb1f16864cbba..fe772ac5faf5e4283a9d06bd0c4eb56c3edaf5b0 100644 --- a/app/classes/web/routes/api/crafty/upload/index.py +++ b/app/classes/web/routes/api/crafty/upload/index.py @@ -6,6 +6,7 @@ from PIL import Image from app.classes.models.server_permissions import EnumPermissionsServer from app.classes.helpers.helpers import Helpers from app.classes.web.base_api_handler import BaseApiHandler +from app.classes.web.websocket_handler import WebSocketManager logger = logging.getLogger(__name__) IMAGE_MIME_TYPES = [ @@ -295,6 +296,11 @@ class ApiFilesUploadHandler(BaseApiHandler): if len(received_chunks) == total_chunks: async with await anyio.open_file(file_path, "wb") as outfile: for i in range(total_chunks): + WebSocketManager().broadcast_user( + auth_data[4]["user_id"], + "upload_process", + {"cur_file": i, "total_files": total_chunks, "type": u_type}, + ) chunk_file = os.path.join(self.temp_dir, f"{self.filename}.part{i}") async with await anyio.open_file(chunk_file, "rb") as infile: await outfile.write(await infile.read()) diff --git a/app/frontend/static/assets/js/shared/upload.js b/app/frontend/static/assets/js/shared/upload.js index 15d851826c132138fc187ac3e32b779e3ccc6780..e648cca08ce3886b744f2dd23419c073ed14d4e5 100644 --- a/app/frontend/static/assets/js/shared/upload.js +++ b/app/frontend/static/assets/js/shared/upload.js @@ -223,4 +223,16 @@ function uuidv4() { v = c === 'x' ? r : (r & 0x3 | 0x8); return v.toString(16); }); +} + + +if (webSocket) { + webSocket.on('upload_process', function (data) { + if (data.total_files === data.cur_file) { + updateProgressBar(100, data.type, data.cur_file) + } else { + let progress = Math.round((data.cur_file / data.total_files) * 100, 1); + updateProgressBar(progress, data.type, data.cur_file) + } + }); } \ No newline at end of file