diff --git a/materialious/android/app/build.gradle b/materialious/android/app/build.gradle
index 053d132c..e049b39a 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 8
- versionName "1.0.8"
+ versionCode 9
+ versionName "1.0.9"
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 ac0a3b2d..1fb112a2 100644
--- a/materialious/electron/package.json
+++ b/materialious/electron/package.json
@@ -1,6 +1,6 @@
{
"name": "Materialious",
- "version": "1.0.8",
+ "version": "1.0.9",
"description": "Modern material design for Invidious.",
"author": {
"name": "Ward Pearce",
diff --git a/materialious/package.json b/materialious/package.json
index 23c18eb3..ceb52b2f 100644
--- a/materialious/package.json
+++ b/materialious/package.json
@@ -1,6 +1,6 @@
{
"name": "materialious",
- "version": "1.0.8",
+ "version": "1.0.9",
"private": true,
"scripts": {
"dev": "vite dev",
diff --git a/materialious/src/lib/Api/index.ts b/materialious/src/lib/Api/index.ts
index 8dbfd5d3..943c961b 100644
--- a/materialious/src/lib/Api/index.ts
+++ b/materialious/src/lib/Api/index.ts
@@ -6,7 +6,7 @@ import {
instanceStore,
returnYTDislikesInstanceStore,
synciousInstanceStore
-} from '../../store';
+} from '../store';
import type {
Channel,
ChannelContentPlaylists,
diff --git a/materialious/src/lib/Comment.svelte b/materialious/src/lib/Comment.svelte
index 53ec8c79..d17d5512 100644
--- a/materialious/src/lib/Comment.svelte
+++ b/materialious/src/lib/Comment.svelte
@@ -7,7 +7,7 @@
export let comment: Comment;
export let videoId: string;
- let replies: Comments;
+ let replies: Comments | undefined = undefined;
async function loadReplies(continuation: string) {
try {
@@ -18,6 +18,16 @@
});
} catch {}
}
+
+ function commentTimestamps(html: string): string {
+ const regex =
+ /(\d+:\d+(?::\d+)?)<\/a>\s*(.+)/;
+ const replacement = `$3`;
+
+ const processedHtml = html.replace(regex, replacement);
+
+ return processedHtml;
+ }
- {@html comment.contentHtml}
+ {@html commentTimestamps(comment.contentHtml)}
thumb_up {numberWithCommas(comment.likeCount)}
@@ -75,6 +85,11 @@
expand_more
{comment.replies.replyCount} {$_('replies')}
+ {:else if replies}
+
{/if}
diff --git a/materialious/src/lib/MiniPlayer.svelte b/materialious/src/lib/MiniPlayer.svelte
index 62eba32f..d60adcfd 100644
--- a/materialious/src/lib/MiniPlayer.svelte
+++ b/materialious/src/lib/MiniPlayer.svelte
@@ -1,8 +1,8 @@
{#if audioMode}
@@ -294,9 +291,11 @@
{/if}
-
+{#if !isEmbed}
+
+{/if}
diff --git a/materialious/src/lib/Search.svelte b/materialious/src/lib/Search.svelte
index e50b8262..0b3485a8 100644
--- a/materialious/src/lib/Search.svelte
+++ b/materialious/src/lib/Search.svelte
@@ -3,8 +3,8 @@
import Mousetrap from 'mousetrap';
import { createEventDispatcher, onMount } from 'svelte';
import { _ } from 'svelte-i18n';
- import { interfaceSearchSuggestionsStore } from '../store';
import { getSearchSuggestions } from './Api';
+ import { interfaceSearchSuggestionsStore } from './store';
const dispatch = createEventDispatcher();
@@ -32,6 +32,8 @@
}
function handleSubmit() {
+ if (search.trim() === '') return;
+
selectedSuggestionIndex = -1;
goto(`/search/${encodeURIComponent(search)}`);
dispatch('searchSubmitted');
diff --git a/materialious/src/lib/Settings.svelte b/materialious/src/lib/Settings.svelte
index e8b9363e..86d7d20d 100644
--- a/materialious/src/lib/Settings.svelte
+++ b/materialious/src/lib/Settings.svelte
@@ -3,6 +3,7 @@
import { Capacitor } from '@capacitor/core';
import { _ } from 'svelte-i18n';
import { get } from 'svelte/store';
+ import { ensureNoTrailingSlash } from './misc';
import {
authStore,
darkModeStore,
@@ -30,8 +31,7 @@
synciousInstanceStore,
synciousStore,
themeColorStore
- } from '../store';
- import { ensureNoTrailingSlash } from './misc';
+ } from './store';
let sponsorCategoriesList: string[] = [];
sponsorBlockCategoriesStore.subscribe((value) => (sponsorCategoriesList = value));
diff --git a/materialious/src/lib/SyncParty.svelte b/materialious/src/lib/SyncParty.svelte
index 7db3f1bb..0e791d16 100644
--- a/materialious/src/lib/SyncParty.svelte
+++ b/materialious/src/lib/SyncParty.svelte
@@ -7,7 +7,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/Thumbnail.svelte
index 3cea88e4..9a1a5dc1 100644
--- a/materialious/src/lib/Thumbnail.svelte
+++ b/materialious/src/lib/Thumbnail.svelte
@@ -2,6 +2,11 @@
import { createEventDispatcher, onMount } from 'svelte';
import { _ } from 'svelte-i18n';
import { get } from 'svelte/store';
+ import { getDeArrow, getThumbnail, getVideo, getVideoProgress } from './Api';
+ import type { Notification, PlaylistPageVideo, Video, VideoBase, VideoPlay } from './Api/model';
+ import ShareVideo from './ShareVideo.svelte';
+ import { cleanNumber, getBestThumbnail, proxyVideoUrl, videoLength } from './misc';
+ import type { PlayerEvents } from './player';
import {
authStore,
deArrowEnabledStore,
@@ -11,12 +16,7 @@
syncPartyConnectionsStore,
syncPartyPeerStore,
synciousStore
- } from '../store';
- import { getDeArrow, getThumbnail, getVideo, getVideoProgress } from './Api';
- import type { Notification, PlaylistPageVideo, Video, VideoBase, VideoPlay } from './Api/model';
- import ShareVideo from './ShareVideo.svelte';
- import { cleanNumber, getBestThumbnail, proxyVideoUrl, videoLength } from './misc';
- import type { PlayerEvents } from './player';
+ } from './store';
const dispatch = createEventDispatcher();
@@ -238,12 +238,7 @@
{:else}
-
+
{/if}
{:else}
{$_('thumbnail.failedToLoadImage')}
@@ -339,6 +334,10 @@
max-height: 160px;
}
+ .thumbnail img {
+ object-fit: contain;
+ }
+
@media screen and (max-width: 650px) {
.thumbnail {
max-height: 100%;
diff --git a/materialious/src/lib/VideoList.svelte b/materialious/src/lib/VideoList.svelte
index f84bd895..497c96fd 100644
--- a/materialious/src/lib/VideoList.svelte
+++ b/materialious/src/lib/VideoList.svelte
@@ -1,10 +1,10 @@
diff --git a/materialious/src/routes/+layout.svelte b/materialious/src/routes/(app)/+layout.svelte
similarity index 97%
rename from materialious/src/routes/+layout.svelte
rename to materialious/src/routes/(app)/+layout.svelte
index 086f5394..72008f05 100644
--- a/materialious/src/routes/+layout.svelte
+++ b/materialious/src/routes/(app)/+layout.svelte
@@ -11,6 +11,14 @@
import SyncParty from '$lib/SyncParty.svelte';
import Thumbnail from '$lib/Thumbnail.svelte';
import { bookmarkletLoadFromUrl, loadSettingsFromEnv } from '$lib/externalSettings';
+ import {
+ activePageStore,
+ authStore,
+ darkModeStore,
+ instanceStore,
+ syncPartyPeerStore,
+ themeColorStore
+ } from '$lib/store';
import { App } from '@capacitor/app';
import { Browser } from '@capacitor/browser';
import { Capacitor } from '@capacitor/core';
@@ -20,14 +28,6 @@
import { _ } from 'svelte-i18n';
import { get } from 'svelte/store';
import { pwaInfo } from 'virtual:pwa-info';
- import {
- activePageStore,
- authStore,
- darkModeStore,
- instanceStore,
- syncPartyPeerStore,
- themeColorStore
- } from '../store';
let mobileSearchShow = false;
@@ -191,8 +191,10 @@
>menu
-
- Materialious
+
@@ -271,7 +273,7 @@