Revision: 29556
          http://sourceforge.net/p/bibdesk/svn/29556
Author:   hofman
Date:     2025-09-08 15:32:17 +0000 (Mon, 08 Sep 2025)
Log Message:
-----------
support encoded suggested filename from content-disposition header

Modified Paths:
--------------
    trunk/bibdesk/BDSKDownloadManager.m
    trunk/bibdesk/BDSKDownloader.m

Modified: trunk/bibdesk/BDSKDownloadManager.m
===================================================================
--- trunk/bibdesk/BDSKDownloadManager.m 2025-09-08 15:01:11 UTC (rev 29555)
+++ trunk/bibdesk/BDSKDownloadManager.m 2025-09-08 15:32:17 UTC (rev 29556)
@@ -363,7 +363,11 @@
     NSString *filename = [[webDownload response] suggestedFilename];
     
     NSString *disposition = [[download request] 
valueForHTTPHeaderField:@"Content-Disposition"];
-    if ([disposition hasPrefix:@"attachment; filename="]) {
+    if ([disposition hasPrefix:@"attachment; filename*=UTF-8''"]) {
+        disposition = [disposition substringFromIndex:29];
+        if ([disposition length])
+            filename = [disposition stringByRemovingPercentEncoding];
+    } else if ([disposition hasPrefix:@"attachment; filename="]) {
         disposition = [disposition substringFromIndex:21];
         if ([disposition hasPrefix:@"\""] && [disposition hasSuffix:@"\""])
             disposition = [disposition substringWithRange:NSMakeRange(1, 
[disposition length] - 2)];

Modified: trunk/bibdesk/BDSKDownloader.m
===================================================================
--- trunk/bibdesk/BDSKDownloader.m      2025-09-08 15:01:11 UTC (rev 29555)
+++ trunk/bibdesk/BDSKDownloader.m      2025-09-08 15:32:17 UTC (rev 29556)
@@ -155,18 +155,22 @@
 
 - (void)URLSession:(NSURLSession *)aSession 
downloadTask:(NSURLSessionDownloadTask *)task didFinishDownloadingToURL:(NSURL 
*)location {
     BDSKDownload *download = [self downloadForTask:task];
-    NSString *suggestedFileName = [[task response] suggestedFilename] ?: 
[location lastPathComponent];
+    NSString *filename = [[task response] suggestedFilename] ?: [location 
lastPathComponent];
     
     NSString *disposition = [[task originalRequest] 
valueForHTTPHeaderField:@"Content-Disposition"];
-    if ([disposition hasPrefix:@"attachment; filename="]) {
+    if ([disposition hasPrefix:@"attachment; filename*=UTF-8''"]) {
+        disposition = [disposition substringFromIndex:29];
+        if ([disposition length])
+            filename = [disposition stringByRemovingPercentEncoding];
+    } else if ([disposition hasPrefix:@"attachment; filename="]) {
         disposition = [disposition substringFromIndex:21];
         if ([disposition hasPrefix:@"\""] && [disposition hasSuffix:@"\""])
             disposition = [disposition substringWithRange:NSMakeRange(1, 
[disposition length] - 2)];
         if ([disposition length])
-            suggestedFileName = disposition;
+            filename = disposition;
     }
     
-    [download _decideDestinationWithSuggestedFilename:suggestedFileName 
completionHandler:^(NSURL *destinationURL){
+    [download _decideDestinationWithSuggestedFilename:filename 
completionHandler:^(NSURL *destinationURL){
         if (destinationURL == nil) {
             NSError *error = [NSError errorWithDomain:NSURLErrorDomain 
code:NSURLErrorCancelled userInfo:nil];
             [download _didCompleteWithError:error];

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