Remove course thumbnails and the ffmpeg dependency

Course cards go back to the colour-block art that previously sat under the
captured frame, so the UI is unchanged apart from losing the photo.

- Drop thumb.php, generateThumbnails(), captureThumbnail() and
  ensureThumbnailColumns(), plus the first-video tracking the scanner only
  kept to pick a frame source.
- Drop the ffprobe fallback in probeDuration(); the pure-PHP mvhd parse is
  now the only scan-time probe, with the player's report on first play as
  the remaining fallback.
- Drop THUMBNAILS_DIR/THUMBNAIL_SEEK_PERCENT from config, the
  thumbnail_* columns from schema.sql, the thumbnail counters from scan
  output, .thumb img from the stylesheet, and the matching README parts.

Existing databases keep two now-unused folders.thumbnail_* columns; they
are inert and can be dropped by hand if wanted.

Claude-Session: https://claude.ai/code/session_014oyi9DMdhALrGz989MNNZJ
This commit is contained in:
Harwinder Sekhon
2026-07-27 14:06:06 -04:00
parent c4c88e52da
commit 91edba56d6
9 changed files with 31 additions and 275 deletions
+2 -1
View File
@@ -55,7 +55,8 @@ $stmt = $db->prepare(
);
$stmt->execute([$userId, $videoId, $position, $duration > 0 ? $duration : null, $completed]);
// Cache the duration on the video row so listings can show it without ffprobe.
// Cache the duration on the video row so listings can show it without waiting
// for someone to play the video (and for files the scanner couldn't parse).
if ($duration > 0) {
$db->prepare('UPDATE videos SET duration_seconds = ? WHERE id = ? AND duration_seconds IS NULL')
->execute([$duration, $videoId]);