mirror of
https://github.com/Terranom674/Piwigo_Bratonien_Tools.git
synced 2026-09-19 11:44:31 +00:00
Keep page fallback and self-heal missing watermark precache
This commit is contained in:
@@ -9,6 +9,7 @@ require_once(BRATONIEN_TOOLS_PATH . 'include/watermark_engine.inc.php');
|
||||
require_once(BRATONIEN_TOOLS_PATH . 'tools/watermark_settings.inc.php');
|
||||
require_once(BRATONIEN_TOOLS_PATH . 'tools/watermark_profiles.inc.php');
|
||||
require_once(BRATONIEN_TOOLS_PATH . 'tools/album_rules.inc.php');
|
||||
require_once(BRATONIEN_TOOLS_PATH . 'tools/image_cache.inc.php');
|
||||
|
||||
function bratonien_tools_runtime_category_id()
|
||||
{
|
||||
@@ -153,6 +154,68 @@ function bratonien_tools_runtime_canonical_derivative_url($rel_url)
|
||||
return $rel_url;
|
||||
}
|
||||
|
||||
function bratonien_tools_runtime_precache_active()
|
||||
{
|
||||
static $active = null;
|
||||
if ($active !== null)
|
||||
{
|
||||
return $active;
|
||||
}
|
||||
|
||||
$active = false;
|
||||
$status_file = PHPWG_ROOT_PATH.PWG_LOCAL_DIR.'bratonien-tools-precache.status.json';
|
||||
if (!is_file($status_file) || !is_readable($status_file))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
$raw = @file_get_contents($status_file);
|
||||
$status = $raw !== false ? json_decode($raw, true) : null;
|
||||
if (!is_array($status))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
$state = (string)($status['state'] ?? '');
|
||||
$updated_at = (int)($status['updated_at'] ?? 0);
|
||||
$age = $updated_at > 0 ? max(0, time() - $updated_at) : PHP_INT_MAX;
|
||||
|
||||
// running wird vom Worker waehrend der Arbeit laufend aktualisiert.
|
||||
// queued gilt nur kurz als aktiver Startvorgang; danach darf sich die
|
||||
// Galerie selbst heilen, falls der Hintergrundprozess nicht hochkam.
|
||||
if ($state === 'running' && $age <= 30)
|
||||
{
|
||||
$active = true;
|
||||
}
|
||||
elseif ($state === 'queued' && $age <= 10)
|
||||
{
|
||||
$active = true;
|
||||
}
|
||||
|
||||
return $active;
|
||||
}
|
||||
|
||||
function bratonien_tools_runtime_request_precache_if_idle()
|
||||
{
|
||||
static $requested = false;
|
||||
|
||||
if ($requested || bratonien_tools_runtime_precache_active())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
$requested = true;
|
||||
try
|
||||
{
|
||||
bratonien_tools_request_watermark_precache('Fehlende Wasserzeichenvariante beim Seitenaufruf erkannt');
|
||||
}
|
||||
catch (Throwable $e)
|
||||
{
|
||||
// Der Seiten-Fallback muss auch dann funktionieren, wenn der Hintergrund-
|
||||
// Precache nicht gestartet werden kann. Deshalb hier bewusst nicht abbrechen.
|
||||
}
|
||||
}
|
||||
|
||||
function bratonien_tools_runtime_cache_descriptor($rel_url, array $profile, $params, $source_path, $extension='')
|
||||
{
|
||||
if (!$params || !$source_path)
|
||||
@@ -262,6 +325,12 @@ function bratonien_tools_filter_derivative_url($url, $params, $src_image, $rel_u
|
||||
}
|
||||
}
|
||||
|
||||
// Cache fehlt: Der Seitenaufruf bleibt immer das Sicherheitsnetz und
|
||||
// rendert diese Variante ueber watermark.php. Falls gleichzeitig kein
|
||||
// aktiver Precache arbeitet, wird der Hintergrund-Precache einmalig neu
|
||||
// angestossen, damit weitere Varianten wieder vorab entstehen.
|
||||
bratonien_tools_runtime_request_precache_if_idle();
|
||||
|
||||
$profile_id = (int)$profile['id'];
|
||||
$profile_version = bratonien_tools_runtime_profile_version($profile);
|
||||
$signature = bratonien_tools_runtime_sign($rel_url, $profile_id, $profile_version);
|
||||
|
||||
Reference in New Issue
Block a user