=== MediaBlaster Changelog ===
= 3.2.0 =
* NEW: **Totally new MediaBlaster admin UI** — modern admin shell, clearer Features settings, grouped sections, toggle switches, and consistent styling across settings and feature screens.
* NEW: **Setup Wizard (onboarding)** — guided multi-step wizard for new installs (content, platforms, branding, hosting, links, review); skip / resume / restart; drafts apply only on Finish Setup.
* NEW: **Vimeo Integration rebuilt from the ground up** — three-step Vimeo Connection (credentials, Redirect URI, Connect + upload), import defaults, unsaved-credential Connect guard, post metabox, and reliable API/SSL wrapper (replaces older Extender-era flows).
* NEW: **Import from Vimeo** guided importer UI — readiness filters, summary counts, shared **Loading Data** modal (`MediaBlaster_Admin_UI` / `MediaBlasterAdminUI.loading`), Review bulk flow (legacy DataTables mass import no longer used on this screen).
* NEW: Shared admin **Loading Data** modal for core and add-on importers — `MediaBlaster_Admin_UI::render_loading_dialog()`, doc `admin-loading-modal.md`.
* NEW: **Live Channels & EPG (Beta)** module — enable under Features (`rovidx_smart_tv_live_channels_enabled`).
* NEW: **Live** post type with stream mode, default duration, and fallback content metadata.
* NEW: **Channel Playlists** (admin CPT + Playlist Builder with Series expansion from existing `rovidx_smarttv_playlist` order).
* NEW: **Channels** CPT with timezone, fallback playlist, schedule horizon, EPG visibility, and weekly **Channel Schedule** three-panel admin UI (no modal).
* UPDATED: **Channel Scheduler** — channel-local times, exact second durations, configurable snap (15/5/1), live resize with magnets/collision clamp, overnight segments, optimistic save + Undo, DST-safe weekly recurrence, occurrence-aware overlap (409 conflict details), unsaved-change protection.
* FIXED: **Channel Scheduler** — dual-edge resize (top/bottom hit areas, no internal grip); previous-block clamp; weekly anchor updates for start-edge edits; overnight handle assignment by segment start/end.
* NEW: Schedule compiler generates `{prefix}mediablaster_channel_airings` from playlists and schedule blocks (UTC storage) for the electronic program guide.
* NEW: Linear TV / EPG REST API — `/channels`, `/channels/{id}/now`, `/channels/{id}/schedule`, `/epg`, `/live`, plus admin `/linear/*` routes.
* NEW: App Config and discovery expose `linearTv`, `features.linear_tv`, `enableLive`, and `enableEPG` when the module is enabled.
* NEW: Deep linking supports `mediaType=liveFeed` for Live posts and Channels.
* NEW: In-plugin docs — Live Streams, Channel Playlists, Channels, Channel Scheduler, Linear TV REST API, and updated Vimeo guides.
* UPDATED: Features tab is the master switchboard for Podcasts, Live Channels / EPG, and Vimeo Integration (each off by default).
* UPDATED: **Podcasts leave Beta** — production-ready podcast CMS (still opt-in / off by default).
* NEW: Immutable episode GUIDs (`rovidx_smarttv_podcast_episode_guid`) with batched upgrade migration; legacy `urn:mediablaster:episode:{id}` preserved.
* NEW: Podcast episodes use canonical subscription entitlements (`_wpst_*`) with legacy free/premium mirror for one release.
* NEW: Podcast CPT capabilities (`edit_podcast_shows`, `edit_podcast_episodes`, `manage_podcast_integrations`, `distribute_podcast_episodes`) with role migration.
* NEW: Write-capable Podcast REST — create/update/validate shows and episodes; public transcript/chapters endpoints for free episodes.
* NEW: Production RSS — full catalogs (no 100-item cap), Atom/iTunes/Podcast Index namespaces, ETag/Last-Modified/304, enclosure validation, streaming batches.
* NEW: **Podcasts → RSS Diagnostics** and shared validation service for show readiness.
* NEW: Provider-neutral podcast integration API (`mediablaster_get_podcast_*`, hooks) for future distribution add-ons (no Spreaker code in core).
* NEW: **Podcasts → Integrations** admin shell (`manage_podcast_integrations`) lists registered distribution add-ons and settings links.
* NEW: Distribution side metabox on podcast shows/episodes applies `mediablaster_podcast_distribution_actions` (`$actions, $post_id, $object_type`).
* UPDATED: Audio player — mute/volume, loading/error/retry, coordinated playback, localized ARIA, dynamic init; Gutenberg ID `0` uses current episode.
* FIXED: Entitled subscribers can play protected podcast audio; unauthorized viewers never receive protected media via v3 or `/wp/v2`.
* FIXED: Public show REST no longer exposes `owner_email`; episode counts respect viewer context.
* FIXED: Public show template pagination; featured episodes are not duplicated in Latest.
= 3.1.2 =
* NEW: Roku deep-link resolution API — `GET /wp-json/mediablaster/v3/deep-link/{content_id}?media_type=` resolves numeric WordPress post IDs to playable content and series/season navigation behavior.
* NEW: `deep_link` metadata on content REST items (`content_id`, `default_media_type`, `supported_media_types`).
* NEW: In-plugin documentation — **MediaBlaster → Docs** → REST API — Deep Linking.
= 3.1.1 =
* UPDATE: Minor bug fixes and additions to support our new Roku Launch Kit.
= 3.1.0 =
* NEW: Platform App Config admin screen — **MediaBlaster → App Config** (positioned under General Settings) with an **App Settings** tab for connected TV and mobile clients.
* NEW: Public App Config REST endpoint — `GET /wp-json/mediablaster/v3/config?platform=roku` (discoverable via `links.config` on the v3 index).
* NEW: App Config covers app name, content availability, branding colors, fallback images, support/privacy links, sidebar, navigation features, labels, home layout, home tag rows, and boot behavior.
* NEW: App Config branding colors use WordPress color pickers with custom hex input.
* NEW: App Config fallback images support manual URL or Roku package paths (`pkg:/images/…`) plus WordPress Media Library selection with admin preview.
* NEW: App Config **Clear** on image fields restores built-in Roku placeholder paths.
* NEW: App Config admin uses CMB2-style grouped sections, toggle switches, inline field descriptions, and a read-only REST endpoint card.
* NEW: App Config in-plugin documentation under **MediaBlaster → Docs** (App Config and REST API — App Config guides).
* NEW: App Config is distinct from subscription `GET /app/config` (Stripe and auth client settings when subscriptions REST is enabled).
= 3.0.0 =
* REBRAND: WP Smart TV is now MediaBlaster.
* NEW: Updated plugin positioning for modern media publishing, video libraries, podcasts, subscriptions, and headless WordPress workflows.
* NEW: MediaBlaster website added: mediablaster.io
* NEW: Community link added: Skool community
* NEW: Vimeo integration is now built into the core plugin.
* NEW: Vimeo OAuth connection flow.
* NEW: Vimeo metadata, thumbnail, tag, title, and description syncing.
* NEW: Redesigned Vimeo Mass Import workflow.
* NEW: Guided Review & Import process for Vimeo videos.
* NEW: General Settings reorganized into clearer feature sections.
* NEW: Subscription and entitlement foundation.
* NEW: Subscription tiers and access groups.
* NEW: Stripe Checkout foundation for web subscriptions.
* NEW: Stripe billing portal and webhook handling.
* NEW: REST API foundation under `/wp-json/mediablaster/v3/`.
* NEW: API direction for headless WordPress, custom apps, mobile apps, TV apps, and subscriber-aware media experiences.
* NEW: Podcast Shows and Episodes (beta), RSS feeds, public pages, and Podcast Audio Player.
* NEW: MediaBlaster Player — Video.js HTML5 player with shortcode, Gutenberg block, and Elementor widget.
* NEW: In-plugin documentation under MediaBlaster → Docs.
* NEW: Legacy Controls toggle for optional trickplay, subtitle, advanced, and advertising metaboxes.
* UPDATED: Vimeo integration and podcasts are opt-in via General Settings (off by default).
* UPDATED: Subscriptions require `WPST_SUBSCRIPTIONS_ENABLED` in `wp-config.php`.
* UPDATED: Documentation and branding moved to MediaBlaster.
* REMOVED: Roku Direct Publisher REST feed at `/wp-json/tv/roku/` (use WP Smart TV – Legacy plugin: https://github.com/rovidxmedia/wp-smart-tv-legacy).
* REMOVED: Legacy REST namespace `/wp-json/wpst/v1/`.
* REMOVED: Roku Direct Publisher admin screens (Roku Settings, Recipes, feed export UI).
* REMOVED: Import/Export admin tab (prefer REST API for catalog access).
* REMOVED: Separate Vimeo Extender add-on requirement (merged into core).
* REMOVED: EDD software licensing and automatic update checker.
* FIXED: Improved Vimeo importer reliability, security, and error handling.
* FIXED: Better admin structure for modern WordPress media workflows.
= 2.2.5 =
* NEW: Merged the former Vimeo Extender add-on into the core plugin.
* NEW: Added Vimeo Integrations and Vimeo Settings tabs.
* NEW: Added Vimeo OAuth connection flow.
* NEW: Added Vimeo URL metabox support.
* NEW: Added Vimeo Mass Import tools.
* SECURITY: Hardened Vimeo AJAX requests.
* COMPAT: Preserved existing Vimeo option keys, post meta keys, and AJAX action names.
* FIXED: Vimeo Mass Import DataTables Ajax errors.
* FIXED: Vimeo API SSL certificate handling.
* REMOVED: Removed the separate Vimeo Extender license/update requirement.
= 2.2.4 =
* UPDATE: Admin menu labels renamed.
* UPDATE: General Settings deprecation notices added.
* UPDATE: Roku Publisher deprecation notice added.
* MISC: Readme and internal version bump.