Revision: 28018
          http://sourceforge.net/p/bibdesk/svn/28018
Author:   hofman
Date:     2022-10-12 21:50:30 +0000 (Wed, 12 Oct 2022)
Log Message:
-----------
Monitor changes to mainframeURL for INSPIRE parser, as search updates to this 
web page is not notified by the delegate methods. Call delegate methods to 
simulate a frame load when the URL changes.

Modified Paths:
--------------
    trunk/bibdesk/BDSKInspireParser.m
    trunk/bibdesk/BDSKWebGroup.m
    trunk/bibdesk/BDSKWebParser.h
    trunk/bibdesk/BDSKWebParser.m
    trunk/bibdesk/BDSKWebView.h
    trunk/bibdesk/BDSKWebView.m

Modified: trunk/bibdesk/BDSKInspireParser.m
===================================================================
--- trunk/bibdesk/BDSKInspireParser.m   2022-10-12 13:57:14 UTC (rev 28017)
+++ trunk/bibdesk/BDSKInspireParser.m   2022-10-12 21:50:30 UTC (rev 28018)
@@ -103,6 +103,8 @@
     return nil;
 }
 
+- (BOOL)shouldMonitorURL { return YES; }
+
 + (NSString *)name {return @"INSPIRE"; }
 
 + (NSString *)address { return @"https://inspirehep.net/";; }

