Skip to content

Desktop app for showing info on your cloud drives, conveniently displaying total drive space, used, free, etc. This app lives in your macOS menu bar and provides a sleek, modern interface to check the status of all your configured cloud drives.

Notifications You must be signed in to change notification settings

RichLewis007/Check-Cloud-Drives

Repository files navigation

Check Cloud Drives

A handy Python PySide6 GUI application for monitoring the status of one or many cloud drives using the free open-source utility rclone for secure drive access. This app lives in your macOS menu bar and provides a sleek, modern interface to check the status of all your configured cloud drives.

Author: Rich Lewis - @RichLewis007

Features

  • 🎨 Beautiful Modern UI - Dark theme with smooth animations
  • 📊 Real-time Status - View total, used, and free space for each drive
  • 🔄 Auto-refresh - Automatically updates drive status at configurable intervals
  • 📌 Stay on Top - Toggle to keep the window above other applications
  • 🎯 Menu Bar Integration - Lives in macOS menu bar for easy access
  • ⚙️ Easy Configuration - Simple setup dialog to select which drives to monitor
  • 🔒 Privacy First - All private configuration stored in a local file (excluded from git)

Requirements

  • Python 3.8 or higher
  • uv - Fast Python package installer and resolver
  • rclone installed and configured

Installation

  1. Install uv if you haven't already:
curl -LsSf https://astral.sh/uv/install.sh | sh
  1. Clone this repository:
git clone https://github.com/yourusername/check-cloud-drives.git
cd check-cloud-drives
  1. Install dependencies using uv:
uv sync

This will:

  • Create a virtual environment automatically
  • Install all dependencies from pyproject.toml
  • Make the project ready to run

Alternative: If you prefer using pip with a requirements.txt file, you can generate it first:

uv pip compile pyproject.toml -o requirements.txt
pip install -r requirements.txt
  1. Make sure rclone is installed and configured:
rclone listremotes

Usage

  1. Run the application using the provided script:
./run.sh

Or run directly with uv:

uv run -m check_cloud_drives.main

Or activate the virtual environment and run directly:

source .venv/bin/activate  # On macOS/Linux
python -m check_cloud_drives.main
  1. On first run, the app will:

    • Detect all available rclone remotes
    • Show a setup dialog to select which drives to monitor
    • Automatically fetch status for selected drives
  2. The app will appear in your macOS menu bar. Click the icon to show/hide the window.

  3. Features:

    • Refresh All: Manually refresh all drive statuses
    • Add Drive: Add additional drives to monitor
    • Edit Names: Click on drive names to edit display names and remote names
    • Stay on Top: Right-click menu bar icon to toggle "Stay on Top"

Configuration

The application stores all configuration in check-cloud-drives.toml in the project root directory. This file includes:

  • List of monitored drives
  • Window position and size
  • Stay on top preference
  • Auto-refresh interval

Note: This config file is excluded from git to protect your private cloud drive information.

Drive Icons

The app supports custom SVG icons for different drive types (Google Drive, OneDrive, Dropbox, etc.). Currently using placeholder emoji icons. To add custom icons:

  1. Place SVG icon files in the assets/icons/ directory
  2. Name them: googledrive.svg, onedrive.svg, dropbox.svg, etc.
  3. The app will automatically detect and use them

Development

The application is built with:

  • PySide6 - Modern Qt6 Python bindings
  • rclone - Command-line tool for cloud storage
  • uv - Fast Python package installer and resolver

Development Setup

  1. Install uv (if not already installed):
curl -LsSf https://astral.sh/uv/install.sh | sh
  1. Sync dependencies:
uv sync
  1. Run the application:
uv run -m check_cloud_drives.main

Adding Dependencies

To add a new dependency:

uv add package-name

This will automatically update pyproject.toml and uv.lock.

Updating Dependencies

To update all dependencies:

uv sync --upgrade

To update a specific package:

uv add package-name@latest

Note: The uv.lock file should be committed to version control to ensure reproducible builds across different environments.

Code Quality

This project uses Ruff for linting and formatting Python code.

Run Ruff checks:

./scripts/ruff.sh          # Run all checks (format + lint)
./scripts/ruff.sh format   # Format all Python files
./scripts/ruff.sh fix      # Format and auto-fix linting issues
./scripts/ruff.sh lint     # Show linting issues

Available commands:

  • format - Format all Python files
  • check-format - Check formatting without making changes
  • lint - Lint all Python files (show issues only)
  • lint-fix - Lint and auto-fix all Python files
  • check - Check linting without making changes
  • all - Run format check + lint check (default)
  • fix - Format + auto-fix linting issues

Testing

This project uses pytest for unit testing with pytest-qt for Qt widget testing.

Run tests:

# Run all tests
uv run pytest

# Run with verbose output
uv run pytest -v

# Run specific test file
uv run pytest tests/test_config.py

# Run specific test
uv run pytest tests/test_config.py::TestConfigManager::test_get_drives_empty

# Run with coverage report
uv run pytest --cov=check_cloud_drives --cov-report=html

# Run only fast tests (exclude slow tests)
uv run pytest -m "not slow"

Test coverage:

The test suite includes 64 tests covering:

  • ConfigManager - Configuration loading, saving, and persistence
  • Data Models - DriveConfig and DriveStatus validation and serialization
  • Rclone Integration - Command execution and output parsing
  • UI Components - DriveCard edit mode, status updates, and display behavior

See tests/README.md for more detailed testing documentation.

Generating requirements.txt

If you need a requirements.txt file for compatibility with other tools, CI/CD systems, or if you prefer using pip directly, you can generate it from pyproject.toml:

uv pip compile pyproject.toml -o requirements.txt

This will create a requirements.txt file with all dependencies and their resolved versions. You can then use it with pip:

pip install -r requirements.txt

Note: The requirements.txt file is not tracked in git. If you need it, regenerate it after updating dependencies. Using uv sync with pyproject.toml is the recommended approach and eliminates the need for requirements.txt.

License

MIT License - feel free to use and modify as needed!

Contributing

Contributions welcome! Please feel free to submit a Pull Request.

About

Desktop app for showing info on your cloud drives, conveniently displaying total drive space, used, free, etc. This app lives in your macOS menu bar and provides a sleek, modern interface to check the status of all your configured cloud drives.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published