Commit Graph

320 Commits

Author SHA1 Message Date
be791ed044 Add multi-select download client filter with client type display
All checks were successful
Build and Push Docker Image / build (push) Successful in 24s
Licence Check / Licence compatibility and copyright header verification (push) Successful in 45s
CI / Security audit (push) Successful in 1m23s
CI / Tests & coverage (push) Successful in 1m35s
2026-05-19 23:41:43 +01:00
7195a09562 Fix SABnzbd size and speed fields in SSE response
All checks were successful
Build and Push Docker Image / build (push) Successful in 37s
Licence Check / Licence compatibility and copyright header verification (push) Successful in 52s
CI / Security audit (push) Successful in 1m30s
CI / Tests & coverage (push) Successful in 1m49s
2026-05-19 23:34:24 +01:00
720de6688b Add download client ordering and filtering to active downloads list
All checks were successful
Build and Push Docker Image / build (push) Successful in 22s
Licence Check / Licence compatibility and copyright header verification (push) Successful in 1m5s
CI / Security audit (push) Successful in 1m26s
CI / Tests & coverage (push) Successful in 1m44s
2026-05-19 23:29:38 +01:00
3e06bdf8cd Update CHANGELOG.md with 1.5.2 and 1.5.3; update README.md version reference
All checks were successful
Build and Push Docker Image / build (push) Successful in 28s
Create Release / release (push) Successful in 6s
Docs Check / Markdown lint (push) Successful in 56s
Licence Check / Licence compatibility and copyright header verification (push) Successful in 46s
Docs Check / Mermaid diagram parse check (push) Successful in 1m31s
CI / Security audit (push) Successful in 1m50s
CI / Tests & coverage (push) Successful in 1m55s
v1.5.3
2026-05-19 23:11:47 +01:00
ca1c136d4f Merge branch 'develop'
All checks were successful
Build and Push Docker Image / build (push) Successful in 43s
CI / Security audit (push) Successful in 1m23s
Create Release / release (push) Successful in 11s
CI / Tests & coverage (push) Successful in 1m42s
2026-05-19 23:09:23 +01:00
a04f2c9b25 Bump version to 1.5.3 2026-05-19 23:09:23 +01:00
743b169989 Fix webhooks panel: hide on app load to sync with status panel
All checks were successful
Build and Push Docker Image / build (push) Successful in 36s
Licence Check / Licence compatibility and copyright header verification (push) Successful in 38s
CI / Security audit (push) Successful in 56s
CI / Tests & coverage (push) Successful in 1m9s
2026-05-19 23:05:20 +01:00
794cb7268e Fix status panel: remove innerHTML wipe that destroys status-content div
All checks were successful
Build and Push Docker Image / build (push) Successful in 38s
Licence Check / Licence compatibility and copyright header verification (push) Successful in 57s
CI / Security audit (push) Successful in 1m14s
CI / Tests & coverage (push) Successful in 1m27s
2026-05-19 23:01:14 +01:00
d310d101ed Fix undefined --background CSS variable causing blank status panel
All checks were successful
Build and Push Docker Image / build (push) Successful in 44s
CI / Security audit (push) Successful in 1m15s
CI / Tests & coverage (push) Successful in 1m34s
2026-05-19 22:59:16 +01:00
96f24eb3b7 Fix status card regression: revert webhooks-section to sibling structure
All checks were successful
Build and Push Docker Image / build (push) Successful in 47s
Licence Check / Licence compatibility and copyright header verification (push) Successful in 53s
CI / Security audit (push) Successful in 1m2s
CI / Tests & coverage (push) Successful in 1m14s
2026-05-19 22:57:21 +01:00
abcb9bfded debug: Add DOM structure verification to trace missing contentDiv
All checks were successful
Build and Push Docker Image / build (push) Successful in 40s
Licence Check / Licence compatibility and copyright header verification (push) Successful in 1m1s
CI / Security audit (push) Successful in 1m24s
CI / Tests & coverage (push) Successful in 1m34s
2026-05-19 22:35:05 +01:00
e5920b207f debug: Add more detailed logging to renderStatusPanel
All checks were successful
Build and Push Docker Image / build (push) Successful in 26s
Licence Check / Licence compatibility and copyright header verification (push) Successful in 1m8s
CI / Security audit (push) Successful in 1m21s
CI / Tests & coverage (push) Successful in 1m38s
2026-05-19 22:33:09 +01:00
d3483f3be7 debug(ui): Add visible styling and debug logging for status panel
All checks were successful
Build and Push Docker Image / build (push) Successful in 25s
Licence Check / Licence compatibility and copyright header verification (push) Successful in 56s
CI / Security audit (push) Successful in 1m9s
CI / Tests & coverage (push) Successful in 1m26s
Added debug logging to trace status panel rendering:
- Log when refresh starts
- Log when data is received
- Log errors with details

