From 88ecfbb5167c3536b21e34d7cb5b11d705d7028a Mon Sep 17 00:00:00 2001 From: ArabCoders Date: Tue, 17 Dec 2024 19:47:12 +0300 Subject: [PATCH] added missing static assets --- Dockerfile | 2 +- app/library/HttpAPI.py | 20 ++++++++++++++++---- ui/components/History.vue | 19 +++++++++++++++++-- ui/components/Queue.vue | 11 ++++++++--- ui/public/favicon.ico | Bin 0 -> 4286 bytes ui/public/images/logo.png | Bin 0 -> 38936 bytes ui/public/images/placeholder.png | Bin 0 -> 6499 bytes 7 files changed, 42 insertions(+), 10 deletions(-) create mode 100644 ui/public/favicon.ico create mode 100644 ui/public/images/logo.png create mode 100644 ui/public/images/placeholder.png diff --git a/Dockerfile b/Dockerfile index 28aa9cf3..823dedee 100644 --- a/Dockerfile +++ b/Dockerfile @@ -44,7 +44,7 @@ COPY entrypoint.sh / RUN sed -i 's/\r$//g' /entrypoint.sh && chmod +x /entrypoint.sh COPY --chown=app:app ./app /app/app -COPY --chown=app:app --from=node_builder /app/exported /app/ui/dist +COPY --chown=app:app --from=node_builder /app/exported /app/ui/exported COPY --chown=app:app --from=python_builder /app/.venv /opt/python COPY --chown=app:app ./healthcheck.sh /usr/local/bin/healthcheck diff --git a/app/library/HttpAPI.py b/app/library/HttpAPI.py index f1a8d2a9..f3c2e16b 100644 --- a/app/library/HttpAPI.py +++ b/app/library/HttpAPI.py @@ -68,7 +68,7 @@ class HttpAPI(common): async def staticFile(self, req: Request) -> Response: """ - Preload static files from the ui/dist folder. + Preload static files from the ui/exported folder. """ path = req.path if req.path not in self.staticHolder: @@ -85,9 +85,14 @@ class HttpAPI(common): def preloadStatic(self, app: web.Application): """ - Preload static files from the ui/dist folder. + Preload static files from the ui/exported folder. """ - staticDir = os.path.join(self.rootPath, 'ui', 'dist') + staticDir = os.path.join(self.rootPath, 'ui', 'exported') + if not os.path.exists(staticDir): + raise ValueError(f"Could not find the frontend UI static assets. '{staticDir}'.") + + preloaded = 0 + for root, _, files in os.walk(staticDir): for file in files: if file.endswith('.map'): @@ -102,6 +107,7 @@ class HttpAPI(common): self.staticHolder[urlPath] = {'content': content, 'content_type': contentType} LOG.debug(f"Preloading '{urlPath}'.") app.router.add_get(urlPath, self.staticFile) + preloaded += 1 if urlPath.endswith('/index.html') and urlPath != '/index.html': parentSlash = urlPath.replace('/index.html', '/') @@ -110,6 +116,12 @@ class HttpAPI(common): self.staticHolder[parentNoSlash] = {'content': content, 'content_type': contentType} app.router.add_get(parentSlash, self.staticFile) app.router.add_get(parentNoSlash, self.staticFile) + preloaded += 2 + + if preloaded < 1: + raise ValueError(f"Could not find the frontend UI static assets. '{staticDir}'.") + + LOG.info(f"Preloaded {preloaded} static files.") def attach(self, app: web.Application): if self.config.auth_username and self.config.auth_password: @@ -149,7 +161,7 @@ class HttpAPI(common): app.add_routes(self.routes) app.on_response_prepare.append(on_prepare) except ValueError as e: - if 'ui/dist' in str(e): + if 'ui/exported' in str(e): raise RuntimeError(f"Could not find the frontend UI static assets. '{e}'.") from e raise e diff --git a/ui/components/History.vue b/ui/components/History.vue index 74f08611..996b15bb 100644 --- a/ui/components/History.vue +++ b/ui/components/History.vue @@ -98,8 +98,8 @@ -
-
+
+
+
+ + +
diff --git a/ui/components/Queue.vue b/ui/components/Queue.vue index 2c88d35b..d4f4df9f 100644 --- a/ui/components/Queue.vue +++ b/ui/components/Queue.vue @@ -42,20 +42,25 @@
{{ item.title }}
-
+
-
-
+
+
+
+ + + +
diff --git a/ui/public/favicon.ico b/ui/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..df36fcfb72584e00488330b560ebcf34a41c64c2 GIT binary patch literal 4286 zcmds*O-Phc6o&64GDVCEQHxsW(p4>LW*W<827=Unuo8sGpRux(DN@jWP-e29Wl%wj zY84_aq9}^Am9-cWTD5GGEo#+5Fi2wX_P*bo+xO!)p*7B;iKlbFd(U~_d(U?#hLj56 zPhFkj-|A6~Qk#@g^#D^U0XT1cu=c-vu1+SElX9NR;kzAUV(q0|dl0|%h|dI$%VICy zJnu2^L*Te9JrJMGh%-P79CL0}dq92RGU6gI{v2~|)p}sG5x0U*z<8U;Ij*hB9z?ei z@g6Xq-pDoPl=MANPiR7%172VA%r)kevtV-_5H*QJKFmd;8yA$98zCxBZYXTNZ#QFk2(TX0;Y2dt&WitL#$96|gJY=3xX zpCoi|YNzgO3R`f@IiEeSmKrPSf#h#Qd<$%Ej^RIeeYfsxhPMOG`S`Pz8q``=511zm zAm)MX5AV^5xIWPyEu7u>qYs?pn$I4nL9J!=K=SGlKLXpE<5x+2cDTXq?brj?n6sp= zphe9;_JHf40^9~}9i08r{XM$7HB!`{Ys~TK0kx<}ZQng`UPvH*11|q7&l9?@FQz;8 zx!=3<4seY*%=OlbCbcae?5^V_}*K>Uo6ZWV8mTyE^B=DKy7-sdLYkR5Z?paTgK-zyIkKjIcpyO z{+uIt&YSa_$QnN_@t~L014dyK(fOOo+W*MIxbA6Ndgr=Y!f#Tokqv}n<7-9qfHkc3 z=>a|HWqcX8fzQCT=dqVbogRq!-S>H%yA{1w#2Pn;=e>JiEj7Hl;zdt-2f+j2%DeVD zsW0Ab)ZK@0cIW%W7z}H{&~yGhn~D;aiP4=;m-HCo`BEI+Kd6 z={Xwx{TKxD#iCLfl2vQGDitKtN>z|-AdCN|$jTFDg0m3O`WLD4_s#$S literal 0 HcmV?d00001 diff --git a/ui/public/images/logo.png b/ui/public/images/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..e277caa27936b823554d7cf447f82a3b225ef436 GIT binary patch literal 38936 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 Q^Bs__p00i_>zopr0DR9n&j0`b literal 0 HcmV?d00001 diff --git a/ui/public/images/placeholder.png b/ui/public/images/placeholder.png new file mode 100644 index 0000000000000000000000000000000000000000..ac6601712bd266daa6096e7324bb9ef697e2ca7b GIT binary patch literal 6499 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 b6X2KdzbAaD9z*^6f8oXzJF8j?kF@^)lkDA> literal 0 HcmV?d00001