Revision: 29199
          http://sourceforge.net/p/bibdesk/svn/29199
Author:   hofman
Date:     2025-04-26 13:51:48 +0000 (Sat, 26 Apr 2025)
Log Message:
-----------
Don't percent-escape forward slash in database, move header to Headers

Modified Paths:
--------------
    trunk/bibdesk/BDSKSRUGroupServer.m
    trunk/bibdesk/BDSKServerInfo.m
    trunk/bibdesk/Bibdesk.xcodeproj/project.pbxproj

Modified: trunk/bibdesk/BDSKSRUGroupServer.m
===================================================================
--- trunk/bibdesk/BDSKSRUGroupServer.m  2025-04-25 22:25:32 UTC (rev 29198)
+++ trunk/bibdesk/BDSKSRUGroupServer.m  2025-04-26 13:51:48 UTC (rev 29199)
@@ -44,7 +44,7 @@
 #import "NSURL_BDSKExtensions.h"
 
 #define MAX_RESULTS 100
-#define MAX_TOTAL_RESULTS 1000
+#define MAX_TOTAL_RESULTS 100
 
 enum { BDSKIdleState, BDSKSearchState, BDSKFetchState };
 
@@ -86,6 +86,45 @@
     return self;
 }
 
+#pragma mark URLs
+
+- (NSURLComponents *)baseURLComponents {
+    NSString *host = [[[self serverInfo] host] 
stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet 
URLHostAllowedCharacterSet]];
+    NSInteger port = [[[self serverInfo] port] integerValue];
+    NSString *database = [[[self serverInfo] database] 
stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet 
URLPathAllowedCharacterSet]];
+    NSURLComponents *components = [[NSURLComponents alloc] init];
+    [components setScheme:@"http"];
+    [components setPercentEncodedHost:host];
+    if (port > 0)
+        [components setPort:[NSNumber numberWithInteger:port]];
+    [components setPercentEncodedPath:[@"/" stringByAppendingString:database]];
+    return components;
+}
+
+- (NSURL *)searchURL {
+    NSURLComponents *components = [self baseURLComponents];
+    NSMutableArray *query = [NSMutableArray array];
+    NSString *version = [[[self serverInfo] options] objectForKey:@"version"] 
?: @"1.1";
+    [query addObject:[@"version=" stringByAppendingString:version]];
+    [query addObject:@"operation=searchRetrieve"];
+    [query addObject:[@"query=" stringByAppendingString:[[self searchTerm] 
stringByAddingPercentEscapesForQueryTerm]]];
+    [components setPercentEncodedQuery:[query componentsJoinedByString:@"&"]];
+    return [components URL];
+}
+
+- (NSURL *)fetchURL {
+    NSURLComponents *components = [self baseURLComponents];
+    NSMutableArray *query = [NSMutableArray array];
+    NSString *version = [[[self serverInfo] options] objectForKey:@"version"] 
?: @"1.1";
+    [query addObject:[@"version=" stringByAppendingString:version]];
+    [query addObject:@"operation=searchRetrieve"];
+    [query addObject:[@"query=%@" stringByAppendingString:[[self searchTerm] 
stringByAddingPercentEscapesForQueryTerm]]];
+    [query addObject:[NSString stringWithFormat:@"startRecord=%ld", 1 + [self 
numberOfFetchedResults]]];
+    [query addObject:[NSString stringWithFormat:@"maximumRecords=%ld", 
MIN([self numberOfAvailableResults] - [self numberOfFetchedResults], 
MAX_RESULTS)]];
+    [components setPercentEncodedQuery:[query componentsJoinedByString:@"&"]];
+    return [components URL];
+}
+
 #pragma mark BDSKSearchGroupServer protocol
 
 - (NSString *)type { return BDSKSearchGroupSRU; }
