|
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
|
||
|---|---|---|
| .github | ||
| build | ||
| docs | ||
| resources/icons | ||
| scripts | ||
| src/webdrop_bridge | ||
| tests | ||
| webapp | ||
| .env.example | ||
| .gitignore | ||
| .gitkeep | ||
| 00-READ-ME-FIRST.txt | ||
| CHANGELOG.md | ||
| CONFIGURATION_BUNDLING_SUMMARY.md | ||
| CONTRIBUTING.md | ||
| DEVELOPMENT_PLAN.md | ||
| FILE_LISTING.md | ||
| FORGEJO_PACKAGES_SETUP.md | ||
| full_test.txt | ||
| IMPLEMENTATION_CHECKLIST.md | ||
| LICENSE | ||
| Makefile | ||
| PHASE_3_BUILD_SUMMARY.md | ||
| PHASE_4_3_SUMMARY.md | ||
| PROJECT_SETUP_SUMMARY.md | ||
| pyproject.toml | ||
| pytest.ini | ||
| QUICKSTART.md | ||
| README.md | ||
| requirements-dev.txt | ||
| requirements.txt | ||
| setup.py | ||
| START_HERE.md | ||
| test_output.txt | ||
| test_results.txt | ||
| test_timeout_handling.py | ||
| test_update_no_hang.py | ||
| tox.ini | ||
| UPDATE_FIX_SUMMARY.md | ||
| verify_fix.py | ||
| verify_timeout_handling.py | ||
| VERSIONING_SIMPLIFIED.md | ||
| WEBAPP_LOADING_FIX.md | ||
| webdrop_bridge.code-workspace | ||
WebDrop Bridge
Professional Qt-based desktop application for intelligent drag-and-drop file handling between web applications and desktop clients (InDesign, Word, Notepad++, etc.)
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
# 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
# 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:
# 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.
# 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.
Changelog
See CHANGELOG.md for release notes.
Building Installers
Windows MSI Installer
# 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
# 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:
# 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
-
Create feature branch
git checkout -b feature/my-feature -
Write tests first
pytest tests/unit/test_my_feature.py -
Implement feature
# Edit src/webdrop_bridge/... -
Run quality checks
tox -e lint,type # Run linting and type checking -
Submit pull request
Troubleshooting
Application won't start
- Ensure Python 3.10+ is installed
- Check
logs/webdrop_bridge.logfor errors - Verify all dependencies:
pip list
Drag-and-drop not working
- Verify paths in
.envare valid - Check
ALLOWED_ROOTSwhitelist 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:
- Fork the repository
- Create a feature branch
- Write/update tests
- Submit a pull request
- Ensure CI passes
See CONTRIBUTING.md for detailed guidelines.
License
MIT License - see LICENSE file for details
Credits
- Built with PySide6
- 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
- Core drag-drop functionality
- Configuration management with profiles
- Auto-update system
- Professional build pipeline
- 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
Development Phase: Pre-Release Phase 4.3 | Last Updated: February 2026 | Python: 3.10+ | Qt: PySide6 (Qt 6)