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