@@ -104,7 +143,7 @@
 }
 
 - (void)retrieveWithSearchTerm:(NSString *)aSearchTerm {
-    if ([[[self baseComponents] URL] canConnect]) {
+    if ([[[self baseURLComponents] URL] canConnect]) {
         if ([[self searchTerm] isEqualToString:aSearchTerm] == NO || 
needsReset) {
             [self setSearchTerm:aSearchTerm];
             [self resetSearch];
@@ -137,59 +176,6 @@
 
 - (NSFormatter *)searchStringFormatter { return nil; }
 
-#pragma mark URLs
-
-static inline NSString *escapeHost(NSString *string) {
-    return [string 
stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet 
URLHostAllowedCharacterSet]];
-}
-
-static NSString *escapeDatabase(NSString *string) {
-    static NSCharacterSet *URLDatabaseOrNameAllowedCharacterSet = nil;
-    if (URLDatabaseOrNameAllowedCharacterSet == nil) {
-        NSMutableCharacterSet *tmpSet = [[NSCharacterSet 
URLPathAllowedCharacterSet] mutableCopy];
-        [tmpSet removeCharactersInString:@"/"];
-        URLDatabaseOrNameAllowedCharacterSet = [tmpSet copy];
-    }
-    return [string 
stringByAddingPercentEncodingWithAllowedCharacters:URLDatabaseOrNameAllowedCharacterSet];
-}
-
-- (NSURLComponents *)baseComponents {
-    NSString *host = [[self serverInfo] host];
-    NSInteger port = [[[self serverInfo] port] integerValue];
-    NSString *database = [[self serverInfo] database];
-    NSURLComponents *components = [[NSURLComponents alloc] init];
-    [components setScheme:@"http"];
-    [components setPercentEncodedHost:escapeHost(host)];
-    if (port > 0)
-        [components setPort:[NSNumber numberWithInteger:port]];
-    [components setPercentEncodedPath:[@"/" 
stringByAppendingString:escapeDatabase(database)]];
-    return components;
-}
-
-- (NSURL *)searchURL {
-    NSURLComponents *components = [self baseComponents];
-    NSMutableArray *query = [NSMutableArray array];
-    NSString *version = [[[self serverInfo] options] objectForKey:@"version"] 
?: @"1.1";
-    [query addObject:[@"version=" stringByAppendingString:version]];
-    [query addObject:@"operation=searchRetrieve"];
-    [query addObject:[@"query=" stringByAppendingString:[[self searchTerm] 
stringByAddingPercentEscapesForQueryTerm]]];
-    [components setPercentEncodedQuery:[query componentsJoinedByString:@"&"]];
-    return [components URL];
-}
-
-- (NSURL *)fetchURL {
-    NSURLComponents *components = [self baseComponents];
-    NSMutableArray *query = [NSMutableArray array];
-    NSString *version = [[[self serverInfo] options] objectForKey:@"version"] 
?: @"1.1";
-    [query addObject:[@"version=" stringByAppendingString:version]];
-    [query addObject:@"operation=searchRetrieve"];
-    [query addObject:[@"query=%@" stringByAppendingString:[[self searchTerm] 
stringByAddingPercentEscapesForQueryTerm]]];
-    [query addObject:[NSString stringWithFormat:@"startRecord=%ld", 1 + [self 
numberOfFetchedResults]]];
-    [query addObject:[NSString stringWithFormat:@"maximumRecords=%ld", 
MIN([self numberOfAvailableResults] - [self numberOfFetchedResults], 
MAX_RESULTS)]];
-    [components setPercentEncodedQuery:[query componentsJoinedByString:@"&"]];
-    return [components URL];
-}
-
 #pragma mark Search methods
 
 - (void)resetSearch {
@@ -285,8 +271,16 @@
         {
             
             NSString *string = [[NSString alloc] initWithData:data 
encoding:NSUTF8StringEncoding];
-            NSArray *pubs = [BDSKMARCParser itemsFromString:string 
error:&presentableError];
+            NSArray *pubs = nil;
             
+            if ([BDSKMARCParser canParseString:string]) {
+                pubs = [BDSKMARCParser itemsFromString:string 
error:&presentableError];
+            } else {
+                BDSKStringType stringType = [string contentStringType];
+                if (stringType != BDSKStringTypeUnknown)
+                    pubs = [BDSKStringParser itemsFromString:string 
ofType:stringType error:&presentableError];
+            }
+            
             // the number of returned results is not always equal to what we 
requested
             // fetchedResults should track the requests to get the correct 
offset
             fetchedResults += requestedResults;
@@ -293,7 +287,7 @@
             
             if (nil == pubs) {
                 failedDownload = YES;
-                [self setErrorMessage:[presentableError localizedDescription]];
+                [self setErrorMessage:[presentableError localizedDescription] 
?: NSLocalizedString(@"Could not retrieve results", @"")];
                 // set before addPublications:
                 downloadState = BDSKIdleState;
                 [group addPublications:nil];

Modified: trunk/bibdesk/BDSKServerInfo.m
===================================================================
--- trunk/bibdesk/BDSKServerInfo.m      2025-04-25 22:25:32 UTC (rev 29198)
+++ trunk/bibdesk/BDSKServerInfo.m      2025-04-26 13:51:48 UTC (rev 29199)
@@ -334,14 +334,18 @@
     return [string 
stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet 
URLHostAllowedCharacterSet]];
 }
 
-static NSString *escapeDatabaseOrName(NSString *string) {
-    static NSCharacterSet *URLDatabaseOrNameAllowedCharacterSet = nil;
-    if (URLDatabaseOrNameAllowedCharacterSet == nil) {
+static NSString *escapeDatabase(NSString *string) {
+    return [string 
stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet 
URLPathAllowedCharacterSet]];
+}
+
+static NSString *escapeName(NSString *string) {
+    static NSCharacterSet *URLNameAllowedCharacterSet = nil;
+    if (URLNameAllowedCharacterSet == nil) {
         NSMutableCharacterSet *tmpSet = [[NSCharacterSet 
URLPathAllowedCharacterSet] mutableCopy];
         [tmpSet removeCharactersInString:@"/"];
-        URLDatabaseOrNameAllowedCharacterSet = [tmpSet copy];
+        URLNameAllowedCharacterSet = [tmpSet copy];
     }
-    return [string 
stringByAddingPercentEncodingWithAllowedCharacters:URLDatabaseOrNameAllowedCharacterSet];
+    return [string 
stringByAddingPercentEncodingWithAllowedCharacters:URLNameAllowedCharacterSet];
 }
 
 - (NSURL *)URLValue {
@@ -357,7 +361,7 @@
     } else {
         [components setPercentEncodedHost:[self type]];
     }
-    [components setPercentEncodedPath:[NSString stringWithFormat:@"/%@;%@", 
escapeDatabaseOrName([self database]), escapeDatabaseOrName([self name])]];
+    [components setPercentEncodedPath:[NSString stringWithFormat:@"/%@;%@", 
escapeDatabase([self database]), escapeName([self name])]];
     if ([self isZoom]) {
         NSMutableArray *query = [NSMutableArray array];
         [options enumerateKeysAndObjectsUsingBlock:^(NSString *key, NSString 
*value, BOOL *stop){

Modified: trunk/bibdesk/Bibdesk.xcodeproj/project.pbxproj
===================================================================
--- trunk/bibdesk/Bibdesk.xcodeproj/project.pbxproj     2025-04-25 22:25:32 UTC 
(rev 29198)
+++ trunk/bibdesk/Bibdesk.xcodeproj/project.pbxproj     2025-04-26 13:51:48 UTC 
(rev 29199)
@@ -1547,8 +1547,8 @@
                CE3B682709D1B0190017D339 /* BDSKImagePopUpButton.m */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path 
= BDSKImagePopUpButton.m; sourceTree = "<group>"; };
                CE3B682809D1B0190017D339 /* BDSKImagePopUpButtonCell.h */ = 
{isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; 
path = BDSKImagePopUpButtonCell.h; sourceTree = "<group>"; };
                CE3B682909D1B0190017D339 /* BDSKImagePopUpButtonCell.m */ = 
{isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = 
sourcecode.c.objc; path = BDSKImagePopUpButtonCell.m; sourceTree = "<group>"; };
-               CE3D27C62DBB85AA002EA644 /* BDSKSRUGroupServer.h */ = {isa = 
PBXFileReference; lastKnownFileType = sourcecode.c.h; path = 
BDSKSRUGroupServer.h; sourceTree = "<group>"; };
-               CE3D27C72DBB85AA002EA644 /* BDSKSRUGroupServer.m */ = {isa = 
PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = 
BDSKSRUGroupServer.m; sourceTree = "<group>"; };
+               CE3D27C62DBB85AA002EA644 /* BDSKSRUGroupServer.h */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = 
BDSKSRUGroupServer.h; sourceTree = "<group>"; };
+               CE3D27C72DBB85AA002EA644 /* BDSKSRUGroupServer.m */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path 
= BDSKSRUGroupServer.m; sourceTree = "<group>"; };
                CE3D8DA0125E69BB00AE0232 /* de */ = {isa = PBXFileReference; 
fileEncoding = 10; lastKnownFileType = text.plist.strings; name = de; path = 
de.lproj/BibTeXKeys.strings; sourceTree = "<group>"; };
                CE3D8DA5125E69BB00AE0232 /* de */ = {isa = PBXFileReference; 
lastKnownFileType = text.rtf; name = de; path = de.lproj/Credits.rtf; 
sourceTree = "<group>"; };
                CE3D8DA9125E69BB00AE0232 /* de */ = {isa = PBXFileReference; 
fileEncoding = 10; lastKnownFileType = text.plist.strings; name = de; path = 
de.lproj/InfoPlist.strings; sourceTree = "<group>"; };
@@ -3175,7 +3175,6 @@
                                F94DB0F70B3E2FA1006F37A2 /* BDSKSearchGroup.m 
*/,
                                F92EF32109E6242100A244D0 /* BDSKSharedGroup.m 
*/,
                                CEFDBDBC0AEA86BA009EE99D /* BDSKSmartGroup.m */,
-                               CE3D27C62DBB85AA002EA644 /* 
BDSKSRUGroupServer.h */,
                                CE3D27C72DBB85AA002EA644 /* 
BDSKSRUGroupServer.m */,
                                CEFDBDC40AEA86F0009EE99D /* BDSKStaticGroup.m 
*/,
                                F9F5ECD00AE5E7C8007EBB31 /* BDSKURLGroup.m */,
@@ -3479,6 +3478,7 @@
                                CE83E3A30D294EE300BB7AD8 /* BDSKSortCommand.h 
*/,
                                CE62E0910F4C46D600BDF01E /* BDSKSplitView.h */,
                                CD62952F1140DDDA002E4751 /* 
BDSKSpringerParser.h */,
+                               CE3D27C62DBB85AA002EA644 /* 
BDSKSRUGroupServer.h */,
                                CEFDBDC30AEA86F0009EE99D /* BDSKStaticGroup.h 
*/,
                                CE30FAD50919713100CB1A19 /* BDSKStatusBar.h */,
                                CEF5460D0F56BDDB008A630F /* 
BDSKStringArrayFormatter.h */,

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