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 @@ - - - - - -
- -
- {#if Capacitor.isNativePlatform()} -
{ - instanceStore.set(ensureNoTrailingSlash(invidiousInstance)); - authStore.set(null); - goto('/', { replaceState: true }); - ui('#dialog-settings'); - }} - > - -
- {/if} - -
- - - - -
- - {#if $darkModeStore} -
- -
- {/if} - -
- -
- -
- -
- -
- -
- -
- -
- -
- -
- -
- -
- -
- - - arrow_drop_down -
- -
- - - arrow_drop_down -
- -
- - - arrow_drop_down -
- - {#if !Capacitor.isNativePlatform()} -
-
{$_('layout.bookmarklet')}
- -
- {/if} -
-
-
-
- - - arrow_drop_down -
- -
- -
- -
- -
- -
- -
- - {#if Capacitor.getPlatform() === 'android'} -
- -
- -
- -
- {/if} - - {#if Capacitor.isNativePlatform()} -
- -
- {/if} - -
- -
- -
- -
- -
- -
- -
- -
- -
- -
- - {#if Capacitor.isNativePlatform()} -
- -
- -
- -
- {/if} -
- -
-
- returnYTDislikesInstanceStore.set(ensureNoTrailingSlash(returnYTInstance))} - > - -
- - -
-
-
- synciousInstanceStore.set(ensureNoTrailingSlash(synciousInstance))} - > - -
- - -
-
-
- sponsorBlockUrlStore.set(ensureNoTrailingSlash(sponsorBlockInstance))} - > - -
- - - - - - - -
- -

{$_('layout.sponsors.Catagories')}

- - {#each sponsorCategories as sponsor} -
- -
- {/each} -
-
-
deArrowInstanceStore.set(ensureNoTrailingSlash(deArrowUrl))} - > - -
- -
deArrowThumbnailInstanceStore.set(deArrowThumbnailUrl)}> - -
- - - - -
-
-
- - 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 @@ + + +
+ synciousInstanceStore.set(ensureNoTrailingSlash(synciousInstance))} +> + +
+ + 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 @@ + + +
deArrowInstanceStore.set(ensureNoTrailingSlash(deArrowUrl))}> + +
+ +
deArrowThumbnailInstanceStore.set(deArrowThumbnailUrl)}> + +
+ + + + 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()} +
{ + instanceStore.set(ensureNoTrailingSlash(invidiousInstance)); + authStore.set(null); + goto('/', { replaceState: true }); + ui('#dialog-settings'); + }} + > + +
+{/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 @@ + + +
+ returnYTDislikesInstanceStore.set(ensureNoTrailingSlash(returnYTInstance))} +> + +
+ + 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 @@ + + +
+ sponsorBlockUrlStore.set(ensureNoTrailingSlash(sponsorBlockInstance))} +> + +
+ + + + + + + +
+ +

{$_('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}