Merge pull request #1181 from Materialious/update/1.11.5

Update/1.11.5
This commit is contained in:
Ward
2025-11-08 01:55:01 +00:00
committed by GitHub
12 changed files with 97 additions and 72 deletions
+2 -2
View File
@@ -7,8 +7,8 @@ android {
applicationId "us.materialio.app"
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
versionCode 164
versionName "1.11.4"
versionCode 165
versionName "1.11.5"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
aaptOptions {
// Files and dirs to omit from the packaged assets dir, modified to accommodate modern web apps.
@@ -74,7 +74,11 @@
<release version="1.11.4" date="2025-11-08">
<release version="1.11.5" date="2025-11-08">
<url>https://github.com/Materialious/Materialious/releases/tag/1.11.5</url>
</release>
<release version="1.11.4" date="2025-11-08">
<url>https://github.com/Materialious/Materialious/releases/tag/1.11.4</url>
</release>
<release version="1.11.3" date="2025-11-07">
+2 -2
View File
@@ -1,12 +1,12 @@
{
"name": "Materialious",
"version": "1.11.4",
"version": "1.11.5",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "Materialious",
"version": "1.11.4",
"version": "1.11.5",
"license": "MIT",
"dependencies": {
"@capacitor-community/electron": "^5.0.0",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "Materialious",
"version": "1.11.4",
"version": "1.11.5",
"description": "Modern material design for Invidious.",
"author": {
"name": "Ward Pearce",
+6 -6
View File
@@ -1,12 +1,12 @@
{
"name": "materialious",
"version": "1.11.3",
"version": "1.11.5",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "materialious",
"version": "1.11.3",
"version": "1.11.5",
"hasInstallScript": true,
"dependencies": {
"@capacitor-community/electron": "^5.0.1",
@@ -62,7 +62,7 @@
"svelte": "^5.43.2",
"svelte-check": "^4.3.3",
"tslib": "^2.7.0",
"typescript": "^5.6.3",
"typescript": "^5.9.3",
"vite": "^7.1.12"
}
},
@@ -12189,9 +12189,9 @@
}
},
"node_modules/typescript": {
"version": "5.8.3",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz",
"integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==",
"version": "5.9.3",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz",
"integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
"devOptional": true,
"license": "Apache-2.0",
"bin": {
+2 -2
View File
@@ -1,6 +1,6 @@
{
"name": "materialious",
"version": "1.11.4",
"version": "1.11.5",
"private": true,
"scripts": {
"dev": "vite dev",
@@ -37,7 +37,7 @@
"svelte": "^5.43.2",
"svelte-check": "^4.3.3",
"tslib": "^2.7.0",
"typescript": "^5.6.3",
"typescript": "^5.9.3",
"vite": "^7.1.12"
},
"type": "module",
@@ -192,6 +192,16 @@
// Watch for focus changes to detect when we're active
document.addEventListener('focusin', checkComponentFocus);
document.addEventListener('focusout', checkComponentFocus);
} else if ($feedLastItemId) {
const element = document.getElementById($feedLastItemId);
if (element) {
element.scrollIntoView({
behavior: 'instant',
block: 'start',
inline: 'nearest'
});
}
}
});
@@ -546,7 +546,6 @@
const stringBody = new TextDecoder().decode(response.data);
// position:0% for LTR text and position:100% for RTL text
const cleaned = stringBody.replaceAll(/ align:start position:(?:10)?0%$/gm, '');
// @ts-expect-error Type is acceptable, is shaka player
response.data = new TextEncoder().encode(cleaned).buffer;
}
});
+7 -8
View File
@@ -62,14 +62,13 @@ export const playerStatisticsByDefault = persisted('playerStatistics', false);
export const playerMiniplayerEnabled = persisted('miniplayerEnabled', true);
export const playerPlaylistHistory: Writable<string[]> = writable([]);
export const playerState: Writable<
| {
data: { video: VideoPlay; content: PhasedDescription; playlistId: string | null };
isSyncing?: boolean;
playerElement?: HTMLMediaElement | undefined;
}
| undefined
> = writable(undefined);
export interface PlayerState {
data: { video: VideoPlay; content: PhasedDescription; playlistId: string | null };
isSyncing?: boolean;
playerElement?: HTMLMediaElement | undefined;
}
export const playerState: Writable<PlayerState | undefined> = writable(undefined);
export const playertheatreModeIsActive = writable(false);
export const returnYtDislikesStore = persisted('returnYtDislikes', false);
+2 -1
View File
@@ -487,7 +487,7 @@
.pip {
position: fixed;
bottom: 10px;
right: 0;
right: 30px;
width: 400px;
z-index: 99999;
padding: 1em;
@@ -506,6 +506,7 @@
.pip {
width: 100%;
bottom: 100px;
right: 0px;
}
.pip > .pip-info > .player {
@@ -25,7 +25,8 @@
playlistCacheStore,
playlistSettingsStore,
syncPartyConnectionsStore,
syncPartyPeerStore
syncPartyPeerStore,
type PlayerState
} from '$lib/store';
import ui from 'beercss';
import type { DataConnection } from 'peerjs';
@@ -71,7 +72,10 @@
let premiereTime = $state('');
let premiereUpdateInterval: NodeJS.Timeout;
if (!data.video.premiereTimestamp) {
if (
!data.video.premiereTimestamp &&
(!$playerState || $playerState.data.video.videoId !== data.video.videoId)
) {
playerState.set({
data: data,
isSyncing: $syncPartyPeerStore !== null
@@ -223,53 +227,61 @@
playerSyncEvents(connections[connections.length - 1]);
});
onMount(() => {
async function load(state: PlayerState) {
playerElement = state.playerElement;
if (data.playlistId) {
await goToCurrentPlaylistItem();
playerPlaylistHistory.set([data.video.videoId, ...$playerPlaylistHistory]);
}
if ($interfaceAutoExpandChapters) {
expandSummery('chapter-section');
}
if ($syncPartyConnectionsStore) {
$syncPartyConnectionsStore.forEach((conn) => {
playerSyncEvents(conn);
});
}
if (playerElement) {
playerElement.addEventListener('timeupdate', () => {
if (!playerElement) return;
playerCurrentTime = playerElement.currentTime;
});
}
if (data.video.premiereTimestamp) {
premiereTime = humanFriendlyTimestamp(data.video.premiereTimestamp);
premiereUpdateInterval = setInterval(async () => {
data = await getWatchDetails(data.video.videoId, page.url);
if (data.video.premiereTimestamp) {
premiereTime = humanFriendlyTimestamp(data.video.premiereTimestamp);
} else {
clearInterval(premiereUpdateInterval);
playerState.set({ ...$playerState, data: { ...data } });
}
}, 60000);
}
}
onMount(async () => {
// Required due to needing the playerElement
let loadedPlayer = false;
playerState.subscribe(async (updatedPlayerState) => {
if (!updatedPlayerState?.playerElement || loadedPlayer) {
return;
}
loadedPlayer = true;
if ($playerState?.playerElement) {
await load($playerState);
} else {
let loadedPlayer = false;
playerState.subscribe(async (updatedPlayerState) => {
if (!updatedPlayerState?.playerElement || loadedPlayer) {
return;
}
loadedPlayer = true;
playerElement = updatedPlayerState.playerElement;
if (data.playlistId) {
await goToCurrentPlaylistItem();
playerPlaylistHistory.set([data.video.videoId, ...$playerPlaylistHistory]);
}
if ($interfaceAutoExpandChapters) {
expandSummery('chapter-section');
}
if ($syncPartyConnectionsStore) {
$syncPartyConnectionsStore.forEach((conn) => {
playerSyncEvents(conn);
});
}
if (playerElement) {
playerElement.addEventListener('timeupdate', () => {
if (!playerElement) return;
playerCurrentTime = playerElement.currentTime;
});
}
if (data.video.premiereTimestamp) {
premiereTime = humanFriendlyTimestamp(data.video.premiereTimestamp);
premiereUpdateInterval = setInterval(async () => {
data = await getWatchDetails(data.video.videoId, page.url);
if (data.video.premiereTimestamp) {
premiereTime = humanFriendlyTimestamp(data.video.premiereTimestamp);
} else {
clearInterval(premiereUpdateInterval);
playerState.set({ ...$playerState, data: { ...data } });
}
}, 60000);
}
});
await load(updatedPlayerState);
});
}
});
onDestroy(() => {
+1 -1
View File
@@ -3,7 +3,7 @@ import os
import re
from datetime import datetime
LATEST_VERSION = "1.11.4"
LATEST_VERSION = "1.11.5"
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")