mirror of
https://github.com/4gray/iptvnator.git
synced 2026-10-08 09:01:03 -08:00
## Summary - Normalize Xtream recently-added timestamps across UI, import, and dashboard query paths. - Filter future/invalid provider dates before ranking rails and migrate legacy millisecond cache rows. - Add regression coverage for future timestamps, series date priority, and DB migration behavior. ## Validation - GitHub checks passed, including Unit Tests and Typechecks, Web E2E, Electron E2E on macOS/Ubuntu/Windows, CodeQL, builds, and Greptile Review.
2.2 KiB
2.2 KiB
Date Handling
Rules
- Use native
Date, ISO strings, and epoch timestamps as the stored/runtime values. - Use
date-fnsfor parsing, arithmetic, and normalization logic. - Use Angular
DatePipein templates when the value is already aDate, ISO string, or epoch timestamp. - Use cached
Intl.DateTimeFormathelpers in TypeScript-only formatting paths where Angular pipes are not available. - Do not add new
momentusage. The app no longer depends on it.
Locale Strategy
- Date display should follow the user-selected app language from
TranslateService. - When a template renders localized month or weekday names, pass the normalized app locale explicitly to
DatePipe. - Angular locale data is registered in apps/web/src/app/app-date-locales.ts.
- App language aliases are normalized in libs/ui/pipes/src/lib/date-format.util.ts:
ary->ar-MAby->bezhtw->zh-Hant
Parsing Boundaries
- Normalize provider-specific or legacy date strings to ISO as early as possible.
- Keep optional epoch fields such as
startTimestampandstopTimestampwhen the provider already supplies them. - Avoid new non-standard
Date.parse(...)usage for provider formats; prefer explicitdate-fnsparsing when the input is not ISO. - Xtream
added/last_modifiedvalues are provider-supplied epoch fields. Normalize them throughtoXtreamRecentlyAddedTimestamp()/toXtreamRecentlyAddedEpochSeconds()from@iptvnator/shared/interfacesbefore ranking or storing recently-added content. Values more than 24 hours in the future are treated as invalid so provider placeholders such as2030-01-01cannot permanently pin the top of recently-added rails. Recently-added ranking usesaddedbeforelast_modifiedfor live/VOD content andlast_modifiedbeforeaddedfor series. The VOD/live fallback is intentional for providers that omitaddedbut still expose a validlast_modifiedepoch. Legacy cached millisecond epochs incontent.addedare migrated to epoch seconds during database startup so indexed dashboard queries can continue to compare and sort text timestamps directly.