Also added visible dashed border and background to #status-content
to make it obvious when the div is present but empty.
2026-05-19 22:30:54 +01:00
252cc50aa4 fix(ui): Add loading state and min-height for status-content
Some checks failed
Build and Push Docker Image / build (push) Successful in 39s
CI / Security audit (push) Successful in 1m17s
CI / Tests & coverage (push) Has been cancelled
Added loading indicator text and min-height CSS for #status-content
to prevent the empty card appearance when status panel first opens.
2026-05-19 22:29:03 +01:00
57908e2b9e fix(ui): Add status-content container to preserve webhooks panel
All checks were successful
Build and Push Docker Image / build (push) Successful in 37s
Licence Check / Licence compatibility and copyright header verification (push) Successful in 50s
CI / Security audit (push) Successful in 1m1s
CI / Tests & coverage (push) Successful in 1m19s
The webhooks panel was being destroyed when renderStatusPanel set
panel.innerHTML. Added a dedicated #status-content div for status
data, keeping webhooks section intact when status refreshes.
2026-05-19 22:27:11 +01:00
e2757768c7 fix(ui): Integrate webhooks panel into status panel
All checks were successful
Build and Push Docker Image / build (push) Successful in 27s
Licence Check / Licence compatibility and copyright header verification (push) Successful in 59s
CI / Security audit (push) Successful in 1m21s
CI / Tests & coverage (push) Successful in 1m35s
The webhooks panel was appearing separately from the status panel.
Now it's properly nested inside the status-panel div:

- Moved webhooks-section inside status-panel in HTML
- Updated CSS so nested webhooks looks like a subsection (no double borders)
- Simplified JS toggle logic - webhooks shows/hides automatically with status panel
- Admin users see webhooks inside status panel, collapsed by default
2026-05-19 22:24:15 +01:00
2469c3e3f4 fix(pagination): Increase Sonarr/Radarr page sizes to fetch all items
All checks were successful
Build and Push Docker Image / build (push) Successful in 20s
Licence Check / Licence compatibility and copyright header verification (push) Successful in 53s
CI / Security audit (push) Successful in 1m12s
CI / Tests & coverage (push) Successful in 1m27s
Sonarr Activity tab has 12 pages but we only fetched ~2 items.
Added pageSize=1000 to queue API and changed history default from 10 to 100.
This ensures all downloads are available for matching to SAB/qBittorrent.
2026-05-19 22:20:09 +01:00
6c8c333c6a debug: Add Sonarr queue titles to no-match output
All checks were successful
Build and Push Docker Image / build (push) Successful in 49s
Licence Check / Licence compatibility and copyright header verification (push) Successful in 1m0s
CI / Security audit (push) Successful in 1m13s
CI / Tests & coverage (push) Successful in 1m29s
2026-05-19 22:16:26 +01:00
5dfe0b1216 fix(matching): Match SAB to Sonarr by downloadId first
All checks were successful
Build and Push Docker Image / build (push) Successful in 41s
Licence Check / Licence compatibility and copyright header verification (push) Successful in 56s
CI / Security audit (push) Successful in 1m6s
CI / Tests & coverage (push) Successful in 1m27s
Sonarr tracks the exact SAB download ID (nzo_id). Now tries to match
by downloadId first, then falls back to title matching. Also adds
debug to show if matches are via downloadId vs title, and logs
downloadIds in history to verify the link exists.
2026-05-19 22:13:43 +01:00
77beef787f debug(matching): Show queue vs history source and history titles
All checks were successful
Build and Push Docker Image / build (push) Successful in 39s
Licence Check / Licence compatibility and copyright header verification (push) Successful in 53s
CI / Security audit (push) Successful in 1m10s
CI / Tests & coverage (push) Successful in 1m30s
When a match is found, logs whether it came from queue or history.
When no match, shows history counts and sample titles to verify
history is being checked properly.
2026-05-19 22:10:34 +01:00
235a866ec8 fix(matching): Check Sonarr/Radarr history for SAB matches
All checks were successful
Build and Push Docker Image / build (push) Successful in 44s
Licence Check / Licence compatibility and copyright header verification (push) Successful in 1m6s
CI / Security audit (push) Successful in 1m21s
CI / Tests & coverage (push) Successful in 1m34s
SAB items often persist after Sonarr has processed them.
Previously only checked the active queue, now also checks
history records so completed downloads still appear.
2026-05-19 22:06:38 +01:00
f1d9de2a92 debug(sonarr): Log all available Sonarr queue fields
All checks were successful
Build and Push Docker Image / build (push) Successful in 28s
Licence Check / Licence compatibility and copyright header verification (push) Successful in 1m9s
CI / Security audit (push) Successful in 1m25s
CI / Tests & coverage (push) Successful in 1m39s
Shows title, sourceTitle, series.title, episode.title for
each Sonarr queue item to understand the data structure.
2026-05-19 22:04:11 +01:00
9d0e31ec9a fix(matching): Normalize dots to spaces for SAB/Sonarr matching
Some checks failed
Build and Push Docker Image / build (push) Successful in 13s
Licence Check / Licence compatibility and copyright header verification (push) Successful in 46s
CI / Security audit (push) Has been cancelled
CI / Tests & coverage (push) Has been cancelled
SAB filenames use dots (dora.the.explorer.s02e08) but Sonarr titles
use spaces (Dora the Explorer - S02E08). Now tries matching with
both formats to improve match rate.

