Commit Graph
2544 Commits
Author SHA1 Message Date
euzu de45535647 ci: bump version v3.3.80 v3.3.80 2026-08-01 10:51:57 +00:00
knylbyteandGitHub 224c9f6f31 feat: add resilient shared HLS master playlists (#805)
* feat: add shared HLS master playlists and recovery
2026-08-01 12:50:52 +02:00
euzu f56f8a0f0a ci: bump version v3.3.79 v3.3.79 2026-08-01 09:56:08 +00:00
MaxPain99andGitHub 9cb8ea9aad fix: Flussonic/BitTV archive catchup routing and Streams panel stability (#807)
* feat: improve Flussonic/TiviMate M3U catchup and DVR playback

Unified catchup-type export, default Wink append template, leaked relative
DVR path recovery, session-based archive EPG reference, and panel archive
playback helpers for Flussonic-style origins.

* fix: Flussonic/BitTV archive Streams sticky panel and catchup routing

Prefer catchup-type for Flussonic detection, keep archive rows stable across HLS segments without immortal ghosts, scroll Active Streams list, and dedupe HLS chips.
2026-08-01 11:55:02 +02:00
euzu 81bf19028b ci: bump version v3.3.78 v3.3.78 2026-07-30 16:49:18 +00:00
f16c3b24c1 fix: restore Windows builds for gnu/msvc targets (#806)
* fix: restore Windows builds for gnu/msvc targets

memmap2::Advice and Mmap::advise are Unix-only; add a portable Advice stub
on non-Unix. Fix GetDiskFreeSpaceExW output pointer types and wrap the
current-process pseudo-handle in a Send newtype so sys_usage can spawn on
tokio.

Co-authored-by: Cursor <cursoragent@cursor.com>

* windows support

* windows support

---------

Co-authored-by: MaxPain99 <maxpain99@users.noreply.github.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: euzu <euzu@proton.me>
Co-authored-by: euzu <33094714+euzu@users.noreply.github.com>
2026-07-30 18:47:16 +02:00
euzu 3ae44e1f5c ci: bump version v3.3.77 v3.3.77 2026-07-30 12:58:56 +00:00
euzuandGitHub 576e865239 xtream expiry date handling (#809)
* **New Features**
  * Added automatic Xtream account expiration refresh in server mode: periodic per-panel checks refresh missing/soon-expiring `exp_date`, persist updates with timestamped backups and atomic writes, and disable accounts reported as expired (no automatic re-enable).
* **Bug Fixes**
  * Improved configuration reload by batching pending write triggers with more reliable internal vs external write detection and better failure reporting.
  * Prevented arithmetic overflow in SSDP M-SEARCH delay calculation.
  * Hardened config backup handling and improved CSV alias batch expiration updates with more robust ACL preservation.
* **Documentation**
  * Updated `exp_date` guidance to describe the automatic Xtream expiration refresh behavior and persistence.
2026-07-30 14:57:54 +02:00
euzu 73a3da5f55 ci: bump version v3.3.76 v3.3.76 2026-07-29 16:46:50 +00:00
euzuandGitHub c47cf99f99 QOS compacting (#804)
- **New Features**
  - Added configurable QoS snapshot compaction to periodically reclaim storage from expired snapshots.
  - Compaction runs daily by default and can be disabled by setting the interval to `0`.
  - QoS config hot-reload now recognizes compaction interval changes.
  - Older saved snapshot checkpoints remain compatible with the new setting.
- **Documentation**
  - Updated configuration examples and reverse-proxy QoS documentation to include `compaction_interval_secs`, its default, and disable behavior.
2026-07-29 18:45:55 +02:00
euzu fb925b0171 ci: bump version v3.3.75 v3.3.75 2026-07-29 14:04:46 +00:00
euzuandGitHub 42e4c72608 STRM title/filename can now selected from header or metadata. (#803)
* **New Features**
  * Added a STRM export option to control whether generated folder/file names use media metadata or the processed title.
  * STRM naming now prefers the processed title by default; enabling the option switches to metadata-derived names.
  * Added a UI chip/tag and editor control for the setting.

* **Documentation**
  * Updated STRM configuration docs with the new option, its default, and its effect.
  * Added localization text for the setting in supported languages.

* **Tests**
  * Added/updated tests to verify filename behavior for videos and series with and without the option.
2026-07-29 16:01:24 +02:00
euzu 0dd6ef8a54 ci: bump version v3.3.74 v3.3.74 2026-07-27 13:14:08 +00:00
euzuandGitHub 4d8df8f534 M3u catchup fix (#794)
* **New Features**
  * Catch-up streams can now auto-detect whether to serve direct video or an HLS playlist.
  * Added archive-aware HLS session/identity handling and improved upstream user-agent propagation for manifests.
  * Enhanced M3U timeshift/archiving, including nested handling and native Flussonic archive support; Short EPG can advertise archive availability.

* **Bug Fixes**
  * Provider session headers now persist across retries and deferred-open scenarios.
  * Legacy HLS routing is now cache-aware; seek detection improvements.
  * Stalker errors now better redact sensitive URL details.
  * Fix: Preserve VOD client range requests

* **Tests**
  * Expanded coverage for probing, archive/timeshift resolution, header overlay rules, and related routing.
2026-07-27 15:13:10 +02:00
euzu bcc1badcfe ci: bump version v3.3.73 v3.3.73 2026-07-23 13:38:32 +00:00
euzuandGitHub fa87a65c9f Feature/hls disable (#800)
* **New Features**
  * Added **Force MPEG-TS** / `disable_hls_streaming` for Xtream live streams, rewriting live `.m3u8` requests to `.ts`.
  * Added UI controls and option indicators, with localized labels in English, Arabic, and Russian.

* **Documentation**
  * Clarified MPEG-TS behavior and added an Xtream example configuration.

* **Bug Fixes**
  * Improved live-stream playback routing/extension handling and related permission-failure responses.
  * Refined provider allocation and grace-period handling for more consistent connection admission.
2026-07-23 15:37:14 +02:00
euzu 2cc23aa92f ci: bump version v3.3.72 v3.3.72 2026-07-22 12:32:33 +00:00
euzuandGitHub 78df42ff28 Added Mapping Stage fpr mapper. (#798)
* **New Features**
  * Added configurable mapping stages for `mapping.yml`: `processing` (default) and `after_epg`.
  * `after_epg` mappings now run after EPG enrichment and can react to enriched EPG fields.
* **Bug Fixes**
  * Stage-aware playlist mapping: if no mappings match, the source is left unconsumed.
  * Mapping directory merges now reject conflicting stages for the same mapping id and report both files clearly.
* **Documentation**
  * Updated mapping DSL and target `processing_order` docs to describe stage timing and guarantees.
* **Tests**
  * Added coverage for stage-restricted mapping behavior, merge conflicts, and AfterEpg timing.
2026-07-22 14:31:19 +02:00
euzu 427ea8fee3 ci: bump version v3.3.71 v3.3.71 2026-07-22 09:19:48 +00:00
euzuandGitHub fa514031d6 Fixed input form state (#797)
Bug Fixes
- Input forms now consistently update when switching between configured sources.
- Improved filter matching for captions/titles and more accurate type handling for live/video/series (including series-info variants).

New Features
- Mapping DSL now supports reading @input and @type as metadata sources, while rejecting assignments to them.
- Regex capture results are now more consistently exposed across captures (by index and name).

Tests
- Added WASM browser coverage for input switching and updated coverage for filter/mapping behavior.

Documentation
- Updated mapping DSL documentation and changelog to reflect @input/@type read-only behavior and capture access rules.
2026-07-22 11:18:46 +02:00
euzu 21ba9322ca ci: bump version v3.3.70 v3.3.70 2026-07-21 09:23:01 +00:00
euzuandGitHub ab4031e567 Fix: Mapper counter reset (#795)
Bug Fixes
Fixed playlist counter assignments so values reset correctly during each refresh.
Corrected counter displays to consistently show their configured starting values.
Improved counter comparisons to detect changes in starting values accurately.
2026-07-21 11:21:34 +02:00
euzu b0ac44372c ci: bump version v3.3.69 v3.3.69 2026-07-20 15:41:09 +00:00
euzuandGitHub 9bb1c97d93 Added new EPG tags: Category, new, live (#793)
* Added new EPG tags: Category, new, live
2026-07-20 17:39:50 +02:00
euzu 922cb8f028 ci: bump version v3.3.68 v3.3.68 2026-07-20 13:00:59 +00:00
euzuandGitHub f8e8941929 Feature/stalker (#780)
New Features

- Added first-class Stalker/Ministra portal support, including live, VOD, series, playback-link refresh, and bulk EPG ingestion.
- Added Stalker configuration and batch/CSV support in the Web UI.
- Added playlist preview and playback handling for Stalker inputs, with support for partial refreshes.
2026-07-20 14:58:06 +02:00
euzu ca2daee21b ci: bump version v3.3.67 v3.3.67 2026-07-17 15:58:29 +00:00
euzuandGitHub 5b49ea58d8 BPlusTree refactoring / optimization (#792)
* BPlusTree refactoring / optimization
New Features
- Added streaming JSON/CBOR “try” array responses that stop at the first failure, with coalesced HTTP chunking for smoother delivery.
- Introduced B+Tree v3 persistence (with v2→v3 migration) including verified atomic updates, snapshots, compaction, and batch operations.
- Updated playlist/index streaming to use sorted-index acceleration with corruption-safe fallback.

Bug Fixes
- Corrupt/unreadable Library databases now surface repository errors instead of appearing empty.
- Playlist/lineup/EPG/Xtream/M3U streaming now propagates per-entry failures correctly (including improved counting/early-stop behavior).

Documentation
- Updated README and changelog to reflect the B+Tree v3 format and migration behavior.
2026-07-17 17:56:29 +02:00
euzu e3956a30cd ci: bump version v3.3.66 v3.3.66 2026-07-16 13:30:23 +00:00
knylbyteandGitHub 2c39bebc2d fix: clean up orphaned active streams (#791) 2026-07-16 15:28:16 +02:00
euzu a9336f5a44 ci: bump version v3.3.65 v3.3.65 2026-07-15 10:53:30 +00:00
knylbyteandGitHub a63e6e4ca5 docs: updatet docker templates and added iptv-org-epg template (#790) 2026-07-15 12:52:16 +02:00
euzu d4da4466ac ci: bump version v3.3.64 v3.3.64 2026-07-15 08:41:31 +00:00
knylbyteandGitHub c70fbc671e feat: hls content encoding support and shared session between different targets (#789)
* feat: key shared hls sessions by origin id
* feat: support hls content encoding
* fix: coderabbitai findings
* Fix: Custom headers are lost on provider://
In the manual redirect path, the abstract provider:// URL is compared against the resolved HTTP URL.
This causes the request to be marked as "scrubbed" before the first real redirect even occurs, stripping out headers like X-API-Key.
2026-07-15 10:40:30 +02:00
euzu 8f65e98241 ci: bump version v3.3.63 v3.3.63 2026-07-15 07:40:51 +00:00
zachhideandGitHub 0cbe08b307 fix(strm): name every flat/tmdb movie version after the folder it lands in (#787)
* fix(strm): name every flat/tmdb version after the folder it lands in

Under `flat: true` the movie folder is deduplicated by TMDB id, but
`final_filename` was derived from each item's own provider title before the
folder-reuse branch. Providers routinely list the same film twice with the tag
written two ways, so the second listing landed in the first listing's folder
under a name that does not start with the folder name.

That is precisely the condition Jellyfin's Emby.Naming VideoListResolver checks
in IsEligibleForMultiVersion: the file name must start with the folder name, and
the remainder must be empty or start with '-', '_', '.', or a [bracketed] token.
Any ineligible file makes GetVideosGroupedByVersion return the folder's videos
ungrouped, so *every* file in it becomes a separate movie.

The first item to claim a flat folder now also fixes the file name for every
item that follows it into that folder. The existing add_quality_to_filename
suffix, or the existing [Version id#N] collision suffix when the qualities tie,
is what keeps the versions apart. Kodi and Emby shared the same defect and are
fixed with them.

* fix(quality): classify resolution from the frame, not its height alone

VideoResolution was bucketed from ffprobe's height only. Widescreen releases keep
the full raster width but encode fewer active lines, so a 2.40:1 film mastered at
1080p (1920x796) was tagged '720p HD', and a 2.40:1 UHD master (3840x1600) was
tagged '1440p QHD'.

Classify both axes and keep the higher tier. Height still decides on its own when
the width is missing, which also keeps anamorphic frames (1440x1080) correct.

* fix(strm): drop the category from flat movie file names

The category suffix was added to flat movie file names 'to avoid collisions',
but with folder reuse now naming files after their folder, the only files that
can collide are versions of the same movie -- same TMDB folder, same quality
string -- and the existing [Version id#N] pass already separates those.

It is not free: Jellyfin and Emby render whatever follows the folder name as the
version label, so the category was showing up in the version picker next to the
quality. Removing it makes the label read as the quality alone.

Items without a TMDB id keep the category, because it is what makes their folder
unique -- but they now carry it in the file name as well. Previously the folder
got '[Category]' while the file did not, so the file name did not start with the
folder name and version detection was broken for exactly those items.

* fix(strm): keep the version label when the writer truncates a long name

The [Version id#N] suffix is the only thing separating two versions that share a
base and a quality string, but it was appended last and the writer truncates the
file stem to 250 chars -- so for a long enough title the suffix was cut off, both
versions resolved to the same path, and the second silently overwrote the first.
The collision detector could not see it either, since it compares untruncated
names.

Trim the shared base to fit instead, so the label always survives. The 250-char
limit is now a named constant used by both the naming and the writing side.

Also hoist the per-item flag lookups out of the naming loop and drop a redundant
HashSet lookup (insert already reports whether the entry was present).

* docs: scope the no-tmdb category note to jellyfin/emby
2026-07-15 09:38:21 +02:00
euzu aa4d742108 ci: bump version v3.3.62 v3.3.62 2026-07-13 10:44:31 +00:00
euzuandGitHub 9c34d8e8ca feat: invert staged input connection flow and credentials inheritance (#779)
* feat: invert staged input connection flow
2026-07-13 12:43:25 +02:00
euzu 85b813f545 ci: bump version v3.3.61 v3.3.61 2026-07-13 06:44:40 +00:00
zachhideandGitHub c9f7cf5e63 Derive authenticated-token IV synthetically so STRM files stop churning (#786)
* Derive authenticated-token IV synthetically so STRM files stop churning
2026-07-13 08:43:38 +02:00
euzu 55e3484726 ci: bump version v3.3.60 v3.3.60 2026-07-11 08:00:26 +00:00
knylbyteandGitHub 18ae03ba1a feat: add EPG output normalization (#785)
* docs: document EPG output normalization

* feat: normalize EPG output
2026-07-11 09:59:23 +02:00
euzu 01c4ca2616 ci: bump version v3.3.59 v3.3.59 2026-07-10 12:55:45 +00:00
knylbyteandGitHub 9040940674 feat: ics to xmltv exporter (#784)
feat: ics to xmltv exporter
2026-07-10 14:53:33 +02:00
euzu 4d0533ff00 ci: bump version v3.3.58 v3.3.58 2026-07-08 14:19:22 +00:00
zachhideandGitHub ded3fd14e0 Case-insensitive EPG channel-id matching; stop lowercasing ids in parsers (#783)
Make EPG channel-id matching case-insensitive; stop lowercasing ids in parsers
2026-07-08 16:16:40 +02:00
euzu 414085882d ci: bump version v3.3.57 v3.3.57 2026-07-08 13:42:48 +00:00
euzu f0217191e5 fixed frontend compilation problem 2026-07-08 15:39:14 +02:00
euzu f0eae9be53 fixed manual Dockerfile name 2026-07-08 15:28:19 +02:00
euzu b6c42fefc7 github ci update 2026-07-08 13:07:57 +02:00