feat(subscription-gate): extend offline grace window 3 → 30 days

Matches Qobuz's own mobile app posture. The previous 3-day window was
both user-hostile (punishes anyone on a flaky network) and a compliance
red flag (shorter windows read as 'we're hiding something', longer
windows read as 'we're lenient for a reason'). 30 days is the exact
parity answer.

The useful protection against bulk-download-and-ghost attacks comes
from the CMAF-at-rest offline cache (v2 format), not from aggressive
revalidation. This grace window is a belt over the suspenders.

Changes:
- GRACE_PERIOD_SECS: 3 → 30 days in config/subscription_state.rs, with
  a comment explaining the reasoning for future readers.
- Log message in session_lifecycle no longer says "3 days" (it quoted
  a constant, now says "grace window").
- Disclaimer string in all 5 locales (en/es/de/fr/pt) updated from
  "3 days" to "30 days" so the Offline Playback settings screen
  reflects the actual behavior.

No behavior changes for users with an active subscription. Users who
were within the old 3-day window don't lose cache — the window
extended, not contracted.

cc
This commit is contained in:
vicrodh committed 2026-04-17 08:28:00 -06:00
1 parent db6e7021ec
commit b3ad548a9c
7 files changed
+20 -7

No files matched your search

+1 -1
View File
@@ -1408,7 +1408,7 @@
},
"offlineLibrary": {
"title": "Offline-Bibliothek",
"disclaimer": "Die Offline-Bibliothek ist ein temporärer Wiedergabe-Cache für das Offline-Hören, solange Sie ein gültiges Qobuz-Abonnement haben. Sie erhalten keine Lizenz zum Behalten oder Weiterverteilen der Inhalte. Wenn Ihr Abonnement ungültig wird, entfernt QBZ alle zwischengespeicherten Inhalte nach 3 Tagen.",
"disclaimer": "Die Offline-Bibliothek ist ein temporärer Wiedergabe-Cache für das Offline-Hören, solange Sie ein gültiges Qobuz-Abonnement haben. Sie erhalten keine Lizenz zum Behalten oder Weiterverteilen der Inhalte. Wenn Ihr Abonnement ungültig wird, entfernt QBZ alle zwischengespeicherten Inhalte nach 30 Tagen.",
"cachedTracks": "Offline-Titel",
"cachedTracksDesc": "Zwischengespeicherte Titel für die Offline-Wiedergabe",
"clearCache": "Alles löschen",