Also logs actual Sonarr titles when no match found for debugging.
2026-05-19 22:02:55 +01:00
42c3eebf18 debug(sse): Add detailed name matching logging
All checks were successful
Build and Push Docker Image / build (push) Successful in 29s
Licence Check / Licence compatibility and copyright header verification (push) Successful in 1m4s
CI / Security audit (push) Successful in 1m29s
CI / Tests & coverage (push) Successful in 1m49s
Shows exactly which SAB items match/don't match to Sonarr/Radarr:
- ✓ Sonarr match: SAB name → Sonarr name
- ✓ Radarr match: SAB name → Radarr name
- ✗ No match: SAB name (with Sonarr queue count)

This will help diagnose why Sonarr Activity Queue shows matches but Sofarr doesn't.
2026-05-19 21:50:05 +01:00
f295e1c90d debug(sse): Add SAB matching stats to trace filtering
All checks were successful
Build and Push Docker Image / build (push) Successful in 36s
Licence Check / Licence compatibility and copyright header verification (push) Successful in 49s
CI / Security audit (push) Successful in 1m18s
CI / Tests & coverage (push) Successful in 1m27s
Shows how many SAB items were checked vs how many matched to Sonarr/Radarr.
This will help diagnose why only ~10 of 60 SAB items are appearing.
2026-05-19 21:47:12 +01:00
c5e8281440 fix(sabnzbd): Handle labels as array or string
All checks were successful
Build and Push Docker Image / build (push) Successful in 43s
Licence Check / Licence compatibility and copyright header verification (push) Successful in 1m7s
CI / Security audit (push) Successful in 1m28s
CI / Tests & coverage (push) Successful in 1m47s
SABnzbd API returns labels as an array in newer versions,
but the code assumed it was a comma-separated string.
Now handles both cases to prevent 'slot.labels.split is not a function' error.
2026-05-19 21:43:58 +01:00
f22dd0d1f6 fix(downloads): Fix SABnzbd/qBittorrent collision and webhook metrics
All checks were successful
Build and Push Docker Image / build (push) Successful in 46s
Licence Check / Licence compatibility and copyright header verification (push) Successful in 1m8s
CI / Security audit (push) Successful in 1m33s
CI / Tests & coverage (push) Successful in 1m41s
1. Fixed download client collision:
   - SABnzbd client with id 'i3omb' was being overwritten by qBittorrent
   - Now uses unique key ':' like the arr retrievers

2. Fixed webhook metrics showing 0:
   - instanceName from webhooks is generic ('Sonarr', 'Radarr')
   - Not the configured instance name ('i3omb')
   - Now updates metrics for ALL instances of that type
