Sort by precise embedded video date
This commit is contained in:
parent
dfeee1c187
commit
7e96be1f54
1 changed files with 10 additions and 7 deletions
17
index.php
17
index.php
|
|
@ -6,10 +6,11 @@ function h($s){ return htmlspecialchars((string)$s, ENT_QUOTES, "UTF-8"); }
|
|||
function nice_title($s){ return trim(ucwords(str_replace(['_','-'], ' ', $s))); }
|
||||
function video_metadata($path){
|
||||
$base = pathinfo($path, PATHINFO_FILENAME);
|
||||
$meta = ['title' => nice_title($base), 'date' => date('Y-m-d', filemtime($path)), 'location' => '', 'description' => ''];
|
||||
$meta = ['title' => nice_title($base), 'date' => date('Y-m-d', filemtime($path)), 'sort_date' => date('Y-m-d', filemtime($path)), 'location' => '', 'description' => ''];
|
||||
|
||||
if (preg_match('/^(\d{4})(\d{2})(\d{2})[_-](.+)$/', $base, $m)) {
|
||||
$meta['date'] = "$m[1]-$m[2]-$m[3]";
|
||||
$meta['sort_date'] = "$m[1]-$m[2]-$m[3]";
|
||||
$meta['title'] = nice_title($m[4]);
|
||||
}
|
||||
|
||||
|
|
@ -33,8 +34,10 @@ function video_metadata($path){
|
|||
if (!empty($lower['title'])) $meta['title'] = $lower['title'];
|
||||
if (!empty($lower['date'])) {
|
||||
$meta['date'] = $lower['date'];
|
||||
} elseif (!empty($lower['creation_time'])) {
|
||||
$meta['date'] = substr($lower['creation_time'], 0, 10);
|
||||
}
|
||||
if (!empty($lower['creation_time'])) {
|
||||
$meta['sort_date'] = substr($lower['creation_time'], 0, 10);
|
||||
if (empty($lower['date'])) $meta['date'] = $meta['sort_date'];
|
||||
}
|
||||
foreach (['location','place','location-eng','com.apple.quicktime.location.name','com.apple.quicktime.location.iso6709'] as $k) {
|
||||
if (!empty($lower[$k])) { $meta['location'] = $lower[$k]; break; }
|
||||
|
|
@ -48,7 +51,7 @@ function video_metadata($path){
|
|||
function load_video_cache($videos){
|
||||
$cacheFile = __DIR__ . '/cache/videos.json';
|
||||
$cache = is_file($cacheFile) ? json_decode((string)file_get_contents($cacheFile), true) : [];
|
||||
if (!is_array($cache)) $cache = [];
|
||||
if (!is_array($cache) || ($cache['version'] ?? 0) !== 2) $cache = [];
|
||||
$items = $cache['items'] ?? [];
|
||||
$newItems = [];
|
||||
$changed = false;
|
||||
|
|
@ -67,7 +70,7 @@ function load_video_cache($videos){
|
|||
|
||||
if (array_diff(array_keys($items), array_keys($newItems))) $changed = true;
|
||||
if ($changed) {
|
||||
file_put_contents($cacheFile, json_encode(['generated_at' => date('c'), 'items' => $newItems], JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT), LOCK_EX);
|
||||
file_put_contents($cacheFile, json_encode(['version' => 2, 'generated_at' => date('c'), 'items' => $newItems], JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT), LOCK_EX);
|
||||
}
|
||||
return $newItems;
|
||||
}
|
||||
|
|
@ -76,8 +79,8 @@ $videoCache = load_video_cache($videos);
|
|||
usort($videos, function($a, $b) use ($videoCache) {
|
||||
$am = $videoCache[basename($a)] ?? [];
|
||||
$bm = $videoCache[basename($b)] ?? [];
|
||||
$ad = strtotime($am['metadata']['date'] ?? '') ?: filemtime($a);
|
||||
$bd = strtotime($bm['metadata']['date'] ?? '') ?: filemtime($b);
|
||||
$ad = strtotime($am['metadata']['sort_date'] ?? $am['metadata']['date'] ?? '') ?: filemtime($a);
|
||||
$bd = strtotime($bm['metadata']['sort_date'] ?? $bm['metadata']['date'] ?? '') ?: filemtime($b);
|
||||
return $bd <=> $ad;
|
||||
});
|
||||
$page=max(1,(int)($_GET['page']??1)); $per=$config['items_per_page']; $total=count($videos); $pages=max(1,(int)ceil($total/$per)); $page=min($page,$pages); $slice=array_slice($videos,($page-1)*$per,$per);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue