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

Reply via email to