From 5d12111a2852027ccbb26449e38f3ccc1fcd171a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 4 Nov 2025 15:59:57 +0000 Subject: [PATCH 01/25] Bump beercss from 3.12.11 to 3.12.13 in /materialious Bumps [beercss](https://github.com/beercss/beercss) from 3.12.11 to 3.12.13. - [Release notes](https://github.com/beercss/beercss/releases) - [Commits](https://github.com/beercss/beercss/compare/v3.12.11...v3.12.13) --- updated-dependencies: - dependency-name: beercss dependency-version: 3.12.13 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- materialious/package-lock.json | 12 ++++++------ materialious/package.json | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/materialious/package-lock.json b/materialious/package-lock.json index 97446ac4..30cbe566 100644 --- a/materialious/package-lock.json +++ b/materialious/package-lock.json @@ -1,12 +1,12 @@ { "name": "materialious", - "version": "1.11.0", + "version": "1.11.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "materialious", - "version": "1.11.0", + "version": "1.11.2", "hasInstallScript": true, "dependencies": { "@capacitor-community/electron": "^5.0.1", @@ -17,7 +17,7 @@ "@capacitor/clipboard": "^7.0.0", "@capacitor/core": "^7.4.3", "@capacitor/screen-orientation": "^7.0.0", - "beercss": "^3.12.11", + "beercss": "^3.12.13", "bgutils-js": "^3.2.0", "capacitor-nodejs": "https://github.com/hampoelz/capacitor-nodejs/releases/download/v1.0.0-beta.9/capacitor-nodejs.tgz", "dayjs": "^1.11.19", @@ -4294,9 +4294,9 @@ } }, "node_modules/beercss": { - "version": "3.12.11", - "resolved": "https://registry.npmjs.org/beercss/-/beercss-3.12.11.tgz", - "integrity": "sha512-9NQWL3kxSOb5RPWAV5BPVs64CS72F5Z4HgxusqD07Ho4asaTJB33/SkJBMclQeUQs7hFH2CJOgGgDnIsRk2RyQ==", + "version": "3.12.13", + "resolved": "https://registry.npmjs.org/beercss/-/beercss-3.12.13.tgz", + "integrity": "sha512-zsg15us8pSLTupIOzFFJqpJ7eJDLV6whsxT6GcRYGnYaF0ka45+HQ/u3+ldSUkCeyA5J24g6csEuMW8tqrI/0w==", "license": "MIT", "dependencies": { "material-dynamic-colors": "^1.1.2" diff --git a/materialious/package.json b/materialious/package.json index d4be42b9..984eeb0d 100644 --- a/materialious/package.json +++ b/materialious/package.json @@ -50,7 +50,7 @@ "@capacitor/clipboard": "^7.0.0", "@capacitor/core": "^7.4.3", "@capacitor/screen-orientation": "^7.0.0", - "beercss": "^3.12.11", + "beercss": "^3.12.13", "bgutils-js": "^3.2.0", "capacitor-nodejs": "https://github.com/hampoelz/capacitor-nodejs/releases/download/v1.0.0-beta.9/capacitor-nodejs.tgz", "dayjs": "^1.11.19", From 416595132e3c2d712e83060a8e9f81f2df0a7d12 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 4 Nov 2025 15:59:57 +0000 Subject: [PATCH 02/25] Bump tmp and patch-package in /materialious Bumps [tmp](https://github.com/raszi/node-tmp) to 0.2.5 and updates ancestor dependency [patch-package](https://github.com/ds300/patch-package). These dependencies need to be updated together. Updates `tmp` from 0.2.3 to 0.2.5 - [Changelog](https://github.com/raszi/node-tmp/blob/master/CHANGELOG.md) - [Commits](https://github.com/raszi/node-tmp/compare/v0.2.3...v0.2.5) Updates `patch-package` from 8.0.0 to 8.0.1 - [Release notes](https://github.com/ds300/patch-package/releases) - [Changelog](https://github.com/ds300/patch-package/blob/master/CHANGELOG.md) - [Commits](https://github.com/ds300/patch-package/commits) --- updated-dependencies: - dependency-name: tmp dependency-version: 0.2.5 dependency-type: indirect - dependency-name: patch-package dependency-version: 8.0.1 dependency-type: direct:development ... Signed-off-by: dependabot[bot] --- materialious/package-lock.json | 115 +++++---------------------------- materialious/package.json | 2 +- 2 files changed, 16 insertions(+), 101 deletions(-) diff --git a/materialious/package-lock.json b/materialious/package-lock.json index 97446ac4..025b8442 100644 --- a/materialious/package-lock.json +++ b/materialious/package-lock.json @@ -1,12 +1,12 @@ { "name": "materialious", - "version": "1.11.0", + "version": "1.11.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "materialious", - "version": "1.11.0", + "version": "1.11.2", "hasInstallScript": true, "dependencies": { "@capacitor-community/electron": "^5.0.1", @@ -56,7 +56,7 @@ "eslint": "^8.56.0", "eslint-config-prettier": "^10.1.8", "eslint-plugin-svelte": "^3.11.0", - "patch-package": "^8.0.0", + "patch-package": "^8.0.1", "prettier": "^3.6.2", "prettier-plugin-svelte": "^3.4.0", "svelte": "^5.43.2", @@ -9159,16 +9159,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/own-keys": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", @@ -9279,9 +9269,9 @@ } }, "node_modules/patch-package": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/patch-package/-/patch-package-8.0.0.tgz", - "integrity": "sha512-da8BVIhzjtgScwDJ2TtKsfT5JFWz1hYoBl9rUQ1f38MC2HwnEIkK8VN3dKMKcP7P7bvvgzNDbfNHtx3MsQb5vA==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/patch-package/-/patch-package-8.0.1.tgz", + "integrity": "sha512-VsKRIA8f5uqHQ7NGhwIna6Bx6D9s/1iXlA1hthBVBEbkq+t4kXD0HHt+rJhf/Z+Ci0F/HCB2hvn0qLdLG+Qxlw==", "dev": true, "license": "MIT", "dependencies": { @@ -9290,15 +9280,14 @@ "ci-info": "^3.7.0", "cross-spawn": "^7.0.3", "find-yarn-workspace-root": "^2.0.0", - "fs-extra": "^9.0.0", + "fs-extra": "^10.0.0", "json-stable-stringify": "^1.0.2", "klaw-sync": "^6.0.0", "minimist": "^1.2.6", "open": "^7.4.2", - "rimraf": "^2.6.3", "semver": "^7.5.3", "slash": "^2.0.0", - "tmp": "^0.0.33", + "tmp": "^0.2.4", "yaml": "^2.2.2" }, "bin": { @@ -9309,66 +9298,19 @@ "npm": ">5" } }, - "node_modules/patch-package/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, "node_modules/patch-package/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dev": true, "license": "MIT", "dependencies": { - "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" }, "engines": { - "node": ">=10" - } - }, - "node_modules/patch-package/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/patch-package/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" + "node": ">=12" } }, "node_modules/patch-package/node_modules/open": { @@ -9388,20 +9330,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/patch-package/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, "node_modules/patch-package/node_modules/slash": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", @@ -9412,19 +9340,6 @@ "node": ">=6" } }, - "node_modules/patch-package/node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "license": "MIT", - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" - } - }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -12025,9 +11940,9 @@ } }, "node_modules/tmp": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", - "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz", + "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==", "dev": true, "license": "MIT", "engines": { diff --git a/materialious/package.json b/materialious/package.json index d4be42b9..4425e7a3 100644 --- a/materialious/package.json +++ b/materialious/package.json @@ -31,7 +31,7 @@ "eslint": "^8.56.0", "eslint-config-prettier": "^10.1.8", "eslint-plugin-svelte": "^3.11.0", - "patch-package": "^8.0.0", + "patch-package": "^8.0.1", "prettier": "^3.6.2", "prettier-plugin-svelte": "^3.4.0", "svelte": "^5.43.2", From 8749de5a80673e369d651b4325219cd416d002dd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 4 Nov 2025 16:00:02 +0000 Subject: [PATCH 03/25] Bump @sveltejs/vite-plugin-svelte from 6.1.4 to 6.2.1 in /materialious Bumps [@sveltejs/vite-plugin-svelte](https://github.com/sveltejs/vite-plugin-svelte/tree/HEAD/packages/vite-plugin-svelte) from 6.1.4 to 6.2.1. - [Release notes](https://github.com/sveltejs/vite-plugin-svelte/releases) - [Changelog](https://github.com/sveltejs/vite-plugin-svelte/blob/main/packages/vite-plugin-svelte/CHANGELOG.md) - [Commits](https://github.com/sveltejs/vite-plugin-svelte/commits/@sveltejs/vite-plugin-svelte@6.2.1/packages/vite-plugin-svelte) --- updated-dependencies: - dependency-name: "@sveltejs/vite-plugin-svelte" dependency-version: 6.2.1 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- materialious/package-lock.json | 12 ++++++------ materialious/package.json | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/materialious/package-lock.json b/materialious/package-lock.json index 97446ac4..4dc41cb5 100644 --- a/materialious/package-lock.json +++ b/materialious/package-lock.json @@ -1,12 +1,12 @@ { "name": "materialious", - "version": "1.11.0", + "version": "1.11.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "materialious", - "version": "1.11.0", + "version": "1.11.2", "hasInstallScript": true, "dependencies": { "@capacitor-community/electron": "^5.0.1", @@ -44,7 +44,7 @@ "@sveltejs/adapter-auto": "^6.0.1", "@sveltejs/adapter-static": "^3.0.8", "@sveltejs/kit": "^2.46.5", - "@sveltejs/vite-plugin-svelte": "^6.1.4", + "@sveltejs/vite-plugin-svelte": "^6.2.1", "@types/eslint": "^8.56.7", "@types/event-source-polyfill": "^1.0.5", "@types/he": "^1.2.3", @@ -3298,9 +3298,9 @@ } }, "node_modules/@sveltejs/vite-plugin-svelte": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-6.1.4.tgz", - "integrity": "sha512-4jfkfvsGI+U2OhHX8OPCKtMCf7g7ledXhs3E6UcA4EY0jQWsiVbe83pTAHp9XTifzYNOiD4AJieJUsI0qqxsbw==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-6.2.1.tgz", + "integrity": "sha512-YZs/OSKOQAQCnJvM/P+F1URotNnYNeU3P2s4oIpzm1uFaqUEqRxUB0g5ejMjEb5Gjb9/PiBI5Ktrq4rUUF8UVQ==", "dev": true, "license": "MIT", "dependencies": { diff --git a/materialious/package.json b/materialious/package.json index d4be42b9..39e96927 100644 --- a/materialious/package.json +++ b/materialious/package.json @@ -19,7 +19,7 @@ "@sveltejs/adapter-auto": "^6.0.1", "@sveltejs/adapter-static": "^3.0.8", "@sveltejs/kit": "^2.46.5", - "@sveltejs/vite-plugin-svelte": "^6.1.4", + "@sveltejs/vite-plugin-svelte": "^6.2.1", "@types/eslint": "^8.56.7", "@types/event-source-polyfill": "^1.0.5", "@types/he": "^1.2.3", From 52227068415d57788f8c904fc50c35bb0dc06fa5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 4 Nov 2025 16:00:04 +0000 Subject: [PATCH 04/25] Bump @sveltejs/adapter-static from 3.0.8 to 3.0.10 in /materialious Bumps [@sveltejs/adapter-static](https://github.com/sveltejs/kit/tree/HEAD/packages/adapter-static) from 3.0.8 to 3.0.10. - [Release notes](https://github.com/sveltejs/kit/releases) - [Changelog](https://github.com/sveltejs/kit/blob/main/packages/adapter-static/CHANGELOG.md) - [Commits](https://github.com/sveltejs/kit/commits/@sveltejs/adapter-static@3.0.10/packages/adapter-static) --- updated-dependencies: - dependency-name: "@sveltejs/adapter-static" dependency-version: 3.0.10 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- materialious/package-lock.json | 12 ++++++------ materialious/package.json | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/materialious/package-lock.json b/materialious/package-lock.json index 97446ac4..afa916d7 100644 --- a/materialious/package-lock.json +++ b/materialious/package-lock.json @@ -1,12 +1,12 @@ { "name": "materialious", - "version": "1.11.0", + "version": "1.11.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "materialious", - "version": "1.11.0", + "version": "1.11.2", "hasInstallScript": true, "dependencies": { "@capacitor-community/electron": "^5.0.1", @@ -42,7 +42,7 @@ "@capacitor/assets": "^3.0.5", "@capacitor/cli": "^7.4.3", "@sveltejs/adapter-auto": "^6.0.1", - "@sveltejs/adapter-static": "^3.0.8", + "@sveltejs/adapter-static": "^3.0.10", "@sveltejs/kit": "^2.46.5", "@sveltejs/vite-plugin-svelte": "^6.1.4", "@types/eslint": "^8.56.7", @@ -3249,9 +3249,9 @@ } }, "node_modules/@sveltejs/adapter-static": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@sveltejs/adapter-static/-/adapter-static-3.0.8.tgz", - "integrity": "sha512-YaDrquRpZwfcXbnlDsSrBQNCChVOT9MGuSg+dMAyfsAa1SmiAhrA5jUYUiIMC59G92kIbY/AaQOWcBdq+lh+zg==", + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@sveltejs/adapter-static/-/adapter-static-3.0.10.tgz", + "integrity": "sha512-7D9lYFWJmB7zxZyTE/qxjksvMqzMuYrrsyh1f4AlZqeZeACPRySjbC3aFiY55wb1tWUaKOQG9PVbm74JcN2Iew==", "dev": true, "license": "MIT", "peerDependencies": { diff --git a/materialious/package.json b/materialious/package.json index d4be42b9..36ec2cd5 100644 --- a/materialious/package.json +++ b/materialious/package.json @@ -17,7 +17,7 @@ "@capacitor/assets": "^3.0.5", "@capacitor/cli": "^7.4.3", "@sveltejs/adapter-auto": "^6.0.1", - "@sveltejs/adapter-static": "^3.0.8", + "@sveltejs/adapter-static": "^3.0.10", "@sveltejs/kit": "^2.46.5", "@sveltejs/vite-plugin-svelte": "^6.1.4", "@types/eslint": "^8.56.7", From a18f25dda4604a569577a4fab932c1be17ce3986 Mon Sep 17 00:00:00 2001 From: Lenny Angst Date: Tue, 4 Nov 2025 16:49:46 +0000 Subject: [PATCH 05/25] Translated using Weblate (English) Currently translated at 100.0% (167 of 167 strings) Translation: Materialious/Materialious Translate-URL: https://toolate.othing.xyz/projects/materialious/materialious/en/ --- materialious/src/lib/i18n/locales/en.json | 394 +++++++++++----------- 1 file changed, 197 insertions(+), 197 deletions(-) diff --git a/materialious/src/lib/i18n/locales/en.json b/materialious/src/lib/i18n/locales/en.json index 51de37fa..ce1e62f0 100644 --- a/materialious/src/lib/i18n/locales/en.json +++ b/materialious/src/lib/i18n/locales/en.json @@ -1,199 +1,199 @@ { - "enabled": "Enabled", - "disabled": "Disabled", - "popularPageDisabled": "Popular page has been disabled by Admins", - "premium": "Premium YouTube content can't be watched on Materialious.", - "copyUrl": "Copy URL", - "loadMore": "Load more", - "views": "views", - "login": "Login", - "recommendedVideos": "Recommended Videos", - "playlistVideos": "Playlist Videos", - "invidiousLogin": "Please log in with your Invidious account", - "invalidInstance": "Please verify the URL. If it's correct, the instance may be down or may not support third-party clients.", - "invidiousBlockWarning": "Invidious is currently being blocked by Google. If videos aren't loading for this instance, please use this instance on Materialious on {android} or {desktop} to get around this with local video fallback.", - "videos": "videos", - "cancel": "Cancel", - "create": "Create", - "filters": { - "filters": "Filters", - "type": "Type", - "uploadDate": "Upload date", - "duration": "Duration", - "sortBy": "Short By", - "features": "Features" - }, - "title": "Title", - "searchPlaceholder": "Search", - "delete": "Delete", - "donate": "Donate", - "deleteAllHistory": "Delete all history", - "skipping": "Skipping", - "comments": "comments", - "reply": "reply", - "replies": "replies", - "region": "Region", - "contributors": "Contributors", - "noResult": "No results", - "version": "Version", - "language": "Language", - "channels": "channels", - "transcript": "Transcript", - "noCaptionData": "Captions don't have any data.", - "selectLang": "Select language", - "letterCase": "Letter case for titles", - "hideReplies": "Hide replies", - "hideVideo": "Hide video", - "defaultPage": "Default page", - "syncParty": { - "userJoined": "User joined your watch party.", - "userLeft": "User left your watch party.", - "userOnPrivatePage": "User currently viewing a private page, syncing will resume shorty." - }, - "videoTabs": { - "all": "All", - "videos": "Videos", - "playlists": "Playlists", - "channels": "Channels", - "shorts": "Shorts", - "streams": "Streams" - }, - "subscriptions": { - "manageSubscriptions": "Manage subscriptions" - }, - "playlist": { - "createPlaylist": "Create playlist", - "public": "Public", - "unlisted": "Unlisted", - "private": "Private", - "playVideos": "Play videos", - "shuffleVideos": "Play videos shuffled", - "loopPlaylist": "Loop playlist", - "next": "Next", - "previous": "Previous" - }, - "thumbnail": { - "live": "LIVE", - "failedToLoadImage": "Failed to load image" - }, - "pages": { - "home": "Home", - "trending": "Trending", - "subscriptions": "Subscriptions", - "history": "History", - "playlists": "Playlists" - }, - "subscribers": "subscribers", - "unsubscribe": "Unsubscribe", - "loginRequired": "Login required", - "player": { - "audioOnly": "Audio only", - "theatreMode": "Theatre mode", - "pauseTimer": "Pause timer", - "pauseVideoIn": "Pause video in ", - "preferredQuality": "Preferred quality", - "premiere": "Video will be available", - "chapters": "Chapters", - "share": { - "title": "Share", - "materialiousLink": "Copy Materialious link", - "invidiousRedirect": "Copy Invidious redirect link", - "youtubeLink": "Copy Youtube link", - "includeTimestamp": "Timestamped" - }, - "download": "Download", - "downloadSteps": { - "merging": "Merging video & audio together", - "video": "Downloading video", - "audio": "Downloading audio", - "ffmpeg": "Downloading ffmpeg library & components", - "classWorker": "Downloading ffmpeg class worker", - "core": "Downloading ffmpeg core", - "wasm": "Downloading ffmpeg wasm", - "worker": "Downloading ffmpeg worker" - }, - "noPlaylists": "No playlists", - "unableToLoadComments": "Unable to load comments", - "addToPlaylist": "Add to playlist", - "youtubeJsFallBack": "Local video fallback being used", - "defaultLanguage": "Default Language", - "youtubeJsLoading": "Video failed to load, attempting to reload with local video fallback.", - "retryText": "Video failed to load, how would you like to continue?", - "enableYoutubejsTemp": "Use local video fallback once", - "enableYoutubejsPerm": "Always allow local video fallback" - }, - "layout": { - "interface": "Interface", - "star": "Star us on Github!", - "syncParty": "Sync party", - "about": "About", - "syncPartyWarning": "Please note your IP will be visible to users you invite.", - "startSyncParty": "Start sync party", - "endSyncParty": "End sync party", - "notifications": "Notifications", - "noNewNotifications": "No new notifications here", - "settings": "Settings", - "login": "Login", - "logout": "Logout", - "customize": "Customize", - "lowBandwidthMode": "Low bandwidth mode", - "displayThumbnailAvatars": "Thumbnail avatars (Slow)", - "searchHistory": "Search history", - "companionUrl": "Companion URL", - "theme": { - "theme": "Theme", - "darkMode": "Dark mode", - "lightMode": "Light mode", - "AmoledTheme": "Amoled theme", - "color": "Color" - }, - "searchSuggestions": "Search suggestions", - "previewVideoOnHover": "Preview video on hover", - "expandDescription": "Expand description by default", - "expandChapters": "Expand chapters by default", - "expandComments": "Expand comments by default", - "allowInsecureRequests": "Allow insecure requests", - "disableAutoUpdate": "Disable automatic updates", - "player": { - "title": "Player", - "autoPlay": "Autoplay video", - "alwaysLoopVideo": "Always loop video", - "savePlaybackPosition": "Save playback position", - "listenByDefault": "Listen by default", - "ccByDefault": "Subtitles on by default", - "theatreModeByDefault": "Theatre mode by default", - "autoPlayNextByDefault": "Autoplay next by default", - "miniPlayer": "Mini player", - "proxyVideos": "Proxy videos", - "backgroundPlay": "Play audio in background", - "dash": "Dash", - "silenceSkipper": "Silence skipper (Experimental)", - "localVideoFallback": "Local video fallback", - "youtubeJsFallback": "Local video processing fallback", - "youtubeJsAlways": "Always use", - "lockOrientation": "Orientation locked to aspect ratio", - "defaultPlaybackSpeed": "Default playback speed", - "playerStatistics": "Show player statistics by default" - }, - "bookmarklet": "Bookmarklet", - "instanceUrl": "Instance URL", - "sponsors": { - "sponsor": "Sponsor", - "disableToast": "Disable toast", - "disableTimeline": "Disable segments on timeline", - "Catagories": "Categories", - "unpaidSelfPromotion": "Unpaid/Self Promotion", - "interactionReminder": "Interaction Reminder (Subscribe)", - "intermissionIntroAnimation": "Intermission/Intro Animation", - "credits": "Endcards/Credits", - "preViewRecapHook": "Preview/Recap/Hook", - "tangentJokes": "Filler Tangent/Jokes" - }, - "deArrow": { - "title": "DeArrow", - "thumbnailInstanceUrl": "Thumbnail instance URL", - "titleOnly": "Title only" - } - }, - "subscribe": "Subscribe" + "enabled": "Enabled", + "disabled": "Disabled", + "popularPageDisabled": "Popular page has been disabled by Admins", + "premium": "Premium YouTube content can't be watched on Materialious.", + "copyUrl": "Copy URL", + "loadMore": "Load more", + "views": "views", + "login": "Login", + "recommendedVideos": "Recommended Videos", + "playlistVideos": "Playlist Videos", + "invidiousLogin": "Please log in with your Invidious account", + "invalidInstance": "Please verify the URL. If it's correct, the instance may be down or may not support third-party clients.", + "invidiousBlockWarning": "Invidious is currently being blocked by Google. If videos aren't loading for this instance, please use this instance on Materialious on {android} or {desktop} to get around this with local video fallback.", + "videos": "videos", + "cancel": "Cancel", + "create": "Create", + "filters": { + "filters": "Filters", + "type": "Type", + "uploadDate": "Upload date", + "duration": "Duration", + "sortBy": "Sort By", + "features": "Features" + }, + "title": "Title", + "searchPlaceholder": "Search", + "delete": "Delete", + "donate": "Donate", + "deleteAllHistory": "Delete all history", + "skipping": "Skipping", + "comments": "comments", + "reply": "reply", + "replies": "replies", + "region": "Region", + "contributors": "Contributors", + "noResult": "No results", + "version": "Version", + "language": "Language", + "channels": "channels", + "transcript": "Transcript", + "noCaptionData": "Captions don't have any data.", + "selectLang": "Select language", + "letterCase": "Letter case for titles", + "hideReplies": "Hide replies", + "hideVideo": "Hide video", + "defaultPage": "Default page", + "syncParty": { + "userJoined": "User joined your watch party.", + "userLeft": "User left your watch party.", + "userOnPrivatePage": "User currently viewing a private page, syncing will resume shorty." + }, + "videoTabs": { + "all": "All", + "videos": "Videos", + "playlists": "Playlists", + "channels": "Channels", + "shorts": "Shorts", + "streams": "Streams" + }, + "subscriptions": { + "manageSubscriptions": "Manage subscriptions" + }, + "playlist": { + "createPlaylist": "Create playlist", + "public": "Public", + "unlisted": "Unlisted", + "private": "Private", + "playVideos": "Play videos", + "shuffleVideos": "Play videos shuffled", + "loopPlaylist": "Loop playlist", + "next": "Next", + "previous": "Previous" + }, + "thumbnail": { + "live": "LIVE", + "failedToLoadImage": "Failed to load image" + }, + "pages": { + "home": "Home", + "trending": "Trending", + "subscriptions": "Subscriptions", + "history": "History", + "playlists": "Playlists" + }, + "subscribers": "subscribers", + "unsubscribe": "Unsubscribe", + "loginRequired": "Login required", + "player": { + "audioOnly": "Audio only", + "theatreMode": "Theatre mode", + "pauseTimer": "Pause timer", + "pauseVideoIn": "Pause video in ", + "preferredQuality": "Preferred quality", + "premiere": "Video will be available", + "chapters": "Chapters", + "share": { + "title": "Share", + "materialiousLink": "Copy Materialious link", + "invidiousRedirect": "Copy Invidious redirect link", + "youtubeLink": "Copy Youtube link", + "includeTimestamp": "Timestamped" + }, + "download": "Download", + "downloadSteps": { + "merging": "Merging video & audio together", + "video": "Downloading video", + "audio": "Downloading audio", + "ffmpeg": "Downloading ffmpeg library & components", + "classWorker": "Downloading ffmpeg class worker", + "core": "Downloading ffmpeg core", + "wasm": "Downloading ffmpeg wasm", + "worker": "Downloading ffmpeg worker" + }, + "noPlaylists": "No playlists", + "unableToLoadComments": "Unable to load comments", + "addToPlaylist": "Add to playlist", + "youtubeJsFallBack": "Local video fallback being used", + "defaultLanguage": "Default Language", + "youtubeJsLoading": "Video failed to load, attempting to reload with local video fallback.", + "retryText": "Video failed to load, how would you like to continue?", + "enableYoutubejsTemp": "Use local video fallback once", + "enableYoutubejsPerm": "Always allow local video fallback" + }, + "layout": { + "interface": "Interface", + "star": "Star us on Github!", + "syncParty": "Sync party", + "about": "About", + "syncPartyWarning": "Please note your IP will be visible to users you invite.", + "startSyncParty": "Start sync party", + "endSyncParty": "End sync party", + "notifications": "Notifications", + "noNewNotifications": "No new notifications here", + "settings": "Settings", + "login": "Login", + "logout": "Logout", + "customize": "Customize", + "lowBandwidthMode": "Low bandwidth mode", + "displayThumbnailAvatars": "Thumbnail avatars (Slow)", + "searchHistory": "Search history", + "companionUrl": "Companion URL", + "theme": { + "theme": "Theme", + "darkMode": "Dark mode", + "lightMode": "Light mode", + "AmoledTheme": "Amoled theme", + "color": "Color" + }, + "searchSuggestions": "Search suggestions", + "previewVideoOnHover": "Preview video on hover", + "expandDescription": "Expand description by default", + "expandChapters": "Expand chapters by default", + "expandComments": "Expand comments by default", + "allowInsecureRequests": "Allow insecure requests", + "disableAutoUpdate": "Disable automatic updates", + "player": { + "title": "Player", + "autoPlay": "Autoplay video", + "alwaysLoopVideo": "Always loop video", + "savePlaybackPosition": "Save playback position", + "listenByDefault": "Listen by default", + "ccByDefault": "Subtitles on by default", + "theatreModeByDefault": "Theatre mode by default", + "autoPlayNextByDefault": "Autoplay next by default", + "miniPlayer": "Mini player", + "proxyVideos": "Proxy videos", + "backgroundPlay": "Play audio in background", + "dash": "Dash", + "silenceSkipper": "Silence skipper (Experimental)", + "localVideoFallback": "Local video fallback", + "youtubeJsFallback": "Local video processing fallback", + "youtubeJsAlways": "Always use", + "lockOrientation": "Orientation locked to aspect ratio", + "defaultPlaybackSpeed": "Default playback speed", + "playerStatistics": "Show player statistics by default" + }, + "bookmarklet": "Bookmarklet", + "instanceUrl": "Instance URL", + "sponsors": { + "sponsor": "Sponsor", + "disableToast": "Disable toast", + "disableTimeline": "Disable segments on timeline", + "Catagories": "Categories", + "unpaidSelfPromotion": "Unpaid/Self Promotion", + "interactionReminder": "Interaction Reminder (Subscribe)", + "intermissionIntroAnimation": "Intermission/Intro Animation", + "credits": "Endcards/Credits", + "preViewRecapHook": "Preview/Recap/Hook", + "tangentJokes": "Filler Tangent/Jokes" + }, + "deArrow": { + "title": "DeArrow", + "thumbnailInstanceUrl": "Thumbnail instance URL", + "titleOnly": "Title only" + } + }, + "subscribe": "Subscribe" } From d2b58e4c05abe25e710ca23b2f1348869aa7807b Mon Sep 17 00:00:00 2001 From: Lenny Angst Date: Tue, 4 Nov 2025 16:53:16 +0000 Subject: [PATCH 06/25] Translated using Weblate (German) Currently translated at 100.0% (167 of 167 strings) Translation: Materialious/Materialious Translate-URL: https://toolate.othing.xyz/projects/materialious/materialious/de/ --- materialious/src/lib/i18n/locales/de.json | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/materialious/src/lib/i18n/locales/de.json b/materialious/src/lib/i18n/locales/de.json index 67a53402..cddd42ee 100644 --- a/materialious/src/lib/i18n/locales/de.json +++ b/materialious/src/lib/i18n/locales/de.json @@ -49,7 +49,9 @@ "private": "Privat", "playVideos": "Videos abspielen", "shuffleVideos": "Videos in zufälliger Reihenfolge abspielen", - "loopPlaylist": "Wiedergabeliste in Schleife abspielen" + "loopPlaylist": "Wiedergabeliste in Schleife abspielen", + "next": "Weiter", + "previous": "Vorheriges" }, "thumbnail": { "live": "LIVE", @@ -98,7 +100,8 @@ "enableYoutubejsTemp": "Nutze einmalig den lokalen Video-Fallback", "chapters": "Kapitel", "retryText": "Das Video konnte nicht geladen werden, wie möchtest du weiterfahren?", - "youtubeJsLoading": "Das Video konnte nicht geladen werden, es wird mit lokalem Video-Fallback erneut versucht." + "youtubeJsLoading": "Das Video konnte nicht geladen werden, es wird mit lokalem Video-Fallback erneut versucht.", + "premiere": "Video wird verfügbar sein" }, "layout": { "interface": "Benutzeroberfläche", @@ -188,5 +191,14 @@ "premium": "YouTube-Premium-Inhalte können auf Materialious nicht angeschaut werden.", "isUpcoming": "Video ist noch nicht in einem anschaubaren Zustand.", "version": "Version", - "contributors": "Mitwirkende" + "contributors": "Mitwirkende", + "popularPageDisabled": "Die Seite „Populär“ wurde von den Administratoren deaktiviert", + "filters": { + "filters": "Filter", + "type": "Typ", + "uploadDate": "Hochladedatum", + "duration": "Dauer", + "sortBy": "Sortieren nach", + "features": "Eigenschaften" + } } From 1ebd210776fbb05aaaf0bebc5d417ca8e560d67e Mon Sep 17 00:00:00 2001 From: Lenny Angst Date: Tue, 4 Nov 2025 16:54:36 +0000 Subject: [PATCH 07/25] Translated using Weblate (Alemannic) Currently translated at 100.0% (167 of 167 strings) Translation: Materialious/Materialious Translate-URL: https://toolate.othing.xyz/projects/materialious/materialious/gsw/ --- materialious/src/lib/i18n/locales/gsw.json | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/materialious/src/lib/i18n/locales/gsw.json b/materialious/src/lib/i18n/locales/gsw.json index 99a9582c..15f512a8 100644 --- a/materialious/src/lib/i18n/locales/gsw.json +++ b/materialious/src/lib/i18n/locales/gsw.json @@ -135,7 +135,9 @@ "private": "Privat", "playVideos": "Videos abspiele", "loopPlaylist": "Widergabelischte inere Schleife abspiele", - "shuffleVideos": "Videos in zuefälliger Reihefolg abspiele" + "shuffleVideos": "Videos in zuefälliger Reihefolg abspiele", + "next": "Wiiter", + "previous": "Vorherigs" }, "pages": { "home": "Startsiite", @@ -179,7 +181,8 @@ "retryText": "S Video het nöd chönne glade werde, wie willsch wiitermache?", "enableYoutubejsPerm": "Lokale Video-Fallback immer erlaube", "enableYoutubejsTemp": "Nutz eimalig de lokali Video-Fallback", - "youtubeJsFallBack": "Lokale Video-Fallback wird gnutzt" + "youtubeJsFallBack": "Lokale Video-Fallback wird gnutzt", + "premiere": "Video wird verfüegbar sii" }, "subscribe": "Abonniere", "invidiousLogin": "Bitte meld dich mit dim Invidious-Konto aa", @@ -188,5 +191,14 @@ "isUpcoming": "Video isch nonig imene aaluegbare Zuestand.", "premium": "YouTube-Premium-Inhält chönd uf Materialious nonig aagluegt werde.", "version": "Version", - "contributors": "Mitwirkendi" + "contributors": "Mitwirkendi", + "popularPageDisabled": "D Siite «Populär» isch vo de Administratore deaktiviert worde", + "filters": { + "filters": "Filter", + "type": "Typ", + "uploadDate": "Hochladedatum", + "duration": "Duur", + "sortBy": "Sortiere nach", + "features": "Eigeschafte" + } } From cd0c1e120eb539c6b00390ad027d4e47cc2df0d9 Mon Sep 17 00:00:00 2001 From: WardPearce Date: Fri, 7 Nov 2025 13:20:17 +1300 Subject: [PATCH 08/25] Bump version --- materialious/android/app/build.gradle | 4 ++-- materialious/electron/materialious.metainfo.xml | 6 +++++- materialious/electron/package.json | 2 +- materialious/package.json | 2 +- materialious/src/lib/components/Player.svelte | 2 +- update_versions.py | 2 +- 6 files changed, 11 insertions(+), 7 deletions(-) diff --git a/materialious/android/app/build.gradle b/materialious/android/app/build.gradle index 10167ee9..bbb7472e 100644 --- a/materialious/android/app/build.gradle +++ b/materialious/android/app/build.gradle @@ -7,8 +7,8 @@ android { applicationId "us.materialio.app" minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion - versionCode 162 - versionName "1.11.2" + versionCode 163 + versionName "1.11.3" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" aaptOptions { // Files and dirs to omit from the packaged assets dir, modified to accommodate modern web apps. diff --git a/materialious/electron/materialious.metainfo.xml b/materialious/electron/materialious.metainfo.xml index 141006f3..b76c4b6f 100644 --- a/materialious/electron/materialious.metainfo.xml +++ b/materialious/electron/materialious.metainfo.xml @@ -72,7 +72,11 @@ - + + + https://github.com/Materialious/Materialious/releases/tag/1.11.3 + + https://github.com/Materialious/Materialious/releases/tag/1.11.2 diff --git a/materialious/electron/package.json b/materialious/electron/package.json index b55c6f18..5c88c59c 100644 --- a/materialious/electron/package.json +++ b/materialious/electron/package.json @@ -1,6 +1,6 @@ { "name": "Materialious", - "version": "1.11.2", + "version": "1.11.3", "description": "Modern material design for Invidious.", "author": { "name": "Ward Pearce", diff --git a/materialious/package.json b/materialious/package.json index d4be42b9..946cd92f 100644 --- a/materialious/package.json +++ b/materialious/package.json @@ -1,6 +1,6 @@ { "name": "materialious", - "version": "1.11.2", + "version": "1.11.3", "private": true, "scripts": { "dev": "vite dev", diff --git a/materialious/src/lib/components/Player.svelte b/materialious/src/lib/components/Player.svelte index bddfba86..bb2c8a21 100644 --- a/materialious/src/lib/components/Player.svelte +++ b/materialious/src/lib/components/Player.svelte @@ -18,7 +18,7 @@ import { _ } from '$lib/i18n'; import { get } from 'svelte/store'; import { deleteVideoProgress, getVideoProgress, saveVideoProgress } from '../api'; - import type { PlaylistPageVideo, VideoPlay } from '../api/model'; + import type { VideoPlay } from '../api/model'; import { authStore, darkModeStore, diff --git a/update_versions.py b/update_versions.py index 6cf8998d..51d9074d 100644 --- a/update_versions.py +++ b/update_versions.py @@ -3,7 +3,7 @@ import os import re from datetime import datetime -LATEST_VERSION = "1.11.2" +LATEST_VERSION = "1.11.3" RELEASE_DATE = datetime.now().strftime("%Y-%-m-%d") # Format: YYYY-M-D WORKING_DIR = os.path.join(os.path.dirname(os.path.realpath(__file__)), "materialious") From 24fcd0f1d770926f7c4c748c1bf722295b596e91 Mon Sep 17 00:00:00 2001 From: WardPearce Date: Fri, 7 Nov 2025 13:24:33 +1300 Subject: [PATCH 09/25] Bump version --- materialious/electron/package-lock.json | 14 ++------------ materialious/package-lock.json | 4 ++-- 2 files changed, 4 insertions(+), 14 deletions(-) diff --git a/materialious/electron/package-lock.json b/materialious/electron/package-lock.json index 0626e891..74559b7c 100644 --- a/materialious/electron/package-lock.json +++ b/materialious/electron/package-lock.json @@ -1,17 +1,16 @@ { "name": "Materialious", - "version": "1.11.2", + "version": "1.11.3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "Materialious", - "version": "1.11.2", + "version": "1.11.3", "license": "MIT", "dependencies": { "@capacitor-community/electron": "^5.0.0", "bgutils-js": "^3.2.0", - "capacitor-nodejs": "https://github.com/hampoelz/capacitor-nodejs/releases/download/v1.0.0-beta.9/capacitor-nodejs.tgz", "chokidar": "~4.0.3", "electron-is-dev": "~2.0.0", "electron-serve": "~3.0.0", @@ -1863,15 +1862,6 @@ "node": ">= 0.4" } }, - "node_modules/capacitor-nodejs": { - "version": "1.0.0-beta.9", - "resolved": "https://github.com/hampoelz/capacitor-nodejs/releases/download/v1.0.0-beta.9/capacitor-nodejs.tgz", - "integrity": "sha512-4EU/QBolfuyHiMtwd1nxZ4wsK243tGE4VttKvVBG+x1yQuK9EIlEf3lbRjFXfjrJMTZNCqaP6glmdfj9Zo7KVg==", - "license": "MIT", - "peerDependencies": { - "@capacitor/core": ">=7.0.0" - } - }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", diff --git a/materialious/package-lock.json b/materialious/package-lock.json index 5cb2bd2f..cc45d50a 100644 --- a/materialious/package-lock.json +++ b/materialious/package-lock.json @@ -1,12 +1,12 @@ { "name": "materialious", - "version": "1.11.2", + "version": "1.11.3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "materialious", - "version": "1.11.2", + "version": "1.11.3", "hasInstallScript": true, "dependencies": { "@capacitor-community/electron": "^5.0.1", From 44126a3c78e1a1bbc0eb94604931bcfa5f4aa56d Mon Sep 17 00:00:00 2001 From: WardPearce Date: Fri, 7 Nov 2025 13:33:12 +1300 Subject: [PATCH 10/25] Remove TV loading store --- materialious/electron/package-lock.json | 10 ++++++++++ materialious/electron/package.json | 3 ++- materialious/electron/src/rt/electron-plugins.js | 2 ++ materialious/src/lib/components/Player.svelte | 1 - materialious/src/lib/store.ts | 1 - .../src/routes/(no-layout)/tv/[slug]/+layout.svelte | 3 +-- materialious/src/routes/(no-layout)/tv/[slug]/+page.ts | 6 +----- 7 files changed, 16 insertions(+), 10 deletions(-) diff --git a/materialious/electron/package-lock.json b/materialious/electron/package-lock.json index 74559b7c..57285d6d 100644 --- a/materialious/electron/package-lock.json +++ b/materialious/electron/package-lock.json @@ -11,6 +11,7 @@ "dependencies": { "@capacitor-community/electron": "^5.0.0", "bgutils-js": "^3.2.0", + "capacitor-nodejs": "https://github.com/hampoelz/capacitor-nodejs/releases/download/v1.0.0-beta.9/capacitor-nodejs.tgz", "chokidar": "~4.0.3", "electron-is-dev": "~2.0.0", "electron-serve": "~3.0.0", @@ -1862,6 +1863,15 @@ "node": ">= 0.4" } }, + "node_modules/capacitor-nodejs": { + "version": "1.0.0-beta.9", + "resolved": "https://github.com/hampoelz/capacitor-nodejs/releases/download/v1.0.0-beta.9/capacitor-nodejs.tgz", + "integrity": "sha512-4EU/QBolfuyHiMtwd1nxZ4wsK243tGE4VttKvVBG+x1yQuK9EIlEf3lbRjFXfjrJMTZNCqaP6glmdfj9Zo7KVg==", + "license": "MIT", + "peerDependencies": { + "@capacitor/core": ">=7.0.0" + } + }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", diff --git a/materialious/electron/package.json b/materialious/electron/package.json index 5c88c59c..997c1e78 100644 --- a/materialious/electron/package.json +++ b/materialious/electron/package.json @@ -24,6 +24,7 @@ "dependencies": { "@capacitor-community/electron": "^5.0.0", "bgutils-js": "^3.2.0", + "capacitor-nodejs": "https://github.com/hampoelz/capacitor-nodejs/releases/download/v1.0.0-beta.9/capacitor-nodejs.tgz", "chokidar": "~4.0.3", "electron-is-dev": "~2.0.0", "electron-serve": "~3.0.0", @@ -43,4 +44,4 @@ "capacitor", "electron" ] -} \ No newline at end of file +} diff --git a/materialious/electron/src/rt/electron-plugins.js b/materialious/electron/src/rt/electron-plugins.js index b33b2826..5f312366 100644 --- a/materialious/electron/src/rt/electron-plugins.js +++ b/materialious/electron/src/rt/electron-plugins.js @@ -1,4 +1,6 @@ /* eslint-disable @typescript-eslint/no-var-requires */ +const CapacitorNodejs = require('../../../node_modules/capacitor-nodejs/electron/dist/plugin.js'); module.exports = { + CapacitorNodejs, } \ No newline at end of file diff --git a/materialious/src/lib/components/Player.svelte b/materialious/src/lib/components/Player.svelte index bb2c8a21..70c7f408 100644 --- a/materialious/src/lib/components/Player.svelte +++ b/materialious/src/lib/components/Player.svelte @@ -352,7 +352,6 @@ } if (data.video.captions) { - console.log(data.video.captions); for (const caption of data.video.captions) { let captionUrl: string; if (!import.meta.env.VITE_DEFAULT_COMPANION_INSTANCE) { diff --git a/materialious/src/lib/store.ts b/materialious/src/lib/store.ts index 8251c800..3cf5f309 100644 --- a/materialious/src/lib/store.ts +++ b/materialious/src/lib/store.ts @@ -146,4 +146,3 @@ export const playlistCacheStore: Writable<{ }> = writable({}); export const isAndroidTvStore: Writable = writable(false); -export const isTvRouteLoading: Writable = writable(false); diff --git a/materialious/src/routes/(no-layout)/tv/[slug]/+layout.svelte b/materialious/src/routes/(no-layout)/tv/[slug]/+layout.svelte index 675a39d7..b78a5686 100644 --- a/materialious/src/routes/(no-layout)/tv/[slug]/+layout.svelte +++ b/materialious/src/routes/(no-layout)/tv/[slug]/+layout.svelte @@ -1,7 +1,6 @@ @@ -15,7 +14,7 @@ -{#if $isTvRouteLoading || $navigating} +{#if $navigating} {:else} {@render children?.()} diff --git a/materialious/src/routes/(no-layout)/tv/[slug]/+page.ts b/materialious/src/routes/(no-layout)/tv/[slug]/+page.ts index 57c51522..05e9da2e 100644 --- a/materialious/src/routes/(no-layout)/tv/[slug]/+page.ts +++ b/materialious/src/routes/(no-layout)/tv/[slug]/+page.ts @@ -1,9 +1,5 @@ -import { isTvRouteLoading } from '$lib/store'; import { getWatchDetails } from '$lib/watch'; export async function load({ params, url }) { - isTvRouteLoading.set(true); - const details = await getWatchDetails(params.slug, url); - isTvRouteLoading.set(false); - return details; + return await getWatchDetails(params.slug, url); } From 562f7fec248382cc0088405d4289e215b1e4b496 Mon Sep 17 00:00:00 2001 From: WardPearce Date: Fri, 7 Nov 2025 13:52:23 +1300 Subject: [PATCH 11/25] Channel sorting options --- materialious/src/lib/api/index.ts | 8 +- .../lib/components/PlaylistThumbnail.svelte | 3 - materialious/src/lib/i18n/locales/en.json | 397 +++++++++--------- .../routes/(app)/channel/[slug]/+page.svelte | 43 +- 4 files changed, 244 insertions(+), 207 deletions(-) diff --git a/materialious/src/lib/api/index.ts b/materialious/src/lib/api/index.ts index 6a3e1705..a4288366 100644 --- a/materialious/src/lib/api/index.ts +++ b/materialious/src/lib/api/index.ts @@ -145,11 +145,15 @@ export async function getChannel( return await resp.json(); } +export type channelSortBy = 'oldest' | 'newest' | 'popular'; +export type channelContentTypes = 'videos' | 'playlists' | 'streams' | 'shorts'; + export async function getChannelContent( channelId: string, parameters: { - type?: 'videos' | 'playlists' | 'streams' | 'shorts'; + type?: channelContentTypes; continuation?: string; + sortBy?: channelSortBy; }, fetchOptions?: RequestInit ): Promise { @@ -160,6 +164,8 @@ export async function getChannelContent( if (typeof parameters.continuation !== 'undefined') url.searchParams.set('continuation', parameters.continuation); + if (typeof parameters.sortBy !== 'undefined') url.searchParams.set('sort_by', parameters.sortBy); + const resp = await fetchErrorHandle(await fetch(url.toString(), fetchOptions)); return await resp.json(); } diff --git a/materialious/src/lib/components/PlaylistThumbnail.svelte b/materialious/src/lib/components/PlaylistThumbnail.svelte index 712c585c..6b57ce8f 100644 --- a/materialious/src/lib/components/PlaylistThumbnail.svelte +++ b/materialious/src/lib/components/PlaylistThumbnail.svelte @@ -25,9 +25,6 @@ if (get(interfaceLowBandwidthMode)) return; let imgSrc = ''; - - console.log(playlist); - if (playlist.videos.length > 0) { imgSrc = getBestThumbnail(playlist.videos[0].videoThumbnails) || ''; } else if (playlist.playlistThumbnail.length > 0) { diff --git a/materialious/src/lib/i18n/locales/en.json b/materialious/src/lib/i18n/locales/en.json index ce1e62f0..9511049b 100644 --- a/materialious/src/lib/i18n/locales/en.json +++ b/materialious/src/lib/i18n/locales/en.json @@ -1,199 +1,202 @@ { - "enabled": "Enabled", - "disabled": "Disabled", - "popularPageDisabled": "Popular page has been disabled by Admins", - "premium": "Premium YouTube content can't be watched on Materialious.", - "copyUrl": "Copy URL", - "loadMore": "Load more", - "views": "views", - "login": "Login", - "recommendedVideos": "Recommended Videos", - "playlistVideos": "Playlist Videos", - "invidiousLogin": "Please log in with your Invidious account", - "invalidInstance": "Please verify the URL. If it's correct, the instance may be down or may not support third-party clients.", - "invidiousBlockWarning": "Invidious is currently being blocked by Google. If videos aren't loading for this instance, please use this instance on Materialious on {android} or {desktop} to get around this with local video fallback.", - "videos": "videos", - "cancel": "Cancel", - "create": "Create", - "filters": { - "filters": "Filters", - "type": "Type", - "uploadDate": "Upload date", - "duration": "Duration", - "sortBy": "Sort By", - "features": "Features" - }, - "title": "Title", - "searchPlaceholder": "Search", - "delete": "Delete", - "donate": "Donate", - "deleteAllHistory": "Delete all history", - "skipping": "Skipping", - "comments": "comments", - "reply": "reply", - "replies": "replies", - "region": "Region", - "contributors": "Contributors", - "noResult": "No results", - "version": "Version", - "language": "Language", - "channels": "channels", - "transcript": "Transcript", - "noCaptionData": "Captions don't have any data.", - "selectLang": "Select language", - "letterCase": "Letter case for titles", - "hideReplies": "Hide replies", - "hideVideo": "Hide video", - "defaultPage": "Default page", - "syncParty": { - "userJoined": "User joined your watch party.", - "userLeft": "User left your watch party.", - "userOnPrivatePage": "User currently viewing a private page, syncing will resume shorty." - }, - "videoTabs": { - "all": "All", - "videos": "Videos", - "playlists": "Playlists", - "channels": "Channels", - "shorts": "Shorts", - "streams": "Streams" - }, - "subscriptions": { - "manageSubscriptions": "Manage subscriptions" - }, - "playlist": { - "createPlaylist": "Create playlist", - "public": "Public", - "unlisted": "Unlisted", - "private": "Private", - "playVideos": "Play videos", - "shuffleVideos": "Play videos shuffled", - "loopPlaylist": "Loop playlist", - "next": "Next", - "previous": "Previous" - }, - "thumbnail": { - "live": "LIVE", - "failedToLoadImage": "Failed to load image" - }, - "pages": { - "home": "Home", - "trending": "Trending", - "subscriptions": "Subscriptions", - "history": "History", - "playlists": "Playlists" - }, - "subscribers": "subscribers", - "unsubscribe": "Unsubscribe", - "loginRequired": "Login required", - "player": { - "audioOnly": "Audio only", - "theatreMode": "Theatre mode", - "pauseTimer": "Pause timer", - "pauseVideoIn": "Pause video in ", - "preferredQuality": "Preferred quality", - "premiere": "Video will be available", - "chapters": "Chapters", - "share": { - "title": "Share", - "materialiousLink": "Copy Materialious link", - "invidiousRedirect": "Copy Invidious redirect link", - "youtubeLink": "Copy Youtube link", - "includeTimestamp": "Timestamped" - }, - "download": "Download", - "downloadSteps": { - "merging": "Merging video & audio together", - "video": "Downloading video", - "audio": "Downloading audio", - "ffmpeg": "Downloading ffmpeg library & components", - "classWorker": "Downloading ffmpeg class worker", - "core": "Downloading ffmpeg core", - "wasm": "Downloading ffmpeg wasm", - "worker": "Downloading ffmpeg worker" - }, - "noPlaylists": "No playlists", - "unableToLoadComments": "Unable to load comments", - "addToPlaylist": "Add to playlist", - "youtubeJsFallBack": "Local video fallback being used", - "defaultLanguage": "Default Language", - "youtubeJsLoading": "Video failed to load, attempting to reload with local video fallback.", - "retryText": "Video failed to load, how would you like to continue?", - "enableYoutubejsTemp": "Use local video fallback once", - "enableYoutubejsPerm": "Always allow local video fallback" - }, - "layout": { - "interface": "Interface", - "star": "Star us on Github!", - "syncParty": "Sync party", - "about": "About", - "syncPartyWarning": "Please note your IP will be visible to users you invite.", - "startSyncParty": "Start sync party", - "endSyncParty": "End sync party", - "notifications": "Notifications", - "noNewNotifications": "No new notifications here", - "settings": "Settings", - "login": "Login", - "logout": "Logout", - "customize": "Customize", - "lowBandwidthMode": "Low bandwidth mode", - "displayThumbnailAvatars": "Thumbnail avatars (Slow)", - "searchHistory": "Search history", - "companionUrl": "Companion URL", - "theme": { - "theme": "Theme", - "darkMode": "Dark mode", - "lightMode": "Light mode", - "AmoledTheme": "Amoled theme", - "color": "Color" - }, - "searchSuggestions": "Search suggestions", - "previewVideoOnHover": "Preview video on hover", - "expandDescription": "Expand description by default", - "expandChapters": "Expand chapters by default", - "expandComments": "Expand comments by default", - "allowInsecureRequests": "Allow insecure requests", - "disableAutoUpdate": "Disable automatic updates", - "player": { - "title": "Player", - "autoPlay": "Autoplay video", - "alwaysLoopVideo": "Always loop video", - "savePlaybackPosition": "Save playback position", - "listenByDefault": "Listen by default", - "ccByDefault": "Subtitles on by default", - "theatreModeByDefault": "Theatre mode by default", - "autoPlayNextByDefault": "Autoplay next by default", - "miniPlayer": "Mini player", - "proxyVideos": "Proxy videos", - "backgroundPlay": "Play audio in background", - "dash": "Dash", - "silenceSkipper": "Silence skipper (Experimental)", - "localVideoFallback": "Local video fallback", - "youtubeJsFallback": "Local video processing fallback", - "youtubeJsAlways": "Always use", - "lockOrientation": "Orientation locked to aspect ratio", - "defaultPlaybackSpeed": "Default playback speed", - "playerStatistics": "Show player statistics by default" - }, - "bookmarklet": "Bookmarklet", - "instanceUrl": "Instance URL", - "sponsors": { - "sponsor": "Sponsor", - "disableToast": "Disable toast", - "disableTimeline": "Disable segments on timeline", - "Catagories": "Categories", - "unpaidSelfPromotion": "Unpaid/Self Promotion", - "interactionReminder": "Interaction Reminder (Subscribe)", - "intermissionIntroAnimation": "Intermission/Intro Animation", - "credits": "Endcards/Credits", - "preViewRecapHook": "Preview/Recap/Hook", - "tangentJokes": "Filler Tangent/Jokes" - }, - "deArrow": { - "title": "DeArrow", - "thumbnailInstanceUrl": "Thumbnail instance URL", - "titleOnly": "Title only" - } - }, - "subscribe": "Subscribe" + "enabled": "Enabled", + "disabled": "Disabled", + "popularPageDisabled": "Popular page has been disabled by Admins", + "premium": "Premium YouTube content can't be watched on Materialious.", + "copyUrl": "Copy URL", + "loadMore": "Load more", + "views": "views", + "login": "Login", + "recommendedVideos": "Recommended Videos", + "playlistVideos": "Playlist Videos", + "invidiousLogin": "Please log in with your Invidious account", + "invalidInstance": "Please verify the URL. If it's correct, the instance may be down or may not support third-party clients.", + "invidiousBlockWarning": "Invidious is currently being blocked by Google. If videos aren't loading for this instance, please use this instance on Materialious on {android} or {desktop} to get around this with local video fallback.", + "videos": "videos", + "cancel": "Cancel", + "create": "Create", + "filters": { + "filters": "Filters", + "type": "Type", + "uploadDate": "Upload date", + "duration": "Duration", + "sortBy": "Sort By", + "features": "Features" + }, + "title": "Title", + "searchPlaceholder": "Search", + "delete": "Delete", + "donate": "Donate", + "deleteAllHistory": "Delete all history", + "skipping": "Skipping", + "comments": "comments", + "reply": "reply", + "replies": "replies", + "region": "Region", + "contributors": "Contributors", + "noResult": "No results", + "version": "Version", + "language": "Language", + "channels": "channels", + "transcript": "Transcript", + "noCaptionData": "Captions don't have any data.", + "selectLang": "Select language", + "letterCase": "Letter case for titles", + "hideReplies": "Hide replies", + "hideVideo": "Hide video", + "defaultPage": "Default page", + "newest": "Newest", + "oldest": "Oldest", + "popular": "Popular", + "syncParty": { + "userJoined": "User joined your watch party.", + "userLeft": "User left your watch party.", + "userOnPrivatePage": "User currently viewing a private page, syncing will resume shorty." + }, + "videoTabs": { + "all": "All", + "videos": "Videos", + "playlists": "Playlists", + "channels": "Channels", + "shorts": "Shorts", + "streams": "Streams" + }, + "subscriptions": { + "manageSubscriptions": "Manage subscriptions" + }, + "playlist": { + "createPlaylist": "Create playlist", + "public": "Public", + "unlisted": "Unlisted", + "private": "Private", + "playVideos": "Play videos", + "shuffleVideos": "Play videos shuffled", + "loopPlaylist": "Loop playlist", + "next": "Next", + "previous": "Previous" + }, + "thumbnail": { + "live": "LIVE", + "failedToLoadImage": "Failed to load image" + }, + "pages": { + "home": "Home", + "trending": "Trending", + "subscriptions": "Subscriptions", + "history": "History", + "playlists": "Playlists" + }, + "subscribers": "subscribers", + "unsubscribe": "Unsubscribe", + "loginRequired": "Login required", + "player": { + "audioOnly": "Audio only", + "theatreMode": "Theatre mode", + "pauseTimer": "Pause timer", + "pauseVideoIn": "Pause video in ", + "preferredQuality": "Preferred quality", + "premiere": "Video will be available", + "chapters": "Chapters", + "share": { + "title": "Share", + "materialiousLink": "Copy Materialious link", + "invidiousRedirect": "Copy Invidious redirect link", + "youtubeLink": "Copy Youtube link", + "includeTimestamp": "Timestamped" + }, + "download": "Download", + "downloadSteps": { + "merging": "Merging video & audio together", + "video": "Downloading video", + "audio": "Downloading audio", + "ffmpeg": "Downloading ffmpeg library & components", + "classWorker": "Downloading ffmpeg class worker", + "core": "Downloading ffmpeg core", + "wasm": "Downloading ffmpeg wasm", + "worker": "Downloading ffmpeg worker" + }, + "noPlaylists": "No playlists", + "unableToLoadComments": "Unable to load comments", + "addToPlaylist": "Add to playlist", + "youtubeJsFallBack": "Local video fallback being used", + "defaultLanguage": "Default Language", + "youtubeJsLoading": "Video failed to load, attempting to reload with local video fallback.", + "retryText": "Video failed to load, how would you like to continue?", + "enableYoutubejsTemp": "Use local video fallback once", + "enableYoutubejsPerm": "Always allow local video fallback" + }, + "layout": { + "interface": "Interface", + "star": "Star us on Github!", + "syncParty": "Sync party", + "about": "About", + "syncPartyWarning": "Please note your IP will be visible to users you invite.", + "startSyncParty": "Start sync party", + "endSyncParty": "End sync party", + "notifications": "Notifications", + "noNewNotifications": "No new notifications here", + "settings": "Settings", + "login": "Login", + "logout": "Logout", + "customize": "Customize", + "lowBandwidthMode": "Low bandwidth mode", + "displayThumbnailAvatars": "Thumbnail avatars (Slow)", + "searchHistory": "Search history", + "companionUrl": "Companion URL", + "theme": { + "theme": "Theme", + "darkMode": "Dark mode", + "lightMode": "Light mode", + "AmoledTheme": "Amoled theme", + "color": "Color" + }, + "searchSuggestions": "Search suggestions", + "previewVideoOnHover": "Preview video on hover", + "expandDescription": "Expand description by default", + "expandChapters": "Expand chapters by default", + "expandComments": "Expand comments by default", + "allowInsecureRequests": "Allow insecure requests", + "disableAutoUpdate": "Disable automatic updates", + "player": { + "title": "Player", + "autoPlay": "Autoplay video", + "alwaysLoopVideo": "Always loop video", + "savePlaybackPosition": "Save playback position", + "listenByDefault": "Listen by default", + "ccByDefault": "Subtitles on by default", + "theatreModeByDefault": "Theatre mode by default", + "autoPlayNextByDefault": "Autoplay next by default", + "miniPlayer": "Mini player", + "proxyVideos": "Proxy videos", + "backgroundPlay": "Play audio in background", + "dash": "Dash", + "silenceSkipper": "Silence skipper (Experimental)", + "localVideoFallback": "Local video fallback", + "youtubeJsFallback": "Local video processing fallback", + "youtubeJsAlways": "Always use", + "lockOrientation": "Orientation locked to aspect ratio", + "defaultPlaybackSpeed": "Default playback speed", + "playerStatistics": "Show player statistics by default" + }, + "bookmarklet": "Bookmarklet", + "instanceUrl": "Instance URL", + "sponsors": { + "sponsor": "Sponsor", + "disableToast": "Disable toast", + "disableTimeline": "Disable segments on timeline", + "Catagories": "Categories", + "unpaidSelfPromotion": "Unpaid/Self Promotion", + "interactionReminder": "Interaction Reminder (Subscribe)", + "intermissionIntroAnimation": "Intermission/Intro Animation", + "credits": "Endcards/Credits", + "preViewRecapHook": "Preview/Recap/Hook", + "tangentJokes": "Filler Tangent/Jokes" + }, + "deArrow": { + "title": "DeArrow", + "thumbnailInstanceUrl": "Thumbnail instance URL", + "titleOnly": "Title only" + } + }, + "subscribe": "Subscribe" } diff --git a/materialious/src/routes/(app)/channel/[slug]/+page.svelte b/materialious/src/routes/(app)/channel/[slug]/+page.svelte index 0e3868d3..3100978c 100644 --- a/materialious/src/routes/(app)/channel/[slug]/+page.svelte +++ b/materialious/src/routes/(app)/channel/[slug]/+page.svelte @@ -1,9 +1,14 @@ @@ -383,6 +403,23 @@
+ {#if $playerState} +
+ {#if playerIsPip} + +
+ {/if} + {#key $playerState.data.video.videoId} + + {/key} +
+ {/if} + {#if $navigating} {:else} @@ -425,4 +462,17 @@ min-inline-size: 0.5rem; padding: 0; } + + .pip { + position: fixed; + bottom: 10px; + right: 0; + width: 400px; + z-index: 99999; + padding: 1em; + border: 0.0625rem solid var(--outline-variant); + background-color: var(--surface-container-low); + color: var(--on-surface); + border-radius: 0.75rem; + } diff --git a/materialious/src/routes/(app)/watch/[slug]/+page.svelte b/materialious/src/routes/(app)/watch/[slug]/+page.svelte index 48d19c7c..437f0de3 100644 --- a/materialious/src/routes/(app)/watch/[slug]/+page.svelte +++ b/materialious/src/routes/(app)/watch/[slug]/+page.svelte @@ -6,7 +6,6 @@ removePlaylistVideo } from '$lib/api/index'; import type { Comments, PlaylistPage } from '$lib/api/model'; - import Player from '$lib/components/Player.svelte'; import ShareVideo from '$lib/components/ShareVideo.svelte'; import Thumbnail from '$lib/components/Thumbnail.svelte'; import Transcript from '$lib/components/Transcript.svelte'; @@ -19,6 +18,7 @@ interfaceAutoExpandChapters, interfaceAutoExpandComments, playerPlaylistHistory, + playerState, playerTheatreModeByDefaultStore, playlistCacheStore, playlistSettingsStore, @@ -27,7 +27,6 @@ } from '$lib/store'; import ui from 'beercss'; import type { DataConnection } from 'peerjs'; - import { type Segment } from 'sponsorblock-api'; import { onDestroy, onMount, tick } from 'svelte'; import { _ } from '$lib/i18n'; import { get } from 'svelte/store'; @@ -70,6 +69,15 @@ let premiereTime = $state(''); let premiereUpdateInterval: NodeJS.Timeout; + playerState.set({ + data: data, + isSyncing: $syncPartyPeerStore !== null + }); + + playerState.subscribe((updatedPlayerState) => { + playerElement = updatedPlayerState?.playerElement; + }); + $effect(() => { if ($interfaceAutoExpandComments && comments) { expandSummery('comment-section'); @@ -342,11 +350,7 @@
- {#if !data.video.premiereTimestamp} - {#key data.video.videoId} - - {/key} - {:else} + {#if data.video.premiereTimestamp}

{$_('player.premiere')}

From 35ee2a80471c915190f28451d5018bada8980d47 Mon Sep 17 00:00:00 2001 From: WardPearce Date: Fri, 7 Nov 2025 15:23:06 +1300 Subject: [PATCH 15/25] Include author in pip --- .../src/lib/components/watch/Author.svelte | 45 ++++++++++--------- materialious/src/routes/(app)/+layout.svelte | 5 +++ 2 files changed, 30 insertions(+), 20 deletions(-) diff --git a/materialious/src/lib/components/watch/Author.svelte b/materialious/src/lib/components/watch/Author.svelte index 5b822426..f84badaf 100644 --- a/materialious/src/lib/components/watch/Author.svelte +++ b/materialious/src/lib/components/watch/Author.svelte @@ -6,8 +6,11 @@ import { authStore, interfaceLowBandwidthMode, isAndroidTvStore } from '$lib/store'; import { _ } from '$lib/i18n'; - let { video, subscribed = $bindable(false) }: { video: VideoPlay; subscribed?: boolean } = - $props(); + let { + video, + subscribed = $bindable(false), + hideSubscribe = false + }: { video: VideoPlay; subscribed?: boolean; hideSubscribe?: boolean } = $props(); async function toggleSubscribed() { if (subscribed) { @@ -39,24 +42,26 @@
- {#if $authStore} - + {:else} + - {:else} - +
+ {$_('loginRequired')} +
+ + {/if} {/if} diff --git a/materialious/src/routes/(app)/+layout.svelte b/materialious/src/routes/(app)/+layout.svelte index 6eeaeeef..252673a5 100644 --- a/materialious/src/routes/(app)/+layout.svelte +++ b/materialious/src/routes/(app)/+layout.svelte @@ -43,6 +43,8 @@ import { pwaInfo } from 'virtual:pwa-info'; import Mousetrap from 'mousetrap'; import { truncate } from '$lib/misc'; + import Author from '$lib/components/watch/Author.svelte'; + import LikesDislikes from '$lib/components/watch/LikesDislikes.svelte'; let { children } = $props(); @@ -417,6 +419,9 @@ {#key $playerState.data.video.videoId} {/key} + {#if playerIsPip} + + {/if}
{/if} From fc0dec833b8a675cb6f7ce341727c36613b78e66 Mon Sep 17 00:00:00 2001 From: WardPearce Date: Fri, 7 Nov 2025 16:06:33 +1300 Subject: [PATCH 16/25] More improvements to player positioning on watch page --- materialious/src/lib/components/Player.svelte | 14 ++++++ materialious/src/lib/css/global.css | 4 ++ materialious/src/lib/watch.ts | 16 +++++-- materialious/src/routes/(app)/+layout.svelte | 45 ++++++++++++------- .../routes/(app)/watch/[slug]/+page.svelte | 13 +++++- 5 files changed, 71 insertions(+), 21 deletions(-) diff --git a/materialious/src/lib/components/Player.svelte b/materialious/src/lib/components/Player.svelte index fe17fe28..820bcda7 100644 --- a/materialious/src/lib/components/Player.svelte +++ b/materialious/src/lib/components/Player.svelte @@ -458,6 +458,20 @@ }); playerElement = document.getElementById('player') as HTMLMediaElement; + // Due to how our player is rendered in layout for stateful pip + // we calaculate player height to then allow children pages + // to wrap around it. + function updateVideoPlayerHeight() { + const container = document.getElementById('shaka-container') as HTMLElement; + + if (container) { + const height = container.getBoundingClientRect().height; + document.documentElement.style.setProperty('--video-player-height', `${height}px`); + } + } + window.addEventListener('resize', updateVideoPlayerHeight); + updateVideoPlayerHeight(); + // Change instantly to stop video from being loud for a second restoreVolumePreference(); diff --git a/materialious/src/lib/css/global.css b/materialious/src/lib/css/global.css index 481ecaca..17589e02 100644 --- a/materialious/src/lib/css/global.css +++ b/materialious/src/lib/css/global.css @@ -2,6 +2,10 @@ display: none; } +:root { + --video-player-height: 0px; +} + @font-face { font-family: Inter; src: url('/static/inter.ttf'); diff --git a/materialious/src/lib/watch.ts b/materialious/src/lib/watch.ts index 38299bee..f79562b3 100644 --- a/materialious/src/lib/watch.ts +++ b/materialious/src/lib/watch.ts @@ -10,6 +10,7 @@ import { loadEntirePlaylist } from '$lib/playlist'; import { authStore, playerProxyVideosStore, + playerState, returnYTDislikesInstanceStore, returnYtDislikesStore } from '$lib/store'; @@ -19,11 +20,18 @@ import { get } from 'svelte/store'; import { _ } from './i18n'; export async function getWatchDetails(videoId: string, url: URL) { + const playerStateRetrieved = get(playerState); + let video; - try { - video = await getVideo(videoId, get(playerProxyVideosStore), { priority: 'high' }); - } catch (errorMessage: any) { - error(500, errorMessage); + + if (playerStateRetrieved && playerStateRetrieved.data.video.videoId === videoId) { + video = playerStateRetrieved.data.video; + } else { + try { + video = await getVideo(videoId, get(playerProxyVideosStore), { priority: 'high' }); + } catch (errorMessage: any) { + error(500, errorMessage); + } } if (video.premium) { diff --git a/materialious/src/routes/(app)/+layout.svelte b/materialious/src/routes/(app)/+layout.svelte index 252673a5..ef9f7646 100644 --- a/materialious/src/routes/(app)/+layout.svelte +++ b/materialious/src/routes/(app)/+layout.svelte @@ -406,22 +406,35 @@
{#if $playerState} -
- {#if playerIsPip} - -
- {/if} - {#key $playerState.data.video.videoId} - - {/key} - {#if playerIsPip} - - {/if} +
+
+ {#if playerIsPip} + +
+ {/if} + {#key $playerState.data.video.videoId} + + {/key} + {#if playerIsPip} + + {/if} +
{/if} diff --git a/materialious/src/routes/(app)/watch/[slug]/+page.svelte b/materialious/src/routes/(app)/watch/[slug]/+page.svelte index 437f0de3..d4b7d3bd 100644 --- a/materialious/src/routes/(app)/watch/[slug]/+page.svelte +++ b/materialious/src/routes/(app)/watch/[slug]/+page.svelte @@ -520,7 +520,7 @@ {/if}
{#if !theatreMode} -
+