Use mediaSession

This commit is contained in:
WardPearce
2025-09-05 12:24:14 +12:00
parent 8f8efb97ff
commit 35f765bf5b
10 changed files with 97 additions and 21 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">
-10
View File
@@ -11,7 +11,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": "~1.1.0",
@@ -1798,15 +1797,6 @@
"node": ">= 0.4"
}
},
"node_modules/capacitor-nodejs": {
"version": "1.0.0-beta.9",
"resolved": "https://github.com/hampoelz/capacitor-nodejs/releases/download/v1.0.0-beta.9/capacitor-nodejs.tgz",
"integrity": "sha512-4EU/QBolfuyHiMtwd1nxZ4wsK243tGE4VttKvVBG+x1yQuK9EIlEf3lbRjFXfjrJMTZNCqaP6glmdfj9Zo7KVg==",
"license": "MIT",
"peerDependencies": {
"@capacitor/core": ">=7.0.0"
}
},
"node_modules/chalk": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+1 -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",
@@ -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": "~1.1.0",
@@ -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,
}
+2 -2
View File
@@ -1,6 +1,6 @@
{
"name": "materialious",
"version": "1.10.5",
"version": "1.10.6",
"private": true,
"scripts": {
"dev": "vite dev",
@@ -69,4 +69,4 @@
"svelte-persisted-store": "^0.12.0",
"youtubei.js": "^15.0.0"
}
}
}
@@ -551,6 +551,63 @@
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
});
});
console.log(metadataArtwork);
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,
+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")