The workflow no longer creates or releases ZIP distributions for both standard and FFmpeg bundle versions. Only MSI installers are built and published, simplifying the release process and documentation.
Adds logging to list MSI files after build steps for better visibility. Updates artifact selection logic to handle both 'ffmpeg' and 'FFmpeg' naming variations, and adds debugging output when standard MSI is not found.
Replaces PowerShell try/catch with exit code checks for MSI build steps in Windows workflow for clearer error reporting. Removes the install_icon option from FFmpeg MSI setup to address potential build failures.
Adds error handling to MSI installer creation steps in the Windows build workflow to prevent failures from stopping subsequent ZIP creation. Updates ZIP creation logic to use the dist output directory. Removes the install_icon option from setup.py to address potential MSI build issues.
Updated FFmpeg download source to GyanD/codexffmpeg and improved artifact preparation with additional logging and error handling. The release step now uploads all files in the artifacts directory instead of specifying each file individually.
Changed status messages for FFmpeg, ffprobe, and ffplay binary checks to use '[OK]' and '[ERROR]' prefixes for clearer log output in the Windows build workflow.
Refactored setup-ffmpeg.py to dynamically check for the existence of FFmpeg binaries before including them in the build. This improves robustness by warning if any binaries are missing and avoids hardcoding file paths in the include_files list.
Removed explicit package listing in build_exe_options for cx_Freeze setup scripts, allowing auto-discovery from main.py. Added the entire src directory to include_files to ensure all source code is bundled with the build.
Replaces universal build script calls with explicit build, MSI, and ZIP steps for both standard and FFmpeg versions. Cleans previous build artifacts before building, and updates artifact preparation to source files from the 'dist' directory instead of 'releases'. Improves reliability and transparency of build and release artifact management.
Deleted build/windows/windows_build_universal.py as part of cleanup or migration. This script previously handled MSI and ZIP packaging for YTSage using cx_Freeze.
Refactored build script to use absolute paths for setup files and build artifacts, improving reliability and path resolution. Enhanced cleaning logic to preserve build/windows scripts, added verbose debug output, and added checks for setup file existence before build steps.
Replaces PowerShell build script with Python in CI workflow and deletes the old build/README.md and windows-build-universal.ps1. This streamlines the build process and consolidates build logic into Python for better maintainability.
Replaces manual build script version update with a message indicating the build script now auto-detects the version. Simplifies the workflow and reduces maintenance.
Changed the version extraction regex in Get-VersionFromSetup for improved accuracy. Refactored New-ReleaseNotes to build the release notes string incrementally instead of using a here-string, simplifying formatting and maintenance.
Refines the PowerShell regex patterns for updating version strings in setup.py, setup-ffmpeg.py, and windows-build-universal.ps1 to ensure consistent use of double quotes around version values.
Updated README.md to reference local screenshot files instead of external URLs. Renamed 'audio-only.png' to 'audio_format.png' and 'subtitles.png' to 'subtitle_options.png' for consistency with README references.
Simplifies and improves the Windows release workflow by cleaning up version extraction, artifact handling, and release note generation. Artifact naming is now version-specific, redundant steps are removed, and the release draft creation is streamlined with direct body content. Also updates dependency caching and installation commands for better reliability.
Introduces a setup.py script for building YTSage on Windows using cx_Freeze. Supports building executables, MSI installers, and ZIP distributions, with detailed configuration for included/excluded packages, assets, and installer options.
Expanded build/README.md with detailed instructions for CI/CD and local builds, directory structure, build script options, output artifacts, requirements, troubleshooting, version management, and future enhancements for the YTSage build system.
Added new screenshots for audio-only, main interface, playlist, and subtitles to the branding assets. These images can be used for documentation or promotional purposes.
Introduces a GitHub Actions workflow for building and releasing YTSage Windows installers and portable ZIPs on version tag pushes. Includes a detailed CI/CD README explaining triggers, build steps, artifact handling, release notes, and troubleshooting.
The import of yt_dlp is now performed locally within the method to prevent import errors when yt-dlp is not installed. This change improves robustness for environments where yt-dlp may be missing.
Switched from pygame to playsound3 for playing notification sounds in the GUI. Updated requirements.txt and refactored related code to use playsound3, improving compatibility and simplifying sound playback.
Introduces the parse_yt_dlp_error function to convert raw yt-dlp error messages into actionable, user-friendly feedback. This improves error handling and provides clearer guidance to users encountering common download issues.
Refactored custom command execution to use a worker class with signals for better threading and output handling. Improved the CustomOptionsDialog with cookie source selection (file or browser), browser selection UI, and more robust cookie path handling. Enhanced UI styling, help texts, and input validation. Removed command preview from TimeRangeDialog and streamlined dialog layouts for clarity and usability.
Deleted CookieLoginDialog and CustomCommandDialog from imports and __all__ exports in ytsage_gui_dialogs/__init__.py, likely because these dialogs are no longer needed or have been removed from the codebase.
Improved QComboBox appearance with updated padding, border, drop-down, and arrow styles, including hover and focus effects. Added custom styling for QComboBox item views and introduced new styles for QGroupBox and its title for better UI consistency.
Introduces a browser_cookies parameter to DownloadThread, allowing cookies to be loaded from a browser for downloads. Updates command and options construction to handle both cookie files and browser cookies, improving flexibility for authentication.
Introduces support for extracting cookies from browsers in addition to cookie files, updating relevant logic and UI handling. Error handling for yt-dlp extraction is improved with user-friendly messages using a new error parser. Also updates version to 4.8.0b and refines cookie management throughout the app.
Introduces YTDLP_DOCS_URL for Windows, macOS, and Linux platforms, providing a direct link to yt-dlp usage and options documentation. Also updates the __main__ info output to include this new constant.
* fix imports
remove unused imports
use full import path
sort import (1. Standard Library, 2. Third-Party, 3. Local) in alphabetic.
* - remove: Method 3 from src.core.ytsage_downlader:cleanup_subtitle_file
- it could delete the subtitle file of other movies if it present in same directory as it scane recursively.
- refactor: migrate from os.path to pathlib.Path for path handling
- Replaced os.path methods with pathlib.Path to improve readability,
- avoid repeatation.
- cross-platform compatibility, and maintain cleaner code.
- improve: enhance code readability
- Standardized string literals to use double quotes for consistency
- Removed unnecessary spaces to maintain cleaner formatting
- Applied code formatting for better readability and maintainability
* - add: ytsage_constants.py file for one place to store all constants.
- imporve: return type hint for function.
- remove: src/gui/ytsage_gui_dialogs.py file to avoid repetation
- src/gui/dialogs is renamed to src/gui/ytsage_gui_dialogs for same naming convection. (future import will remains same)
- use of src/gui/ytsage_gui_dialogs/__init__.py to import the dilogs modules.
- change: variable self.parent to self._parent so it does not overwrite the parent()
- add type hint checking.
* - refactor: QMetaObject.invokeMethod to Signal
- I encounter error with incokeMethod. Could not solve it.
- So, Changed it to Signal to match app code language.
- implement: the ytsage_constants.py to code
- remove: unnecessary logic
- remove: repetitive code logic.
- update: yt-dlp logic for src\gui\ytsage_gui_dialogs\ytsage_dialogs_update:_update_binary
- yt-dlp update logic will use `yt-dlp -U`
* refactor: remove unused imports and streamline code formatting across multiple files