Commit Graph

406 Commits

Author SHA1 Message Date
Your Name 377157d415 Improve partial file cleanup with retry and delays
Added a _safe_delete_with_retry method to handle Windows file locking issues when deleting partial files. Introduced delays before cleanup after process termination to ensure file handles are released, reducing errors during file deletion. Error signal emission for cleanup failures is suppressed to avoid thread crashes.
2025-09-22 15:16:34 +03:00
Your Name 16b50934ab Persist proxy settings in config manager
Proxy settings (main and geo-verification) are now loaded from and saved to the ConfigManager. The dialogs and main app have been updated to initialize and persist proxy values, and user feedback is improved for proxy changes and clearing.
2025-09-22 15:06:49 +03:00
Your Name d6fb926644 Add proxy configuration support to downloader and GUI
Introduces proxy and geo-verification proxy options to the downloader and GUI dialogs, allowing users to specify network proxies for downloads and geo-restricted content. Updates the DownloadThread and main app logic to pass and apply these proxy settings, and adds validation and status indicators in the custom options dialog.
2025-09-22 14:49:58 +03:00
Viren Hirpara e9de913b47 v4.9.0 - Refactor (#41)
* 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

* - **refactor: drop `pygame` in favor of built-in `PySide6` sound**

- Removed `pygame` dependency (too heavy just for notifications).
- Replaced with `QSoundEffect`, which is lightweight and built into `PySide6`.
- Dropped `pygame.mixer` + threading → Qt handles async playback.
- Implemented sound playback with `QUrl.fromLocalFile()` and `.play()`.
- Added `setVolume(0.9)` as a configurable example.
- Converted notification sound from `.mp3` to `.wav` (only format supported).

* **refactor(utils): simplify logger module**
  - Moved `logger` to `src.utils`
  - Removed unnecessary import checks (logger is always available)
  - Replaced `raise` statements with error logging to prevent crashes
  - Use `logger.exception()` in `except` blocks to capture traceback (logged as error)

**style: remove redundant str() in f-strings**
  - Dropped explicit `str()` calls inside f-strings
  - f-strings already call `str()` under the hood

**chore: add type hints for GUI mixins**
  - Added type hints for `FormatTableMixin` (`src.gui.ytsage_gui_format_table`)
  - Added type hints for `VideoInfoMixin` (`src.gui.ytsage_gui_video_info`)
  - Improves autocomplete and type safety in IDEs

* - **introduce the `ytsage_config_manager.py` module to manage app setting.**
  - Loads settings from a JSON config file (`APP_CONFIG_FILE`).
  - Creates the config file with default values if missing or corrupt.
  - Retrieves, sets, and deletes settings using simple dot-separated keys.
  - Provides safe error handling with logging instead of raising exceptions.
  - Persists updates back to disk automatically.

- **Usage**
```python
from src.utils.ytsage_config_manager import ConfigManager

download_path = ConfigManager.get("download_path")

ConfigManager.set("download_path", "D:/Downloads")

last_check = ConfigManager.get("cached_versions.ytdlp.last_check")

ConfigManager.delete("cached_versions.ffmpeg.path")
```

* **Refactore: pkg_resources with importlib.metadata.version**
  - UserWarning: pkg_resources is deprecated as an API.
  - See https://setuptools.pypa.io/en/latest/pkg_resources.html.
  - The pkg_resources package is slated for removal as early as 2025-11-30.

* **refactore: notification sound**
  - `QSoundEffect` is chnaged back to `pyglet` as per mainter `@oop7` choise.
  - simplify the logic.

* remove: import check, it should always work.

* **fix: runtime error**
  - yt_dlp moved from `--excludes` to `--packages` in `build-windows.yml`
  - In frozen build, logger will not log to consol. insted will log to file.
  - In frozen build, `app_dir` is next to `.exe` file.

* chang back to checking import for ytdlp

* Bump version to 4.8.1

Update version references from 4.8.0b to 4.8.1 in __init__.py, main app, and About dialog to reflect the new release.

* Update asset paths in build workflows

Changed asset inclusion and screenshot removal paths from 'assets' to 'lib/assets' in Linux, macOS, and Windows build workflows to reflect new directory structure and ensure screenshots are excluded from packaged builds.

* Bump version to 4.8.2

Update version references from 4.8.1 to 4.8.2 in source files and documentation to prepare for a new patch release.

* Fix asset include path in Windows build workflow

Corrects the syntax for including asset files in the build-windows.yml workflow by changing 'assets,lib/assets' to 'assets=lib/assets'. This ensures assets are properly mapped during the build process.

* Update release tag examples in CI/CD README

Changed the example git tag commands from v4.8.0 and v4.8.2 to v4.8.1 for consistency in the CI/CD documentation.

* Fix include-files mapping in Windows build workflow

Changed the cx_Freeze --include-files argument from '=' to ':' for source:destination mapping in build-windows.yml. This resolves an issue where '=' was treated as a literal path, ensuring assets are correctly copied to the destination directory.

* Remove redundant comments in build-windows workflow

Deleted comments explaining the colon usage for source:destination mapping in the cx_Freeze CLI, as the mapping is already clear from the context.

* Refactor Windows build to use cx_Freeze setup script

Replaces direct cx_Freeze CLI calls with dynamically generated setup scripts for both standard and FFmpeg builds. This improves maintainability and flexibility of build configuration in the GitHub Actions workflow.

* Bump version to 4.8.3

Updated version references from 4.8.2 to 4.8.3 in __init__.py, main app, and About dialog to reflect the new release.

* revert(build): move yt_dlp from --packages to --excludes in build-windows.yml

---------

Co-authored-by: Your Name <mohamed.mohamed112@ai.mnu.edu.eg>
2025-09-09 23:01:19 +03:00
Your Name 79d8d224df Bump version to 4.8.3
Updated version references from 4.8.2 to 4.8.3 in __init__.py, main app, and About dialog to reflect the new release.
2025-09-09 14:55:49 +03:00
Your Name 2f0b4b9334 Refactor Windows build to use cx_Freeze setup script
Replaces direct cx_Freeze CLI calls with dynamically generated setup scripts for both standard and FFmpeg builds. This improves maintainability and flexibility of build configuration in the GitHub Actions workflow.
2025-09-09 14:35:45 +03:00
Your Name 4434eafe48 Remove redundant comments in build-windows workflow
Deleted comments explaining the colon usage for source:destination mapping in the cx_Freeze CLI, as the mapping is already clear from the context.
2025-09-09 14:20:13 +03:00
Your Name fe01f725d5 Fix include-files mapping in Windows build workflow
Changed the cx_Freeze --include-files argument from '=' to ':' for source:destination mapping in build-windows.yml. This resolves an issue where '=' was treated as a literal path, ensuring assets are correctly copied to the destination directory.
2025-09-09 14:15:55 +03:00
Your Name 1ba920aa11 Update release tag examples in CI/CD README
Changed the example git tag commands from v4.8.0 and v4.8.2 to v4.8.1 for consistency in the CI/CD documentation.
2025-09-09 14:07:36 +03:00
Your Name 1693b8fbed Fix asset include path in Windows build workflow
Corrects the syntax for including asset files in the build-windows.yml workflow by changing 'assets,lib/assets' to 'assets=lib/assets'. This ensures assets are properly mapped during the build process.
2025-09-09 13:54:08 +03:00
Your Name d105f87177 Bump version to 4.8.2
Update version references from 4.8.1 to 4.8.2 in source files and documentation to prepare for a new patch release.
2025-09-09 13:38:32 +03:00
Your Name e287b0b6b5 Update asset paths in build workflows
Changed asset inclusion and screenshot removal paths from 'assets' to 'lib/assets' in Linux, macOS, and Windows build workflows to reflect new directory structure and ensure screenshots are excluded from packaged builds.
2025-09-09 13:37:21 +03:00
Your Name f0232d535d Bump version to 4.8.1
Update version references from 4.8.0b to 4.8.1 in __init__.py, main app, and About dialog to reflect the new release.
2025-09-09 12:52:14 +03:00
Your Name c140acef5a Fix output template path handling in downloader
Replaces Path.joinpath with string concatenation using as_posix() for output templates to avoid issues with Path objects. Ensures correct file paths for both single downloads and playlists.
2025-09-09 11:50:21 +03:00
Your Name 3f1d697568 Add dynamic asset path resolution for YTSage
Introduced get_asset_path to resolve asset paths for both development and installed package environments. Updated ICON_PATH and SOUND_PATH to use this function, improving portability and reliability of asset loading.
2025-09-09 11:24:21 +03:00
Your Name 725b395bcd Update About dialog description text
Revised the AboutDialog description to better reflect the application's modern features and PySide6 interface.
2025-09-08 17:34:25 +03:00
Your Name 770acc2d16 Update README with SVG wordmark and badge formats
Replaced the YTSage title in README with an SVG wordmark and updated release format tables to use shield badges for Windows, Linux, and macOS. Added the ytsage-wordmark.svg asset and documented its location in the project structure.
2025-09-06 16:27:06 +03:00
Mohamed b063b4f01e Format project name and update Python version badge 2025-09-05 15:01:13 +03:00
Your Name 9e89228c6d Reapply "Fix path handling and subtitle file tracking in downloader"
This reverts commit afcab75b20.
2025-09-04 17:50:03 +03:00
Your Name afcab75b20 Revert "Fix path handling and subtitle file tracking in downloader"
This reverts commit 8198f7604f.
2025-09-04 17:48:36 +03:00
Your Name 8198f7604f Fix path handling and subtitle file tracking in downloader
Corrects usage of Path.joinpath to use instance method, improving output template path construction. Enhances subtitle file detection and cleanup logic to handle malformed Windows paths and ensures subtitle file paths are properly resolved and tracked for later deletion.
2025-09-04 17:44:46 +03:00
Your Name 90b173c389 Improve yt-dlp version detection and binary management
Refactored version detection to use importlib.metadata when available, with fallback to pkg_resources for older Python versions. Enhanced app-managed binary detection by safely comparing paths and handling missing files, improving robustness in update logic for both core and GUI update threads.
2025-09-04 00:16:02 +03:00
Your Name b8af75848d Revise README with improved structure and details
Updated the README to use tables for executable formats, added new formats for Linux and macOS, expanded troubleshooting section, and revised the project folder structure for clarity. Also replaced the star history chart with a new source and improved its presentation.
2025-09-03 23:17:45 +03:00
Your Name 40b9a8ec79 Update CI/CD README for multi-platform support
Expanded documentation to cover Windows, Linux, and macOS build and release processes. Updated artifact descriptions, workflow configuration, and instructions for adding new platforms. Clarified use of cx_Freeze, platform-specific packaging, and multi-architecture support.
2025-09-03 23:17:33 +03:00
Your Name c57faca4b5 Fix indentation for release artifact packaging step
Corrects indentation of the 'Package and prepare release artifacts' step in the build-linux workflow to ensure proper execution of artifact packaging commands.
2025-09-03 22:28:55 +03:00
Your Name f2d3a0b0ed Refactor Linux build workflow for native DEB packaging
Replaces DEB creation via alien with a native packaging step using dpkg-deb. Updates desktop file Exec path, improves artifact staging, and adds post-install scripts for desktop integration. This streamlines DEB builds and improves compatibility with Debian-based systems.
2025-09-03 22:07:58 +03:00
Your Name 83e23f2259 Remove postinst script for desktop icon in Linux build
The postinst script responsible for placing the desktop icon during DEB package installation has been removed from the build workflow. This simplifies the packaging process and eliminates custom post-installation steps.
2025-09-03 21:54:38 +03:00
Your Name 120afef8f7 Add postinst script to place desktop icon on install
Introduces a debian/postinst script in the build workflow to copy the ytsage.desktop file to the user's desktop during DEB package installation, ensuring the desktop icon is available. Also updates the icon cache and handles cases where the desktop directory or SUDO_USER is not set.
2025-09-03 21:20:44 +03:00
Your Name 09d117cb53 Remove DEB desktop integration fix from build workflow
Deleted post-processing steps that manually fixed desktop entry and icon placement in DEB packages after conversion from RPM. This streamlines the build process and removes custom extraction and repackaging logic.
2025-09-02 20:09:14 +03:00
Your Name 1b552c4ae8 Improve DEB package extraction and repackaging logic
Enhanced the workflow to handle multiple data archive compression formats (xz, gz, zst) when extracting and repackaging DEB files. Added checks for the presence of the data archive and updated extraction and repackaging commands to match the detected format, improving robustness and compatibility.
2025-09-02 19:47:28 +03:00
Your Name aebe5f1aa6 Fix DEB desktop integration in build workflow
Adds a post-processing step to ensure desktop entry and icon files are correctly placed in DEB packages built via alien, addressing issues where alien may miss proper desktop integration.
2025-09-02 19:27:05 +03:00
Your Name 81480cbebe Normalize package naming to lowercase ytsage
Updated workflow to use lowercase 'ytsage' for package names and file patterns, ensuring consistency across AppImage, RPM, and DEB artifacts.
2025-09-02 18:58:17 +03:00
Your Name 5d48e29d68 Update Linux build workflow for desktop integration
Adds ytsage.desktop and icon to packaging, removes RPM install script, and updates workflow steps to improve desktop integration for Linux builds.
2025-09-02 18:47:43 +03:00
Your Name 9ddac31b4b Remove AppImage desktop metadata from build config
Deleted unnecessary desktop metadata fields (app_name and categories) from the AppImage build configuration in the GitHub Actions workflow.
2025-09-02 18:37:18 +03:00
Your Name cb48b21cdc Improve Linux packaging and desktop integration
Standardizes executable and artifact naming to 'ytsage' and includes architecture in output filenames. Adds desktop entry and RPM install script for better desktop integration. Updates AppImage and RPM metadata, and ensures proper icon and category handling for Linux builds.
2025-09-02 18:25:19 +03:00
Your Name 51d9c1d119 Update executable naming in build workflow
Changed the internal executable target name to 'YTSage' instead of including the version. The AppImage filename still includes the version, but the base executable name is now consistent and versionless.
2025-09-02 15:56:00 +03:00
Your Name fe7c9c3797 Add Linux build workflow for release packaging
Introduces a GitHub Actions workflow to automate building and packaging Linux releases on tag push. The workflow sets up Python, installs dependencies, builds AppImage, RPM, and DEB packages using cx_Freeze, and uploads artifacts to a draft GitHub release.
2025-09-02 15:31:40 +03:00
Your Name 87d21c9a9d Add macOS version matrix and arch-specific artifacts
The build workflow now runs on both macos-14 and macos-13 using a matrix strategy. Artifact names for .app and .dmg files now include architecture suffixes (arm64/x64), and additional environment variables are set for architecture detection. The release step is updated to append to the draft release and handle unmatched files gracefully.
2025-09-01 18:45:57 +03:00
Your Name 45d96a1f83 Improve macOS build artifact detection and packaging
Enhanced the workflow to robustly locate .app and .dmg files in both dist/ and build/ directories, ensuring screenshots are removed from the .app bundle before packaging. Added directory listings for debugging and improved artifact naming and copying logic for more reliable release preparation.
2025-09-01 18:22:18 +03:00
Your Name 3fbc587e02 Add macOS build and release workflow
Introduces a GitHub Actions workflow for building and packaging macOS releases. Automates version extraction, Python environment setup, dependency installation, app and DMG creation, artifact packaging, and draft release publishing for tagged commits.
2025-09-01 17:54:38 +03:00
Your Name edb06e8e03 Update README with executable details and cookie guide
Expanded the pre-built executables section to list all available Windows, Linux, and macOS package formats with descriptions. Improved instructions for logging in with cookies, highlighting the built-in extraction feature and clarifying manual steps. Removed outdated antivirus issue note for clarity.
2025-08-28 19:56:03 +03:00
Your Name 87dcce947e Remove release notes section from CI/CD README
Deleted the 'Release Notes' section from the CI/CD README to streamline documentation and focus on workflow features.
2025-08-28 18:09:34 +03:00
Your Name 5256ab3652 Replace playsound3 with pyglet in Windows build
Updated the build-windows.yml workflow to use pyglet instead of playsound3 in the list of packaged Python dependencies. This change ensures the correct audio library is included during Windows builds.
2025-08-28 17:56:43 +03:00
Your Name bb7d000208 Update audio playback library reference in README
Changed the audio playback library reference from pygame to pyglet in the README to accurately reflect the project's dependencies.
2025-08-28 17:51:54 +03:00
Your Name 70488e6ecc Replace playsound3 with pyglet for audio notifications
Switched sound notification library from playsound3 to pyglet in requirements and main GUI code. Updated all related logic and logging to use pyglet for audio playback, improving compatibility and maintainability.
2025-08-28 17:38:48 +03:00
Your Name 7be376c2fd Update Python version in Windows build workflow
Bumps the PYTHON_VERSION from 3.13.5 to 3.13.6 in the GitHub Actions workflow for building on Windows.
2025-08-27 23:16:07 +03:00
Your Name f390d23f54 Refactor windowed mode and subprocess handling
Removed redundant windowed mode setup from main.py and simplified subprocess creation flags logic across core and GUI modules. Centralized subprocess creation flags usage, eliminated custom run_subprocess_hidden wrapper, and improved logging handler setup for better compatibility with windowed applications.
2025-08-27 23:00:08 +03:00
Your Name b23be4335e Improve console suppression for windowed mode on Windows
Refactored console window suppression logic to better handle PyInstaller windowed applications and prevent console flicker. Added creation flags and redirected subprocess streams in multiple modules to ensure hidden console windows when running subprocesses. Introduced a utility function for running subprocesses with hidden console and updated all relevant subprocess calls to use it.
2025-08-27 22:46:38 +03:00
Your Name a6a175b3d7 Improve handling of console window in windowed apps
Suppresses console window flicker for PyInstaller windowed applications by redirecting stdout and stderr in main.py. Updates logging setup to avoid console output in windowed mode and adds fallback error logging. Suppresses pkg_resources deprecation warnings to further reduce unwanted console output.
2025-08-27 22:17:13 +03:00
Your Name 4779ab269f Update Python version and remove unused constant
Downgraded PYTHON_VERSION in build-windows.yml from 3.13.6 to 3.13.5. Removed SUBPROCESS_CREATIONFLAGS import and usage from ytsage_dialogs_custom.py as it was no longer needed.
2025-08-27 21:42:31 +03:00