feat: Add video card component, desktop player controls, and introduce API utilities for search and data parsing.

This commit is contained in:
kuekhaoyang
2025-11-21 12:58:19 +08:00
parent 6e81559d90
commit a408f2270f
11 changed files with 499 additions and 450 deletions
+50
View File
@@ -0,0 +1,50 @@
/**
* Binary insert utility for sorted arrays
*/
interface Video {
relevanceScore?: number;
latency?: number;
}
/**
* Insert videos into sorted array using binary search
* Sorts by: 1) relevance score (DESC), 2) latency (ASC)
*/
export function binaryInsertVideos<T extends Video>(existing: T[], newVideos: T[]): T[] {
if (existing.length === 0) return newVideos;
const combined = [...existing];
for (const video of newVideos) {
const relevanceScore = video.relevanceScore || 0;
const latency = video.latency || 99999;
// Find insert position using binary search
let left = 0;
let right = combined.length;
while (left < right) {
const mid = Math.floor((left + right) / 2);
const midRelevance = combined[mid].relevanceScore || 0;
const midLatency = combined[mid].latency || 99999;
if (midRelevance > relevanceScore) {
left = mid + 1;
} else if (midRelevance < relevanceScore) {
right = mid;
} else {
// Same relevance, compare by latency
if (midLatency < latency) {
left = mid + 1;
} else {
right = mid;
}
}
}
combined.splice(left, 0, video);
}
return combined;
}