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