[BUG] api: resolve recording/spectrogram dirs by normalized species name
This commit is contained in:
@@ -128,16 +128,28 @@ $common = resolve_common($sci) ?? str_replace(' ', '_', $sci);
|
||||
|
||||
function newest_spectrogram(string $rootDir, string $common): ?string {
|
||||
if (!is_dir($rootDir)) return null;
|
||||
// Normalised match so apostrophes / case don't matter - same fix as
|
||||
// recording.php (e.g. Anna's_Hummingbird vs Annas_Hummingbird).
|
||||
$norm = function (string $s): string {
|
||||
return preg_replace('/[^a-z0-9]/', '', strtolower($s));
|
||||
};
|
||||
$want = $norm($common);
|
||||
$dates = scandir($rootDir, SCANDIR_SORT_DESCENDING);
|
||||
if (!$dates) return null;
|
||||
foreach ($dates as $date) {
|
||||
if ($date[0] === '.') continue;
|
||||
$speciesDir = "$rootDir/$date/$common";
|
||||
if (!is_dir($speciesDir)) continue;
|
||||
$dayDir = "$rootDir/$date";
|
||||
if (!is_dir($dayDir)) continue;
|
||||
$speciesDir = null;
|
||||
foreach (scandir($dayDir) as $sub) {
|
||||
if ($sub[0] === '.' || !is_dir("$dayDir/$sub")) continue;
|
||||
if ($norm($sub) === $want) { $speciesDir = "$dayDir/$sub"; break; }
|
||||
}
|
||||
if ($speciesDir === null) continue;
|
||||
$files = scandir($speciesDir, SCANDIR_SORT_DESCENDING);
|
||||
if (!$files) continue;
|
||||
foreach ($files as $f) {
|
||||
if (substr($f, -4) === '.png') {
|
||||
if (substr($f, -4) === '.png' && @filesize("$speciesDir/$f") >= 64) {
|
||||
return "$speciesDir/$f";
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user