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