Use mediaSession
This commit is contained in:
@@ -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>
|
||||
@@ -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">
|
||||
|
||||
Generated
-10
@@ -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,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,
|
||||
}
|
||||
@@ -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
@@ -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")
|
||||
|
||||
Reference in New Issue
Block a user