You've already forked wp-fedistream
All checks were successful
Create Release Package / build-release (push) Successful in 57s
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>
228 lines
8.8 KiB
Markdown
228 lines
8.8 KiB
Markdown
# Changelog
|
|
|
|
All notable changes to WP FediStream will be documented in this file.
|
|
|
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
|
|
## [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)
|
|
|
|
---
|
|
|
|
[Unreleased]: https://src.bundespruefstelle.ch/magdev/wp-fedistream/compare/v0.4.2...HEAD
|
|
[0.4.2]: https://src.bundespruefstelle.ch/magdev/wp-fedistream/compare/v0.4.1...v0.4.2
|
|
[0.4.1]: https://src.bundespruefstelle.ch/magdev/wp-fedistream/compare/v0.4.0...v0.4.1
|
|
[0.4.0]: https://src.bundespruefstelle.ch/magdev/wp-fedistream/compare/v0.3.0...v0.4.0
|
|
[0.3.0]: https://src.bundespruefstelle.ch/magdev/wp-fedistream/compare/v0.2.0...v0.3.0
|
|
[0.2.0]: https://src.bundespruefstelle.ch/magdev/wp-fedistream/compare/v0.1.1...v0.2.0
|
|
[0.1.1]: https://src.bundespruefstelle.ch/magdev/wp-fedistream/compare/v0.1.0...v0.1.1
|
|
[0.1.0]: https://src.bundespruefstelle.ch/magdev/wp-fedistream/releases/tag/v0.1.0
|