# WebDrop Bridge > Professional Qt-based desktop application for intelligent drag-and-drop file handling between web applications and desktop clients (InDesign, Word, Notepad++, etc.) ![Status](https://img.shields.io/badge/Status-Pre--Release%20Phase%204-blue) ![License](https://img.shields.io/badge/License-MIT-blue) ![Python](https://img.shields.io/badge/Python-3.10%2B-blue) ## Overview WebDrop Bridge is a sophisticated desktop bridge application that intercepts text-based drag-and-drop operations from embedded web applications and converts them into native file-drag operations recognized by professional desktop applications. ### The Problem Modern web applications can transmit file paths via drag-and-drop, but desktop applications expect native file handles. Traditional solutions fail because: - Browsers sandbox cross-origin drag-and-drop - Web apps can't access the file system directly - Native apps need OS-level file handles (CF_HDROP on Windows, NSFilenamesPboardType on macOS) ### The Solution WebDrop Bridge embeds a web application in a Qt container with full filesystem access, intelligently intercepting and converting drag operations at the OS boundary. ## Features - ✅ **Qt-based Architecture** - Native Windows & macOS support via PySide6 - ✅ **Embedded Web App** - QtWebEngine provides Chromium without browser limitations - ✅ **Drag Interception** - Converts text paths to native file operations - ✅ **Path Whitelist** - Security-conscious file system access control - ✅ **Configuration Management** - Profile-based settings with validation - ✅ **Settings Dialog** - Professional UI for path, URL, logging, and window configuration - ✅ **Auto-Update System** - Automatic release detection via Forgejo API - ✅ **Professional Build Pipeline** - MSI for Windows, DMG for macOS - ✅ **Comprehensive Testing** - Unit, integration, and end-to-end tests (80%+ coverage) - ✅ **CI/CD Ready** - GitHub Actions workflows included - ✅ **Structured Logging** - File-based logging with configurable levels ## Quick Start ### Requirements - Python 3.10+ - Windows 10/11 or macOS 12+ - 200 MB disk space (includes Chromium from PyInstaller) ### Installation from Source ```bash # Clone repository git clone https://github.com/yourusername/webdrop-bridge.git cd webdrop-bridge # Create and activate virtual environment python -m venv venv source venv/bin/activate # macOS/Linux # venv\Scripts\activate.ps1 # Windows (PowerShell) # venv\Scripts\activate.bat # Windows (cmd.exe) # Install dependencies pip install -r requirements.txt # Run application python -m webdrop_bridge.main ``` ### Development Setup ```bash # Install development dependencies pip install -r requirements-dev.txt # Run tests pytest tests -v # Run all quality checks (lint, type, format) tox # Build installers python build/scripts/build_windows.py # Windows MSI bash build/scripts/build_macos.sh # macOS DMG ``` ## Project Structure ``` webdrop-bridge/ ├── src/webdrop_bridge/ # Main application package │ ├── core/ # Core logic (drag interception, config) │ ├── ui/ # UI components (main window, widgets) │ ├── utils/ # Utilities (logging, validation) │ ├── main.py # Entry point │ └── config.py # Configuration management ├── tests/ │ ├── unit/ # Unit tests │ ├── integration/ # Integration tests │ ├── fixtures/ # Test data and fixtures │ └── conftest.py # Pytest configuration ├── build/ │ ├── windows/ # Windows-specific build configs │ ├── macos/ # macOS-specific build configs │ └── scripts/ # Build automation scripts ├── webapp/ # Embedded web application ├── resources/ │ ├── icons/ # Application icons │ └── stylesheets/ # Qt stylesheets ├── docs/ # Documentation ├── pyproject.toml # Modern Python packaging ├── pytest.ini # Test configuration ├── tox.ini # Test automation └── README.md # This file ``` ## Architecture ``` ┌────────────────────────────────────────┐ │ Qt Main Window (PySide6) │ │ ┌──────────────────────────────────┐ │ │ │ QtWebEngineView │ │ │ │ ┌────────────────────────────┐ │ │ │ │ │ Web Application (HTML/JS) │ │ │ │ │ │ • Drag with file paths │ │ │ │ │ │ • Native drag operations │ │ │ │ │ └────────────────────────────┘ │ │ │ └──────────────────────────────────┘ │ │ ↓ Drag Leave Event │ │ ┌──────────────────────────────────┐ │ │ │ DragInterceptor │ │ │ │ • Validates path (whitelist) │ │ │ │ • Creates QUrl + QMimeData │ │ │ │ • Starts native file drag │ │ │ └──────────────────────────────────┘ │ └────────────────────────────────────────┘ ↓ Native File Drag ┌─────────────────┐ │ InDesign/Word │ │ (receives file) │ └─────────────────┘ ``` ## Configuration WebDrop Bridge supports two configuration methods: ### 1. Settings Dialog (Recommended) Launch the application and access the Settings menu to configure: - **Paths Tab** - Add/remove allowed root directories - **URLs Tab** - Configure allowed web URLs (whitelist mode) - **Logging Tab** - Set log level and file location - **Window Tab** - Configure window dimensions - **Profiles Tab** - Save/load/export-import configuration profiles Profiles are saved in `~/.webdrop-bridge/profiles/` ### 2. Environment Variables Create a `.env` file in the project root. Available settings: ```bash # Application APP_NAME=WebDrop Bridge APP_VERSION=1.0.0 # Paths (comma-separated) ALLOWED_ROOTS=Z:/,C:/Users/Public # Web URLs (empty = no restriction, items = kiosk mode) ALLOWED_URLS= # Interface WEBAPP_URL=file:///./webapp/index.html WINDOW_WIDTH=1024 WINDOW_HEIGHT=768 # Logging LOG_LEVEL=INFO ENABLE_LOGGING=true ``` ## Testing WebDrop Bridge includes comprehensive test coverage with unit, integration, and end-to-end tests. ```bash # Run all tests pytest tests -v # Run with coverage report pytest tests --cov=src/webdrop_bridge --cov-report=html # Run specific test categories pytest tests/unit -v # Unit tests only pytest tests/integration -v # Integration tests only # Run specific test pytest tests/unit/test_validator.py -v # Run tests matching a pattern pytest tests -k "config" -v ``` **Test Coverage**: - Current target: 80%+ - Coverage report: `htmlcov/index.html` Integration tests cover: - Drag-and-drop workflow - Update flow and release detection - End-to-end application scenarios ## Auto-Update System WebDrop Bridge includes an intelligent auto-update system that: - **Automatic Detection**: Periodically checks Forgejo/GitHub releases API - **Smart Caching**: Avoids redundant network calls with smart caching - **User Notification**: Alerts users of available updates via UI - **Release Notes**: Displays release notes and changes - **Safe Deployment**: Only triggers on newer versions The update system is fully integrated with the application and runs in the background without blocking the UI. For technical details, see [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md#update-system). ## Changelog See [CHANGELOG.md](CHANGELOG.md) for release notes. ## Building Installers ### Windows MSI Installer ```bash # Simple build (creates standalone .exe) python build/scripts/build_windows.py # Build with MSI installer python build/scripts/build_windows.py --msi # Build and sign executable python build/scripts/build_windows.py --sign ``` Output: - Standalone executable: `build/dist/windows/WebDropBridge.exe` (~195 MB) - Optional MSI installer: `build/dist/windows/WebDropBridge.msi` - SHA256 checksum: `build/dist/windows/WebDropBridge.exe.sha256` ### macOS DMG Installer ```bash # Build DMG (requires macOS) bash build/scripts/build_macos.sh # Build with code signing SIGN_APP=true bash build/scripts/build_macos.sh # Build with notarization NOTARIZE_APP=true bash build/scripts/build_macos.sh ``` Output: - DMG installer: `build/dist/macos/WebDropBridge.dmg` - App bundle: `build/dist/macos/WebDropBridge.app` ### Creating Releases For Forgejo/GitHub releases: ```bash # Windows - Create release with executable powershell -ExecutionPolicy Bypass -File build/scripts/create_release.ps1 # macOS - Create release with DMG bash build/scripts/create_release.sh ``` ## Development Workflow 1. **Create feature branch** ```bash git checkout -b feature/my-feature ``` 2. **Write tests first** ```bash pytest tests/unit/test_my_feature.py ``` 3. **Implement feature** ```bash # Edit src/webdrop_bridge/... ``` 4. **Run quality checks** ```bash tox -e lint,type # Run linting and type checking ``` 5. **Submit pull request** ## Troubleshooting ### Application won't start - Ensure Python 3.10+ is installed - Check `logs/webdrop_bridge.log` for errors - Verify all dependencies: `pip list` ### Drag-and-drop not working - Verify paths in `.env` are valid - Check `ALLOWED_ROOTS` whitelist includes your test directory - On macOS, check System Preferences → Security & Privacy → Accessibility ### Build errors - Clean build directory: `rm -rf build/temp build/dist` - Reinstall dependencies: `pip install --force-reinstall -r requirements.txt` - Check platform-specific requirements (Windows SDK, Xcode for macOS) ## Platform Support | Platform | Version | Status | Notes | |----------|---------|--------|-------| | Windows | 10, 11 | ✅ Full | Tested on x64 | | macOS | 12, 13, 14 | ✅ Full | Intel & Apple Silicon | | Linux | Ubuntu 22.04+ | ⚠️ Partial | Limited testing | ## Contributing We welcome contributions! Please: 1. Fork the repository 2. Create a feature branch 3. Write/update tests 4. Submit a pull request 5. Ensure CI passes See [CONTRIBUTING.md](CONTRIBUTING.md) for detailed guidelines. ## License MIT License - see [LICENSE](LICENSE) file for details ## Credits - Built with [PySide6](https://wiki.qt.io/Qt_for_Python) - Inspired by professional desktop integration practices - Special thanks to the Qt community ## Development Status **Current Phase**: Phase 4.3 - Advanced Configuration & Testing **Completed**: - ✅ Phase 1: Core Components (Validator, Config, Drag Interceptor, Main Window) - ✅ Phase 2: UI Implementation (Settings Dialog, Main Window UI Components) - ✅ Phase 3: Build & Distribution (Windows MSI, macOS DMG, Release Scripts) - ✅ Phase 4.1: Update System (Auto-update, Forgejo API integration) - ✅ Phase 4.2: Web App Improvements (Modern UI, Drag-drop testing) - ✅ Phase 4.3: Advanced Configuration (Profiles, Validation, Settings UI) **In Progress/Planned**: - Phase 4.4: Performance optimization & security hardening - Phase 5: Release candidates & final testing - v1.0: Stable Windows & macOS release ## Roadmap - [x] Core drag-drop functionality - [x] Configuration management with profiles - [x] Auto-update system - [x] Professional build pipeline - [x] Comprehensive test suite - [ ] Performance benchmarking & optimization - [ ] Security audit & hardening - [ ] v1.1 - Advanced filtering and extended logging - [ ] v1.2 - API for custom handlers - [ ] v2.0 - Plugin architecture ## Support - 📖 [Documentation](https://webdrop-bridge.readthedocs.io) - 🐛 [Issue Tracker](https://github.com/yourusername/webdrop-bridge/issues) - 💬 [Discussions](https://github.com/yourusername/webdrop-bridge/discussions) --- **Development Phase**: Pre-Release Phase 4.3 | **Last Updated**: February 2026 | **Python**: 3.10+ | **Qt**: PySide6 (Qt 6)