Skip to content

Readability: Large code duplication between PulseAudio and PipeWire strategies #26

@m96-chan

Description

@m96-chan

Summary

The PulseAudioStrategy and PipeWireStrategy classes in linux.py share a significant amount of duplicated code.

Location

src/proctap/backends/linux.py

Problem

Both classes implement nearly identical code for:

  • find_process_stream() method (~30 lines)
  • _setup_isolated_capture() method (~60 lines)
  • _cleanup_isolation_modules() method (~40 lines)
  • Constructor initialization patterns

The PipeWireStrategy even has a comment: Setup isolated capture using null-sink (same as PulseAudio strategy)

Impact

  • Approximately 130+ lines of duplicated code
  • Bug fixes must be applied in multiple places
  • Harder to maintain and understand

Suggested Fix

Extract common functionality into a base class or mixin:

class PulseAudioCompatStrategyBase(LinuxAudioStrategy):
    """Base class for strategies using PulseAudio API."""
    
    def find_process_stream(self, pid: int) -> bool:
        # Common implementation
        
    def _setup_isolated_capture(self, sink_name: str) -> None:
        # Common implementation
        
    def _cleanup_isolation_modules(self) -> None:
        # Common implementation

class PulseAudioStrategy(PulseAudioCompatStrategyBase):
    def _capture_worker(self, source_name: str) -> None:
        # parec-specific implementation

class PipeWireStrategy(PulseAudioCompatStrategyBase):
    def _capture_worker(self, source_name: str) -> None:
        # pw-record-specific implementation

Labels

readability, refactor

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions