github PiratesIRC/Dispatcharr-Event-Channel-Managarr-Plugin 1.26.1081615
v1.26.1081615

10 hours ago

What's New in v1.26.1081615

This release carries a significant feature expansion and the switch to date-based (calver) versioning. The next section lists everything that changed since the previous release (v0.7.0, 2026-04-05).


✨ New Features

Rule engine

  • [UndatedAge:N] hide rule — tracks per-channel first-seen dates in /data/event_channel_managarr_undated_first_seen.json and hides channels whose names carry no parseable date once they've been present for more than N days. Catches stale placeholder channels that date-based rules can't evaluate. Timezone-aware; tracker resets when a channel's name changes.

Managed Dummy EPG (opt-in)

  • New toggle 🗓️ Manage Dummy EPG. When on, visible channels with no EPG get bound to a plugin-managed EPGSource(source_type='dummy', name='ECM Managed Dummy') via a per-channel EPGData row keyed by channel.uuid.
  • Dispatcharr's guide then renders:
    • During the event window: the extracted event title.
    • Before the window: Upcoming at <start-time>: <title>.
    • After the window: Ended at <end-time>: <title>.
    • Channels with no parseable time: a 24-hour program showing the channel name.
  • Event duration, and the source-timezone encoded in channel names (default US/Eastern), are both configurable.
  • Regex patterns match PPV EVENT NN: …, LIVE EVENT NN Hpm …, PPVNN | …, and the leading 5pm / 9am / 1:35pm time forms typical of event-channel feeds.
  • Toggling the feature off cleanly detaches every channel on the next scan.

Notification polish

  • Dry Run / Run Now now run synchronously — the action button's built-in loading spinner covers the busy state and a single concise completion notification fires on return. Example: Run Now: 103 channels | 47 hide / 0 show | EPG +1/-0 | CSV: <file>.
  • 🩺 Check Scheduler Status rewritten for honest per-worker reporting — shows the current worker's PID, configured times, next run, container-wide last-run history, and whether a scan is holding the cross-process lock, all in 4 compact lines.

Dispatcharr v0.20+ UX

  • Settings form reorganised into six sections: Scope, Hide Rules, Duplicates, EPG Management, Scheduling & Export, Advanced (via type: info dividers).
  • Text-heavy fields switched to type: text, numeric fields to type: number.
  • Action buttons got button_variant / button_color / button_label styling and confirmation dialogs on destructive operations (Remove EPG, Clear CSV, Cleanup Orphaned Tasks, Run Now).
  • help_url field in plugin.json surfaces as a clickable help link in the Plugins page.
  • Plugin ships a logo.png (300×300 RGBA), auto-discovered by Dispatcharr.

Performance / reliability knobs

  • 🐢 Rate Limiting select (none / low / medium / high) — adds 0 / 0.05 / 0.2 / 0.5 seconds between per-channel ORM writes. Useful for very large profiles or constrained databases; no measurable overhead at the default.
  • Cross-worker scan lockSCAN_LOCK_FILE flock now wraps the entire scan entry point, so scheduled and manual runs alike are serialised across every uwsgi worker.

CSV export — now self-describing

  • Settings snapshot block in every CSV header: dumps every user-facing setting value so a two-week-old CSV can still answer "which regex was active when this ran?"
  • Managed EPG Attached / Detached counts and Rate Limiting level in the header summary.
  • Per-channel managed_epg_assigned / managed_epg_detached boolean columns on every row.

Tooling

  • bump_version.py maintainer helper — generates calver 1.YY.{DDD}{HHMM} from UTC timestamp and updates both plugin.py and plugin.json in lockstep.

🐛 Bug Fixes

  • Time-colon false positives in [ShortDescription] / [EmptyPlaceholder] / [ShortChannelName]. Channel names like PPV03 | Hepi vs. Wisniewski Apr 18 7:00AM were being hidden because the colon inside 7:00AM was treated as a separator. Rules now require the colon to be followed by whitespace to count as a separator; time-colons are skipped.
  • Bare-hour AM/PM times in the managed dummy EPG — 5pm, 7am, 8pm now parse correctly, raising event-window coverage on the author's PPV/Live channel feed from roughly half to nearly all. The extracted title no longer carries the leading time as a prefix.
  • Midnight-crossing in [UndatedAge:N]today_str is now captured once per scan so the record-tracker and rule-evaluator agree on "today" even when a scan straddles local midnight.
  • Ignored / force-visible channels preserve undated-tracker entries — previously, adding a regex to ignore or force-visible a channel reset its first_seen date.
  • Report-row sync for detached channels — when an ignore-regex causes the plugin to detach a channel from managed EPG, the CSV row now correctly reports managed_epg_detached: True instead of False.
  • Uniform rate-limiter pacing across all per-channel branches (ignore-regex, force-visible, and normal).
  • Transaction boundary in _attach_managed_epgget_or_create EPGData and the final bulk_update are now in one transaction.atomic() so a bulk_update failure can't leave orphan EPGData rows.
  • Stuck busy-notification on Dry Run / Run Now — replaced by a synchronous-with-spinner pattern that auto-resolves on completion.
  • [UndatedAge:2:4h] typo crash_check_hide_rule now accepts tuple-form rule_param defensively; bad rule input logs a warning instead of aborting the scan.
  • _save_undated_tracker error reporting — now returns bool; summary log accurately reports "saved" vs "save FAILED".
  • Dry-run purity preserved for managed dummy EPG — dry runs never create the EPGSource row and never attach/detach bindings.

🔧 Internal

  • Switched from 0.X.Y semver to calver 1.26.{DDD}{HHMM} to match the Lineuparr / Channel-Mapparr / EPG-Janitor cohort. bump_version.py automates the bump.
  • plugin.json schema aligned with Dispatcharr v0.20+ conventions.
  • Plugin.actions class attribute kept in sync with plugin.json.
  • Internal docs/superpowers/ planning and design tree moved out of the shipped git tree (still maintained locally for development).

📦 Install

Download Event-Channel-Managarr.zip (attached below), then in Dispatcharr → PluginsImport Plugin → upload the zip.

Requires Dispatcharr v0.20.0 or newer (declared via min_dispatcharr_version).

See the repository README for the full feature list, rule semantics, settings reference, and CSV format.

Don't miss a new Dispatcharr-Event-Channel-Managarr-Plugin release

NewReleases is sending notifications on new releases.