Fix video length missing on recommended videos

This commit is contained in:
WardPearce
2026-01-06 07:42:22 +13:00
parent c9c63b2c82
commit 7efc9ed916
7 changed files with 43 additions and 25 deletions
+2 -2
View File
@@ -7,8 +7,8 @@ android {
applicationId "us.materialio.app"
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
versionCode 184
versionName "1.13.0"
versionCode 185
versionName "1.13.1"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
aaptOptions {
// Files and dirs to omit from the packaged assets dir, modified to accommodate modern web apps.
@@ -81,7 +81,11 @@
<release version="1.13.0" date="2026-1-03">
<release version="1.13.1" date="2026-1-06">
<url>https://github.com/Materialious/Materialious/releases/tag/1.13.1</url>
</release>
<release version="1.13.0" date="2026-1-03">
<url>https://github.com/Materialious/Materialious/releases/tag/1.13.0</url>
</release>
<release version="1.12.11" date="2026-1-02">
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "Materialious",
"version": "1.13.0",
"version": "1.13.1",
"description": "Modern material design for Invidious.",
"author": {
"name": "Ward Pearce",
+2 -2
View File
@@ -1,6 +1,6 @@
{
"name": "materialious",
"version": "1.13.0",
"version": "1.13.1",
"private": true,
"scripts": {
"dev": "npm run patch:github && vite dev",
@@ -77,4 +77,4 @@
"svelte-infinite-loading": "^1.4.0",
"youtubei.js": "^16.0.1"
}
}
}
+31 -17
View File
@@ -8,6 +8,7 @@ import type {
VideoBase,
VideoPlay
} from '$lib/api/model';
import { convertToSeconds } from '$lib/numbers';
import { interfaceRegionStore, poTokenCacheStore } from '$lib/store';
import { Capacitor } from '@capacitor/core';
import { USER_AGENT } from 'bgutils-js';
@@ -165,30 +166,43 @@ export async function patchYoutubeJs(videoId: string): Promise<VideoPlay> {
});
const recommendedVideos: VideoBase[] = [];
video.watch_next_feed?.forEach((recommended: Record<string, any>) => {
video.watch_next_feed?.forEach((recommended) => {
if (
!recommended.metadata?.title?.text ||
!recommended.is(YTNodes.LockupView) ||
recommended.content_type !== 'VIDEO' ||
!recommended.metadata.metadata.metadata_rows ||
!recommended.metadata ||
!recommended.content_image?.is(YTNodes.ThumbnailView) ||
!recommended.metadata.metadata ||
recommended.metadata.metadata.metadata_rows.length < 2
) {
)
return;
}
const durationOverlay = recommended.content_image.overlays
?.find(
(overlay) =>
overlay.is(YTNodes.ThumbnailOverlayBadgeView) &&
overlay.position === 'THUMBNAIL_OVERLAY_BADGE_POSITION_BOTTOM_END'
)
?.as(YTNodes.ThumbnailOverlayBadgeView);
recommendedVideos.push({
videoThumbnails: (recommended?.content_image?.image as Thumbnail[]) || [],
videoId: recommended?.content_id || '',
title: recommended.metadata?.title?.text || '',
viewCountText: recommended.metadata.metadata.metadata_rows[1]?.metadata_parts[0]
? recommended.metadata.metadata.metadata_rows[1]?.metadata_parts[0]?.text.text?.replace(
'views',
''
)
: '',
lengthSeconds: recommended?.duration?.seconds || 0,
author: recommended.metadata.metadata.metadata_rows[0]?.metadata_parts[0]?.text.text || '',
videoThumbnails: (recommended?.content_image.image as Thumbnail[]) || [],
videoId: recommended.content_id,
title: recommended.metadata.title.toString(),
viewCountText:
(recommended.metadata.metadata.metadata_rows[1]?.metadata_parts?.[0]?.text ?? '')
.toString()
.replace('views', '') || '',
author:
(
recommended.metadata.metadata.metadata_rows[0]?.metadata_parts?.[0]?.text ?? ''
).toString() || '',
lengthSeconds: durationOverlay?.badges[0].text
? convertToSeconds(durationOverlay?.badges[0].text)
: 0,
authorId:
recommended.metadata?.image?.renderer_context?.command_context?.on_tap.payload?.browseId ||
recommended.metadata?.image?.renderer_context?.command_context?.on_tap?.payload?.browseId ||
'',
type: 'video'
});
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -3,7 +3,7 @@ import os
import re
from datetime import datetime
LATEST_VERSION = "1.13.0"
LATEST_VERSION = "1.13.1"
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")