Revision: 13538
          http://sourceforge.net/p/skim-app/code/13538
Author:   hofman
Date:     2023-07-26 16:13:53 +0000 (Wed, 26 Jul 2023)
Log Message:
-----------
remove dvi/xdv/ps/eps doument type from readableTypes when not supported by 
conversion controller

Modified Paths:
--------------
    trunk/SKConversionProgressController.h
    trunk/SKConversionProgressController.m
    trunk/SKMainDocument.m

Modified: trunk/SKConversionProgressController.h
===================================================================
--- trunk/SKConversionProgressController.h      2023-07-26 09:16:05 UTC (rev 
13537)
+++ trunk/SKConversionProgressController.h      2023-07-26 16:13:53 UTC (rev 
13538)
@@ -59,6 +59,8 @@
 + (NSData *)newPDFDataFromURL:(NSURL *)aURL ofType:(NSString *)aFileType 
error:(NSError **)outError;
 + (NSData *)newPDFDataWithPostScriptData:(NSData *)psData error:(NSError 
**)outError;
 
++ (NSString *)toolPathForType:(NSString *)aFileType;
+
 - (IBAction)cancel:(id)sender;
 - (IBAction)close:(id)sender;
 

Modified: trunk/SKConversionProgressController.m
===================================================================
--- trunk/SKConversionProgressController.m      2023-07-26 09:16:05 UTC (rev 
13537)
+++ trunk/SKConversionProgressController.m      2023-07-26 16:13:53 UTC (rev 
13538)
@@ -201,7 +201,7 @@
     
 }
 
-static NSString *createToolPathForCommand(NSString *defaultKey, NSArray 
*supportedTools) {
+static NSString *toolPathForCommand(NSString *defaultKey, NSArray 
*supportedTools) {
     NSString *commandPath = [[NSUserDefaults standardUserDefaults] 
stringForKey:defaultKey];
     NSString *commandName = [commandPath lastPathComponent];
     NSArray *paths = @[@"/Library/TeX/texbin", @"/usr/texbin", @"/sw/bin", 
@"/opt/local/bin", @"/usr/local/bin"];
@@ -222,9 +222,29 @@
         }
     } while (commandPath == nil && (commandName = [toolEnum nextObject]));
     
-    return [commandPath retain];
+    return commandPath;
 }
 
++ (NSString *)toolPathForType:(NSString *)fileType {
+    static NSMutableDictionary *toolPaths = nil;
+    NSString *toolPath = [toolPaths objectForKey:fileType];
+    if (toolPath == nil) {
+        NSWorkspace *ws = [NSWorkspace sharedWorkspace];
+        if ([ws type:fileType conformsToType:SKDVIDocumentType])
+            toolPath = toolPathForCommand(SKDviConversionCommandKey, 
RUNNING_AFTER(13_0) ? @[@"dvipdfmx", @"dvipdfm", @"dvipdf"] : @[@"dvipdfmx", 
@"dvipdfm", @"dvipdf", @"dvips"]);
+        else if ([ws type:fileType conformsToType:SKXDVDocumentType])
+            toolPath = toolPathForCommand(SKXdvConversionCommandKey, 
@[@"xdvipdfmx", @"dvipdfmx", @"xdv2pdf"]);
+        else if ([ws type:fileType conformsToType:SKPostScriptDocumentType])
+            toolPath = toolPathForCommand(SKPSConversionCommandKey, 
@[@"ps2pdf", @"ps2pdf12", @"ps2pdf13", @"ps2pdf14", @"pstopdf"]);
+        if (toolPath) {
+            if (toolPaths == nil)
+                toolPaths = [[NSMutableDictionary alloc] init];
+            [toolPaths setObject:toolPath forKey:fileType];
+        }
+    }
+    return toolPath;
+}
+
 - (void)taskFinished:(NSNotification *)notification {
     BOOL success = [[notification object] terminationStatus] == 0 &&
                    [outputFileURL checkResourceIsReachableAndReturnError:NULL] 
&&
@@ -255,23 +275,7 @@
     
     if (RUNNING_AFTER(13_0) || [ws type:fileType 
conformsToType:SKPostScriptDocumentType] == NO) {
         
-        NSString *toolPath = nil;
-        if ([ws type:fileType conformsToType:SKDVIDocumentType]) {
-            static NSString *dviToolPath = nil;
-            if (dviToolPath == nil)
-                dviToolPath = 
createToolPathForCommand(SKDviConversionCommandKey, RUNNING_AFTER(13_0) ? 
@[@"dvipdfmx", @"dvipdfm", @"dvipdf"] : @[@"dvipdfmx", @"dvipdfm", @"dvipdf", 
@"dvips"]);
-            toolPath = dviToolPath;
-        } else if ([ws type:fileType conformsToType:SKXDVDocumentType]) {
-            static NSString *xdvToolPath = nil;
-            if (xdvToolPath == nil)
-                xdvToolPath = 
createToolPathForCommand(SKXdvConversionCommandKey, @[@"xdvipdfmx", 
@"dvipdfmx", @"xdv2pdf"]);
-            toolPath = xdvToolPath;
-        } else if ([ws type:fileType conformsToType:SKPostScriptDocumentType]) 
{
-            static NSString *psToolPath = nil;
-            if (psToolPath == nil)
-                psToolPath = 
createToolPathForCommand(SKPSConversionCommandKey, @[@"ps2pdf", @"ps2pdf12", 
@"ps2pdf13", @"ps2pdf14", @"pstopdf"]);
-            toolPath = psToolPath;
-        }
+        NSString *toolPath = [[self class] toolPathForType:fileType];
         if (toolPath) {
             NSString *commandName = [toolPath lastPathComponent];
             NSURL *tmpDirURL = [[NSFileManager defaultManager] 
URLForDirectory:NSItemReplacementDirectory inDomain:NSUserDomainMask 
appropriateForURL:aURL create:YES error:NULL];

Modified: trunk/SKMainDocument.m
===================================================================
--- trunk/SKMainDocument.m      2023-07-26 09:16:05 UTC (rev 13537)
+++ trunk/SKMainDocument.m      2023-07-26 16:13:53 UTC (rev 13538)
@@ -783,6 +783,23 @@
 
 #pragma mark Reading
 
++ (NSArray *)readableTypes {
+    static NSArray *readableTypes = nil;
+    if (readableTypes == nil) {
+        NSMutableArray *tmpTypes = [[super readableTypes] mutableCopy];
+        if ([SKConversionProgressController toolPathForType:SKDVIDocumentType] 
== nil)
+            [tmpTypes removeObject:SKDVIDocumentType];
+        if ([SKConversionProgressController toolPathForType:SKXDVDocumentType] 
== nil)
+            [tmpTypes removeObject:SKXDVDocumentType];
+        if (RUNNING_AFTER(13_0) && [SKConversionProgressController 
toolPathForType:SKPostScriptDocumentType] == nil) {
+            [tmpTypes removeObject:SKPostScriptDocumentType];
+            [tmpTypes removeObject:SKEncapsulatedPostScriptDocumentType];
+        }
+        readableTypes = tmpTypes;
+    }
+    return readableTypes;
+}
+
 - (void)setPDFData:(NSData *)data {
     if (pdfData != data) {
         [pdfData release];

This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.



_______________________________________________
Skim-app-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/skim-app-commit

Reply via email to