Refactor drag handling and update tests
- Renamed `initiate_drag` to `handle_drag` in MainWindow and updated related tests. - Improved drag handling logic to utilize a bridge for starting file drags. - Updated `_on_drag_started` and `_on_drag_failed` methods to match new signatures. - Modified test cases to reflect changes in drag handling and assertions. Enhance path validation and logging - Updated `PathValidator` to log warnings for nonexistent roots instead of raising errors. - Adjusted tests to verify the new behavior of skipping nonexistent roots. Update web application UI and functionality - Changed displayed text for drag items to reflect local paths and Azure Blob Storage URLs. - Added debug logging for drag operations in the web application. - Improved instructions for testing drag and drop functionality. Add configuration documentation and example files - Created `CONFIG_README.md` to provide detailed configuration instructions for WebDrop Bridge. - Added `config.example.json` and `config_test.json` for reference and testing purposes. Implement URL conversion logic - Introduced `URLConverter` class to handle conversion of Azure Blob Storage URLs to local paths. - Added unit tests for URL conversion to ensure correct functionality. Develop download interceptor script - Created `download_interceptor.js` to intercept download-related actions in the web application. - Implemented logging for fetch calls, XMLHttpRequests, and Blob URL creations. Add download test page and related tests - Created `test_download.html` for testing various download scenarios. - Implemented `test_download.py` to verify download path resolution and file construction. - Added `test_url_mappings.py` to ensure URL mappings are loaded correctly. Add unit tests for URL converter - Created `test_url_converter.py` to validate URL conversion logic and mapping behavior.
This commit is contained in:
parent
c9704efc8d
commit
88dc358894
21 changed files with 1870 additions and 432 deletions
72
src/webdrop_bridge/ui/download_interceptor.js
Normal file
72
src/webdrop_bridge/ui/download_interceptor.js
Normal file
|
|
@ -0,0 +1,72 @@
|
|||
// Download Interceptor Script
|
||||
// Intercepts JavaScript-based downloads (fetch, XMLHttpRequest, Blob URLs)
|
||||
|
||||
(function() {
|
||||
'use strict';
|
||||
|
||||
console.log('🔍 Download interceptor script loaded');
|
||||
|
||||
// Intercept fetch() calls
|
||||
const originalFetch = window.fetch;
|
||||
window.fetch = function(...args) {
|
||||
const url = args[0];
|
||||
console.log('🌐 Fetch called:', url);
|
||||
|
||||
// Check if this looks like a download
|
||||
if (typeof url === 'string') {
|
||||
const urlLower = url.toLowerCase();
|
||||
const downloadPatterns = [
|
||||
'/download', '/export', '/file',
|
||||
'.pdf', '.zip', '.xlsx', '.docx',
|
||||
'attachment', 'content-disposition'
|
||||
];
|
||||
|
||||
if (downloadPatterns.some(pattern => urlLower.includes(pattern))) {
|
||||
console.log('📥 Potential download detected via fetch:', url);
|
||||
}
|
||||
}
|
||||
|
||||
return originalFetch.apply(this, args);
|
||||
};
|
||||
|
||||
// Intercept XMLHttpRequest
|
||||
const originalXHROpen = XMLHttpRequest.prototype.open;
|
||||
XMLHttpRequest.prototype.open = function(method, url, ...rest) {
|
||||
console.log('🌐 XHR opened:', method, url);
|
||||
this._url = url;
|
||||
return originalXHROpen.apply(this, [method, url, ...rest]);
|
||||
};
|
||||
|
||||
const originalXHRSend = XMLHttpRequest.prototype.send;
|
||||
XMLHttpRequest.prototype.send = function(...args) {
|
||||
console.log('📤 XHR send:', this._url);
|
||||
return originalXHRSend.apply(this, args);
|
||||
};
|
||||
|
||||
// Intercept Blob URL creation
|
||||
const originalCreateObjectURL = URL.createObjectURL;
|
||||
URL.createObjectURL = function(blob) {
|
||||
console.log('🔗 Blob URL created, size:', blob.size, 'type:', blob.type);
|
||||
return originalCreateObjectURL.apply(this, arguments);
|
||||
};
|
||||
|
||||
// Intercept anchor clicks that might be downloads
|
||||
document.addEventListener('click', function(e) {
|
||||
const target = e.target.closest('a');
|
||||
if (target && target.href) {
|
||||
const href = target.href;
|
||||
const download = target.getAttribute('download');
|
||||
|
||||
if (download !== null) {
|
||||
console.log('📥 Download link clicked:', href, 'filename:', download);
|
||||
}
|
||||
|
||||
// Check for blob URLs
|
||||
if (href.startsWith('blob:')) {
|
||||
console.log('📦 Blob download link clicked:', href);
|
||||
}
|
||||
}
|
||||
}, true);
|
||||
|
||||
console.log('✅ Download interceptor active');
|
||||
})();
|
||||
Loading…
Add table
Add a link
Reference in a new issue