From 06680bba57bc8c426726e5ca5a0cff367a23e684 Mon Sep 17 00:00:00 2001 From: Ward Date: Wed, 18 Jun 2025 06:19:57 +1200 Subject: [PATCH] Merge pull request #979 from Materialious/update/1.9.8 Update/1.9.8 --- materialious/android/app/build.gradle | 4 +- .../electron/materialious.metainfo.xml | 6 +- materialious/electron/package-lock.json | 4 +- materialious/electron/package.json | 2 +- materialious/package-lock.json | 12 +- materialious/package.json | 6 +- materialious/src/lib/components/Player.svelte | 71 ++++++++- materialious/src/lib/components/Search.svelte | 21 +-- .../src/lib/components/ShareVideo.svelte | 13 +- .../src/lib/css/shaka-player-theme.css | 137 ++++++++++-------- materialious/src/lib/patches/youtubejs.ts | 5 +- .../src/lib/shaka-elements/endTime.ts | 2 +- materialious/src/lib/timestamps.ts | 2 +- .../routes/(app)/channel/[slug]/+page.svelte | 2 + .../routes/(app)/playlist/[slug]/+page.svelte | 2 + .../routes/(app)/watch/[slug]/+page.svelte | 17 +-- update_versions.py | 2 +- 17 files changed, 198 insertions(+), 110 deletions(-) diff --git a/materialious/android/app/build.gradle b/materialious/android/app/build.gradle index a7c5c886..3fcd7468 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 124 - versionName "1.9.7" + versionCode 125 + versionName "1.9.8" 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 0f99a27a..bdd466cb 100644 --- a/materialious/electron/materialious.metainfo.xml +++ b/materialious/electron/materialious.metainfo.xml @@ -59,7 +59,11 @@ - + + + https://github.com/Materialious/Materialious/releases/tag/1.9.8 + + https://github.com/Materialious/Materialious/releases/tag/1.9.7 diff --git a/materialious/electron/package-lock.json b/materialious/electron/package-lock.json index 628e9b17..7a2ca20f 100644 --- a/materialious/electron/package-lock.json +++ b/materialious/electron/package-lock.json @@ -1,12 +1,12 @@ { "name": "Materialious", - "version": "1.9.7", + "version": "1.9.8", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "Materialious", - "version": "1.9.7", + "version": "1.9.8", "license": "MIT", "dependencies": { "@capacitor-community/electron": "^5.0.0", diff --git a/materialious/electron/package.json b/materialious/electron/package.json index 6617d3ea..6d17148a 100644 --- a/materialious/electron/package.json +++ b/materialious/electron/package.json @@ -1,6 +1,6 @@ { "name": "Materialious", - "version": "1.9.7", + "version": "1.9.8", "description": "Modern material design for Invidious.", "author": { "name": "Ward Pearce", diff --git a/materialious/package-lock.json b/materialious/package-lock.json index dc044c0a..c630bb9d 100644 --- a/materialious/package-lock.json +++ b/materialious/package-lock.json @@ -1,12 +1,12 @@ { "name": "materialious", - "version": "1.9.4", + "version": "1.9.8", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "materialious", - "version": "1.9.4", + "version": "1.9.8", "hasInstallScript": true, "dependencies": { "@capacitor-community/electron": "^5.0.1", @@ -37,7 +37,7 @@ "sponsorblock-api": "^0.2.4", "svelte-infinite-loading": "^1.4.0", "svelte-persisted-store": "^0.12.0", - "youtubei.js": "^13.4.0" + "youtubei.js": "^14.0.0" }, "devDependencies": { "@capacitor/assets": "^3.0.5", @@ -13748,9 +13748,9 @@ } }, "node_modules/youtubei.js": { - "version": "13.4.0", - "resolved": "https://registry.npmjs.org/youtubei.js/-/youtubei.js-13.4.0.tgz", - "integrity": "sha512-+fmIZU/dWAjsROONrASy1REwVpy6umAPVuoNLr/4iNmZXl84LyBef0n3hrd1Vn9035EuINToGyQcBmifwUEemA==", + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/youtubei.js/-/youtubei.js-14.0.0.tgz", + "integrity": "sha512-KAFttOw+9fwwBUvBc1T7KzMNBLczDOuN/dfote8BA9CABxgx8MPgV+vZWlowdDB6DnHjSUYppv+xvJ4VNBLK9A==", "funding": [ "https://github.com/sponsors/LuanRT" ], diff --git a/materialious/package.json b/materialious/package.json index 00d43eac..966d8901 100644 --- a/materialious/package.json +++ b/materialious/package.json @@ -1,6 +1,6 @@ { "name": "materialious", - "version": "1.9.7", + "version": "1.9.8", "private": true, "scripts": { "dev": "vite dev", @@ -68,6 +68,6 @@ "sponsorblock-api": "^0.2.4", "svelte-infinite-loading": "^1.4.0", "svelte-persisted-store": "^0.12.0", - "youtubei.js": "^13.4.0" + "youtubei.js": "^14.0.0" } -} \ No newline at end of file +} diff --git a/materialious/src/lib/components/Player.svelte b/materialious/src/lib/components/Player.svelte index c2ef8a92..4c5b3561 100644 --- a/materialious/src/lib/components/Player.svelte +++ b/materialious/src/lib/components/Player.svelte @@ -16,13 +16,14 @@ import 'shaka-player/dist/controls.css'; import shaka from 'shaka-player/dist/shaka-player.ui'; import { SponsorBlock, type Category, type Segment } from 'sponsorblock-api'; - import { onDestroy, onMount } from 'svelte'; + import { onDestroy, onMount, tick } from 'svelte'; import { _ } from '$lib/i18n'; import { get } from 'svelte/store'; import { deleteVideoProgress, getVideoProgress, saveVideoProgress } from '../api'; import type { VideoPlay } from '../api/model'; import { authStore, + darkModeStore, instanceStore, playerAndroidLockOrientation, playerAutoPlayStore, @@ -38,7 +39,8 @@ sponsorBlockStore, sponsorBlockUrlStore, synciousInstanceStore, - synciousStore + synciousStore, + themeColorStore } from '../store'; import { getDynamicTheme, setStatusBarColor } from '../theme'; import { injectSABR } from '$lib/sabr'; @@ -74,6 +76,55 @@ const STORAGE_KEY_VOLUME = 'shaka-preferred-volume'; + async function updateSeekBarTheme() { + await tick(); + shakaUi.configure({ + seekBarColors: { + played: (await getDynamicTheme())['--primary'] + } + }); + setChapterMarkers(); + } + + themeColorStore.subscribe(updateSeekBarTheme); + darkModeStore.subscribe(updateSeekBarTheme); + + function setChapterMarkers() { + const shakaControls = shakaUi.getControls(); + if (data.content.timestamps && shakaControls) { + const seekBar = shakaControls + .getControlsContainer() + .querySelector('.shaka-seek-bar-container'); + + data.content.timestamps.forEach((chapter, index) => { + const nextChapter = data.content.timestamps[index + 1]; + + const marker = document.createElement('div'); + marker.classList.add('chapter-marker'); + + const startPercent = (chapter.time / data.video.lengthSeconds) * 100; + let widthPercent: number; + + if (nextChapter) { + widthPercent = ((nextChapter.time - chapter.time) / data.video.lengthSeconds) * 100; + } else { + widthPercent = 100 - startPercent; + } + + marker.style.left = `${startPercent}%`; + marker.style.width = `${widthPercent}%`; + + const tooltip = document.createElement('div'); + tooltip.classList.add('tooltip'); + tooltip.textContent = chapter.title; + + marker.appendChild(tooltip); + + if (seekBar) seekBar.appendChild(marker); + }); + } + } + function restoreDefaultLanguage() { if ($playerDefaultLanguage) { const audioLanguages = player.getAudioLanguages(); @@ -541,6 +592,8 @@ } }); + setChapterMarkers(); + try { await loadVideo(); } catch (error: unknown) { @@ -651,7 +704,7 @@
@@ -695,19 +748,25 @@ {/if}