Revision: 29517 http://sourceforge.net/p/bibdesk/svn/29517 Author: hofman Date: 2025-08-31 16:14:40 +0000 (Sun, 31 Aug 2025) Log Message: ----------- Notify updates of downloads from downloads manager, observe in webview when the downloads page is loaded. Don't let page reload.
Modified Paths: -------------- trunk/bibdesk/BDSKDownloadManager.h trunk/bibdesk/BDSKDownloadManager.m trunk/bibdesk/BDSKWebView.m trunk/bibdesk/de.lproj/WebGroupDownloads.html trunk/bibdesk/en.lproj/WebGroupDownloads.html trunk/bibdesk/fr.lproj/WebGroupDownloads.html Modified: trunk/bibdesk/BDSKDownloadManager.h =================================================================== --- trunk/bibdesk/BDSKDownloadManager.h 2025-08-31 16:07:19 UTC (rev 29516) +++ trunk/bibdesk/BDSKDownloadManager.h 2025-08-31 16:14:40 UTC (rev 29517) @@ -41,6 +41,8 @@ NS_ASSUME_NONNULL_BEGIN +extern NSString *BDSKDownloadsDidChangeNotification; + typedef NS_ENUM(NSInteger, BDSKDownloadStatus) { BDSKDownloadStatusDownloading, BDSKDownloadStatusFinished, Modified: trunk/bibdesk/BDSKDownloadManager.m =================================================================== --- trunk/bibdesk/BDSKDownloadManager.m 2025-08-31 16:07:19 UTC (rev 29516) +++ trunk/bibdesk/BDSKDownloadManager.m 2025-08-31 16:14:40 UTC (rev 29517) @@ -45,6 +45,8 @@ #define BDSKRemoveFinishedDownloadsKey @"BDSKRemoveFinishedDownloads" #define BDSKRemoveFailedDownloadsKey @"BDSKRemoveFailedDownloads" +NSString *BDSKDownloadsDidChangeNotification = @"BDSKDownloadsDidChangeNotification"; + #if MAC_OS_X_VERSION_MAX_ALLOWED < 110300 @protocol WKDownloadDelegate <NSObject> @end @@ -87,9 +89,14 @@ return [[NSUserDefaults standardUserDefaults] boolForKey:BDSKRemoveFailedDownloadsKey]; } +- (void)notifyUpdate { + [[NSNotificationCenter defaultCenter] postNotificationName:BDSKDownloadsDidChangeNotification object:self]; +} + - (void)addDownload:(id)download { [download setDelegate:self]; [downloads addObject:[[BDSKWebDownload alloc] initWithDownload:download URL:[[download originalRequest] URL]]]; + [self notifyUpdate]; } - (BDSKWebDownload *)webDownloadForDownload:(id)download { @@ -113,14 +120,21 @@ [[self downloadWithUniqueID:value] cancel]; } else if ([action isEqualToString:@"remove"]) { BDSKWebDownload *webDownload = [self downloadWithUniqueID:value]; - if (webDownload) + if (webDownload) { [downloads removeObject:webDownload]; + [self notifyUpdate]; + } } else if ([action isEqualToString:@"clear"]) { + BOOL didRemove = NO; NSUInteger i = [downloads count]; while (i--) { - if ([[downloads objectAtIndex:i] status] != BDSKDownloadStatusDownloading) + if ([[downloads objectAtIndex:i] status] != BDSKDownloadStatusDownloading) { [downloads removeObjectAtIndex:i]; + didRemove = YES; + } } + if (didRemove) + [self notifyUpdate]; } else if ([action isEqualToString:@"removeFinished"]) { [[NSUserDefaults standardUserDefaults] setBool:value forKey:BDSKRemoveFinishedDownloadsKey]; } else if ([action isEqualToString:@"removeFailed"]) { @@ -134,6 +148,7 @@ - (void)downloadDidBegin:(NSURLDownload *)download { [downloads addObject:[[BDSKWebDownload alloc] initWithDownload:download URL:[[download request] URL]]]; + [self notifyUpdate]; } - (void)downloadDidFinish:(id)download { @@ -142,6 +157,7 @@ if ([[NSUserDefaults standardUserDefaults] boolForKey:BDSKRemoveFinishedDownloadsKey] && webDownload) [downloads removeObject:webDownload]; + [self notifyUpdate]; } - (void)download:(NSURLDownload *)download didFailWithError:(NSError *)error { @@ -150,6 +166,7 @@ if ([[NSUserDefaults standardUserDefaults] boolForKey:BDSKRemoveFailedDownloadsKey] && webDownload) [downloads removeObject:webDownload]; + [self notifyUpdate]; if ([[error domain] isEqualToString:NSURLErrorDomain] && [error code] == NSURLErrorCancelled) return; @@ -203,6 +220,7 @@ if ([[NSUserDefaults standardUserDefaults] boolForKey:BDSKRemoveFailedDownloadsKey] && webDownload) [downloads removeObject:webDownload]; + [self notifyUpdate]; if ([[error domain] isEqualToString:NSURLErrorDomain] && [error code] == NSURLErrorCancelled) return; Modified: trunk/bibdesk/BDSKWebView.m =================================================================== --- trunk/bibdesk/BDSKWebView.m 2025-08-31 16:07:19 UTC (rev 29516) +++ trunk/bibdesk/BDSKWebView.m 2025-08-31 16:14:40 UTC (rev 29517) @@ -359,6 +359,20 @@ }]; } +- (void)handleDownloadsDidChange:(NSNotification *)notification { + if ([[self mainFrameURL] isCaseInsensitiveEqual:@"bibdesk:downloads"]) + [self reload:nil]; +} + +- (void)startObservingDownloads { + if ([[self mainFrameURL] isCaseInsensitiveEqual:@"bibdesk:downloads"]) + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleDownloadsDidChange:) name:BDSKDownloadsDidChangeNotification object:[BDSKDownloadManager sharedManager]]; +} + +- (void)stopObservingDownloads { + [[NSNotificationCenter defaultCenter] removeObserver:self name:BDSKDownloadsDidChangeNotification object:[BDSKDownloadManager sharedManager]]; +} + @end #pragma mark - @@ -420,6 +434,8 @@ if (frame == [sender mainFrame]) { if ([sender respondsToSelector:@selector(stopMonitoringURL)]) [(BDSKWebView *)sender stopMonitoringURL]; + if ([sender respondsToSelector:@selector(stopObservingDownloads)]) + [(BDSKWebView *)sender stopObservingDownloads]; if ([sender respondsToSelector:@selector(resetFavicon)]) [(BDSKWebView *)sender resetFavicon]; else @@ -461,6 +477,8 @@ else [self webView:sender setIcon:[sender mainFrameIcon]]; [self webView:sender setTitle:title]; + if ([sender respondsToSelector:@selector(startObservingDownloads)]) + [(BDSKWebView *)sender startObservingDownloads]; } [self webView:sender setLoading:[sender isLoading]]; if ([delegate respondsToSelector:@selector(webView:didFinishLoadForFrame:)]) Modified: trunk/bibdesk/de.lproj/WebGroupDownloads.html =================================================================== --- trunk/bibdesk/de.lproj/WebGroupDownloads.html 2025-08-31 16:07:19 UTC (rev 29516) +++ trunk/bibdesk/de.lproj/WebGroupDownloads.html 2025-08-31 16:14:40 UTC (rev 29517) @@ -26,7 +26,7 @@ a:visited { color: #909; } </style> </head> - <body onload="setTimeout('location.reload()',5000)"> + <body> <$downloads?> <table class="downloads" id="downloads"> Modified: trunk/bibdesk/en.lproj/WebGroupDownloads.html =================================================================== --- trunk/bibdesk/en.lproj/WebGroupDownloads.html 2025-08-31 16:07:19 UTC (rev 29516) +++ trunk/bibdesk/en.lproj/WebGroupDownloads.html 2025-08-31 16:14:40 UTC (rev 29517) @@ -26,7 +26,7 @@ a:visited { color: #909; } </style> </head> - <body onload="setTimeout('location.reload()',5000)"> + <body> <$downloads?> <table class="downloads" id="downloads"> Modified: trunk/bibdesk/fr.lproj/WebGroupDownloads.html =================================================================== --- trunk/bibdesk/fr.lproj/WebGroupDownloads.html 2025-08-31 16:07:19 UTC (rev 29516) +++ trunk/bibdesk/fr.lproj/WebGroupDownloads.html 2025-08-31 16:14:40 UTC (rev 29517) @@ -26,7 +26,7 @@ a:visited { color: #909; } </style> </head> - <body onload="setTimeout('location.reload()',5000)"> + <body> <$downloads?> <table class="downloads" id="downloads"> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. _______________________________________________ Bibdesk-commit mailing list Bibdesk-commit@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/bibdesk-commit