diff --git a/README.md b/README.md
index 41baea99..3f4fbcc8 100644
--- a/README.md
+++ b/README.md
@@ -27,7 +27,6 @@
- Watch sync parties!
- Mini player.
- Silence skipper (Experimental.)
-- ffmpeg integration for downloading videos with audio at any quality ([Configuration required](./docs/DOCKER.md#step-7-optional-enabling-downloads)).
- [YouTube.js](https://github.com/LuanRT/YouTube.js) fallback if Invidious fails loading videos for Desktop & Android.
- Preview video on hover.
- Sponsorblock built-in.
@@ -48,11 +47,11 @@
- YT path redirects (So your redirect plugins should still work!)
# Support table
-| | Dash | HLS | Local video fallback | API-Extended | ffmpeg download merging | Dearrow | RYD |
-|---------|------|-----|----------------------|--------------|-------------------------|---------|-----|
-| Web | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ |
-| Desktop | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ |
-| Android | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ |
+| | Dash | HLS | Local video fallback | API-Extended | Dearrow | RYD |
+|---------|------|-----|----------------------|--------------|---------|-----|
+| Web | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ |
+| Desktop | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
+| Android | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
# Public instances
[Public instances are listed here](./docs/INSTANCES.md).
diff --git a/materialious/android/app/build.gradle b/materialious/android/app/build.gradle
index c128c36c..55e505f3 100644
--- a/materialious/android/app/build.gradle
+++ b/materialious/android/app/build.gradle
@@ -7,8 +7,8 @@ android {
applicationId "us.materialio.app"
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
- versionCode 80
- versionName "1.6.29"
+ versionCode 81
+ versionName "1.6.30"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
aaptOptions {
// Files and dirs to omit from the packaged assets dir, modified to accommodate modern web apps.
diff --git a/materialious/electron/package.json b/materialious/electron/package.json
index 99541ed0..8fee234d 100644
--- a/materialious/electron/package.json
+++ b/materialious/electron/package.json
@@ -1,6 +1,6 @@
{
"name": "Materialious",
- "version": "1.6.29",
+ "version": "1.6.30",
"description": "Modern material design for Invidious.",
"author": {
"name": "Ward Pearce",
diff --git a/materialious/package-lock.json b/materialious/package-lock.json
index ba7b7c2d..a025e44a 100644
--- a/materialious/package-lock.json
+++ b/materialious/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "materialious",
- "version": "1.6.28",
+ "version": "1.6.30",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "materialious",
- "version": "1.6.28",
+ "version": "1.6.30",
"dependencies": {
"@capacitor-community/electron": "^5.0.1",
"@capacitor/android": "^6.1.2",
@@ -18,7 +18,6 @@
"@capacitor/screen-orientation": "^6.0.2",
"@capacitor/status-bar": "^6.0.1",
"@capgo/inappbrowser": "^6.6.8",
- "@ffmpeg/ffmpeg": "^0.12.10",
"@hugotomazi/capacitor-navigation-bar": "^4.0.1",
"@mediagrid/capacitor-native-audio": "^1.0.0",
"beercss": "^3.8.0",
@@ -45,7 +44,6 @@
},
"devDependencies": {
"@capacitor/assets": "^3.0.5",
- "@ffmpeg/util": "^0.12.1",
"@sveltejs/adapter-auto": "^3.2.5",
"@sveltejs/adapter-static": "^3.0.5",
"@sveltejs/kit": "^2.9.1",
@@ -2084,34 +2082,6 @@
"node": ">=14"
}
},
- "node_modules/@ffmpeg/ffmpeg": {
- "version": "0.12.10",
- "resolved": "https://registry.npmjs.org/@ffmpeg/ffmpeg/-/ffmpeg-0.12.10.tgz",
- "integrity": "sha512-lVtk8PW8e+NUzGZhPTWj2P1J4/NyuCrbDD3O9IGpSeLYtUZKBqZO8CNj1WYGghep/MXoM8e1qVY1GztTkf8YYQ==",
- "dependencies": {
- "@ffmpeg/types": "^0.12.2"
- },
- "engines": {
- "node": ">=18.x"
- }
- },
- "node_modules/@ffmpeg/types": {
- "version": "0.12.2",
- "resolved": "https://registry.npmjs.org/@ffmpeg/types/-/types-0.12.2.tgz",
- "integrity": "sha512-NJtxwPoLb60/z1Klv0ueshguWQ/7mNm106qdHkB4HL49LXszjhjCCiL+ldHJGQ9ai2Igx0s4F24ghigy//ERdA==",
- "engines": {
- "node": ">=16.x"
- }
- },
- "node_modules/@ffmpeg/util": {
- "version": "0.12.1",
- "resolved": "https://registry.npmjs.org/@ffmpeg/util/-/util-0.12.1.tgz",
- "integrity": "sha512-10jjfAKWaDyb8+nAkijcsi9wgz/y26LOc1NKJradNMyCIl6usQcBbhkjX5qhALrSBcOy6TOeksunTYa+a03qNQ==",
- "dev": true,
- "engines": {
- "node": ">=18.x"
- }
- },
"node_modules/@floating-ui/core": {
"version": "1.6.7",
"resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.7.tgz",
diff --git a/materialious/package.json b/materialious/package.json
index c99fd238..2a57b7b4 100644
--- a/materialious/package.json
+++ b/materialious/package.json
@@ -1,6 +1,6 @@
{
"name": "materialious",
- "version": "1.6.29",
+ "version": "1.6.30",
"private": true,
"scripts": {
"dev": "vite dev",
@@ -13,7 +13,6 @@
},
"devDependencies": {
"@capacitor/assets": "^3.0.5",
- "@ffmpeg/util": "^0.12.1",
"@sveltejs/adapter-auto": "^3.2.5",
"@sveltejs/adapter-static": "^3.0.5",
"@sveltejs/kit": "^2.9.1",
@@ -52,7 +51,6 @@
"@capacitor/screen-orientation": "^6.0.2",
"@capacitor/status-bar": "^6.0.1",
"@capgo/inappbrowser": "^6.6.8",
- "@ffmpeg/ffmpeg": "^0.12.10",
"@hugotomazi/capacitor-navigation-bar": "^4.0.1",
"@mediagrid/capacitor-native-audio": "^1.0.0",
"beercss": "^3.8.0",
@@ -77,4 +75,4 @@
"vidstack": "^1.12.9",
"youtubei.js": "^12.2.0"
}
-}
\ No newline at end of file
+}
diff --git a/materialious/src/lib/Settings.svelte b/materialious/src/lib/Settings.svelte
deleted file mode 100644
index 2b42706c..00000000
--- a/materialious/src/lib/Settings.svelte
+++ /dev/null
@@ -1,904 +0,0 @@
-
-
-
-
-
diff --git a/materialious/src/lib/ChannelThumbnail.svelte b/materialious/src/lib/components/ChannelThumbnail.svelte
similarity index 81%
rename from materialious/src/lib/ChannelThumbnail.svelte
rename to materialious/src/lib/components/ChannelThumbnail.svelte
index 79a126c0..0ae2b068 100644
--- a/materialious/src/lib/ChannelThumbnail.svelte
+++ b/materialious/src/lib/components/ChannelThumbnail.svelte
@@ -1,10 +1,12 @@
diff --git a/materialious/src/lib/Search.svelte b/materialious/src/lib/components/Search.svelte
similarity index 84%
rename from materialious/src/lib/Search.svelte
rename to materialious/src/lib/components/Search.svelte
index fcbd16f3..b4c5a110 100644
--- a/materialious/src/lib/Search.svelte
+++ b/materialious/src/lib/components/Search.svelte
@@ -3,8 +3,12 @@
import Mousetrap from 'mousetrap';
import { createEventDispatcher, onMount } from 'svelte';
import { _ } from 'svelte-i18n';
- import { getSearchSuggestions } from './api';
- import { interfaceSearchSuggestionsStore } from './store';
+ import { getSearchSuggestions } from '../api';
+ import {
+ interfaceSearchHistoryEnabled,
+ interfaceSearchSuggestionsStore,
+ searchHistoryStore
+ } from '../store';
const dispatch = createEventDispatcher();
@@ -37,6 +41,17 @@
selectedSuggestionIndex = -1;
goto(`/search/${encodeURIComponent(search)}`);
dispatch('searchSubmitted');
+
+ suggestionsForSearch = [];
+ showSearchBox = false;
+
+ if ($interfaceSearchHistoryEnabled && !$searchHistoryStore.includes(search)) {
+ let pastHistory = $searchHistoryStore;
+ if (pastHistory.length > 15) {
+ pastHistory.pop();
+ }
+ searchHistoryStore.set([search, ...pastHistory]);
+ }
}
function handleKeyDown(event: KeyboardEvent) {
@@ -129,6 +144,13 @@
{/each}
{/if}
+ {#if !suggestionsForSearch.length && $interfaceSearchHistoryEnabled}
+ {#each $searchHistoryStore as history}
+
+ {history}
+
+ {/each}
+ {/if}
{/if}
diff --git a/materialious/src/lib/components/Settings/ApiExtended.svelte b/materialious/src/lib/components/Settings/ApiExtended.svelte
new file mode 100644
index 00000000..4165674b
--- /dev/null
+++ b/materialious/src/lib/components/Settings/ApiExtended.svelte
@@ -0,0 +1,37 @@
+
+
+
+
+
diff --git a/materialious/src/lib/components/Settings/DataPreferences.svelte b/materialious/src/lib/components/Settings/DataPreferences.svelte
new file mode 100644
index 00000000..13b6652f
--- /dev/null
+++ b/materialious/src/lib/components/Settings/DataPreferences.svelte
@@ -0,0 +1,16 @@
+
+
+
+
+ {$_('layout.dataPreferences.content')}
+
+
diff --git a/materialious/src/lib/components/Settings/DeArrow.svelte b/materialious/src/lib/components/Settings/DeArrow.svelte
new file mode 100644
index 00000000..62b08d47
--- /dev/null
+++ b/materialious/src/lib/components/Settings/DeArrow.svelte
@@ -0,0 +1,66 @@
+
+
+
+
+
+
+
+
+
diff --git a/materialious/src/lib/components/Settings/Interface.svelte b/materialious/src/lib/components/Settings/Interface.svelte
new file mode 100644
index 00000000..93b22c3a
--- /dev/null
+++ b/materialious/src/lib/components/Settings/Interface.svelte
@@ -0,0 +1,283 @@
+
+
+{#if Capacitor.isNativePlatform()}
+
+{/if}
+
+
+
+
+
+
+
+
+{#if $darkModeStore}
+
+
+
+{/if}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ arrow_drop_down
+
+
+
+
+
+ arrow_drop_down
+
+
+
+
+
+ arrow_drop_down
+
+
+{#if !Capacitor.isNativePlatform()}
+
+
{$_('layout.bookmarklet')}
+
+
+{/if}
diff --git a/materialious/src/lib/components/Settings/Player.svelte b/materialious/src/lib/components/Settings/Player.svelte
new file mode 100644
index 00000000..04eff69c
--- /dev/null
+++ b/materialious/src/lib/components/Settings/Player.svelte
@@ -0,0 +1,260 @@
+
+
+
+
+
+
+ arrow_drop_down
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+{#if Capacitor.getPlatform() === 'android'}
+
+
+
+
+
+
+
+{/if}
+
+{#if Capacitor.isNativePlatform()}
+
+
+
+{/if}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+{#if Capacitor.isNativePlatform()}
+
+
+
+
+
+
+
+{/if}
diff --git a/materialious/src/lib/components/Settings/RYD.svelte b/materialious/src/lib/components/Settings/RYD.svelte
new file mode 100644
index 00000000..57ddcad5
--- /dev/null
+++ b/materialious/src/lib/components/Settings/RYD.svelte
@@ -0,0 +1,37 @@
+
+
+
+
+
diff --git a/materialious/src/lib/components/Settings/Settings.svelte b/materialious/src/lib/components/Settings/Settings.svelte
new file mode 100644
index 00000000..5fdda82e
--- /dev/null
+++ b/materialious/src/lib/components/Settings/Settings.svelte
@@ -0,0 +1,205 @@
+
+
+
+
+
diff --git a/materialious/src/lib/components/Settings/SponsorBlock.svelte b/materialious/src/lib/components/Settings/SponsorBlock.svelte
new file mode 100644
index 00000000..8bc10251
--- /dev/null
+++ b/materialious/src/lib/components/Settings/SponsorBlock.svelte
@@ -0,0 +1,115 @@
+
+
+
+
+
+
+
+
+
+
+
+
+{$_('layout.sponsors.Catagories')}
+
+{#each sponsorCategories as sponsor}
+
+{/each}
diff --git a/materialious/src/lib/ShareVideo.svelte b/materialious/src/lib/components/ShareVideo.svelte
similarity index 97%
rename from materialious/src/lib/ShareVideo.svelte
rename to materialious/src/lib/components/ShareVideo.svelte
index 5bdd2185..49729895 100644
--- a/materialious/src/lib/ShareVideo.svelte
+++ b/materialious/src/lib/components/ShareVideo.svelte
@@ -2,7 +2,7 @@
import { Clipboard } from '@capacitor/clipboard';
import { Capacitor } from '@capacitor/core';
import { _ } from 'svelte-i18n';
- import type { Notification, PlaylistPageVideo, Video, VideoBase } from './api/model';
+ import type { Notification, PlaylistPageVideo, Video, VideoBase } from '../api/model';
export let video: VideoBase | Video | Notification | PlaylistPageVideo;
diff --git a/materialious/src/lib/SyncParty.svelte b/materialious/src/lib/components/SyncParty.svelte
similarity index 99%
rename from materialious/src/lib/SyncParty.svelte
rename to materialious/src/lib/components/SyncParty.svelte
index 9e4d27b6..d9a28b55 100644
--- a/materialious/src/lib/SyncParty.svelte
+++ b/materialious/src/lib/components/SyncParty.svelte
@@ -9,7 +9,7 @@
import { onDestroy, onMount } from 'svelte';
import { _ } from 'svelte-i18n';
import { get } from 'svelte/store';
- import { syncPartyConnectionsStore, syncPartyPeerStore } from './store';
+ import { syncPartyConnectionsStore, syncPartyPeerStore } from '../store';
function changeVideoEvent(conn: DataConnection) {
conn.on('data', (data) => {
diff --git a/materialious/src/lib/Thumbnail.svelte b/materialious/src/lib/components/Thumbnail.svelte
similarity index 96%
rename from materialious/src/lib/Thumbnail.svelte
rename to materialious/src/lib/components/Thumbnail.svelte
index a1ccee42..90a21525 100644
--- a/materialious/src/lib/Thumbnail.svelte
+++ b/materialious/src/lib/components/Thumbnail.svelte
@@ -1,19 +1,14 @@
@@ -621,33 +570,6 @@
- {#await data.streamed.downloadQualitiesDash then downloadQualitiesDash}
- {#if downloadQualitiesDash}
-
- {/if}
- {/await}
{#if personalPlaylists}