webdrop-bridge/README.md
claudi 87884935c9
Some checks are pending
Tests & Quality Checks / Test on Python 3.11 (push) Waiting to run
Tests & Quality Checks / Test on Python 3.12 (push) Waiting to run
Tests & Quality Checks / Test on Python 3.11-1 (push) Waiting to run
Tests & Quality Checks / Test on Python 3.12-1 (push) Waiting to run
Tests & Quality Checks / Test on Python 3.10 (push) Waiting to run
Tests & Quality Checks / Test on Python 3.11-2 (push) Waiting to run
Tests & Quality Checks / Test on Python 3.12-2 (push) Waiting to run
Tests & Quality Checks / Build Artifacts (push) Blocked by required conditions
Tests & Quality Checks / Build Artifacts-1 (push) Blocked by required conditions
feat: implement package manager support for Windows and macOS, including Chocolatey and Homebrew configurations
2026-03-03 09:33:06 +01:00

363 lines
12 KiB
Markdown

# 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-Phase%204%20Complete-green) ![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** - Professional Windows support via PySide6 (macOS support planned)
-**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)
-**Continuous Testing** - GitHub Actions test automation
-**Structured Logging** - File-based logging with configurable levels
## Quick Start
### Requirements
- Python 3.10+
- Windows 10/11
- 200 MB disk space (includes Chromium from PyInstaller)
### Installation from Pre-Built Release (Recommended)
**Option 1: Package Manager (Recommended for most users)**
```powershell
# Windows - Chocolatey
choco install webdrop-bridge
choco upgrade webdrop-bridge # Update when new version available
```
```bash
# macOS - Homebrew (with custom tap)
brew tap HIM-public/webdrop-bridge https://git.him-tools.de/HIM-public/homebrew-webdrop-bridge.git
brew install webdrop-bridge
brew upgrade webdrop-bridge # Update to latest version
```
**Option 2: Direct wget (if you know the version)**
```bash
# Replace VERSION with release tag (e.g., v0.8.0)
wget https://git.him-tools.de/HIM-public/webdrop-bridge/releases/download/VERSION/WebDropBridge_Setup.msi
# Example for v0.8.0:
wget https://git.him-tools.de/HIM-public/webdrop-bridge/releases/download/v0.8.0/WebDropBridge_Setup.msi
```
**Option 3: Automated script (auto-detects platform)**
```bash
# Windows (PowerShell)
.\build\scripts\download_release.ps1
# macOS / Linux
./build/scripts/download_release.sh
```
For more installation options and details, see [QUICKSTART.md](QUICKSTART.md#installing-from-release-wget) and [PACKAGE_MANAGER_SUPPORT.md](docs/PACKAGE_MANAGER_SUPPORT.md)
### Installation from Source
```bash
# Clone repository
git clone https://git.him-tools.de/HIM-public/webdrop-bridge.git
cd webdrop-bridge
# Create and activate virtual environment
python -m venv venv
# 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 --msi # Windows MSI
```
## 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
│ └── 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).
## Building Installers
### Windows MSI Installer
```bash
# Build with MSI installer (recommended)
python build/scripts/build_windows.py --msi
# Build with code signing (requires certificate)
python build/scripts/build_windows.py --msi --code-sign
```
Output:
- Portable executable: `build/dist/windows/WebDropBridge/WebDropBridge.exe` (~195 MB)
- Professional MSI installer: `build/dist/windows/WebDropBridge-{version}-Setup.msi`
- SHA256 checksum: `build/dist/windows/WebDropBridge/WebDropBridge.exe.sha256`
**Note on macOS**: Build scripts exist for macOS (DMG generation), but have never been built or tested. macOS support is theoretical at this point. The Qt/PySide6 architecture should support macOS, but platform-specific testing and validation would be required.
### Creating Releases
For Forgejo/GitHub releases:
```bash
# Windows - Create release with MSI installer
powershell -ExecutionPolicy Bypass -File build/scripts/create_release.ps1
```
## 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, MSI installer support |
| macOS | 12+ | ⚠️ **Untested** | Possible via Qt/PySide6, but never built or tested. Theoretical support only. |
**Note**: WebDrop Bridge is currently developed and tested exclusively on Windows. While the Qt/PySide6 framework supports macOS, we cannot guarantee functionality without actual macOS testing and validation. Contributions for macOS support validation are welcome.
## 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
## Support
- 📖 [Documentation](https://git.him-tools.de/HIM-public/webdrop-bridge/wiki)
- 🐛 [Issue Tracker](https://git.him-tools.de/HIM-public/webdrop-bridge/issues)
- 📦 [Releases](https://git.him-tools.de/HIM-public/webdrop-bridge/releases)
---
**Development Phase**: Phase 4 Complete | **Last Updated**: February 18, 2026 | **Current Version**: 1.0.0 | **Python**: 3.10+ | **Qt**: PySide6 (Qt 6)