@@ -7,8 +7,8 @@ android {
|
||||
applicationId "us.materialio.app"
|
||||
minSdkVersion rootProject.ext.minSdkVersion
|
||||
targetSdkVersion rootProject.ext.targetSdkVersion
|
||||
versionCode 179
|
||||
versionName "1.12.7"
|
||||
versionCode 180
|
||||
versionName "1.12.8"
|
||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||
aaptOptions {
|
||||
// Files and dirs to omit from the packaged assets dir, modified to accommodate modern web apps.
|
||||
|
||||
@@ -76,7 +76,11 @@
|
||||
|
||||
|
||||
|
||||
<release version="1.12.7" date="2025-12-22">
|
||||
|
||||
<release version="1.12.8" date="2025-12-23">
|
||||
<url>https://github.com/Materialious/Materialious/releases/tag/1.12.8</url>
|
||||
</release>
|
||||
<release version="1.12.7" date="2025-12-22">
|
||||
<url>https://github.com/Materialious/Materialious/releases/tag/1.12.7</url>
|
||||
</release>
|
||||
<release version="1.12.6" date="2025-12-22">
|
||||
|
||||
Generated
+2
-2
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "Materialious",
|
||||
"version": "1.12.7",
|
||||
"version": "1.12.8",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "Materialious",
|
||||
"version": "1.12.7",
|
||||
"version": "1.12.8",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@capacitor-community/electron": "^5.0.0",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "Materialious",
|
||||
"version": "1.12.7",
|
||||
"version": "1.12.8",
|
||||
"description": "Modern material design for Invidious.",
|
||||
"author": {
|
||||
"name": "Ward Pearce",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "materialious",
|
||||
"version": "1.12.7",
|
||||
"version": "1.12.8",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"dev": "vite dev",
|
||||
|
||||
@@ -886,10 +886,43 @@
|
||||
playerTimelineTooltipVisible = true;
|
||||
}
|
||||
|
||||
function handleMouseLeave(): void {
|
||||
function handleMouseLeave() {
|
||||
playerTimelineTooltipVisible = false;
|
||||
}
|
||||
|
||||
function onVideoClick(
|
||||
event: MouseEvent & {
|
||||
currentTarget: EventTarget & HTMLDivElement;
|
||||
}
|
||||
) {
|
||||
if (
|
||||
event.target &&
|
||||
event.target instanceof HTMLElement &&
|
||||
event.target.id === 'player-center' &&
|
||||
playerElement
|
||||
) {
|
||||
const container = event.currentTarget;
|
||||
|
||||
const rect = container.getBoundingClientRect();
|
||||
const clickX = event.clientX - rect.left;
|
||||
const width = rect.width;
|
||||
|
||||
if (clickX < width / 3) {
|
||||
// Left third, back 10s
|
||||
playerElement.currentTime = Math.max(0, playerElement.currentTime - 10);
|
||||
} else if (clickX < (2 * width) / 3) {
|
||||
// Middle third, toggle play/pause
|
||||
toggleVideoPlaybackStatus();
|
||||
} else {
|
||||
// Right third, forward 10s
|
||||
playerElement.currentTime = Math.min(
|
||||
playerElement.duration,
|
||||
playerElement.currentTime + 10
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
onDestroy(async () => {
|
||||
if (Capacitor.getPlatform() === 'android') {
|
||||
if (!$isAndroidTvStore) {
|
||||
@@ -932,15 +965,7 @@
|
||||
class:tv-contain-video={$isAndroidTvStore}
|
||||
class:hide={showVideoRetry}
|
||||
role="presentation"
|
||||
onclick={(event) => {
|
||||
if (
|
||||
event.target &&
|
||||
event.target instanceof HTMLElement &&
|
||||
event.target.id === 'player-center'
|
||||
) {
|
||||
toggleVideoPlaybackStatus();
|
||||
}
|
||||
}}
|
||||
onclick={onVideoClick}
|
||||
>
|
||||
<video
|
||||
controls={false}
|
||||
@@ -954,7 +979,7 @@
|
||||
</div>
|
||||
{/if}
|
||||
{#if !hideControls}
|
||||
<p id="mobile-time" class="chip primary s">
|
||||
<p id="mobile-time" class="chip secondary s">
|
||||
{#if data.video.liveNow}
|
||||
{$_('thumbnail.live')}
|
||||
{:else}
|
||||
@@ -966,7 +991,7 @@
|
||||
{#if playerIsBuffering}
|
||||
<progress class="circle large indeterminate" value="50" max="100"></progress>
|
||||
{:else if !playerCurrentPlaybackState}
|
||||
<button class="extra" onclick={toggleVideoPlaybackStatus}>
|
||||
<button class="extra secondary" onclick={toggleVideoPlaybackStatus}>
|
||||
<i>play_arrow</i>
|
||||
</button>
|
||||
{/if}
|
||||
@@ -974,7 +999,7 @@
|
||||
{#if !hideControls}
|
||||
<div id="player-controls">
|
||||
<article class="round" style="width: 100%;padding: 0;height: 10px;">
|
||||
<label class="slider max">
|
||||
<label id="progress-slider" class="slider max">
|
||||
{#key playerCurrentTime}
|
||||
<input
|
||||
oninput={handleTimeChange}
|
||||
@@ -999,7 +1024,7 @@
|
||||
|
||||
<nav>
|
||||
<nav class="no-wrap">
|
||||
<button onclick={toggleVideoPlaybackStatus}>
|
||||
<button class="secondary" onclick={toggleVideoPlaybackStatus}>
|
||||
<i>
|
||||
{#if playerCurrentPlaybackState}
|
||||
pause
|
||||
@@ -1037,7 +1062,7 @@
|
||||
<div class="max"></div>
|
||||
|
||||
<nav class="no-wrap">
|
||||
<p class="chip primary m l" style="border: none;">
|
||||
<p class="chip secondary m l" style="border: none;">
|
||||
{#if data.video.liveNow}
|
||||
{$_('thumbnail.live')}
|
||||
{:else}
|
||||
@@ -1045,7 +1070,7 @@
|
||||
{/if}
|
||||
</p>
|
||||
{#if playerTextTracks && playerTextTracks.length > 0 && !data.video.liveNow}
|
||||
<button>
|
||||
<button class="secondary">
|
||||
<i>closed_caption</i>
|
||||
<menu class="no-wrap mobile" id="cc-menu" data-ui="#cc-menu">
|
||||
<li
|
||||
@@ -1070,7 +1095,7 @@
|
||||
</menu>
|
||||
</button>
|
||||
{/if}
|
||||
<button>
|
||||
<button class="secondary">
|
||||
<i>settings</i>
|
||||
<menu class="no-wrap mobile" id="settings-menu">
|
||||
{#if playerSettings !== 'root'}
|
||||
@@ -1206,6 +1231,7 @@
|
||||
</button>
|
||||
{#if document.pictureInPictureEnabled}
|
||||
<button
|
||||
class="secondary"
|
||||
onclick={() => {
|
||||
(playerElement as HTMLVideoElement).requestPictureInPicture();
|
||||
}}
|
||||
@@ -1214,6 +1240,7 @@
|
||||
</button>
|
||||
{/if}
|
||||
<button
|
||||
class="secondary"
|
||||
onclick={() => {
|
||||
if (document.fullscreenElement) {
|
||||
document.exitFullscreen();
|
||||
@@ -1297,6 +1324,10 @@
|
||||
transition: opacity 2s ease;
|
||||
}
|
||||
|
||||
#progress-slider > span {
|
||||
transition: 0.25s;
|
||||
}
|
||||
|
||||
#player-container:focus-within #player-controls,
|
||||
#player-container:active #player-controls,
|
||||
#player-container:hover #player-controls {
|
||||
|
||||
@@ -102,7 +102,17 @@
|
||||
"chapters": "Kapitel",
|
||||
"retryText": "Das Video konnte nicht geladen werden, wie möchtest du weiterfahren?",
|
||||
"youtubeJsLoading": "Das Video konnte nicht geladen werden, es wird mit lokalem Video-Fallback erneut versucht.",
|
||||
"premiere": "Video wird verfügbar sein"
|
||||
"premiere": "Video wird verfügbar sein",
|
||||
"controls": {
|
||||
"back": "Zurück",
|
||||
"quality": "Qualität",
|
||||
"auto": "Automatisch",
|
||||
"playbackSpeed": "Wiedergabegeschwindigkeit",
|
||||
"loop": "Schleife",
|
||||
"on": "An",
|
||||
"off": "Aus",
|
||||
"language": "Sprache"
|
||||
}
|
||||
},
|
||||
"layout": {
|
||||
"interface": "Benutzeroberfläche",
|
||||
|
||||
@@ -184,7 +184,17 @@
|
||||
"enableYoutubejsPerm": "Lokale Video-Fallback immer erlaube",
|
||||
"enableYoutubejsTemp": "Nutz eimalig de lokali Video-Fallback",
|
||||
"youtubeJsFallBack": "Lokale Video-Fallback wird gnutzt",
|
||||
"premiere": "Video wird verfüegbar sii"
|
||||
"premiere": "Video wird verfüegbar sii",
|
||||
"controls": {
|
||||
"back": "Zrugg",
|
||||
"quality": "Qualität",
|
||||
"auto": "Automatisch",
|
||||
"playbackSpeed": "Widergabegschwindigkeit",
|
||||
"loop": "Schleife",
|
||||
"on": "Aa",
|
||||
"off": "Uus",
|
||||
"language": "Spraach"
|
||||
}
|
||||
},
|
||||
"subscribe": "Abonniere",
|
||||
"invidiousLogin": "Bitte meld dich mit dim Invidious-Konto aa",
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"enabled": "啟用",
|
||||
"disabled": "停用"
|
||||
}
|
||||
+1
-1
@@ -3,7 +3,7 @@ import os
|
||||
import re
|
||||
from datetime import datetime
|
||||
|
||||
LATEST_VERSION = "1.12.7"
|
||||
LATEST_VERSION = "1.12.8"
|
||||
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