Files
wp-fedistream/CHANGELOG.md
magdev fedab21c2a
All checks were successful
Create Release Package / build-release (push) Successful in 57s
fix: Complete memory leak fix with shortcode context tracking
The v0.4.1 fix was incomplete - shortcodes called get_*_data() methods
directly, bypassing the recursion tracking in get_post_data().

Changes:
- Added $in_shortcode_context flag to TemplateLoader
- Added enter/exit_shortcode_context() methods
- All shortcode render methods now enter context before data loading
- When in shortcode context, the_content filter is always skipped

This fully prevents infinite recursion when post content contains
FediStream shortcodes that would otherwise recursively render.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 16:44:51 +01:00

8.8 KiB

Changelog

All notable changes to WP FediStream will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

Unreleased

0.4.2 - 2026-02-02

Fixed

  • Complete fix for memory leak - v0.4.1 fix was incomplete
    • Added $in_shortcode_context flag to TemplateLoader to track when we're rendering shortcodes
    • All shortcode render methods now call enter_shortcode_context() before loading data
    • When in shortcode context, the_content filter is always skipped to prevent recursive shortcode processing
    • This prevents infinite recursion when post content contains FediStream shortcodes

0.4.1 - 2026-02-02

Fixed

  • Critical memory leak causing "Allowed memory size exhausted" errors in Twig's StagingExtension
    • Root cause: apply_filters('the_content') in get_post_data() triggered shortcode processing, causing infinite recursion when post content contained FediStream shortcodes
    • Added recursion depth tracking with MAX_RECURSION_DEPTH = 3 to prevent runaway nesting
    • Nested items now skip the_content filter, using wp_kses_post() instead
    • Nested data loading (albums within artists, tracks within albums) is now properly bounded

Changed

  • Made get_artist_data(), get_album_data(), get_track_data(), and get_playlist_data() public methods in TemplateLoader (previously private but called externally)
  • These methods now accept both int post IDs and WP_Post objects for flexibility
  • Added $load_nested parameter to control whether nested items are fully loaded or just counted

0.4.0 - 2026-01-29

Added

  • Gitea Actions CI/CD pipeline for automated release package creation
    • Triggered by v* tags
    • PHP 8.3 environment with production dependencies
    • Automatic translation compilation (.po to .mo)
    • Version verification (plugin version must match tag)
    • WordPress-compliant zip structure
    • SHA256 checksum generation
    • Package structure verification
    • Changelog extraction for release notes
    • Automatic Gitea release creation with attachments
    • Pre-release detection for tags containing -

0.3.0 - 2026-01-29

Added

  • License management integration using magdev/wc-licensed-product-client package
  • Tabbed settings page with License, Default Settings, and Integrations tabs
  • License validation and activation via AJAX with real-time status updates
  • License status banner showing current license state and expiration
  • License checks for frontend components (unlicensed sites show message instead of content)

Changed

  • Reorganized settings page into three tabs for better organization
  • Frontend features (player, shortcodes, ActivityPub) now require valid license
  • Admin/backend functionality works regardless of license status

Security

  • Server secret stored securely in WordPress options
  • HMAC signature verification for license server responses
  • Nonce verification for all license AJAX operations

0.2.0 - 2026-01-28

Added

  • Settings and Dashboard links on the WordPress Plugins page for quick access
  • Comprehensive user guide (USERGUIDE.md) covering installation, configuration, and all features

0.1.1 - 2026-01-28

Fixed

  • WooCommerce product types (FediStream Album/Track) not appearing in product type selector
    • Fixed timing issue where WooCommerce integration hooks were registered too late during plugins_loaded

0.1.0 - 2026-01-28

Initial release of WP FediStream - a WordPress plugin for streaming music over ActivityPub.

Added

Core Plugin Structure

  • Plugin structure with WordPress Plugin API
  • Composer setup with Twig 3.0 template engine
  • Internationalization support with .pot template and German (de_CH) translation

