MAJOR ARCHITECTURAL IMPROVEMENT: Instead of using arbitrary timeouts that don't solve the real problem, implement proper idle mode and explicit end-of-stream signaling. Changes: 1. **Remove block_id timeout completely** - No more BLOCK_ID_TIMEOUT_SECS - Source enters idle mode when queue is empty - Waits indefinitely for new block_ids (poll every 100ms) - Only exits on cancellation or END_OF_BLOCKS_SIGNAL 2. **Introduce END_OF_BLOCKS_SIGNAL (EventId::MAX)** - Special block_id value to signal "no more blocks" - Source terminates cleanly after processing current block - Allows proper shutdown without cancellation - Exported from pmoparadise crate for public use 3. **Update HTTP timeout to 24 hours** - Effectively infinite timeout for block downloads - HTTP stream stays open as long as needed - Closed by pipeline termination, not arbitrary timeout 4. **Update stream_block example** - Push END_OF_BLOCKS_SIGNAL after the single block - Demonstrates clean termination after one block - Documents pattern for continuous vs. bounded streaming Benefits: - No arbitrary timeouts that might truncate valid streams - Clean separation: cancellation (external) vs. completion (internal) - Supports both continuous radio and bounded playlists - Proper idle mode for on-demand streaming applications Usage pattern: ```rust // Single block then stop source.push_block_id(block_id); source.push_block_id(END_OF_BLOCKS_SIGNAL); // Continuous streaming source.push_block_id(block1); source.push_block_id(block2); // ... keep pushing or wait in idle mode // Graceful shutdown source.push_block_id(END_OF_BLOCKS_SIGNAL); ```
15 KiB
15 KiB