From 4cc158a7917da144a95b18982b7884bd67292a87 Mon Sep 17 00:00:00 2001 From: claudi Date: Tue, 3 Mar 2026 08:34:27 +0100 Subject: [PATCH] cleanup --- CHANGELOG.md | 288 ----------------------------------- docs/ANGULAR_CDK_ANALYSIS.md | 268 -------------------------------- 2 files changed, 556 deletions(-) delete mode 100644 CHANGELOG.md delete mode 100644 docs/ANGULAR_CDK_ANALYSIS.md diff --git a/CHANGELOG.md b/CHANGELOG.md deleted file mode 100644 index 91755f9..0000000 --- a/CHANGELOG.md +++ /dev/null @@ -1,288 +0,0 @@ -## [0.7.1] - 2026-02-25 - -### Added - -### Changed - -### Fixed - -## [0.7.0] - 2026-02-25 - -### Added - -### Changed - -### Fixed - -## [0.6.5] - 2026-02-25 - -### Added - -### Changed - -### Fixed - -## [0.6.4] - 2026-02-25 - -### Added - -### Changed - -### Fixed - -## [0.6.3] - 2026-02-25 - -### Added - -### Changed - -### Fixed - -## [0.6.2] - 2026-02-25 - -### Added - -### Changed - -### Fixed - -## [0.6.1] - 2026-02-25 - -### Added - -### Changed - -### Fixed - -## [0.6.0] - 2026-02-20 - -### Added -- **UI Enhancements** - - Web source configuration tab in settings dialog for URL mapping management - - Enhanced about dialog with product description and contact information - -- **Build & Distribution** - - Executable versioning support for Windows builds - - Desktop shortcut creation in WiX installer - - Support for 64-bit components in MSI installer (fix) - -### Changed -- Refactored logging configuration to use AppData directory (Windows) instead of application root -- Enhanced Windows installer with improved UI and error reporting -- Improved code structure and readability across multiple modules -- Refactored version syncing script with better Unicode handling - -### Fixed -- Fixed import order in settings_dialog.py (QTabWidget positioning) -- Improved error reporting in Windows installer linking -- Enhanced Unicode handling in build scripts - -# Changelog - -All notable changes to WebDrop Bridge will be documented in this file. - -The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), -and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). - -## [0.1.0] - 2026-01-28 - -### Added -- **Core Features** - - Qt6-based desktop application for web-to-file drag-and-drop - - PySide6 integration with WebEngine for embedded browser - - Path validation and security with whitelist-based access control - - Drag-and-drop event interception and handling - - Real-time drag state monitoring - -- **UI/UX** - - Professional main window with toolbar navigation - - Restricted web view with URL whitelist enforcement - - Kiosk-mode support (restricted browsing) - - Beautiful default welcome page for unconfigured instances - - Responsive layout with proper window management - -- **Configuration** - - Environment-based configuration system (.env file support) - - Configurable allowed root directories for file access - - URL whitelist with wildcard support (*.example.com) - - Window size and appearance settings - - Logging level and output control - -- **Logging & Monitoring** - - Structured logging with INFO, DEBUG, ERROR levels - - Optional file-based logging - - Comprehensive error messages and diagnostics - - Application startup and shutdown logging - -- **Build & Distribution** - - PyInstaller configuration for Windows and macOS - - Standalone executable generation (195.7 MB for Windows) - - Dependency bundling (PySide6, Qt6, Chromium) - - Resource embedding (webapp, icons, stylesheets) - - Cross-platform support (Windows .exe, macOS .dmg) - -- **Testing & Quality** - - 99 unit and integration tests - - 84% code coverage - - Ruff linting and Black code formatting - - mypy type checking - - Comprehensive test fixtures and mocking - -- **CI/CD** - - Build automation scripts for Windows and macOS - - Forgejo Packages support for distribution - - SHA256 checksum generation for release files - - Release documentation on Forgejo - -- **Documentation** - - Comprehensive API documentation with docstrings - - Architecture documentation (ARCHITECTURE.md) - - Development plan (DEVELOPMENT_PLAN.md) - - Setup and quickstart guides - - Contributing guidelines - -### Technical Details -- **Language**: Python 3.13 -- **Framework**: PySide6 6.10.1 (Qt6) -- **Web Engine**: Qt6 WebEngine with Chromium -- **Build Tool**: PyInstaller 6.18.0 -- **Testing**: pytest with coverage -- **Linting**: Ruff + Black - -### Known Limitations -- Requires configuration for custom web applications -- Manual release builds needed (no CI/CD runners in Forgejo at this time) - -## [0.5.0] - 2026-02-18 - -### Added - Phase 4 Professional Features - -#### Phase 4.1: Auto-Update System -- **Auto-update Manager** (`core/updater.py`) - - Check for new releases via Forgejo API - - Automatic background update checking (configurable interval) - - Manual "Check for Updates" menu option - - SHA256 checksum verification for downloaded files - - Version comparison using semantic versioning - - 27 tests passing, 79% coverage - -- **Update UI Components** (`ui/update_manager_ui.py`) - - Update notification dialogs with release notes and changelog - - Progress bar for update downloads - - Integration with Help menu and status bar - - Real-time status updates ("Checking...", "Downloading...", "Complete") - - Graceful error handling with user feedback - - 49 tests passing, 95% coverage - -- **Forgejo Integration** - - Queries Forgejo API for latest releases - - Supports tag-based versioning (vX.Y.Z) - - Release notes parsing and display - - Asset/checksum management - -#### Phase 4.2: Enhanced Logging & Monitoring -- **Structured JSON Logging** - - `JSONFormatter` class for JSON-formatted log output - - Timestamp, level, module, function, and line number tracking - - Optional JSON format alongside traditional text logging - -- **Log Rotation & Archival** - - Automatic log file rotation (daily) - - Old log archival with configurable retention (default: 30 days) - - `_archive_old_logs()` function for log cleanup - - Logs directory management - -- **Performance Metrics** - - `PerformanceTracker` context manager for operation timing - - Automatic performance logging - - Useful for debugging and optimization monitoring - - 20 tests passing, 91% coverage - -#### Phase 4.3: Advanced Configuration -- **Configuration Validation System** - - `ConfigValidator` class with comprehensive schema validation - - Validates all config fields with detailed error messages - - Type constraints, ranges, and allowed value enforcement - - 8 tests passing - -- **Configuration Profiles** - - `ConfigProfile` class for named profile management (work, personal, etc.) - - Profile storage in `~/.webdrop-bridge/profiles/` as JSON - - Profile save/load/delete functionality - - 7 tests passing - -- **Settings Dialog UI** (`ui/settings_dialog.py`) - - Professional Qt dialog with 5 organized tabs - - **Paths Tab**: Manage allowed root directories with add/remove buttons - - **URLs Tab**: Manage allowed web URLs with wildcard support - - **Logging Tab**: Configure log level and file output - - **Window Tab**: Configure window size, title, and appearance - - **Profiles Tab**: Save/load/delete named profiles, export/import configs - - 23 tests passing, 75% coverage - -- **Configuration Import/Export** - - `ConfigExporter` class for JSON serialization - - `export_to_json()` - Save configuration to JSON file - - `import_from_json()` - Load configuration from JSON - - File I/O error handling - - 5 tests passing - -- **Overall Phase 4.3 Stats** - - 43 tests passing total - - 87% coverage on `config_manager.py` - - 75% coverage on `settings_dialog.py` - -### Technical Improvements -- **Test Coverage**: Increased from 84% (v1.0.0) to 90%+ with Phase 4 additions -- **Total Test Suite**: 139 tests passing across all phases -- **Code Quality**: Maintained 100% Black formatting and Ruff compliance -- **Type Safety**: Full mypy compliance across new modules - -### Documentation Updates -- Updated DEVELOPMENT_PLAN.md with Phase 4 completion status -- Added comprehensive docstrings to all Phase 4 modules -- Configuration validation examples in docs -- Update workflow documentation - -### Known Changes from v1.0.0 -- Forgejo API integration approach (vs CI/CD automation) -- Manual release builds using Forgejo Packages (vs Actions) -- Optional JSON logging format (traditional text still default) -- Profile-based configuration management - -## [Unreleased] - Phase 5 Planned - -### Planned Features -- **Performance Optimization** - Drag event latency < 50ms -- **Security Hardening** - Comprehensive security audit and fixes -- **Release Candidates** - v1.0.1-rc1, rc2, rc3 testing -- **Final Releases** - Stable Windows & macOS builds -- **Analytics** (Optional post-release) -- **Community Support** - GitHub/Forgejo discussion forums - ---- - -## Version Numbering - -- **MAJOR**: Significant feature additions or breaking changes -- **MINOR**: New features, backward compatible -- **PATCH**: Bug fixes, improvements - -Example: `1.0.0` = Version 1, Release 0, Patch 0 - -## Release Process - -1. Update version in `src/webdrop_bridge/__init__.py` (__version__) -2. Update CHANGELOG.md with new features/fixes -3. Commit: `git commit -m "chore: Bump version to X.Y.Z"` -4. Build on Windows: `python build/scripts/build_windows.py` -5. Build on macOS: `bash build/scripts/build_macos.sh` -6. Tag: `git tag -a vX.Y.Z -m "Release version X.Y.Z"` -7. Push: `git push upstream vX.Y.Z` -8. (Optional) Upload to Forgejo Packages using provided upload scripts - ---- - -**Current Version**: 1.0.0 (Released 2026-01-28) -**Last Updated**: 2026-02-18 with v1.0.1 Phase 4 features -**Next Version**: 1.1.0 (Planned for Phase 5 release candidates) diff --git a/docs/ANGULAR_CDK_ANALYSIS.md b/docs/ANGULAR_CDK_ANALYSIS.md deleted file mode 100644 index 5e434ad..0000000 --- a/docs/ANGULAR_CDK_ANALYSIS.md +++ /dev/null @@ -1,268 +0,0 @@ -# Angular CDK Drag & Drop Analysis - GlobalDAM - -## Framework Detection - -**Web Application:** Agravity GlobalDAM -**Framework:** Angular 19.2.14 -**Drag & Drop:** Angular CDK (Component Dev Kit) -**Styling:** TailwindCSS - -## Technical Findings - -### 1. Angular CDK Implementation - -```html - -
- - -
- - -
  • - weiss_ORIGINAL -
  • -
    -
    -``` - -### 2. Key Observations - -#### Native HTML5 Drag ist DEAKTIVIERT -```html -draggable="false" -``` - -**Bedeutung:** -- Kein Zugriff auf native `dragstart`, `drag`, `dragend` Events -- Kein `event.dataTransfer` API verfügbar -- Angular CDK simuliert Drag & Drop komplett in JavaScript -- Daten werden NICHT über natives Clipboard/DataTransfer übertragen - -#### Angular CDK Direktiven -- `cdkdroplistgroup` - Gruppiert mehrere Drop-Zonen -- `cdkdroplist` - Markiert Drop-Bereiche (Collections, Clipboard) -- `cdkdrag` - Markiert draggbare Elemente (Assets) -- `cdkdroplistsortingdisabled` - Sortierung deaktiviert - -#### Asset Identifikation -```html - -
    - - - - - -weiss_ORIGINAL -``` - -## Impact on WebDrop Bridge - -### ❌ Bisheriger Ansatz funktioniert NICHT - -Unser aktueller Ansatz basiert auf: -1. Interception von nativen Drag-Events -2. Manipulation von `event.dataTransfer.effectAllowed` und `.dropEffect` -3. Setzen von URLs im DataTransfer - -**Das funktioniert NICHT mit Angular CDK**, da: -- Angular CDK das native Drag & Drop komplett umgeht -- Keine nativen Events gefeuert werden -- DataTransfer API nicht verwendet wird - -### ✅ Mögliche Lösungsansätze - -#### Ansatz 1: JavaScript Injection zur Laufzeit -Injiziere JavaScript-Code, der Angular CDK Events abfängt: - -```javascript -// Überwache Angular CDK Event-Handler -document.addEventListener('cdkDragStarted', (event) => { - const assetId = event.source.element.nativeElement.id; - const assetName = event.source.element.nativeElement.querySelector('img')?.alt; - - // Sende an Qt WebChannel - bridge.handleDragStart(assetId, assetName); -}); - -document.addEventListener('cdkDragDropped', (event) => { - // Verhindere das Standard-Verhalten - event.preventDefault(); - - // Starte nativen Drag von Qt aus - bridge.initNativeDrag(); -}); -``` - -**Vorteile:** -- ✅ Direkter Zugriff auf Angular CDK Events -- ✅ Kann Asset-Informationen extrahieren -- ✅ Kann Drag-Operationen abfangen - -**Nachteile:** -- ⚠️ Erfordert genaue Kenntnis der Angular CDK Internals -- ⚠️ Könnte bei Angular CDK Updates brechen -- ⚠️ Komplexer zu implementieren - -#### Ansatz 2: DOM Mutation Observer -Überwache DOM-Änderungen während des Drags: - -```javascript -const observer = new MutationObserver((mutations) => { - mutations.forEach((mutation) => { - // Suche nach CDK Drag-Elementen mit bestimmten Klassen - const dragElement = document.querySelector('.cdk-drag-preview'); - if (dragElement) { - const assetId = dragElement.querySelector('[id^="a"]')?.id; - bridge.handleDrag(assetId); - } - }); -}); - -observer.observe(document.body, { - childList: true, - subtree: true, - attributes: true, - attributeFilter: ['class'] -}); -``` - -**Vorteile:** -- ✅ Robuster gegenüber Framework-Updates -- ✅ Funktioniert mit beliebigen Frameworks - -**Nachteile:** -- ⚠️ Performance-Overhead -- ⚠️ Kann falsche Positive erzeugen - -#### Ansatz 3: Qt WebChannel Bridge mit Custom Events -Nutze Qt WebChannel, um mit der Angular-Anwendung zu kommunizieren: - -```python -# Python-Seite (Qt) -class DragBridge(QObject): - @Slot(str, str) - def onAssetDragStart(self, asset_id: str, asset_name: str): - """Called from JavaScript when Angular CDK drag starts.""" - logger.info(f"Asset drag started: {asset_id} ({asset_name})") - self.convert_and_drag(asset_id, asset_name) -``` - -```javascript -// JavaScript-Seite (injiziert via QWebEngineScript) -new QWebChannel(qt.webChannelTransport, (channel) => { - const dragBridge = channel.objects.dragBridge; - - // Monkey-patch Angular CDK's DragRef - const originalStartDraggingSequence = CdkDrag.prototype._startDraggingSequence; - CdkDrag.prototype._startDraggingSequence = function(event) { - const assetElement = this.element.nativeElement; - const assetId = assetElement.id; - const assetName = assetElement.querySelector('img')?.alt; - - // Benachrichtige Qt - dragBridge.onAssetDragStart(assetId, assetName); - - // Rufe original Angular CDK Methode auf - return originalStartDraggingSequence.call(this, event); - }; -}); -``` - -**Vorteile:** -- ✅ Saubere Kommunikation zwischen Qt und Web -- ✅ Kann Asset-Informationen zuverlässig extrahieren -- ✅ Typensicher (Qt Signals/Slots) - -**Nachteile:** -- ⚠️ Erfordert Monkey-Patching von Angular CDK -- ⚠️ Kann bei CDK Updates brechen - -#### Ansatz 4: Browser DevTools Protocol (Chrome DevTools) -Nutze Chrome DevTools Protocol für tiefere Integration: - -```python -from PySide6.QtWebEngineCore import QWebEngineProfile - -profile = QWebEngineProfile.defaultProfile() -profile.setRequestInterceptor(...) - -# Intercepte Netzwerk-Requests und injiziere Header -# Überwache JavaScript-Execution via CDP -``` - -**Vorteile:** -- ✅ Sehr mächtig, kann JavaScript-Execution überwachen -- ✅ Kann Events auf niedrigerer Ebene abfangen - -**Nachteile:** -- ⚠️ Sehr komplex -- ⚠️ Erfordert Chrome DevTools Protocol Kenntnisse -- ⚠️ Performance-Overhead - -## Empfohlener Ansatz - -### **Ansatz 3: Qt WebChannel Bridge** (BEVORZUGT) - -**Begründung:** -1. ✅ Saubere Architektur mit klarer Trennung -2. ✅ Typsicher durch Qt Signals/Slots -3. ✅ Kann Asset-IDs und -Namen zuverlässig extrahieren -4. ✅ Funktioniert auch wenn Angular CDK interne Änderungen hat -5. ✅ Ermöglicht bidirektionale Kommunikation - -**Implementierungsschritte:** - -### Phase 1: Asset-Informationen extrahieren -1. JavaScript via QWebEngineScript injizieren -2. Qt WebChannel setuppen -3. Angular CDK Events überwachen (ohne Monkey-Patching als Test) -4. Asset-IDs und Namen an Qt senden - -### Phase 2: Native Drag initiieren -1. Bei CDK Drag-Start: Extrahiere Asset-Informationen -2. Sende Asset-ID an Backend/API -3. Erhalte lokalen Dateipfad oder Azure Blob URL -4. Konvertiere zu lokalem Pfad (wie aktuell) -5. Initiiere nativen Drag mit QDrag - -### Phase 3: Drag-Feedback -1. Zeige Drag-Preview in Qt (optional) -2. Update Cursor während Drag -3. Cleanup nach Drag-Ende - -## Asset-ID zu Dateipfad Mapping - -Die Anwendung verwendet Asset-IDs in mehreren Formaten: - -```javascript -// Asset-ID: anPGZszKzgKaSz1SIx2HFgduy - -// Mögliche URL-Konstruktion: -const assetUrl = `https://dev.agravity.io/api/assets/${assetId}`; -const downloadUrl = `https://dev.agravity.io/api/assets/${assetId}/download`; -const blobUrl = `https://static.agravity.io/${workspaceId}/${assetId}/${filename}`; -``` - -**Für WebDrop Bridge:** -- Asset-ID aus DOM extrahieren -- Asset-Metadaten via API abrufen (falls verfügbar) -- Blob-URL konstruieren -- URL Converter nutzen (bereits implementiert!) - -## Next Steps - -1. **Proof of Concept**: Qt WebChannel mit einfachem Event-Logger -2. **Asset-ID Extraction**: JavaScript Injection testen -3. **API Research**: GlobalDAM API untersuchen (Asset-Metadaten) -4. **Integration**: Mit bestehendem URLConverter verbinden -5. **Testing**: Mit echten Assets testen - -## Hinweise - -- Angular CDK Version kann sich unterscheiden - Code muss robust sein -- Asset-IDs scheinen eindeutig zu sein (Base64-ähnlich) -- Die Anwendung nutzt Azure Blob Storage (basierend auf bisherigen URLs) -- Custom Components (`ay-*`) deuten auf eine eigene Component Library hin