Modified: trunk/bibdesk/BDSKWebGroup.m
===================================================================
--- trunk/bibdesk/BDSKWebGroup.m        2022-10-12 13:57:14 UTC (rev 28017)
+++ trunk/bibdesk/BDSKWebGroup.m        2022-10-12 21:50:30 UTC (rev 28018)
@@ -94,6 +94,7 @@
     [[NSNotificationCenter defaultCenter] removeObserver:self];
     // should always be on the main thread, see BibDocument, but be sure
     BDSKENSURE_MAIN_THREAD(
+        [webView stopMonitoringURL];
         [webView setHostWindow:nil];
         [webView setDelegate:nil];
         [parsers makeObjectsPerformSelector:@selector(cancel)];
@@ -263,6 +264,9 @@
         // the parser can finish immediately
         [parser startWithDelegate:self];
         
+        if ([parser shouldMonitorURL])
+            [webView monitorURL];
+        
     } else {
         
         NSArray *newPubs = nil;

Modified: trunk/bibdesk/BDSKWebParser.h
===================================================================
--- trunk/bibdesk/BDSKWebParser.h       2022-10-12 13:57:14 UTC (rev 28017)
+++ trunk/bibdesk/BDSKWebParser.h       2022-10-12 21:50:30 UTC (rev 28018)
@@ -77,6 +77,8 @@
 // set at the end of -start, to know thereis not more coming, so we may finish
 @property (nonatomic) BOOL finishedStarting;
 
+@property (nonatomic) BOOL shouldMonitorURL;
+
 - (id)initWithDocument:(DOMDocument *)aDomDocument fromURL:(NSURL *)aURL;
 
 - (void)startWithDelegate:(id<BDSKWebParserDelegate>)aDelegate;

Modified: trunk/bibdesk/BDSKWebParser.m
===================================================================
--- trunk/bibdesk/BDSKWebParser.m       2022-10-12 13:57:14 UTC (rev 28017)
+++ trunk/bibdesk/BDSKWebParser.m       2022-10-12 21:50:30 UTC (rev 28018)
@@ -70,6 +70,7 @@
 @implementation BDSKWebParser
 
 @synthesize domDocument, URL, delegate, finishedStarting;
+@dynamic shouldMonitorURL;
 
 + (NSArray *)parsers {
     static NSArray *webParsers = nil;
@@ -224,6 +225,8 @@
 
 - (NSArray *)itemsReturningError:(NSError **)outError { return nil; }
 
+- (BOOL)shouldMonitorURL { return NO; }
+
 + (BOOL)canParseDocument:(DOMDocument *)domDocument fromURL:(NSURL *)url { 
return NO; }
 
 + (NSString *)name {

Modified: trunk/bibdesk/BDSKWebView.h
===================================================================
--- trunk/bibdesk/BDSKWebView.h 2022-10-12 13:57:14 UTC (rev 28017)
+++ trunk/bibdesk/BDSKWebView.h 2022-10-12 21:50:30 UTC (rev 28018)
@@ -57,6 +57,7 @@
     NSURLSessionTask *faviconDownload;
     NSImage *favicon;
     BOOL faviconFromOrigin;
+    NSTimer *urlTimer;
 }
 
 @property (nonatomic, assign) id<BDSKWebViewDelegate> delegate;
@@ -67,6 +68,9 @@
 - (IBAction)addBookmark:(id)sender;
 - (IBAction)saveSource:(id)sender;
 
+- (void)monitorURL;
+- (void)stopMonitoringURL;
+
 @end
 
 #pragma mark -

Modified: trunk/bibdesk/BDSKWebView.m
===================================================================
--- trunk/bibdesk/BDSKWebView.m 2022-10-12 13:57:14 UTC (rev 28017)
+++ trunk/bibdesk/BDSKWebView.m 2022-10-12 21:50:30 UTC (rev 28018)
@@ -101,6 +101,8 @@
 }
 
 - (void)dealloc {
+    [urlTimer invalidate];
+    BDSKDESTROY(urlTimer);
     [faviconDownload cancel];
     BDSKDESTROY(faviconDownload);
     BDSKDESTROY(favicon);
@@ -125,6 +127,7 @@
     if (newURL && [[[[[self mainFrame] dataSource] request] URL] 
isEqual:newURL] == NO) {
         faviconFromOrigin = NO;
         [self clearFavicon];
+        [self stopMonitoringURL];
         [[self mainFrame] loadRequest:[NSURLRequest requestWithURL:newURL]];
     }
 }
@@ -141,6 +144,7 @@
 
 - (IBAction)reload:(id)sender {
     faviconFromOrigin = NO;
+    [self stopMonitoringURL];
     if (([NSEvent standardModifierFlags] & NSShiftKeyMask) != 0)
         [self reloadFromOrigin:sender];
     else
@@ -149,6 +153,7 @@
 
 - (IBAction)reloadFromOrigin:(id)sender {
     faviconFromOrigin = YES;
+    [self stopMonitoringURL];
     [super reloadFromOrigin:sender];
 }
 
@@ -329,6 +334,27 @@
     return favicon ?: [[BDSKWebIconDatabase sharedDatabase] 
iconForURLString:[self mainFrameURL]] ?: [NSImage imageNamed:@"Bookmark"];
 }
 
+#pragma mark URL Monitor
+
+- (void)urlTimerFired:(NSTimer *)timer {
+    if ([[self mainFrameURL] isEqualToString:[timer userInfo]] == NO) {
+        WebFrame *frame = [self mainFrame];
+        [webDelegate webView:self didStartProvisionalLoadForFrame:frame];
+        [webDelegate webView:self didCommitLoadForFrame:frame];
+        [webDelegate webView:self didFinishLoadForFrame:frame];
+    }
+}
+
+- (void)stopMonitoringURL {
+    [urlTimer invalidate];
+    BDSKDESTROY(urlTimer);
+}
+
+- (void)monitorURL {
+    [self stopMonitoringURL];
+    urlTimer = [[NSTimer scheduledTimerWithTimeInterval:1.0 target:self 
selector:@selector(urlTimerFired:) userInfo:[self mainFrameURL] repeats:YES] 
retain];
+}
+
 @end
 
 #pragma mark -
@@ -395,6 +421,8 @@
 
 - (void)webView:(WebView *)sender didStartProvisionalLoadForFrame:(WebFrame 
*)frame{
     if (frame == [sender mainFrame]) {
+        if ([sender respondsToSelector:@selector(stopMonitoringURL)])
+            [(BDSKWebView *)sender stopMonitoringURL];
         if ([sender respondsToSelector:@selector(resetFavicon)])
             [(BDSKWebView *)sender resetFavicon];
         else

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

Reply via email to