Ensure buffer progress doesnt go ahead of total progress

This commit is contained in:
WardPearce
2025-12-28 19:58:15 +13:00
parent f207e31b5e
commit 2ea3070574
7 changed files with 102 additions and 102 deletions
+2 -2
View File
@@ -7,8 +7,8 @@ android {
applicationId "us.materialio.app"
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
versionCode 181
versionName "1.12.9"
versionCode 182
versionName "1.12.10"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
aaptOptions {
// Files and dirs to omit from the packaged assets dir, modified to accommodate modern web apps.
@@ -78,7 +78,11 @@
<release version="1.12.9" date="2025-12-28">
<release version="1.12.10" date="2025-12-28">
<url>https://github.com/Materialious/Materialious/releases/tag/1.12.10</url>
</release>
<release version="1.12.9" date="2025-12-28">
<url>https://github.com/Materialious/Materialious/releases/tag/1.12.9</url>
</release>
<release version="1.12.8" date="2025-12-23">
+2 -2
View File
@@ -1,6 +1,6 @@
{
"name": "Materialious",
"version": "1.12.9",
"version": "1.12.10",
"description": "Modern material design for Invidious.",
"author": {
"name": "Ward Pearce",
@@ -44,4 +44,4 @@
"capacitor",
"electron"
]
}
}
+77 -77
View File
@@ -1,79 +1,79 @@
{
"name": "materialious",
"version": "1.12.9",
"private": true,
"scripts": {
"dev": "npm run patch:github && vite dev",
"build": "npm run patch:github && vite build",
"preview": "vite preview",
"check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
"check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
"lint": "prettier --check . && eslint .",
"eslint": "eslint .",
"format": "prettier --write .",
"patch:shaka": "node ./scripts/patchShaka.mjs",
"patch:github": "node ./scripts/githubContributors.mjs",
"postinstall": "npm run patch:shaka"
},
"devDependencies": {
"@capacitor/assets": "^3.0.5",
"@capacitor/cli": "^8.0.0",
"@sveltejs/adapter-auto": "^6.0.1",
"@sveltejs/adapter-static": "^3.0.10",
"@sveltejs/kit": "^2.49.1",
"@sveltejs/vite-plugin-svelte": "^6.2.1",
"@types/event-source-polyfill": "^1.0.5",
"@types/he": "^1.2.3",
"@types/human-number": "^1.0.2",
"@types/mousetrap": "^1.6.15",
"@vite-pwa/sveltekit": "^1.0.0",
"eslint": "^9.39.1",
"eslint-config-prettier": "^10.1.8",
"eslint-plugin-svelte": "^3.13.0",
"patch-package": "^8.0.1",
"prettier": "^3.6.2",
"prettier-plugin-svelte": "^3.4.0",
"svelte": "^5.45.6",
"svelte-check": "^4.3.3",
"tslib": "^2.7.0",
"typescript": "^5.9.3",
"typescript-eslint": "^8.47.0",
"vite": "^7.2.6"
},
"type": "module",
"dependencies": {
"@capacitor-community/electron": "^5.0.1",
"@capacitor-community/safe-area": "^7.0.0-alpha.1",
"@capacitor/android": "^8.0.0",
"@capacitor/app": "^8.0.0",
"@capacitor/browser": "^8.0.0",
"@capacitor/clipboard": "^8.0.0",
"@capacitor/core": "^8.0.0",
"@capacitor/preferences": "^8.0.0",
"@capacitor/screen-orientation": "^8.0.0",
"@capacitor/share": "^8.0.0",
"@macfja/serializer": "^1.1.4",
"@macfja/svelte-persistent-store": "^2.4.2",
"beercss": "^3.13.1",
"bgutils-js": "^3.2.0",
"capacitor-music-controls-plugin": "^6.1.0",
"capacitor-nodejs": "https://github.com/hampoelz/capacitor-nodejs/releases/download/v1.0.0-beta.9/capacitor-nodejs.tgz",
"dayjs": "^1.11.19",
"dexie": "^4.2.1",
"fuse.js": "^7.0.0",
"googlevideo": "^4.0.4",
"he": "^1.2.0",
"human-number": "^2.0.8",
"i18next": "^25.7.2",
"iso-3166": "^4.4.0",
"iso-639-1": "^3.1.5",
"material-dynamic-colors": "^1.1.1",
"media-captions": "^1.0.4",
"mousetrap": "^1.6.5",
"peerjs": "^1.5.5",
"shaka-player": "^4.16.11",
"sponsorblock-api": "^0.2.4",
"svelte-infinite-loading": "^1.4.0",
"youtubei.js": "^16.0.1"
}
"name": "materialious",
"version": "1.12.10",
"private": true,
"scripts": {
"dev": "npm run patch:github && vite dev",
"build": "npm run patch:github && vite build",
"preview": "vite preview",
"check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
"check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
"lint": "prettier --check . && eslint .",
"eslint": "eslint .",
"format": "prettier --write .",
"patch:shaka": "node ./scripts/patchShaka.mjs",
"patch:github": "node ./scripts/githubContributors.mjs",
"postinstall": "npm run patch:shaka"
},
"devDependencies": {
"@capacitor/assets": "^3.0.5",
"@capacitor/cli": "^8.0.0",
"@sveltejs/adapter-auto": "^6.0.1",
"@sveltejs/adapter-static": "^3.0.10",
"@sveltejs/kit": "^2.49.1",
"@sveltejs/vite-plugin-svelte": "^6.2.1",
"@types/event-source-polyfill": "^1.0.5",
"@types/he": "^1.2.3",
"@types/human-number": "^1.0.2",
"@types/mousetrap": "^1.6.15",
"@vite-pwa/sveltekit": "^1.0.0",
"eslint": "^9.39.1",
"eslint-config-prettier": "^10.1.8",
"eslint-plugin-svelte": "^3.13.0",
"patch-package": "^8.0.1",
"prettier": "^3.6.2",
"prettier-plugin-svelte": "^3.4.0",
"svelte": "^5.45.6",
"svelte-check": "^4.3.3",
"tslib": "^2.7.0",
"typescript": "^5.9.3",
"typescript-eslint": "^8.47.0",
"vite": "^7.2.6"
},
"type": "module",
"dependencies": {
"@capacitor-community/electron": "^5.0.1",
"@capacitor-community/safe-area": "^7.0.0-alpha.1",
"@capacitor/android": "^8.0.0",
"@capacitor/app": "^8.0.0",
"@capacitor/browser": "^8.0.0",
"@capacitor/clipboard": "^8.0.0",
"@capacitor/core": "^8.0.0",
"@capacitor/preferences": "^8.0.0",
"@capacitor/screen-orientation": "^8.0.0",
"@capacitor/share": "^8.0.0",
"@macfja/serializer": "^1.1.4",
"@macfja/svelte-persistent-store": "^2.4.2",
"beercss": "^3.13.1",
"bgutils-js": "^3.2.0",
"capacitor-music-controls-plugin": "^6.1.0",
"capacitor-nodejs": "https://github.com/hampoelz/capacitor-nodejs/releases/download/v1.0.0-beta.9/capacitor-nodejs.tgz",
"dayjs": "^1.11.19",
"dexie": "^4.2.1",
"fuse.js": "^7.0.0",
"googlevideo": "^4.0.4",
"he": "^1.2.0",
"human-number": "^2.0.8",
"i18next": "^25.7.2",
"iso-3166": "^4.4.0",
"iso-639-1": "^3.1.5",
"material-dynamic-colors": "^1.1.1",
"media-captions": "^1.0.4",
"mousetrap": "^1.6.5",
"peerjs": "^1.5.5",
"shaka-player": "^4.16.11",
"sponsorblock-api": "^0.2.4",
"svelte-infinite-loading": "^1.4.0",
"youtubei.js": "^16.0.1"
}
}
+14 -18
View File
@@ -78,9 +78,9 @@
let player: shaka.Player;
let sabrAdapter: SabrStreamingAdapter | null;
let playerContainer: HTMLElement;
let bufferBar: HTMLElement | undefined = $state();
let playerContainer: HTMLElement;
let playerBufferBar: HTMLElement | undefined = $state();
let playerCurrentPlaybackState = $state(false);
let playerCurrentTime = $state(0);
let playerMaxKnownTime = $state(data.video.lengthSeconds);
@@ -96,6 +96,7 @@
let playerTimelineMouseX: number = $state(0);
let playerTimelineLastUpdate: number = 0;
let playerVideoEndTimePretty: string = $state('');
let playerBufferedTo: number = $state(0);
let clickCount = $state(0);
// eslint-disable-next-line no-undef
@@ -819,19 +820,18 @@
const buffered = playerElement.buffered;
if (buffered.length > 0 && bufferBar) {
const bufferedEnd = buffered.end(0); // Amount shaka has buffered
const startBuffer = Math.max(playerElement.currentTime, 0);
if (buffered.length > 0 && playerBufferBar) {
playerBufferedTo = buffered.end(0);
// Calculate the buffered width as a percentage starting from the current time
const bufferedWidth =
((bufferedEnd - startBuffer) / (playerMaxKnownTime - startBuffer)) * 100;
const bufferedPercent = (playerBufferedTo / playerMaxKnownTime) * 100;
const progressPercent = (playerCurrentTime / playerMaxKnownTime) * 100;
const currentSliderPercentage = (playerCurrentTime / playerMaxKnownTime) * 100;
const bufferAhead = Math.max(0, bufferedPercent - progressPercent);
const effectiveWidth = Math.min(Math.max(bufferedWidth, 0), currentSliderPercentage);
bufferBar.style.width = effectiveWidth + '%';
bufferBar.style.left = Math.min(currentSliderPercentage, 100) + '%';
const effectiveWidth = Math.min(bufferAhead, 100 - progressPercent);
playerBufferBar.style.left = progressPercent + '%';
playerBufferBar.style.width = effectiveWidth + '%';
}
});
@@ -1070,10 +1070,6 @@
<div class="player-status" id="player-tap-controls-area">
{#if playerIsBuffering}
<progress class="circle large indeterminate" value="50" max="100"></progress>
{:else if !playerCurrentPlaybackState}
<button class="extra inverse-primary" onclick={toggleVideoPlaybackStatus}>
<i>play_arrow</i>
</button>
{/if}
</div>
</div>
@@ -1107,7 +1103,7 @@
/>
{/key}
<span></span>
<div bind:this={bufferBar} class="buffered-bar"></div>
<div bind:this={playerBufferBar} class="buffered-bar"></div>
</label>
{#if playerTimelineTooltipVisible}
@@ -1428,7 +1424,7 @@
}
#progress-slider {
block-size: 1.5em;
block-size: 1em;
margin: 0;
}
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -3,7 +3,7 @@ import os
import re
from datetime import datetime
LATEST_VERSION = "1.12.9"
LATEST_VERSION = "1.12.10"
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")