No description
Find a file
2026-01-29 08:19:42 +01:00
.github docs: Update copilot instructions to include development environment setup and quality checks 2026-01-29 08:13:54 +01:00
build feat: Add WiX installer configuration for WebDrop Bridge 2026-01-28 15:54:39 +01:00
docs Add initial project structure and documentation 2026-01-28 10:48:36 +01:00
resources/icons feat: Implement default welcome page for missing web application 2026-01-28 12:59:33 +01:00
src/webdrop_bridge feat: Implement auto-update system with Forgejo releases management 2026-01-29 08:19:42 +01:00
tests feat: Implement auto-update system with Forgejo releases management 2026-01-29 08:19:42 +01:00
webapp Add initial project structure and documentation 2026-01-28 10:48:36 +01:00
.env.example Add initial project structure and documentation 2026-01-28 10:48:36 +01:00
.gitignore feat: Implement default welcome page for missing web application 2026-01-28 12:59:33 +01:00
.gitkeep Add initial project structure and documentation 2026-01-28 10:48:36 +01:00
00-READ-ME-FIRST.txt Add initial project structure and documentation 2026-01-28 10:48:36 +01:00
CHANGELOG.md feat: Add Forgejo CI/CD pipeline for automated builds and releases 2026-01-28 13:14:41 +01:00
CONTRIBUTING.md Add initial project structure and documentation 2026-01-28 10:48:36 +01:00
DEVELOPMENT_PLAN.md docs: Add detailed UI components for Phase 4.1 auto-update system 2026-01-29 08:04:01 +01:00
FILE_LISTING.md Add initial project structure and documentation 2026-01-28 10:48:36 +01:00
FORGEJO_PACKAGES_SETUP.md refactor: Switch from Packages API to Releases API for distribution 2026-01-28 15:11:46 +01:00
IMPLEMENTATION_CHECKLIST.md Add initial project structure and documentation 2026-01-28 10:48:36 +01:00
LICENSE Add initial project structure and documentation 2026-01-28 10:48:36 +01:00
Makefile Add initial project structure and documentation 2026-01-28 10:48:36 +01:00
PHASE_3_BUILD_SUMMARY.md docs: Update Phase 3 status to reflect distribution completion 2026-01-28 15:19:50 +01:00
PROJECT_SETUP_SUMMARY.md Add initial project structure and documentation 2026-01-28 10:48:36 +01:00
pyproject.toml Add initial project structure and documentation 2026-01-28 10:48:36 +01:00
pytest.ini Update pytest configuration to ensure coverage fails under specified threshold 2026-01-28 11:04:06 +01:00
QUICKSTART.md Add initial project structure and documentation 2026-01-28 10:48:36 +01:00
README.md Add initial project structure and documentation 2026-01-28 10:48:36 +01:00
requirements-dev.txt deps: Add pytest-asyncio to dev requirements 2026-01-29 08:16:36 +01:00
requirements.txt Add initial project structure and documentation 2026-01-28 10:48:36 +01:00
setup.py Add initial project structure and documentation 2026-01-28 10:48:36 +01:00
START_HERE.md Add initial project structure and documentation 2026-01-28 10:48:36 +01:00
tox.ini Add initial project structure and documentation 2026-01-28 10:48:36 +01:00
WEBAPP_LOADING_FIX.md feat: Implement default welcome page for missing web application 2026-01-28 12:59:33 +01:00
webdrop_bridge.code-workspace Add initial project structure and documentation 2026-01-28 10:48:36 +01:00

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 License Python

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
  • Professional Build Pipeline - MSI for Windows, DMG for macOS
  • Comprehensive Testing - Unit, integration, and end-to-end tests
  • CI/CD Ready - GitHub Actions workflows included

Quick Start

Requirements

  • Python 3.10+
  • Windows 10/11 or macOS 12+
  • 100 MB disk space

Installation from Source

# Clone repository
git clone https://github.com/yourusername/webdrop-bridge.git
cd webdrop-bridge

# Create virtual environment
python -m venv venv
source venv/bin/activate  # macOS/Linux
# venv\Scripts\activate  # Windows

# 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

# Run linting checks
tox -e lint

# Build for your platform
tox -e build-windows   # Windows
tox -e build-macos     # macOS

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

Create .env file from .env.example:

cp .env.example .env

Key settings:

  • WEBAPP_URL - Local or remote web app URL
  • ALLOWED_ROOTS - Comma-separated whitelist of allowed directories
  • LOG_LEVEL - DEBUG, INFO, WARNING, ERROR
  • WINDOW_WIDTH / WINDOW_HEIGHT - Initial window size

Testing

# Run all tests
pytest

# Run specific test type
pytest tests/unit/          # Unit tests only
pytest tests/integration/   # Integration tests only

# With coverage report
pytest --cov=src/webdrop_bridge --cov-report=html

# Run on specific platform marker
pytest -m windows           # Windows-specific tests
pytest -m macos            # macOS-specific tests

Building Installers

Windows MSI

pip install pyinstaller
python build/scripts/build_windows.py

Output: build/dist/WebDropBridge.exe

macOS DMG

pip install pyinstaller
bash build/scripts/build_macos.sh

Output: build/dist/WebDropBridge.dmg

Development Workflow

  1. Create feature branch

    git checkout -b feature/my-feature
    
  2. Write tests first

    pytest tests/unit/test_my_feature.py
    
  3. Implement feature

    # Edit src/webdrop_bridge/...
    
  4. Run quality checks

    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 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

Roadmap

  • v1.0 - Stable Windows & macOS release
  • v1.1 - Advanced filtering and logging UI
  • v1.2 - API for custom handlers
  • v2.0 - Plugin architecture
  • v2.1 - Cloud storage integration (OneDrive, Google Drive)

Support


Status: Alpha Development | Last Updated: January 2026