From 9bd99b5e2348de24180807c6edde9f3c0b54aa8b Mon Sep 17 00:00:00 2001 From: htdguide <115078044+htdguide@users.noreply.github.com> Date: Thu, 6 Mar 2025 00:01:38 +1300 Subject: [PATCH 1/6] Updated dependencies --- package-lock.json | 19 ++++++------------- package.json | 1 + 2 files changed, 7 insertions(+), 13 deletions(-) diff --git a/package-lock.json b/package-lock.json index 863d5d25..56f850cf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "webport", - "version": "0.2.0", + "version": "0.2.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "webport", - "version": "0.2.0", + "version": "0.2.1", "dependencies": { "framer-motion": "^12.4.7", "jsmediatags": "^3.9.7", @@ -15,6 +15,7 @@ }, "devDependencies": { "@eslint/js": "^9.17.0", + "@testing-library/dom": "^10.4.0", "@testing-library/jest-dom": "^6.6.3", "@testing-library/react": "^16.2.0", "@testing-library/user-event": "^14.6.1", @@ -1554,7 +1555,6 @@ "integrity": "sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/code-frame": "^7.10.4", "@babel/runtime": "^7.12.5", @@ -1658,8 +1658,7 @@ "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/@types/babel__core": { "version": "7.20.5", @@ -1937,7 +1936,6 @@ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=8" } @@ -2624,8 +2622,7 @@ "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/dunder-proto": { "version": "1.0.1", @@ -4328,7 +4325,6 @@ "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", "dev": true, "license": "MIT", - "peer": true, "bin": { "lz-string": "bin/bin.js" } @@ -4768,7 +4764,6 @@ "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "ansi-regex": "^5.0.1", "ansi-styles": "^5.0.0", @@ -4784,7 +4779,6 @@ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=10" }, @@ -4847,8 +4841,7 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/react-refresh": { "version": "0.14.2", diff --git a/package.json b/package.json index ece3f463..9a8292dd 100644 --- a/package.json +++ b/package.json @@ -18,6 +18,7 @@ }, "devDependencies": { "@eslint/js": "^9.17.0", + "@testing-library/dom": "^10.4.0", "@testing-library/jest-dom": "^6.6.3", "@testing-library/react": "^16.2.0", "@testing-library/user-event": "^14.6.1", From b405f888c3ed869efb4a0d2ba5479b1b18e28c3b Mon Sep 17 00:00:00 2001 From: Nikita Mogilevskii <115078044+htdguide@users.noreply.github.com> Date: Thu, 6 Mar 2025 00:09:56 +1300 Subject: [PATCH 2/6] Update docker-image.yml --- .github/workflows/docker-image.yml | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/.github/workflows/docker-image.yml b/.github/workflows/docker-image.yml index 9ada2beb..55f8621c 100644 --- a/.github/workflows/docker-image.yml +++ b/.github/workflows/docker-image.yml @@ -6,8 +6,8 @@ on: - main jobs: - build: - name: Push Docker Image to Docker Hub and Deploy to Server + test: + name: Run Vitest runs-on: ubuntu-latest steps: - name: Check out repository @@ -18,10 +18,19 @@ jobs: with: node-version: 18 - - name: Install Dependencies and Run Vitest - run: | - npm install --legacy-peer-deps - npm run test + - name: Install Dependencies + run: npm install --legacy-peer-deps + + - name: Run Tests + run: npm run test + + build-deploy: + name: Build and Deploy Docker Image to Server + runs-on: ubuntu-latest + needs: test # This ensures the build only runs if tests pass + steps: + - name: Check out repository + uses: actions/checkout@v2 - name: Login to Docker Hub id: docker-hub From 43376ad8bc84729406cd17f3d5802ff44c02338a Mon Sep 17 00:00:00 2001 From: htdguide <115078044+htdguide@users.noreply.github.com> Date: Thu, 6 Mar 2025 00:28:50 +1300 Subject: [PATCH 3/6] iOS sound level adjustment fix --- .../ControlCentreMiniApp.css | 15 +- .../MusicControl/MusicControl.css | 2 +- .../MusicControl/MusicControl.jsx | 7 +- src/services/MusicService/MusicService.jsx | 669 +++++++++++------- 4 files changed, 419 insertions(+), 274 deletions(-) diff --git a/src/miniapps/ControlCentreMiniApp/ControlCentreMiniApp.css b/src/miniapps/ControlCentreMiniApp/ControlCentreMiniApp.css index 7e722078..821c16fa 100644 --- a/src/miniapps/ControlCentreMiniApp/ControlCentreMiniApp.css +++ b/src/miniapps/ControlCentreMiniApp/ControlCentreMiniApp.css @@ -7,7 +7,15 @@ width: 280px; /* Semi-translucent white with blur, to mimic macOS style */ background: rgba(255, 255, 255, 0.5); + + /* Ensures the blur effect works in Safari */ + -webkit-backdrop-filter: blur(16px); backdrop-filter: blur(16px); + + /* Prevents artefacts in Safari */ + -webkit-background-clip: padding-box; + background-clip: padding-box; + margin-top: 6px; padding-left: 10px; padding-right: 10px; @@ -23,7 +31,12 @@ /* Each “segment” or “card” in the control center */ .cc-segment { - backdrop-filter: blur(1px); + background: rgba(255, 255, 255, 0.5); + + /* Clip the background to avoid artefacts */ + -webkit-background-clip: padding-box; + background-clip: padding-box; + border-radius: 12px; padding: 12px 16px; margin-top: 10px; diff --git a/src/miniapps/ControlCentreMiniApp/ControlCentreWidgets/MusicControl/MusicControl.css b/src/miniapps/ControlCentreMiniApp/ControlCentreWidgets/MusicControl/MusicControl.css index 54c55dfd..a3faafe6 100644 --- a/src/miniapps/ControlCentreMiniApp/ControlCentreWidgets/MusicControl/MusicControl.css +++ b/src/miniapps/ControlCentreMiniApp/ControlCentreWidgets/MusicControl/MusicControl.css @@ -30,7 +30,7 @@ .song-title-container { overflow: hidden; white-space: nowrap; - margin-top: -7px; + margin-top: -6px; margin-left: 2px; } diff --git a/src/miniapps/ControlCentreMiniApp/ControlCentreWidgets/MusicControl/MusicControl.jsx b/src/miniapps/ControlCentreMiniApp/ControlCentreWidgets/MusicControl/MusicControl.jsx index 5b69af57..7a11bbc7 100644 --- a/src/miniapps/ControlCentreMiniApp/ControlCentreWidgets/MusicControl/MusicControl.jsx +++ b/src/miniapps/ControlCentreMiniApp/ControlCentreWidgets/MusicControl/MusicControl.jsx @@ -36,11 +36,12 @@ function MusicControl() { #888 80%)` }; - // Convert seconds to mm:ss + // Convert seconds to mm:ss, cutting off milliseconds const formatTime = (secs) => { if (!secs || secs < 0) secs = 0; - const minutes = Math.floor(secs / 60); - const seconds = secs % 60; + const totalSeconds = Math.floor(secs); // <-- Truncate decimal part + const minutes = Math.floor(totalSeconds / 60); + const seconds = totalSeconds % 60; return `${String(minutes).padStart(2, '0')}:${String(seconds).padStart(2, '0')}`; }; diff --git a/src/services/MusicService/MusicService.jsx b/src/services/MusicService/MusicService.jsx index 8625df15..b93e1ee6 100644 --- a/src/services/MusicService/MusicService.jsx +++ b/src/services/MusicService/MusicService.jsx @@ -1,283 +1,414 @@ // MusicService.jsx import React, { - createContext, - useContext, - useRef, - useState, - useEffect, - useCallback, - } from 'react'; - - // Import jsmediatags from the UMD build to avoid Vite dep-scan issues - import jsmediatags from 'jsmediatags/dist/jsmediatags.min.js'; - - // Import our config - import musicServiceConfig from '../../configs/MusicServiceConfig/MusicServiceConfig'; - - // Create the context - const MusicServiceContext = createContext(null); - - // Custom hook - export function useMusicService() { - return useContext(MusicServiceContext); - } - - export function MusicServiceProvider({ children }) { - // We'll store the loaded list of MP3 "entries" from the JSON. - const [musicList, setMusicList] = useState([]); - - // The