2026-05-19 21:40:53 +01:00
5159a83475 fix(retrievers): Use unique key to prevent Sonarr/Radarr collision
All checks were successful
Build and Push Docker Image / build (push) Successful in 33s
Licence Check / Licence compatibility and copyright header verification (push) Successful in 1m10s
CI / Security audit (push) Successful in 1m33s
CI / Tests & coverage (push) Successful in 1m52s
When Sonarr and Radarr had the same instance ID (e.g., 'i3omb'),
the Radarr retriever would overwrite the Sonarr retriever in the Map.
This caused webhook refreshes to show '0 instance(s)' for Sonarr.

Now uses ':' as the unique key so both can coexist.
2026-05-19 21:36:20 +01:00
ccc3b6ffec fix(status): Check actual webhook config, show enabled even with 0 events
Some checks failed
Build and Push Docker Image / build (push) Successful in 46s
Licence Check / Licence compatibility and copyright header verification (push) Has been cancelled
CI / Security audit (push) Has been cancelled
CI / Tests & coverage (push) Has been cancelled
The status panel was showing webhooks as disabled (null) when no events
had been received yet. Now it checks Sonarr/Radarr API to see if the
Sofarr webhook notification is actually configured.

- Added checkWebhookConfigured() to verify webhook exists in Sonarr/Radarr
- Shows 'enabled: true' with 0 events when webhook is configured
- Only shows null when webhook is not configured at all
2026-05-19 21:35:26 +01:00
4ec7d734b8 debug(sse): Add detailed logging for download matching
All checks were successful
Build and Push Docker Image / build (push) Successful in 34s
Licence Check / Licence compatibility and copyright header verification (push) Successful in 1m3s
CI / Security audit (push) Successful in 1m20s
CI / Tests & coverage (push) Successful in 1m38s
Add debug logging to trace:
- When downloads payload is built
- Data sizes from cache (SAB, qBit, Sonarr, Radarr)
- Number of downloads found and their titles

This will help diagnose why Dora downloads aren't appearing.
2026-05-19 21:32:15 +01:00
2e85fae57a fix(webhooks): Load collapsed by default, add webhook metrics to status panel
All checks were successful
Licence Check / Licence compatibility and copyright header verification (push) Successful in 1m8s
CI / Security audit (push) Successful in 1m28s
CI / Tests & coverage (push) Successful in 1m53s
Build and Push Docker Image / build (push) Successful in 35s
- Fixed webhooks section to load collapsed (content hidden, toggle arrow reset)
- Added webhook metrics card to status panel for admin users:
  - Shows Sonarr/Radarr enabled/disabled status
  - Shows events received and polls skipped counts
- Updated /api/dashboard/status endpoint to include webhook metrics
- Metrics are aggregated from all Sonarr/Radarr instances
2026-05-19 21:24:28 +01:00
aeacadbe68 refactor(webhooks): Integrate webhooks panel into status card
All checks were successful
Build and Push Docker Image / build (push) Successful in 41s
Licence Check / Licence compatibility and copyright header verification (push) Successful in 59s
CI / Security audit (push) Successful in 1m20s
CI / Tests & coverage (push) Successful in 1m33s
- Moved webhooks-section to be inline with status-panel in HTML
- Updated toggleStatusPanel() to show/hide webhooks section for admin users
- Updated closeStatusPanel() to also hide webhooks section
- Removed webhooks visibility from showDashboard() - now tied to status panel
- Updated CSS to make webhooks section styling consistent with status panel:
  - Same border, border-radius, margin, box-shadow
  - Updated webhook-stats to use status-card styling (background, border)
- Webhooks metrics now display inline with status panel for admin users
2026-05-19 21:20:34 +01:00
3ef35a8c43 fix(webhooks): Send full notification object to test endpoint
All checks were successful
Build and Push Docker Image / build (push) Successful in 48s
Licence Check / Licence compatibility and copyright header verification (push) Successful in 1m9s
CI / Security audit (push) Successful in 1m23s
CI / Tests & coverage (push) Successful in 1m42s
The /notifications/test endpoint requires the full notification object,
not just the ID. Changed testSonarrWebhook() and testRadarrWebhook() to
send the complete notification object (sonarrSofarr/radarrSofarr).

