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
[email protected]
https://lists.sourceforge.net/lists/listinfo/bibdesk-commit