@@ -2,6 +2,16 @@
|
||||
|
||||
This Guide is for the docker image `wardpearce/materialious-full` **NOT** `wardpearce/materialious`
|
||||
|
||||
### Invidious Companion support
|
||||
`public_url` **MUST** be set in Invidious under **invidious_companion** for companion to work with Materialious.
|
||||
|
||||
e.g.
|
||||
```yml
|
||||
invidious_companion:
|
||||
- private_url: "http://companion:8282/companion"
|
||||
public_url: "http://companion.example.com/companion"
|
||||
```
|
||||
|
||||
### Docker Compose
|
||||
|
||||
```yaml
|
||||
|
||||
@@ -7,8 +7,8 @@ android {
|
||||
applicationId "us.materialio.app"
|
||||
minSdkVersion rootProject.ext.minSdkVersion
|
||||
targetSdkVersion rootProject.ext.targetSdkVersion
|
||||
versionCode 214
|
||||
versionName "1.15.6"
|
||||
versionCode 215
|
||||
versionName "1.15.7"
|
||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||
aaptOptions {
|
||||
// Files and dirs to omit from the packaged assets dir, modified to accommodate modern web apps.
|
||||
|
||||
@@ -79,7 +79,11 @@
|
||||
|
||||
|
||||
|
||||
<release version="1.15.6" date="2026-2-16">
|
||||
|
||||
<release version="1.15.7" date="2026-2-16">
|
||||
<url>https://github.com/Materialious/Materialious/releases/tag/1.15.7</url>
|
||||
</release>
|
||||
<release version="1.15.6" date="2026-2-16">
|
||||
<url>https://github.com/Materialious/Materialious/releases/tag/1.15.6</url>
|
||||
</release>
|
||||
<release version="1.15.5" date="2026-2-16">
|
||||
|
||||
Generated
+2
-2
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "Materialious",
|
||||
"version": "1.15.5",
|
||||
"version": "1.15.7",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "Materialious",
|
||||
"version": "1.15.5",
|
||||
"version": "1.15.7",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@capacitor-community/electron": "^5.0.0",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "Materialious",
|
||||
"version": "1.15.6",
|
||||
"version": "1.15.7",
|
||||
"description": "Modern material design for YouTube and Invidious.",
|
||||
"author": {
|
||||
"name": "Ward Pearce",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "materialious",
|
||||
"version": "1.15.6",
|
||||
"version": "1.15.7",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"dev": "npm run patch:github && vite dev",
|
||||
|
||||
@@ -52,8 +52,8 @@
|
||||
goToPreviousVideo,
|
||||
playbackRates,
|
||||
playerDoubleTapSeek
|
||||
} from '$lib/player';
|
||||
import { dashManifestDomainInclusion } from '$lib/android/youtube/dash';
|
||||
} from '$lib/player/index';
|
||||
import { manifestDomainInclusion } from '$lib/player/manifest';
|
||||
import { injectSabr } from '$lib/sabr';
|
||||
import type { SabrStreamingAdapter } from 'googlevideo/sabr-streaming-adapter';
|
||||
import { SvelteSet } from 'svelte/reactivity';
|
||||
@@ -67,6 +67,7 @@
|
||||
storyboardThumbnails,
|
||||
type TimelineThumbnail
|
||||
} from '$lib/timelineThumbnails';
|
||||
import { isOwnBackend } from '$lib/shared';
|
||||
|
||||
interface Props {
|
||||
data: { video: VideoPlay; content: ParsedDescription; playlistId: string | null };
|
||||
@@ -567,11 +568,12 @@
|
||||
}
|
||||
|
||||
if (
|
||||
Capacitor.getPlatform() === 'android' &&
|
||||
(Capacitor.getPlatform() === 'android' ||
|
||||
(isOwnBackend() && Capacitor.getPlatform() === 'web')) &&
|
||||
$playerProxyVideosStore &&
|
||||
!data.video.fallbackPatch
|
||||
) {
|
||||
const manifest = await dashManifestDomainInclusion(dashUrl);
|
||||
const manifest = await manifestDomainInclusion(dashUrl);
|
||||
await player.load(manifest, await getLastPlayPos());
|
||||
} else {
|
||||
await player.load(dashUrl, await getLastPlayPos());
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
setWindowQueryFlag,
|
||||
shareURL
|
||||
} from '$lib/misc';
|
||||
import type { PlayerEvents } from '$lib/player';
|
||||
import type { PlayerEvents } from '$lib/player/index';
|
||||
import type { DataConnection } from 'peerjs';
|
||||
import { onDestroy, onMount } from 'svelte';
|
||||
import { _ } from '$lib/i18n';
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
playerYouTubeJsAlways,
|
||||
playerYouTubeJsFallback
|
||||
} from '../../store';
|
||||
import { playbackRates } from '$lib/player';
|
||||
import { playbackRates } from '$lib/player/index';
|
||||
import { isUnrestrictedPlatform } from '$lib/misc';
|
||||
|
||||
let defaultLanguage = $state(get(playerDefaultLanguage));
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
import { get } from 'svelte/store';
|
||||
import type { PlaylistPageVideo, VideoPlay } from './api/model';
|
||||
import type { PlaylistPageVideo, VideoPlay } from '$lib/api/model';
|
||||
import {
|
||||
isAndroidTvStore,
|
||||
playerAutoplayNextByDefaultStore,
|
||||
playerPlaylistHistory,
|
||||
playlistSettingsStore,
|
||||
syncPartyConnectionsStore
|
||||
} from './store';
|
||||
} from '$lib/store';
|
||||
import { goto } from '$app/navigation';
|
||||
import { resolve } from '$app/paths';
|
||||
import { loadEntirePlaylist } from './playlist';
|
||||
import { unsafeRandomItem } from './misc';
|
||||
import { loadEntirePlaylist } from '$lib/playlist';
|
||||
import { unsafeRandomItem } from '$lib/misc';
|
||||
|
||||
export interface PlayerEvent {
|
||||
type: 'pause' | 'seek' | 'change-video' | 'play' | 'playlist' | 'goto';
|
||||
+5
-9
@@ -1,23 +1,19 @@
|
||||
export async function dashManifestDomainInclusion(manifestUrl: string): Promise<string> {
|
||||
/* If on android, must manually format dash manifest to include URL. */
|
||||
|
||||
// Must fetch the headers of the request
|
||||
// using our custom android proxy logic
|
||||
export async function manifestDomainInclusion(manifestUrl: string): Promise<string> {
|
||||
const respIvg = await fetch(manifestUrl, {
|
||||
method: 'GET',
|
||||
headers: {
|
||||
__custom_return: 'json-headers',
|
||||
// Required for our custom android backend.
|
||||
__redirect: 'manual'
|
||||
}
|
||||
},
|
||||
referrerPolicy: 'no-referrer'
|
||||
});
|
||||
|
||||
if (!respIvg.ok) {
|
||||
throw Error('Unable to make request to Invidious');
|
||||
}
|
||||
|
||||
const ivgHeaders = await respIvg.json();
|
||||
// If location isn't present, then use base manifest URL.
|
||||
const companionUrl = 'location' in ivgHeaders ? ivgHeaders['location'] : manifestUrl;
|
||||
const companionUrl = respIvg.headers.get('location') ?? manifestUrl;
|
||||
|
||||
const respCompanion = await fetch(companionUrl, {
|
||||
method: 'GET'
|
||||
@@ -13,7 +13,7 @@
|
||||
import { getBestThumbnail } from '$lib/images';
|
||||
import { letterCase } from '$lib/letterCasing';
|
||||
import { cleanNumber, numberWithCommas } from '$lib/numbers';
|
||||
import { goToNextVideo, goToPreviousVideo, type PlayerEvents } from '$lib/player';
|
||||
import { goToNextVideo, goToPreviousVideo, type PlayerEvents } from '$lib/player/index';
|
||||
import {
|
||||
invidiousAuthStore,
|
||||
interfaceAutoExpandChapters,
|
||||
|
||||
File diff suppressed because one or more lines are too long
+1
-1
@@ -3,7 +3,7 @@ import os
|
||||
import re
|
||||
from datetime import datetime
|
||||
|
||||
LATEST_VERSION = "1.15.6"
|
||||
LATEST_VERSION = "1.15.7"
|
||||
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