Fixes: 400 validation error when testing webhooks
2026-05-19 21:16:31 +01:00
0f3c02e52d fix(webhooks): Use numeric method value (1=POST) in notification payload
All checks were successful
Build and Push Docker Image / build (push) Successful in 44s
Licence Check / Licence compatibility and copyright header verification (push) Successful in 1m6s
CI / Security audit (push) Successful in 1m17s
CI / Tests & coverage (push) Successful in 1m33s
The webhook notification payload was using string 'POST' for the method
field, but Sonarr/Radarr API expects numeric values:
- 1 = POST
- 2 = PUT

Also added onManualInteractionRequired: false to match the schema.

Fixes: Radarr/Sonarr rejecting webhook configuration with validation errors
2026-05-19 20:47:19 +01:00
9fd60bcfed fix(webhooks): Use SONARR_INSTANCES/RADARR_INSTANCES config for notification routes
All checks were successful
Build and Push Docker Image / build (push) Successful in 31s
Licence Check / Licence compatibility and copyright header verification (push) Successful in 1m8s
CI / Security audit (push) Successful in 1m21s
CI / Tests & coverage (push) Successful in 1m36s
The notification routes were using process.env.SONARR_URL directly,
which is undefined when using the newer SONARR_INSTANCES JSON format.

Changes:
- Added getFirstSonarrInstance() and getFirstRadarrInstance() helpers
- Updated /notifications, /notifications/test, and /notifications/sofarr-webhook
  routes to use instance config from getSonarrInstances()/getRadarrInstances()
- Returns 503 error if no instances are configured

Fixes: 'Invalid URL' errors when calling Sonarr/Radarr notification APIs
2026-05-19 20:42:59 +01:00
af58e1bf2a debug(webhooks): Add console.error logging to Sonarr/Radarr notification routes
All checks were successful
Build and Push Docker Image / build (push) Successful in 27s
Licence Check / Licence compatibility and copyright header verification (push) Successful in 1m3s
CI / Security audit (push) Successful in 1m19s
CI / Tests & coverage (push) Successful in 1m34s
Added detailed error logging to help diagnose 500 errors when calling
Sonarr/Radarr notification APIs. Logs include:
- Error message
- Response status (if available)
- Response data (if available)

This will help identify if the issue is:
- Missing SONARR_URL/RADARR_URL or API keys
- Network connectivity issues
- Sonarr/Radarr API version incompatibility
2026-05-19 20:39:37 +01:00
2d04402284 fix(webhooks): Show webhooks panel only to admin users
All checks were successful
Build and Push Docker Image / build (push) Successful in 39s
Licence Check / Licence compatibility and copyright header verification (push) Successful in 57s
CI / Security audit (push) Successful in 1m4s
CI / Tests & coverage (push) Successful in 1m24s
2026-05-19 20:36:33 +01:00
0310f10e5d fix(webhooks): Restore original vanilla JS app and add webhooks panel properly
All checks were successful
Build and Push Docker Image / build (push) Successful in 1m14s
Licence Check / Licence compatibility and copyright header verification (push) Successful in 1m8s
CI / Security audit (push) Successful in 1m22s
CI / Tests & coverage (push) Successful in 1m43s
The React build replaced the full-featured vanilla JS app with a
simpler UI, causing the dashboard to disappear and lose theming.

This commit:
- Restores original vanilla JS app with auth, themes, tabs, history
- Adds Webhooks Configuration panel for admin users
- Adds webhook status, enable/test buttons, triggers, and stats
- Uses proper CSS variables for theme support

