From 79d4ea6dcbc9f733557e3051e9e737797578f107 Mon Sep 17 00:00:00 2001 From: WardPearce Date: Fri, 18 Oct 2024 14:17:01 +1300 Subject: [PATCH 1/4] Only resync player audio if above player --- materialious/android/app/build.gradle | 4 ++-- materialious/electron/package.json | 2 +- materialious/package.json | 2 +- materialious/src/lib/Player.svelte | 6 +++++- update_versions.py | 2 +- 5 files changed, 10 insertions(+), 6 deletions(-) diff --git a/materialious/android/app/build.gradle b/materialious/android/app/build.gradle index 146b7a2c..7151b4a6 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 64 - versionName "1.6.13" + versionCode 65 + versionName "1.6.14" 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/package.json b/materialious/electron/package.json index 7f0c34a4..14306748 100644 --- a/materialious/electron/package.json +++ b/materialious/electron/package.json @@ -1,6 +1,6 @@ { "name": "Materialious", - "version": "1.6.13", + "version": "1.6.14", "description": "Modern material design for Invidious.", "author": { "name": "Ward Pearce", diff --git a/materialious/package.json b/materialious/package.json index a8ddd43a..af791559 100644 --- a/materialious/package.json +++ b/materialious/package.json @@ -1,6 +1,6 @@ { "name": "materialious", - "version": "1.6.13", + "version": "1.6.14", "private": true, "scripts": { "dev": "vite dev", diff --git a/materialious/src/lib/Player.svelte b/materialious/src/lib/Player.svelte index b32de43f..32343b10 100644 --- a/materialious/src/lib/Player.svelte +++ b/materialious/src/lib/Player.svelte @@ -381,7 +381,11 @@ const audioPlayerTime = await AudioPlayer.getCurrentTime(audioId); - player.currentTime = Math.round(audioPlayerTime.currentTime); + const audioPlayerTimeRounded = Math.round(audioPlayerTime.currentTime); + if (audioPlayerTimeRounded > player.currentTime) { + player.currentTime = audioPlayerTimeRounded; + } + await player.play(); }); diff --git a/update_versions.py b/update_versions.py index 0b45f7a0..d1e16ce4 100644 --- a/update_versions.py +++ b/update_versions.py @@ -5,7 +5,7 @@ import json import os import re -LATEST_VERSION = "1.6.13" +LATEST_VERSION = "1.6.14" WORKING_DIR = os.path.join(os.path.dirname(os.path.realpath(__file__)), "materialious") ROOT_PACKAGE = os.path.join(WORKING_DIR, "package.json") From dab50c151f83ae62a2355605ff8ecd6f69818813 Mon Sep 17 00:00:00 2001 From: WardPearce Date: Fri, 18 Oct 2024 14:49:18 +1300 Subject: [PATCH 2/4] Started pause timer --- materialious/package-lock.json | 4 +- materialious/package.json | 2 +- materialious/src/lib/i18n/locales/en.json | 2 + materialious/src/lib/misc.ts | 19 +++++ .../routes/(app)/watch/[slug]/+page.svelte | 77 +++++++++++++++++-- 5 files changed, 96 insertions(+), 8 deletions(-) diff --git a/materialious/package-lock.json b/materialious/package-lock.json index f6c19504..ffa1832e 100644 --- a/materialious/package-lock.json +++ b/materialious/package-lock.json @@ -1,12 +1,12 @@ { "name": "materialious", - "version": "1.6.10", + "version": "1.6.14", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "materialious", - "version": "1.6.10", + "version": "1.6.14", "dependencies": { "@capacitor-community/electron": "^5.0.1", "@capacitor/android": "6.1.2", diff --git a/materialious/package.json b/materialious/package.json index af791559..7edc8db0 100644 --- a/materialious/package.json +++ b/materialious/package.json @@ -76,4 +76,4 @@ "vidstack": "^1.12.9", "youtubei.js": "^10.5.0" } -} \ No newline at end of file +} diff --git a/materialious/src/lib/i18n/locales/en.json b/materialious/src/lib/i18n/locales/en.json index d136f407..8106f569 100644 --- a/materialious/src/lib/i18n/locales/en.json +++ b/materialious/src/lib/i18n/locales/en.json @@ -65,6 +65,8 @@ "player": { "audioOnly": "Audio only", "theatreMode": "Theatre mode", + "pauseTimer": "Pause timer", + "pauseVideoIn": "Pause video in ", "share": { "title": "Share", "materialiousLink": "Copy Materialious link", diff --git a/materialious/src/lib/misc.ts b/materialious/src/lib/misc.ts index 23002461..c1aecfe0 100644 --- a/materialious/src/lib/misc.ts +++ b/materialious/src/lib/misc.ts @@ -160,6 +160,25 @@ function convertToSeconds(time: string): number { return seconds; } +export function humanizeSeconds(totalSeconds: number): string { + const secondsInMinute = 60; + const secondsInHour = 3600; + + const hours = Math.floor(totalSeconds / secondsInHour); + const minutes = Math.floor((totalSeconds % secondsInHour) / secondsInMinute); + + const parts: string[] = []; + + if (hours > 0) { + parts.push(`${hours} hour${hours > 1 ? 's' : ''}`); + } + if (minutes > 0) { + parts.push(`${minutes} minute${minutes > 1 ? 's' : ''}`); + } + + return parts.join(', '); +} + export function proxyVideoUrl(source: string): string { const rawSrc = new URL(source); rawSrc.host = get(instanceStore).replace('http://', '').replace( diff --git a/materialious/src/routes/(app)/watch/[slug]/+page.svelte b/materialious/src/routes/(app)/watch/[slug]/+page.svelte index 2bfca96d..12d1e2ac 100644 --- a/materialious/src/routes/(app)/watch/[slug]/+page.svelte +++ b/materialious/src/routes/(app)/watch/[slug]/+page.svelte @@ -11,13 +11,10 @@ } from '$lib/Api/index.js'; import type { Comments, PlaylistPage, PlaylistPageVideo } from '$lib/Api/model.js'; import Comment from '$lib/Comment.svelte'; - import Player from '$lib/Player.svelte'; - import ShareVideo from '$lib/ShareVideo.svelte'; - import Thumbnail from '$lib/Thumbnail.svelte'; - import Transcript from '$lib/Transcript.svelte'; import { cleanNumber, getBestThumbnail, + humanizeSeconds, letterCase, numberWithCommas, proxyGoogleImage, @@ -25,6 +22,8 @@ unsafeRandomItem } from '$lib/misc'; import type { PlayerEvents } from '$lib/player'; + import Player from '$lib/Player.svelte'; + import ShareVideo from '$lib/ShareVideo.svelte'; import { activePageStore, authStore, @@ -40,7 +39,10 @@ syncPartyConnectionsStore, syncPartyPeerStore } from '$lib/store'; + import Thumbnail from '$lib/Thumbnail.svelte'; + import Transcript from '$lib/Transcript.svelte'; import { mergeMediaFromDASH } from '$lib/videoDownload'; + import ui from 'beercss'; import type { DataConnection } from 'peerjs'; import { type Segment } from 'sponsorblock-api'; import { onDestroy, onMount } from 'svelte'; @@ -78,6 +80,8 @@ let segments: Segment[] = []; + let pauseTimerSeconds: number = -1; + let showTranscript = false; playlistSettingsStore.subscribe((playlistSetting) => { @@ -296,6 +300,10 @@ // Reset title when page left. document.title = 'Materialious'; + if (pauseTimeout) { + clearTimeout(pauseTimeout); + } + if ( get(playerMiniPlayerStore) && !player.paused && @@ -393,10 +401,22 @@ subscribed = !subscribed; } - async function toggleTheatreMode() { + function toggleTheatreMode() { theatreMode = !theatreMode; } + let pauseTimeout: NodeJS.Timeout; + function setPauseTimer() { + if (pauseTimeout) { + clearTimeout(pauseTimeout); + } + pauseTimeout = setTimeout(() => { + player.pause(); + }, pauseTimerSeconds * 1000); + + ui('#pause-timer'); + } + let downloadStage: string | undefined; let downloadProgress: number = 0; @@ -553,6 +573,21 @@ width_wide
{$_('player.theatreMode')}
+ {#if data.video.lengthSeconds > 60} + + {/if} + + + +