Revision: 15684
          http://sourceforge.net/p/skim-app/code/15684
Author:   hofman
Date:     2025-10-07 14:48:18 +0000 (Tue, 07 Oct 2025)
Log Message:
-----------
Add a share script command

Modified Paths:
--------------
    trunk/NSDocument_SKExtensions.h
    trunk/NSDocument_SKExtensions.m
    trunk/SKMainDocument.m
    trunk/Skim.sdef

Modified: trunk/NSDocument_SKExtensions.h
===================================================================
--- trunk/NSDocument_SKExtensions.h     2025-10-04 15:48:35 UTC (rev 15683)
+++ trunk/NSDocument_SKExtensions.h     2025-10-07 14:48:18 UTC (rev 15684)
@@ -138,6 +138,7 @@
 - (void)handleShowTeXScriptCommand:(NSScriptCommand *)command;
 - (void)handleConvertNotesScriptCommand:(NSScriptCommand *)command;
 - (void)handleReadNotesScriptCommand:(NSScriptCommand *)command;
+- (void)handleShareScriptCommand:(NSScriptCommand *)command;
 
 @end
 

Modified: trunk/NSDocument_SKExtensions.m
===================================================================
--- trunk/NSDocument_SKExtensions.m     2025-10-04 15:48:35 UTC (rev 15683)
+++ trunk/NSDocument_SKExtensions.m     2025-10-07 14:48:18 UTC (rev 15684)
@@ -429,4 +429,29 @@
     [command setScriptErrorString:@"Notes document does not understand the 
'read notes' command."];
 }
 
+- (void)handleShareScriptCommand:(NSScriptCommand *)command {
+    NSString *name = [[command evaluatedArguments] objectForKey:@"Service"];
+    if (name == nil) {
+        [command setScriptErrorNumber:NSRequiredArgumentsMissingScriptError];
+        return;
+    }
+    
+    NSURL *fileURL = [self fileURL];
+    if (fileURL == nil) {
+        NSBeep();
+        return;
+    }
+    
+    NSArray *services = [NSSharingService sharingServicesForItems:@[fileURL]];
+    NSUInteger i = [[services valueForKey:@"name"] indexOfObject:name];
+    if (i == NSNotFound) {
+        NSBeep();
+        return;
+    }
+    
+    NSSharingService *service = [services objectAtIndex:i];
+    [service setSubject:[self displayName]];
+    [service performWithItems:@[fileURL]];
+}
+
 @end

Modified: trunk/SKMainDocument.m
===================================================================
--- trunk/SKMainDocument.m      2025-10-04 15:48:35 UTC (rev 15683)
+++ trunk/SKMainDocument.m      2025-10-07 14:48:18 UTC (rev 15684)
@@ -2189,4 +2189,78 @@
     }
 }
 
+- (void)handleShareScriptCommand:(NSScriptCommand *)command {
+    NSString *name = [[command evaluatedArguments] objectForKey:@"Service"];
+    if (name == nil) {
+        [command setScriptErrorNumber:NSRequiredArgumentsMissingScriptError];
+        return;
+    }
+    
+    NSURL *fileURL = [self fileURL];
+    if (fileURL == nil) {
+        NSBeep();
+        return;
+    }
+    
+    NSArray *services = [NSSharingService sharingServicesForItems:@[fileURL]];
+    NSUInteger i = [[services valueForKey:@"name"] indexOfObject:name];
+    if (i == NSNotFound) {
+        NSBeep();
+        return;
+    }
+    
+    NSSharingService *service = [services objectAtIndex:i];
+    BOOL shouldArchive = ([self hasNotes] || [[self presentationOptions] 
count] > 0);
+    
+    NSString *typeName = [self fileType];
+    if (shouldArchive == NO && [typeName 
isEqualToString:SKDocumentTypePDFBundle])
+        typeName = SKDocumentTypePDF;
+    
+    NSString *typeExt = [self fileNameExtensionForType:typeName 
saveOperation:NSAutosaveElsewhereOperation];
+    NSString *targetExt = shouldArchive ? @"tgz" : typeExt;
+    NSString *targetFileName = [fileURL 
lastPathComponentReplacingPathExtension:targetExt];
+    if (targetFileName == nil)
+        targetFileName = [[self displayName] 
stringByAppendingPathExtension:targetExt];
+    
+    NSURL *targetDirURL = [[NSFileManager defaultManager] 
uniqueChewableItemsDirectoryURL];
+    NSURL *targetFileURL = [targetDirURL 
URLByAppendingPathComponent:targetFileName isDirectory:NO];
+    NSURL *tmpURL = nil;
+    fileURL = targetFileURL;
+    
+    if (shouldArchive) {
+        tmpURL = [[NSFileManager defaultManager] 
URLForDirectory:NSItemReplacementDirectory inDomain:NSUserDomainMask 
appropriateForURL:targetFileURL create:YES error:NULL];
+        fileURL = [[tmpURL URLByAppendingPathComponent:targetFileName 
isDirectory:NO] URLReplacingPathExtension:typeExt];
+    }
+    
+    if ([self writeSafelyToURL:fileURL ofType:typeName 
forSaveOperation:NSAutosaveElsewhereOperation error:NULL] == NO) {
+        NSBeep();
+        return;
+    }
+    
+    if (shouldArchive) {
+        NSTask *task = [self taskForWritingArchiveAtURL:targetFileURL 
fromURL:fileURL];
+        [service setSubject:[self displayName]];
+        
+        [SKFileShare shareURL:targetFileURL
+               preparedByTask:task
+                 usingService:service
+            completionHandler:^(BOOL success){
+                NSFileManager *fm = [NSFileManager defaultManager];
+                [fm removeItemAtURL:tmpURL error:NULL];
+                if (success == NO) {
+                    [fm removeItemAtURL:targetDirURL error:NULL];
+                    NSBeep();
+                }
+            }];
+    } else {
+        NSArray *items = @[targetFileURL];
+        if ([service canPerformWithItems:items]) {
+            [service setSubject:[self displayName]];
+            [service performWithItems:items];
+        } else {
+            [[NSFileManager defaultManager] removeItemAtURL:targetDirURL 
error:NULL];
+        }
+    }
+}
+
 @end

Modified: trunk/Skim.sdef
===================================================================
--- trunk/Skim.sdef     2025-10-04 15:48:35 UTC (rev 15683)
+++ trunk/Skim.sdef     2025-10-07 14:48:18 UTC (rev 15684)
@@ -603,6 +603,16 @@
             </parameter>
         </command>
 
+        <command name="share" code="SKIMShar"
+            description="Share a document using a service.">
+            <direct-parameter type="document"
+                description="The document to share."/>
+            <parameter name="using" code="Usng" type="text"
+                description="The name of the service to use.">
+                <cocoa key="Service"/>
+            </parameter>
+        </command>
+
         <class-extension extends="item" hidden="yes"
             description="A scriptable object.">
             <cocoa class="NSObject"/>
@@ -763,6 +773,9 @@
             <responds-to name="edit">
                 <cocoa method="handleEditScriptCommand:"/>
             </responds-to>
+            <responds-to name="share">
+                <cocoa method="handleShareScriptCommand:"/>
+            </responds-to>
         </class-extension>
 
         <class-extension extends="window"

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