Custom Post Types

  • fedistream_artist - Artist/band profiles with social links, biography, and member management
  • fedistream_album - Albums, EPs, singles, and compilations with release metadata
  • fedistream_track - Individual tracks with audio upload, duration, BPM, key, and ISRC codes
  • fedistream_playlist - User-created playlists with drag-drop ordering

Custom Taxonomies

  • fedistream_genre - Hierarchical music genres with default terms
  • fedistream_mood - Non-hierarchical mood tags for tracks and playlists
  • fedistream_license - Copyright and Creative Commons license options

User Roles

  • fedistream_artist - Manage own content, upload files, view stats
  • fedistream_label - Manage all content, taxonomies, and view all statistics

Admin Interface

  • Dashboard with statistics and quick actions
  • Organized menu under "FediStream"
  • Meta boxes for all post types with full metadata support
  • Settings page for ActivityPub and WooCommerce configuration
  • Custom list table columns with sortable fields
  • Artwork thumbnails, artist links, and duration display

Frontend Display

  • Archive templates for all post types and taxonomies
  • Single templates with full metadata display
  • Card partials for responsive grid layouts
  • Comprehensive CSS styling with custom properties for theming

Shortcodes

  • [fedistream_artist] - Display artist profile
  • [fedistream_album] - Display album with tracklist
  • [fedistream_track] - Display track with player
  • [fedistream_playlist] - Display playlist with tracks
  • [fedistream_latest_releases] - Recent releases grid
  • [fedistream_popular_tracks] - Popular tracks list
  • [fedistream_artists] - Artists grid
  • [fedistream_player] - Audio player widget
  • [fedistream_library] - User library page

Widgets

  • Recent Releases Widget
  • Popular Tracks Widget
  • Featured Artist Widget
  • Now Playing Widget

Audio Player

  • Full playback controls (play, pause, next, previous)
  • Queue management with add, clear, shuffle functionality
  • Repeat modes (none, all, one)
  • Shuffle mode with Fisher-Yates algorithm
  • Progress bar with seek functionality
  • Volume control with mute toggle and localStorage persistence
  • Media Session API integration for system controls
  • Play count tracking via AJAX

ActivityPub Integration

  • Integration with WordPress ActivityPub plugin
  • Artists represented as Person/Group actors
  • RSA key generation for HTTP Signatures
  • Webfinger support for artist discovery
  • Object transformers for tracks, albums, and playlists
  • Inbox handling for Follow, Like, Announce, and Create activities
  • Outbox publishing with Create, Update, and Delete activities
  • Follower management with shared inbox deduplication
  • REST API endpoints for actors, inbox, outbox, and collections

WooCommerce Integration (Optional)

  • Album product type extending WC_Product
  • Track product type extending WC_Product
  • Multiple download formats (MP3, FLAC, WAV, AAC, OGG)
  • Pricing models: Fixed, Pay What You Want, Name Your Price
  • Secure digital delivery with purchase verification
  • Album ZIP downloads with all tracks and cover art
  • Streaming access control based on purchases
  • 30-second preview for non-purchasers
  • Purchase tracking database table

User Library

  • Favorite tracks, albums, and playlists
  • Follow local artists
  • Listening history tracking with clear option
  • Library page with tabs (Favorites, Artists, History)
  • Filter favorites by content type
  • AJAX endpoints for all library operations

Notification System

  • In-app notifications with admin bar indicator
  • Email notifications with HTML templates
  • Notification types: new_release, new_follower, fediverse_like, fediverse_boost, playlist_added, purchase, system
  • Event triggers for releases, follows, and Fediverse interactions
  • User preference settings for email notifications
  • Real-time polling and mark as read functionality

Database Tables

  • fedistream_plays - Track play statistics
  • fedistream_playlist_tracks - Playlist-track relationships
  • fedistream_followers - ActivityPub followers
  • fedistream_purchases - WooCommerce purchase tracking
  • fedistream_favorites - User favorites
  • fedistream_user_follows - Local artist follows
  • fedistream_listening_history - Track play history
  • fedistream_notifications - User notifications
  • fedistream_reactions - Fediverse reactions (likes, boosts)