Remove watermark precache runtime dependency

This commit is contained in:
Terranom674
2026-08-15 17:56:10 +02:00
parent 88c9b1f08a
commit a67390a6d1

View File

@@ -9,7 +9,6 @@ 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_settings.inc.php');
require_once(BRATONIEN_TOOLS_PATH . 'tools/watermark_profiles.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/album_rules.inc.php');
require_once(BRATONIEN_TOOLS_PATH . 'tools/image_cache.inc.php');
function bratonien_tools_runtime_category_id() function bratonien_tools_runtime_category_id()
{ {
@@ -146,7 +145,7 @@ function bratonien_tools_runtime_canonical_derivative_url($rel_url)
return $rel_url; return $rel_url;
} }
if (preg_match('#^i(?:\.php)?\?/(.+)$#', $rel_url, $match) || preg_match('#^i(?:\.php)?/(.+)$#', $rel_url, $match)) if (preg_match('#^i(?:\\.php)?\\?/(.+)$#', $rel_url, $match) || preg_match('#^i(?:\\.php)?/(.+)$#', $rel_url, $match))
{ {
return PWG_DERIVATIVE_DIR.ltrim(rawurldecode($match[1]), '/'); return PWG_DERIVATIVE_DIR.ltrim(rawurldecode($match[1]), '/');
} }
@@ -154,68 +153,6 @@ function bratonien_tools_runtime_canonical_derivative_url($rel_url)
return $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='') function bratonien_tools_runtime_cache_descriptor($rel_url, array $profile, $params, $source_path, $extension='')
{ {
if (!$params || !$source_path) if (!$params || !$source_path)
@@ -231,7 +168,7 @@ function bratonien_tools_runtime_cache_descriptor($rel_url, array $profile, $par
$canonical_rel_url = bratonien_tools_runtime_canonical_derivative_url($rel_url); $canonical_rel_url = bratonien_tools_runtime_canonical_derivative_url($rel_url);
$extension = strtolower((string)$extension); $extension = strtolower((string)$extension);
if ($extension === '' && preg_match('/\.(jpe?g|png|gif|webp)(?:$|\?)/i', $canonical_rel_url, $match)) if ($extension === '' && preg_match('/\\.(jpe?g|png|gif|webp)(?:$|\\?)/i', $canonical_rel_url, $match))
{ {
$extension = strtolower($match[1]); $extension = strtolower($match[1]);
} }
@@ -246,26 +183,14 @@ function bratonien_tools_runtime_cache_descriptor($rel_url, array $profile, $par
return null; return null;
} }
$scale_percent = isset($profile['scale_percent']) ? max(1.0, min(1000.0, (float)$profile['scale_percent'])) : 100.0;
$profile_version = bratonien_tools_runtime_profile_version($profile); $profile_version = bratonien_tools_runtime_profile_version($profile);
$min_size = is_array($params->sizing->min_size) ? implode('x', $params->sizing->min_size) : ''; $relative_dir = PWG_DERIVATIVE_DIR.'bratonien-watermark/'.$profile_id;
$cache_fingerprint = array( $fingerprint = array(
$canonical_rel_url, $canonical_rel_url,
$profile_version, $profile_version,
@filemtime($source_path) ?: 0, @filemtime($source_path) ?: 0,
$params->last_mod_time,
$params->sharpen,
implode('x', $params->sizing->ideal_size),
$params->sizing->max_crop,
$min_size,
$profile['watermark_file'], $scale_percent, $profile['xpos'], $profile['ypos'],
$profile['xrepeat'], $profile['yrepeat'], $profile['opacity'],
$profile['min_width'], $profile['min_height'], $profile['active'],
@filemtime($watermark_path),
); );
$filename = sha1(implode('|', $fingerprint)).'.'.$extension;
$relative_dir = PWG_DERIVATIVE_DIR.'bratonien-watermark/'.$profile_id;
$filename = sha1(implode('|', $cache_fingerprint)).'.'.$extension;
$relative_path = $relative_dir.'/'.$filename; $relative_path = $relative_dir.'/'.$filename;
return array( return array(
@@ -280,11 +205,6 @@ function bratonien_tools_runtime_cache_descriptor($rel_url, array $profile, $par
function bratonien_tools_filter_derivative_url($url, $params, $src_image, $rel_url) function bratonien_tools_filter_derivative_url($url, $params, $src_image, $rel_url)
{ {
if (defined('BRATONIEN_TOOLS_PRECACHE_BUILD') && BRATONIEN_TOOLS_PRECACHE_BUILD)
{
return $url;
}
if (!bratonien_tools_watermark_engine_enabled()) if (!bratonien_tools_watermark_engine_enabled())
{ {
return $url; return $url;
@@ -297,12 +217,7 @@ function bratonien_tools_filter_derivative_url($url, $params, $src_image, $rel_u
} }
$profile = bratonien_tools_runtime_get_profile((int)$rule['profile_id']); $profile = bratonien_tools_runtime_get_profile((int)$rule['profile_id']);
if (!$profile || empty($profile['active'])) if (!$profile || empty($profile['active']) || !bratonien_tools_profile_watermark_path($profile))
{
return $url;
}
if (!bratonien_tools_profile_watermark_path($profile))
{ {
return $url; return $url;
} }
@@ -325,12 +240,6 @@ 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_id = (int)$profile['id'];
$profile_version = bratonien_tools_runtime_profile_version($profile); $profile_version = bratonien_tools_runtime_profile_version($profile);
$signature = bratonien_tools_runtime_sign($rel_url, $profile_id, $profile_version); $signature = bratonien_tools_runtime_sign($rel_url, $profile_id, $profile_version);