Merge remote-tracking branch 'origin/main' into support_nonroot_base

This commit is contained in:
Precific
2025-11-15 01:30:03 +01:00
14 changed files with 46 additions and 181 deletions
+2 -2
View File
@@ -7,8 +7,8 @@ android {
applicationId "us.materialio.app"
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
versionCode 165
versionName "1.11.5"
versionCode 166
versionName "1.11.6"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
aaptOptions {
// Files and dirs to omit from the packaged assets dir, modified to accommodate modern web apps.
@@ -75,7 +75,11 @@
<release version="1.11.5" date="2025-11-08">
<release version="1.11.6" date="2025-11-13">
<url>https://github.com/Materialious/Materialious/releases/tag/1.11.6</url>
</release>
<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">
+6 -6
View File
@@ -1,12 +1,12 @@
{
"name": "Materialious",
"version": "1.11.5",
"version": "1.11.6",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "Materialious",
"version": "1.11.5",
"version": "1.11.6",
"license": "MIT",
"dependencies": {
"@capacitor-community/electron": "^5.0.0",
@@ -22,7 +22,7 @@
"jsonfile": "^6.2.0"
},
"devDependencies": {
"electron": "^39.0.0",
"electron": "^39.1.1",
"electron-builder": "^26.0.12",
"electron-rebuild": "^3.2.9",
"typescript": "^5.9.3"
@@ -2571,9 +2571,9 @@
}
},
"node_modules/electron": {
"version": "39.0.0",
"resolved": "https://registry.npmjs.org/electron/-/electron-39.0.0.tgz",
"integrity": "sha512-UejnuOK4jpRZUq7MkEAnR/szsRWLKBJAdvn6j3xdQLT57fVv13VSNdaUHHjSheaqGzNhCGIdkPsPJnGJVh5kiA==",
"version": "39.1.1",
"resolved": "https://registry.npmjs.org/electron/-/electron-39.1.1.tgz",
"integrity": "sha512-VuFEI1yQ7BH3RYI5VZtwFlzGp4rpPRd5oEc26ZQIItVLcLTbXt4/O7o4hs+1fyg9Q3NvGAifgX5Vp5EBOIFpAg==",
"dev": true,
"hasInstallScript": true,
"license": "MIT",
+2 -3
View File
@@ -1,6 +1,6 @@
{
"name": "Materialious",
"version": "1.11.5",
"version": "1.11.6",
"description": "Modern material design for Invidious.",
"author": {
"name": "Ward Pearce",
@@ -24,7 +24,6 @@
"dependencies": {
"@capacitor-community/electron": "^5.0.0",
"bgutils-js": "^3.2.0",
"capacitor-nodejs": "https://github.com/hampoelz/capacitor-nodejs/releases/download/v1.0.0-beta.9/capacitor-nodejs.tgz",
"chokidar": "~4.0.3",
"electron-is-dev": "~2.0.0",
"electron-serve": "~3.0.0",
@@ -35,7 +34,7 @@
"jsonfile": "^6.2.0"
},
"devDependencies": {
"electron": "^39.0.0",
"electron": "^39.1.1",
"electron-builder": "^26.0.12",
"electron-rebuild": "^3.2.9",
"typescript": "^5.9.3"
@@ -1,6 +1,4 @@
/* eslint-disable @typescript-eslint/no-var-requires */
const CapacitorNodejs = require('../../../node_modules/capacitor-nodejs/electron/dist/plugin.js');
module.exports = {
CapacitorNodejs,
}
+24 -23
View File
@@ -1,12 +1,12 @@
{
"name": "materialious",
"version": "1.11.5",
"version": "1.11.6",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "materialious",
"version": "1.11.5",
"version": "1.11.6",
"hasInstallScript": true,
"dependencies": {
"@capacitor-community/electron": "^5.0.1",
@@ -26,7 +26,7 @@
"he": "^1.2.0",
"human-number": "^2.0.7",
"i18next": "^25.6.0",
"iso-3166": "^4.3.0",
"iso-3166": "^4.4.0",
"iso-639-1": "^3.1.5",
"material-dynamic-colors": "^1.1.1",
"media-captions": "^1.0.4",
@@ -40,7 +40,7 @@
},
"devDependencies": {
"@capacitor/assets": "^3.0.5",
"@capacitor/cli": "^7.4.3",
"@capacitor/cli": "^7.4.4",
"@sveltejs/adapter-auto": "^6.0.1",
"@sveltejs/adapter-static": "^3.0.10",
"@sveltejs/kit": "^2.46.5",
@@ -55,11 +55,11 @@
"@vite-pwa/sveltekit": "^1.0.0",
"eslint": "^8.56.0",
"eslint-config-prettier": "^10.1.8",
"eslint-plugin-svelte": "^3.11.0",
"eslint-plugin-svelte": "^3.13.0",
"patch-package": "^8.0.1",
"prettier": "^3.6.2",
"prettier-plugin-svelte": "^3.4.0",
"svelte": "^5.43.2",
"svelte": "^5.43.5",
"svelte-check": "^4.3.3",
"tslib": "^2.7.0",
"typescript": "^5.9.3",
@@ -1834,9 +1834,9 @@
}
},
"node_modules/@capacitor/cli": {
"version": "7.4.3",
"resolved": "https://registry.npmjs.org/@capacitor/cli/-/cli-7.4.3.tgz",
"integrity": "sha512-SWozpdDgrbQ/ry1nIapugDFvE9z+l22BmU/+fpgL2Zv5487hGdXvCX5+1SluuFBP3IPpx6b4LjsKnBigyJoUWg==",
"version": "7.4.4",
"resolved": "https://registry.npmjs.org/@capacitor/cli/-/cli-7.4.4.tgz",
"integrity": "sha512-J7ciBE7GlJ70sr2s8oz1+H4ZdNk4MGG41fsakUlDHWva5UWgFIZYMiEdDvGbYazAYTaxN3lVZpH9zil9FfZj+Q==",
"license": "MIT",
"dependencies": {
"@ionic/cli-framework-output": "^2.2.8",
@@ -5965,9 +5965,9 @@
}
},
"node_modules/eslint-plugin-svelte": {
"version": "3.11.0",
"resolved": "https://registry.npmjs.org/eslint-plugin-svelte/-/eslint-plugin-svelte-3.11.0.tgz",
"integrity": "sha512-KliWlkieHyEa65aQIkRwUFfHzT5Cn4u3BQQsu3KlkJOs7c1u7ryn84EWaOjEzilbKgttT4OfBURA8Uc4JBSQIw==",
"version": "3.13.0",
"resolved": "https://registry.npmjs.org/eslint-plugin-svelte/-/eslint-plugin-svelte-3.13.0.tgz",
"integrity": "sha512-2ohCCQJJTNbIpQCSDSTWj+FN0OVfPmSO03lmSNT7ytqMaWF6kpT86LdzDqtm4sh7TVPl/OEWJ/d7R87bXP2Vjg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -5980,7 +5980,7 @@
"postcss-load-config": "^3.1.4",
"postcss-safe-parser": "^7.0.0",
"semver": "^7.6.3",
"svelte-eslint-parser": "^1.3.0"
"svelte-eslint-parser": "^1.4.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -7930,9 +7930,9 @@
"license": "ISC"
},
"node_modules/iso-3166": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/iso-3166/-/iso-3166-4.3.0.tgz",
"integrity": "sha512-H4kM/sVbxTjSl9xnQCYOrNWdpN0R8Uz26j1BuXI9E6U+kw5wmd3HyPgr/v4+NCuvV/NcvwTfZxd5XZ4lPKvBNA==",
"version": "4.4.0",
"resolved": "https://registry.npmjs.org/iso-3166/-/iso-3166-4.4.0.tgz",
"integrity": "sha512-I6ylkNQgxVh7cYADMUJpqBUdremGvyGZkDRSk9Cdic/ITBUemsllQnUeRpz7yDKyfgAXI9oPa5A9dia+7IXLqw==",
"license": "MIT",
"funding": {
"type": "github",
@@ -11553,9 +11553,9 @@
}
},
"node_modules/svelte": {
"version": "5.43.2",
"resolved": "https://registry.npmjs.org/svelte/-/svelte-5.43.2.tgz",
"integrity": "sha512-ro1umEzX8rT5JpCmlf0PPv7ncD8MdVob9e18bhwqTKNoLjS8kDvhVpaoYVPc+qMwDAOfcwJtyY7ZFSDbOaNPgA==",
"version": "5.43.5",
"resolved": "https://registry.npmjs.org/svelte/-/svelte-5.43.5.tgz",
"integrity": "sha512-HQoZArIewxQVNedseDsgMgnRSC4XOXczxXLF9rOJaPIJkg58INOPUiL8aEtzqZIXNSZJyw8NmqObwg/voajiHQ==",
"license": "MIT",
"dependencies": {
"@jridgewell/remapping": "^2.3.4",
@@ -11632,9 +11632,9 @@
}
},
"node_modules/svelte-eslint-parser": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/svelte-eslint-parser/-/svelte-eslint-parser-1.3.0.tgz",
"integrity": "sha512-VCgMHKV7UtOGcGLGNFSbmdm6kEKjtzo5nnpGU/mnx4OsFY6bZ7QwRF5DUx+Hokw5Lvdyo8dpk8B1m8mliomrNg==",
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/svelte-eslint-parser/-/svelte-eslint-parser-1.4.0.tgz",
"integrity": "sha512-fjPzOfipR5S7gQ/JvI9r2H8y9gMGXO3JtmrylHLLyahEMquXI0lrebcjT+9/hNgDej0H7abTyox5HpHmW1PSWA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -11646,7 +11646,8 @@
"postcss-selector-parser": "^7.0.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
"node": "^18.18.0 || ^20.9.0 || >=21.1.0",
"pnpm": "10.18.3"
},
"funding": {
"url": "https://github.com/sponsors/ota-meshi"
+5 -5
View File
@@ -1,6 +1,6 @@
{
"name": "materialious",
"version": "1.11.5",
"version": "1.11.6",
"private": true,
"scripts": {
"dev": "vite dev",
@@ -15,7 +15,7 @@
},
"devDependencies": {
"@capacitor/assets": "^3.0.5",
"@capacitor/cli": "^7.4.3",
"@capacitor/cli": "^7.4.4",
"@sveltejs/adapter-auto": "^6.0.1",
"@sveltejs/adapter-static": "^3.0.10",
"@sveltejs/kit": "^2.46.5",
@@ -30,11 +30,11 @@
"@vite-pwa/sveltekit": "^1.0.0",
"eslint": "^8.56.0",
"eslint-config-prettier": "^10.1.8",
"eslint-plugin-svelte": "^3.11.0",
"eslint-plugin-svelte": "^3.13.0",
"patch-package": "^8.0.1",
"prettier": "^3.6.2",
"prettier-plugin-svelte": "^3.4.0",
"svelte": "^5.43.2",
"svelte": "^5.43.5",
"svelte-check": "^4.3.3",
"tslib": "^2.7.0",
"typescript": "^5.9.3",
@@ -59,7 +59,7 @@
"he": "^1.2.0",
"human-number": "^2.0.7",
"i18next": "^25.6.0",
"iso-3166": "^4.3.0",
"iso-3166": "^4.4.0",
"iso-639-1": "^3.1.5",
"material-dynamic-colors": "^1.1.1",
"media-captions": "^1.0.4",
-5
View File
@@ -68,11 +68,6 @@ export function buildAuthHeaders(): { headers: Record<string, string> } {
}
}
export async function getTrending(fetchOptions?: RequestInit): Promise<Video[]> {
const resp = await fetchErrorHandle(await fetch(setRegion(buildPath('trending')), fetchOptions));
return await resp.json();
}
export async function getPopular(fetchOptions?: RequestInit): Promise<Video[]> {
const resp = await fetchErrorHandle(await fetch(buildPath('popular'), fetchOptions));
return await resp.json();
@@ -76,7 +76,7 @@
let resp;
try {
resp = await fetch(`${instance}/api/v1/trending`);
resp = await fetch(`${instance}/api/v1/channels/UCH-_hzb2ILSCo9ftVSnrCIQ`);
} catch {
invalidInstance = true;
}
-14
View File
@@ -12,12 +12,6 @@ export function getPages(): Pages {
name: get(_)('pages.home'),
requiresAuth: false
},
{
icon: 'whatshot',
href: '/trending',
name: get(_)('pages.trending'),
requiresAuth: false
},
{
icon: 'subscriptions',
href: '/subscriptions',
@@ -30,13 +24,5 @@ export function getPages(): Pages {
name: get(_)('pages.playlists'),
requiresAuth: true
}
// Temporarily disable history page due to limitations with
// Invidious's API
// {
// icon: 'history',
// href: '/history',
// name: get(_)('pages.history'),
// requiresAuth: true
// }
];
}
@@ -1,90 +0,0 @@
<script lang="ts">
import { deleteAllVideoProgress, deleteHistory, getHistory, getVideo } from '$lib/api';
import type { VideoPlay } from '$lib/api/model';
import PageLoading from '$lib/components/PageLoading.svelte';
import { synciousStore } from '$lib/store';
import { error } from '@sveltejs/kit';
import { onMount } from 'svelte';
import { _ } from '$lib/i18n';
import InfiniteLoading, { type InfiniteEvent } from 'svelte-infinite-loading';
import { get } from 'svelte/store';
import ItemsList from '$lib/components/ItemsList.svelte';
let history: VideoPlay[] = $state([]);
let loaded = $state(false);
let currentPage = 1;
async function loadPageHistory() {
try {
const videoIds = await getHistory(currentPage, 20);
let promises = [];
for (const videoId of videoIds) {
promises.push(
getVideo(videoId).catch(() => {
return null;
})
);
}
const loadedHistory = (await Promise.all(promises)).filter((item) => {
return item !== null;
}) as VideoPlay[];
history = [...history, ...loadedHistory];
} catch (errorMessage: any) {
error(500, errorMessage);
}
}
async function loadMore(event: InfiniteEvent) {
const pastHistoryLen = Number(history.length);
currentPage++;
await loadPageHistory();
if (pastHistoryLen === history.length) {
event.detail.complete();
} else {
event.detail.loaded();
}
}
onMount(async () => {
await loadPageHistory();
loaded = true;
});
</script>
<div class="space"></div>
<nav class="right-align">
<button
onclick={async () => {
await deleteHistory();
if (get(synciousStore)) {
deleteAllVideoProgress();
}
history = [];
try {
Object.keys(localStorage).forEach((key) => {
if (key.startsWith('v_')) {
localStorage.removeItem(key);
}
});
} catch {}
}}
>
<i>delete_sweep</i>
<span>{$_('deleteAllHistory')}</span>
</button>
</nav>
{#if loaded}
<ItemsList items={history} />
<InfiniteLoading on:infinite={loadMore} />
{:else}
<PageLoading />
{/if}
@@ -1,6 +0,0 @@
<script lang="ts">
import ItemsList from '$lib/components/ItemsList.svelte';
import { feedCacheStore } from '$lib/store';
</script>
<ItemsList items={$feedCacheStore.trending ?? []} />
@@ -1,22 +0,0 @@
import { getTrending } from '$lib/api/index';
import { feedCacheStore } from '$lib/store';
import { error } from '@sveltejs/kit';
import { get } from 'svelte/store';
export async function load() {
let trending = get(feedCacheStore).trending;
if (!trending) {
try {
trending = await getTrending();
} catch (errorMessage: any) {
error(500, errorMessage);
}
feedCacheStore.set({ ...get(feedCacheStore), trending });
} else {
getTrending().then((newTrending) =>
feedCacheStore.set({ ...get(feedCacheStore), trending: newTrending })
);
}
}
+1 -1
View File
@@ -3,7 +3,7 @@ import os
import re
from datetime import datetime
LATEST_VERSION = "1.11.5"
LATEST_VERSION = "1.11.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")