Fixes the dashboard disappearing issue and restores all original functionality.
2026-05-19 20:33:23 +01:00
5ab8cc96a3 Merge branch 'develop'
All checks were successful
Create Release / release (push) Successful in 18s
Build and Push Docker Image / build (push) Successful in 35s
CI / Security audit (push) Successful in 1m17s
CI / Tests & coverage (push) Successful in 1m30s
v1.5.2
2026-05-19 20:27:26 +01:00
a7363fcb3a v1.5.2: Build and deploy React client with Webhooks Configuration panel
Some checks failed
Build and Push Docker Image / build (push) Successful in 48s
Licence Check / Licence compatibility and copyright header verification (push) Failing after 1m6s
CI / Security audit (push) Successful in 1m29s
CI / Tests & coverage (push) Successful in 1m46s
2026-05-19 20:27:11 +01:00
d06e24dbb6 feat(webhooks): display webhook statistics (events received, polls skipped, last event) in status panel
All checks were successful
Build and Push Docker Image / build (push) Successful in 50s
Licence Check / Licence compatibility and copyright header verification (push) Successful in 58s
CI / Security audit (push) Successful in 1m11s
CI / Tests & coverage (push) Successful in 1m24s
2026-05-19 19:18:29 +01:00
6df94e5ad2 Merge branch 'develop' into main — release 1.5.1
All checks were successful
CI / Security audit (push) Successful in 1m31s
CI / Tests & coverage (push) Successful in 1m42s
2026-05-19 19:08:03 +01:00
015e07ae7a Merge hotfix: webhook routing + version 1.5.1
All checks were successful
Docs Check / Markdown lint (push) Successful in 34s
Build and Push Docker Image / build (push) Successful in 1m0s
Licence Check / Licence compatibility and copyright header verification (push) Successful in 1m6s
CI / Security audit (push) Successful in 1m52s
Docs Check / Mermaid diagram parse check (push) Successful in 2m5s
CI / Tests & coverage (push) Successful in 2m10s
2026-05-19 19:07:12 +01:00
eeab314a08 chore: bump version to 1.5.1
All checks were successful
Build and Push Docker Image / build (push) Successful in 43s
Create Release / release (push) Successful in 17s
CI / Security audit (push) Successful in 1m24s
CI / Tests & coverage (push) Successful in 1m31s
v1.5.1
2026-05-19 19:07:05 +01:00
603f444c33 fix(webhooks): mount webhook routes in index.js before verifyCsrf
Webhook routes were only registered in app.js (the test factory) but
not in index.js (the production entry point). POST /api/webhook/*
was therefore falling through to the verifyCsrf middleware and being
rejected with 403 in production.
2026-05-19 19:06:36 +01:00
740b03ac85 Merge branch 'develop' into main — release 1.5.0a
All checks were successful
Build and Push Docker Image / build (push) Successful in 1m1s
Create Release / release (push) Successful in 25s
CI / Security audit (push) Successful in 1m38s
CI / Tests & coverage (push) Successful in 1m35s
v1.5.0a
2026-05-19 18:52:02 +01:00
917939a9fc fix(ui): wire status panel close button via addEventListener
Some checks failed
CI / Security audit (push) Failing after 29s
Docs Check / Markdown lint (push) Successful in 47s
Build and Push Docker Image / build (push) Successful in 1m3s
Licence Check / Licence compatibility and copyright header verification (push) Successful in 1m14s
CI / Tests & coverage (push) Successful in 1m39s
Docs Check / Mermaid diagram parse check (push) Successful in 1m54s
Inline onclick attribute was silently blocked by the server CSP nonce
policy. Replace with addEventListener after innerHTML is set.

chore: bump version to 1.5.0a
2026-05-19 18:51:50 +01:00
575688dab7 Merge branch 'develop' into main — release 1.5.0
All checks were successful
Create Release / release (push) Successful in 18s
Build and Push Docker Image / build (push) Successful in 39s
CI / Security audit (push) Successful in 1m20s
CI / Tests & coverage (push) Successful in 1m24s
2026-05-19 18:42:34 +01:00
3747dab36f Merge branch 'develop-webhook-receiver' into develop
All checks were successful
Docs Check / Markdown lint (push) Successful in 45s
Build and Push Docker Image / build (push) Successful in 1m5s
Licence Check / Licence compatibility and copyright header verification (push) Successful in 1m11s
CI / Security audit (push) Successful in 1m47s
CI / Tests & coverage (push) Successful in 2m1s
Docs Check / Mermaid diagram parse check (push) Successful in 2m23s
2026-05-19 18:33:07 +01:00
76f0aad453 chore: bump version to 1.5.0
All checks were successful
Build and Push Docker Image / build (push) Successful in 50s
Docs Check / Markdown lint (push) Successful in 41s
CI / Security audit (push) Successful in 1m35s
CI / Tests & coverage (push) Successful in 1m54s
Licence Check / Licence compatibility and copyright header verification (push) Successful in 1m7s
Docs Check / Mermaid diagram parse check (push) Successful in 1m28s
2026-05-19 18:33:03 +01:00