Merge pull request #1079 from Materialious/update/1.10.6

Update/1.10.6
This commit is contained in:
Ward
2025-09-05 14:34:33 +12:00
committed by GitHub
13 changed files with 184 additions and 97 deletions
+28
View File
@@ -0,0 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>android</name>
<comment>Project android created by Buildship.</comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.buildship.core.gradleprojectbuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.buildship.core.gradleprojectnature</nature>
</natures>
<filteredResources>
<filter>
<id>1757025089541</id>
<name></name>
<type>30</type>
<matcher>
<id>org.eclipse.core.resources.regexFilterMatcher</id>
<arguments>node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__</arguments>
</matcher>
</filter>
</filteredResources>
</projectDescription>
+2 -2
View File
@@ -7,8 +7,8 @@ android {
applicationId "us.materialio.app"
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
versionCode 146
versionName "1.10.5"
versionCode 147
versionName "1.10.6"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
aaptOptions {
// Files and dirs to omit from the packaged assets dir, modified to accommodate modern web apps.
@@ -63,7 +63,11 @@
<release version="1.10.5" date="2025-9-05">
<release version="1.10.6" date="2025-9-05">
<url>https://github.com/Materialious/Materialious/releases/tag/1.10.6</url>
</release>
<release version="1.10.5" date="2025-9-05">
<url>https://github.com/Materialious/Materialious/releases/tag/1.10.5</url>
</release>
<release version="1.10.4" date="2025-8-19">
+2 -2
View File
@@ -1,12 +1,12 @@
{
"name": "Materialious",
"version": "1.10.5",
"version": "1.10.6",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "Materialious",
"version": "1.10.5",
"version": "1.10.6",
"license": "MIT",
"dependencies": {
"@capacitor-community/electron": "^5.0.0",
+2 -2
View File
@@ -1,6 +1,6 @@
{
"name": "Materialious",
"version": "1.10.5",
"version": "1.10.6",
"description": "Modern material design for Invidious.",
"author": {
"name": "Ward Pearce",
@@ -44,4 +44,4 @@
"capacitor",
"electron"
]
}
}
+31 -31
View File
@@ -1,12 +1,12 @@
{
"name": "materialious",
"version": "1.10.5",
"version": "1.10.6",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "materialious",
"version": "1.10.5",
"version": "1.10.6",
"hasInstallScript": true,
"dependencies": {
"@capacitor-community/electron": "^5.0.1",
@@ -43,7 +43,7 @@
"@sveltejs/adapter-auto": "^6.0.1",
"@sveltejs/adapter-static": "^3.0.8",
"@sveltejs/kit": "^2.37.0",
"@sveltejs/vite-plugin-svelte": "^5.0.3",
"@sveltejs/vite-plugin-svelte": "^6.1.4",
"@types/eslint": "^8.56.7",
"@types/event-source-polyfill": "^1.0.5",
"@types/he": "^1.2.3",
@@ -3351,49 +3351,48 @@
}
},
"node_modules/@sveltejs/vite-plugin-svelte": {
"version": "5.0.3",
"resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-5.0.3.tgz",
"integrity": "sha512-MCFS6CrQDu1yGwspm4qtli0e63vaPCehf6V7pIMP15AsWgMKrqDGCPFF/0kn4SP0ii4aySu4Pa62+fIRGFMjgw==",
"version": "6.1.4",
"resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-6.1.4.tgz",
"integrity": "sha512-4jfkfvsGI+U2OhHX8OPCKtMCf7g7ledXhs3E6UcA4EY0jQWsiVbe83pTAHp9XTifzYNOiD4AJieJUsI0qqxsbw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@sveltejs/vite-plugin-svelte-inspector": "^4.0.1",
"debug": "^4.4.0",
"@sveltejs/vite-plugin-svelte-inspector": "^5.0.0",
"debug": "^4.4.1",
"deepmerge": "^4.3.1",
"kleur": "^4.1.5",
"magic-string": "^0.30.15",
"vitefu": "^1.0.4"
"magic-string": "^0.30.17",
"vitefu": "^1.1.1"
},
"engines": {
"node": "^18.0.0 || ^20.0.0 || >=22"
"node": "^20.19 || ^22.12 || >=24"
},
"peerDependencies": {
"svelte": "^5.0.0",
"vite": "^6.0.0"
"vite": "^6.3.0 || ^7.0.0"
}
},
"node_modules/@sveltejs/vite-plugin-svelte-inspector": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-4.0.1.tgz",
"integrity": "sha512-J/Nmb2Q2y7mck2hyCX4ckVHcR5tu2J+MtBEQqpDrrgELZ2uvraQcK/ioCV61AqkdXFgriksOKIceDcQmqnGhVw==",
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-5.0.1.tgz",
"integrity": "sha512-ubWshlMk4bc8mkwWbg6vNvCeT7lGQojE3ijDh3QTR6Zr/R+GXxsGbyH4PExEPpiFmqPhYiVSVmHBjUcVc1JIrA==",
"dev": true,
"license": "MIT",
"dependencies": {
"debug": "^4.3.7"
"debug": "^4.4.1"
},
"engines": {
"node": "^18.0.0 || ^20.0.0 || >=22"
"node": "^20.19 || ^22.12 || >=24"
},
"peerDependencies": {
"@sveltejs/vite-plugin-svelte": "^5.0.0",
"@sveltejs/vite-plugin-svelte": "^6.0.0-next.0",
"svelte": "^5.0.0",
"vite": "^6.0.0"
"vite": "^6.3.0 || ^7.0.0"
}
},
"node_modules/@sveltejs/vite-plugin-svelte-inspector/node_modules/debug": {
"version": "4.4.0",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz",
"integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==",
"version": "4.4.1",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz",
"integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -3416,9 +3415,9 @@
"license": "MIT"
},
"node_modules/@sveltejs/vite-plugin-svelte/node_modules/debug": {
"version": "4.4.0",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz",
"integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==",
"version": "4.4.1",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz",
"integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -13259,17 +13258,18 @@
}
},
"node_modules/vitefu": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/vitefu/-/vitefu-1.0.6.tgz",
"integrity": "sha512-+Rex1GlappUyNN6UfwbVZne/9cYC4+R2XDk9xkNXBKMw6HQagdX9PgZ8V2v1WUSK1wfBLp7qbI1+XSNIlB1xmA==",
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/vitefu/-/vitefu-1.1.1.tgz",
"integrity": "sha512-B/Fegf3i8zh0yFbpzZ21amWzHmuNlLlmJT6n7bu5e+pCHUKQIfXSYokrqOBGEMMe9UG2sostKQF9mml/vYaWJQ==",
"dev": true,
"license": "MIT",
"workspaces": [
"tests/deps/*",
"tests/projects/*"
"tests/projects/*",
"tests/projects/workspace/packages/*"
],
"peerDependencies": {
"vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0"
"vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0-beta.0"
},
"peerDependenciesMeta": {
"vite": {
+3 -3
View File
@@ -1,6 +1,6 @@
{
"name": "materialious",
"version": "1.10.5",
"version": "1.10.6",
"private": true,
"scripts": {
"dev": "vite dev",
@@ -18,7 +18,7 @@
"@sveltejs/adapter-auto": "^6.0.1",
"@sveltejs/adapter-static": "^3.0.8",
"@sveltejs/kit": "^2.37.0",
"@sveltejs/vite-plugin-svelte": "^5.0.3",
"@sveltejs/vite-plugin-svelte": "^6.1.4",
"@types/eslint": "^8.56.7",
"@types/event-source-polyfill": "^1.0.5",
"@types/he": "^1.2.3",
@@ -69,4 +69,4 @@
"svelte-persisted-store": "^0.12.0",
"youtubei.js": "^15.0.0"
}
}
}
+96 -40
View File
@@ -208,53 +208,54 @@
async function androidHandleRotate() {
if (
Capacitor.getPlatform() === 'android' &&
data.video.adaptiveFormats.length > 0 &&
!$isAndroidTvStore
) {
const videoFormats = data.video.adaptiveFormats.filter((format) =>
format.type.startsWith('video/')
);
Capacitor.getPlatform() !== 'android' ||
data.video.adaptiveFormats.length === 0 ||
$isAndroidTvStore
)
return;
originalOrigination = await ScreenOrientation.orientation();
const videoFormats = data.video.adaptiveFormats.filter((format) =>
format.type.startsWith('video/')
);
document.addEventListener('fullscreenchange', async () => {
const isFullScreen = !!document.fullscreenElement;
originalOrigination = await ScreenOrientation.orientation();
if (isFullScreen) {
// Ensure bar color is black while in fullscreen
await SafeArea.enable({
config: {
customColorsForSystemBars: true,
statusBarColor: '#00000000',
statusBarContent: 'light',
navigationBarColor: '#00000000',
navigationBarContent: 'light'
}
});
} else {
await setStatusBarColor();
}
document.addEventListener('fullscreenchange', async () => {
const isFullScreen = !!document.fullscreenElement;
if (!$playerAndroidLockOrientation) return;
if (isFullScreen && videoFormats[0].resolution) {
const widthHeight = videoFormats[0].resolution.split('x');
if (widthHeight.length !== 2) return;
if (Number(widthHeight[0]) > Number(widthHeight[1])) {
await ScreenOrientation.lock({ orientation: 'landscape' });
} else {
await ScreenOrientation.lock({ orientation: 'portrait' });
if (isFullScreen) {
// Ensure bar color is black while in fullscreen
await SafeArea.enable({
config: {
customColorsForSystemBars: true,
statusBarColor: '#00000000',
statusBarContent: 'light',
navigationBarColor: '#00000000',
navigationBarContent: 'light'
}
});
} else {
await setStatusBarColor();
}
if (!$playerAndroidLockOrientation) return;
if (isFullScreen && videoFormats[0].resolution) {
const widthHeight = videoFormats[0].resolution.split('x');
if (widthHeight.length !== 2) return;
if (Number(widthHeight[0]) > Number(widthHeight[1])) {
await ScreenOrientation.lock({ orientation: 'landscape' });
} else {
await ScreenOrientation.lock({
orientation: (originalOrigination as ScreenOrientationResult).type
});
await ScreenOrientation.lock({ orientation: 'portrait' });
}
});
}
} else {
await ScreenOrientation.lock({
orientation: (originalOrigination as ScreenOrientationResult).type
});
}
});
}
async function setupSponsorSkip() {
@@ -551,6 +552,61 @@
await androidHandleRotate();
if ('mediaSession' in navigator) {
const metadataArtwork: MediaImage[] = [];
data.video.videoThumbnails.forEach((thumbnail) => {
metadataArtwork.push({
type: 'image/jpeg',
sizes: `${thumbnail.width}x${thumbnail.height}`,
src: thumbnail.url
});
});
navigator.mediaSession.metadata = new MediaMetadata({
title: data.video.title,
artist: data.video.author,
artwork: metadataArtwork
});
navigator.mediaSession.setActionHandler('play', () => playerElement?.play());
navigator.mediaSession.setActionHandler('pause', () => playerElement?.pause());
navigator.mediaSession.setActionHandler('seekbackward', (details) => {
if (!playerElement) return;
playerElement.currentTime = Math.max(
playerElement.currentTime - (details.seekOffset || 10),
0
);
});
navigator.mediaSession.setActionHandler('seekforward', (details) => {
if (!playerElement) return;
playerElement.currentTime = Math.min(
playerElement.currentTime + (details.seekOffset || 10),
playerElement.duration
);
});
navigator.mediaSession.setActionHandler('seekto', (details) => {
if (!playerElement) return;
if (details.fastSeek && 'fastSeek' in playerElement) {
playerElement.fastSeek(details.seekTime ?? 0);
} else {
playerElement.currentTime = details.seekTime ?? 0;
}
});
navigator.mediaSession.setActionHandler('stop', () => {
if (!playerElement) return;
playerElement.pause();
playerElement.currentTime = 0;
});
}
Mousetrap.bind('space', () => {
if (!playerElement) return;
@@ -7,7 +7,7 @@
import { get } from 'svelte/store';
import { getDeArrow, getThumbnail } from '../api';
import type { Notification, PlaylistPageVideo, Video, VideoBase } from '../api/model';
import { insecureRequestImageHandler, truncate } from '../misc';
import { insecureRequestImageHandler } from '../misc';
import type { PlayerEvents } from '../player';
import {
authStore,
@@ -65,7 +65,7 @@
function disableSideways() {
if (!startedSideways) return;
if (window.innerWidth <= 1500) {
if (window.innerWidth <= 1800) {
sideways = false;
} else sideways = true;
}
@@ -229,14 +229,15 @@
<div>
<a tabindex="-1" class:author={!sideways} href={`/channel/${video.authorId}`}
>{video.author}
{#if !('publishedText' in video) && 'viewCountText' in video}
<span>
&nbsp;{video.viewCountText}
{$_('views')}
</span>
{/if}
</a>
{#if !('publishedText' in video) && 'viewCountText' in video}
<span>
{video.viewCountText}
{$_('views')}
</span>
{/if}
{#if 'publishedText' in video}
<div class="max">
{cleanNumber(video.viewCount)}{video.publishedText}
@@ -280,9 +281,10 @@
.sideways-root .video-title span {
display: block;
white-space: nowrap;
white-space: normal;
overflow: hidden;
text-overflow: ellipsis;
word-wrap: break-word;
line-height: 1.2;
}
.video-title {
@@ -121,8 +121,6 @@ export async function patchYoutubeJs(videoId: string): Promise<VideoPlay> {
return;
}
console.log(recommended);
recommendedVideos.push({
videoThumbnails: (recommended?.content_image?.image as Thumbnail[]) || [],
videoId: recommended?.content_id || '',
-1
View File
@@ -8,7 +8,6 @@ export async function loadEntirePlaylist(
): Promise<{ videos: PlaylistPageVideo[]; info: PlaylistPage }> {
const cachedPlaylists = get(playlistCacheStore);
if (playlistId in cachedPlaylists) {
console.log('Using cache');
return cachedPlaylists[playlistId];
}
@@ -30,13 +30,13 @@ export async function load({ params, url }) {
} else {
getSearch(params.slug, { type: type }).then((newSearch) => {
searchCacheStore.set({
...get(searchCacheStore),
[searchStoreId]: excludeDuplicateFeeds(search, newSearch) as (
| Channel
| Video
| Playlist
| HashTag
)[]
)[],
...get(searchCacheStore)
});
});
}
+1 -1
View File
@@ -3,7 +3,7 @@ import os
import re
from datetime import datetime
LATEST_VERSION = "1.10.5"
LATEST_VERSION = "1.10.6"
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")