UNPKG

terminal-music-player

Version:

A terminal-based music player that streams from YouTube

325 lines (231 loc) • 8.16 kB
# Automatic MPV Installation System This document explains how the automatic MPV installation system works in the Terminal Music Player package. ## Overview The Terminal Music Player now includes an **automatic MPV installation system** that: - āœ… **Detects** if MPV is already installed - šŸ” **Identifies** available package managers on the system - šŸ“¦ **Automatically installs** MPV using the appropriate package manager - āœ… **Verifies** successful installation - šŸš€ **Works seamlessly** during package installation ## How It Works ### 1. Installation Triggers The MPV installation system is triggered in three scenarios: #### A. During Package Installation (Automatic) ```bash npm install -g terminal-music-player ``` - Runs automatically via `postinstall` script - No user interaction required if MPV is already installed - Prompts for installation if MPV is missing #### B. When Starting the Music Player (Runtime Check) ```bash tmusic ``` - Checks MPV availability before starting - Prompts user to install if MPV is missing - Integrates seamlessly with the startup process #### C. Manual Installation (On-Demand) ```bash npm run install-mpv # or npx terminal-music-player install-mpv ``` - Can be run independently at any time - Useful for troubleshooting or reinstalling ### 2. Detection Process The system performs these checks in order: 1. **MPV Availability Check** ```javascript await which("mpv"); ``` - Uses the `which` package to locate MPV in PATH - Returns `true` if found, `false` otherwise 2. **Package Manager Detection** ```javascript const managers = { brew: "brew", // macOS apt: "apt-get", // Debian/Ubuntu dnf: "dnf", // Fedora/RHEL yum: "yum", // CentOS/RHEL pacman: "pacman", // Arch Linux choco: "choco", // Windows Chocolatey scoop: "scoop", // Windows Scoop winget: "winget", // Windows Winget }; ``` - Systematically checks for available package managers - Returns the first available manager found 3. **System Requirements Check** - Node.js version (>= 18.0.0) - Operating system platform - Internet connectivity (basic ping test) ### 3. Installation Commands by Platform #### Linux - **Ubuntu/Debian**: `sudo apt-get update && sudo apt-get install -y mpv` - **Fedora/RHEL**: `sudo dnf install -y mpv` - **CentOS/Older RHEL**: `sudo yum install -y mpv` - **Arch Linux**: `sudo pacman -S --noconfirm mpv` #### macOS - **Homebrew**: `brew install mpv` #### Windows - **Chocolatey**: `choco install mpv -y` - **Scoop**: `scoop install mpv` - **Winget**: `winget install --id=mpv-player.mpv -e` ### 4. Error Handling The system handles various failure scenarios: #### Package Manager Not Found ``` āŒ No supported package manager found! šŸ“‹ Manual Installation Required Please install MPV manually using the appropriate method for your system: ``` #### Installation Failure ``` āŒ Installation failed with code 1 šŸ“‹ Manual Installation Required ``` #### Permission Issues ``` āŒ Installation failed: Permission denied Please run with appropriate permissions for your package manager ``` #### Network Issues ``` āš ļø Internet connection: Could not verify ``` ## Integration Points ### 1. Package.json Configuration ```json { "scripts": { "postinstall": "node scripts/install-mpv.js", "install-mpv": "node scripts/manual-install-mpv.js" }, "dependencies": { "which": "^4.0.0" } } ``` ### 2. CLI Integration The main CLI (`bin/cli.js`) includes: ```javascript import MPVInstaller from "../scripts/install-mpv.js"; async function handleMPVInstallation() { const isMPVAvailable = await checkMPVAvailability(); if (!isMPVAvailable) { // Prompt user for automatic installation const installer = new MPVInstaller(); await installer.install(); } } // Called before initializing the music player (async () => { await handleMPVInstallation(); await initialize(); await mainMenu(); })(); ``` ### 3. Runtime Error Handling Enhanced MPV error handling in playback: ```javascript mpvProcess.on("error", (error) => { if (error.code === "ENOENT") { console.error( "MPV not found! It may have been uninstalled or removed from PATH." ); console.log( "Please restart the application to reinstall MPV, or install it manually." ); } }); ``` ## File Structure ``` terminal-music-player/ ā”œā”€ā”€ bin/ │ └── cli.js # Main CLI with MPV checks ā”œā”€ā”€ scripts/ │ ā”œā”€ā”€ install-mpv.js # Main installation logic │ └── manual-install-mpv.js # Standalone installer ā”œā”€ā”€ package.json # PostInstall script configuration ā”œā”€ā”€ README.md # Updated with auto-install info └── INSTALLATION.md # This documentation ``` ## User Experience ### Successful Installation (MPV Already Present) ``` šŸŽµ Terminal Music Player - Setup šŸ” Checking system requirements... āœ… Node.js version: v18.15.0 āœ… Platform: darwin (arm64) āœ… Internet connection: Available āœ” MPV is already installed! mpv v0.35.1 Copyright Ā© 2000-2023 mpv/MPlayer/mplayer2 projects šŸŽ‰ Installation completed successfully! Run tmusic to start the music player. ``` ### New Installation (MPV Missing) ``` šŸŽµ Terminal Music Player - Setup šŸ” Checking system requirements... āœ… Node.js version: v18.15.0 āœ… Platform: darwin (arm64) āœ… Internet connection: Available āš ļø MPV not found. Checking package managers... āœ” Found package manager: brew šŸŽµ Installing MPV Media Player... MPV is required for audio playback in the terminal music player. Installing MPV using Homebrew... Command: brew install mpv [... installation output ...] āœ” Verifying MPV installation... āœ” MPV installed successfully! mpv v0.35.1 Copyright Ā© 2000-2023 mpv/MPlayer/mplayer2 projects āœ… Setup complete! You can now use the terminal music player. šŸŽ‰ Installation completed successfully! Run tmusic to start the music player. ``` ### Runtime Check (User Starts App) ``` $ tmusic āš ļø MPV Media Player not found! MPV is required for audio playback in the terminal music player. ? Would you like to install MPV automatically now? (Y/n) ``` ## Benefits 1. **Zero Configuration**: Users don't need to manually install MPV 2. **Cross-Platform**: Works on Linux, macOS, and Windows 3. **Smart Detection**: Only installs if needed 4. **Fallback Options**: Multiple installation methods per platform 5. **User Choice**: Always asks permission before installing 6. **Robust Error Handling**: Graceful fallback to manual instructions 7. **Verification**: Confirms successful installation 8. **Runtime Recovery**: Can detect and fix missing MPV during usage ## Troubleshooting ### Common Issues 1. **Permission Denied** - Solution: Run with appropriate sudo/admin privileges - Alternative: Use non-sudo package managers (scoop, brew) 2. **Package Manager Not Found** - Solution: Install a supported package manager first - Alternative: Follow manual installation instructions 3. **Network Issues** - Solution: Check internet connection - Alternative: Download MPV manually 4. **Antivirus Blocking** - Solution: Temporarily disable antivirus or add exception - Alternative: Manual installation ### Manual Override If automatic installation fails, users can: 1. Run the manual installer: `npm run install-mpv` 2. Follow platform-specific instructions in README.md 3. Download from https://mpv.io/installation/ ## Future Enhancements Potential improvements to the installation system: 1. **Offline Installation**: Bundle MPV binaries for offline use 2. **Version Management**: Install specific MPV versions 3. **Update Notifications**: Notify users of MPV updates 4. **Custom Installation Paths**: Support non-standard MPV locations 5. **Installation Analytics**: Track installation success rates --- This automatic installation system ensures that users can start enjoying music immediately after installing the terminal music player package, without the friction of manual dependency management.