Revision: 7776
http://skim-app.svn.sourceforge.net/skim-app/?rev=7776&view=rev
Author: hofman
Date: 2012-11-03 23:35:53 +0000 (Sat, 03 Nov 2012)
Log Message:
-----------
Run archiving tasks async, pass emailing to separate object waiting for the
task to terminate
Modified Paths:
--------------
trunk/SKMainDocument.m
trunk/Skim.xcodeproj/project.pbxproj
Added Paths:
-----------
trunk/SKAttachmentEmailer.h
trunk/SKAttachmentEmailer.m
Added: trunk/SKAttachmentEmailer.h
===================================================================
--- trunk/SKAttachmentEmailer.h (rev 0)
+++ trunk/SKAttachmentEmailer.h 2012-11-03 23:35:53 UTC (rev 7776)
@@ -0,0 +1,56 @@
+//
+// SKAttachmentEmailer.h
+// Skim
+//
+// Created by Christiaan Hofman on 11/4/12.
+/*
+ This software is Copyright (c) 2012
+ Christiaan Hofman. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+
+ - Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ - Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+
+ - Neither the name of Christiaan Hofman nor the names of any
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import <Cocoa/Cocoa.h>
+
+
+@interface SKAttachmentEmailer : NSObject {
+ NSURL *fileURL;
+ NSString *subject;
+}
+
++ (id)attachmentEmailerWithFileURL:(NSURL *)aURL subject:(NSString *)aSubject
waitingForTask:(NSTask *)task;
+
+@property (nonatomic, retain) NSURL *fileURL;
+@property (nonatomic, retain) NSString *subject;
+
+- (void)emailAttachmentFile;
+
+- (void)waitForTaskTermination:(NSTask *)task;
+
+@end
Added: trunk/SKAttachmentEmailer.m
===================================================================
--- trunk/SKAttachmentEmailer.m (rev 0)
+++ trunk/SKAttachmentEmailer.m 2012-11-03 23:35:53 UTC (rev 7776)
@@ -0,0 +1,139 @@
+//
+// SKAttachmentEmailer.m
+// Skim
+//
+// Created by Christiaan Hofman on 11/4/12.
+/*
+ This software is Copyright (c) 2012
+ Christiaan Hofman. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+
+ - Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ - Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+
+ - Neither the name of Christiaan Hofman nor the names of any
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import "SKAttachmentEmailer.h"
+#import "NSString_SKExtensions.h"
+#import "NSFileManager_SKExtensions.h"
+
+
+@implementation SKAttachmentEmailer
+
+@synthesize fileURL, subject;
+
++ (id)attachmentEmailerWithFileURL:(NSURL *)aURL subject:(NSString *)aSubject
waitingForTask:(NSTask *)task {
+ id attachmentEmailer = [[[self alloc] init] autorelease];
+ [attachmentEmailer setFileURL:aURL];
+ [attachmentEmailer setSubject:aSubject];
+ [attachmentEmailer waitForTaskTermination:task];
+ return attachmentEmailer;
+}
+
+- (void)dealloc {
+ SKDESTROY(fileURL);
+ SKDESTROY(subject);
+ [super dealloc];
+}
+
+- (void)emailAttachmentFile {
+ NSString *scriptFormat = nil;
+ NSString *mailAppID = [(NSString
*)LSCopyDefaultHandlerForURLScheme(CFSTR("mailto")) autorelease];
+
+ if ([@"com.microsoft.entourage" isCaseInsensitiveEqual:mailAppID]) {
+ scriptFormat = @"tell application \"Microsoft Entourage\"\n"
+ @"activate\n"
+ @"set m to make new draft window with properties
{subject:\"%@\", visible:true}\n"
+ @"tell m\n"
+ @"make new attachment with properties {file:POSIX file
\"%@\"}\n"
+ @"end tell\n"
+ @"end tell\n";
+ } else if ([@"com.microsoft.outlook" isCaseInsensitiveEqual:mailAppID]) {
+ scriptFormat = @"tell application \"Microsoft Outlook\"\n"
+ @"activate\n"
+ @"set m to make new draft window with properties
{subject:\"%@\", visible:true}\n"
+ @"tell m\n"
+ @"make new attachment with properties {file:POSIX file
\"%@\"}\n"
+ @"end tell\n"
+ @"end tell\n";
+ } else if ([@"com.barebones.mailsmith" isCaseInsensitiveEqual:mailAppID]) {
+ scriptFormat = @"tell application \"Mailsmith\"\n"
+ @"activate\n"
+ @"set m to make new message window with properties
{subject:\"%@\", visible:true}\n"
+ @"tell m\n"
+ @"make new enclosure with properties {file:POSIX file
\"%@\"}\n"
+ @"end tell\n"
+ @"end tell\n";
+ } else if ([@"com.mailplaneapp.Mailplane"
isCaseInsensitiveEqual:mailAppID]) {
+ scriptFormat = @"tell application \"Mailplane\"\n"
+ @"activate\n"
+ @"set m to make new outgoing message with properties
{subject:\"%@\", visible:true}\n"
+ @"tell m\n"
+ @"make new mail attachment with properties
{path:\"%@\"}\n"
+ @"end tell\n"
+ @"end tell\n";
+ } else if ([@"com.postbox-inc.postboxexpress"
isCaseInsensitiveEqual:mailAppID]) {
+ scriptFormat = @"tell application \"PostboxExpress\"\n"
+ @"activate\n"
+ @"send message subject \"%@\" attachment \"%@\"\n"
+ @"end tell\n";
+ } else if ([@"com.postbox-inc.postbox" isCaseInsensitiveEqual:mailAppID]) {
+ scriptFormat = @"tell application \"Postbox\"\n"
+ @"activate\n"
+ @"send message subject \"%@\" attachment \"%@\"\n"
+ @"end tell\n";
+ } else {
+ scriptFormat = @"tell application \"Mail\"\n"
+ @"activate\n"
+ @"set m to make new outgoing message with properties
{subject:\"%@\", visible:true}\n"
+ @"tell content of m\n"
+ @"make new attachment at after last character with
properties {file name:\"%@\"}\n"
+ @"end tell\n"
+ @"end tell\n";
+ }
+
+
+ NSString *scriptString = [NSString stringWithFormat:scriptFormat, subject,
[fileURL path]];
+ NSAppleScript *script = [[[NSAppleScript alloc]
initWithSource:scriptString] autorelease];
+ NSDictionary *errorDict = nil;
+ if ([script compileAndReturnError:&errorDict] == NO)
+ NSLog(@"Error compiling mail to script: %@", errorDict);
+ else if ([script executeAndReturnError:&errorDict] == NO)
+ NSLog(@"Error running mail to script: %@", errorDict);
+}
+
+- (void)taskFinished:(NSNotification *)notification {
+ if ([[NSFileManager defaultManager] fileExistsAtURL:fileURL] == NO)
+ [self emailAttachmentFile];
+ [self autorelease];
+}
+
+- (void)waitForTaskTermination:(NSTask *)task {
+ [self retain];
+ [[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(taskFinished:) name:NSTaskDidTerminateNotification
object:task];
+}
+
+@end
Modified: trunk/SKMainDocument.m
===================================================================
--- trunk/SKMainDocument.m 2012-11-02 23:01:09 UTC (rev 7775)
+++ trunk/SKMainDocument.m 2012-11-03 23:35:53 UTC (rev 7776)
@@ -89,6 +89,7 @@
#import "SKTemporaryData.h"
#import "SKTemplateManager.h"
#import "SKExportAccessoryController.h"
+#import "SKAttachmentEmailer.h"
#define BUNDLE_DATA_FILENAME @"data"
#define PRESENTATION_OPTIONS_KEY
@"net_sourceforge_skim-app_presentation_options"
@@ -150,7 +151,6 @@
@end
-
@interface SKMainDocument (SKPrivate)
- (BOOL)tryToUnlockDocument:(PDFDocument *)document;
@@ -1131,10 +1131,16 @@
[alert beginSheetModalForWindow:[self windowForSheet] modalDelegate:self
didEndSelector:@selector(convertNotesSheetDidEnd:returnCode:contextInfo:)
contextInfo:NULL];
}
-- (BOOL)saveArchiveToURL:(NSURL *)fileURL {
- return [NSTask runTaskWithLaunchPath:@"/usr/bin/tar"
- arguments:[NSArray arrayWithObjects:@"-czf",
[fileURL path], [[self fileURL] lastPathComponent], nil]
- currentDirectoryPath:[[[self fileURL] path]
stringByDeletingLastPathComponent]];
+- (void)saveArchiveToURL:(NSURL *)fileURL email:(BOOL)email {
+ NSTask *task = [[[NSTask alloc] init] autorelease];
+ [task setLaunchPath:@"/usr/bin/tar"];
+ [task setArguments:[NSArray arrayWithObjects:@"-czf", [fileURL path],
[[self fileURL] lastPathComponent], nil]];
+ [task setCurrentDirectoryPath:[[[self fileURL]
URLByDeletingLastPathComponent] path]];
+
+ if (email)
+ [SKAttachmentEmailer attachmentEmailerWithFileURL:fileURL
subject:[self displayName] waitingForTask:task];
+
+ [task launch];
}
- (IBAction)saveArchive:(id)sender {
@@ -1146,7 +1152,7 @@
[sp setNameFieldStringValue:[fileURL
lastPathComponentReplacingPathExtension:@"tgz"]];
[sp beginSheetModalForWindow:[self windowForSheet]
completionHandler:^(NSInteger result){
if (NSFileHandlingPanelOKButton == result && [self fileURL])
- [self saveArchiveToURL:[sp URL]];
+ [self saveArchiveToURL:[sp URL] email:NO];
}];
} else {
NSAlert *alert = [NSAlert alertWithMessageText:NSLocalizedString(@"You
must save this file first", @"Alert text when trying to create archive for
unsaved document") defaultButton:nil alternateButton:nil otherButton:nil
informativeTextWithFormat:NSLocalizedString(@"The document has unsaved changes,
or has not previously been saved to disk.", @"Informative text in alert
dialog")];
@@ -1154,117 +1160,30 @@
}
}
-- (BOOL)emailAttachmentAtURL:(NSURL *)fileURL {
- NSString *scriptFormat = nil;
- NSString *mailAppID = [(NSString
*)LSCopyDefaultHandlerForURLScheme(CFSTR("mailto")) autorelease];
-
- if ([@"com.microsoft.entourage" isCaseInsensitiveEqual:mailAppID]) {
- scriptFormat = @"tell application \"Microsoft Entourage\"\n"
- @"activate\n"
- @"set m to make new draft window with properties
{subject:\"%@\", visible:true}\n"
- @"tell m\n"
- @"make new attachment with properties {file:POSIX file
\"%@\"}\n"
- @"end tell\n"
- @"end tell\n";
- } else if ([@"com.microsoft.outlook" isCaseInsensitiveEqual:mailAppID]) {
- scriptFormat = @"tell application \"Microsoft Outlook\"\n"
- @"activate\n"
- @"set m to make new draft window with properties
{subject:\"%@\", visible:true}\n"
- @"tell m\n"
- @"make new attachment with properties {file:POSIX file
\"%@\"}\n"
- @"end tell\n"
- @"end tell\n";
- } else if ([@"com.barebones.mailsmith" isCaseInsensitiveEqual:mailAppID]) {
- scriptFormat = @"tell application \"Mailsmith\"\n"
- @"activate\n"
- @"set m to make new message window with properties
{subject:\"%@\", visible:true}\n"
- @"tell m\n"
- @"make new enclosure with properties {file:POSIX file
\"%@\"}\n"
- @"end tell\n"
- @"end tell\n";
- } else if ([@"com.mailplaneapp.Mailplane"
isCaseInsensitiveEqual:mailAppID]) {
- scriptFormat = @"tell application \"Mailplane\"\n"
- @"activate\n"
- @"set m to make new outgoing message with properties
{subject:\"%@\", visible:true}\n"
- @"tell m\n"
- @"make new mail attachment with properties
{path:\"%@\"}\n"
- @"end tell\n"
- @"end tell\n";
- } else if ([@"com.postbox-inc.postboxexpress"
isCaseInsensitiveEqual:mailAppID]) {
- scriptFormat = @"tell application \"PostboxExpress\"\n"
- @"activate\n"
- @"send message subject \"%@\" attachment \"%@\"\n"
- @"end tell\n";
- } else if ([@"com.postbox-inc.postbox" isCaseInsensitiveEqual:mailAppID]) {
- scriptFormat = @"tell application \"Postbox\"\n"
- @"activate\n"
- @"send message subject \"%@\" attachment \"%@\"\n"
- @"end tell\n";
- } else {
- scriptFormat = @"tell application \"Mail\"\n"
- @"activate\n"
- @"set m to make new outgoing message with properties
{subject:\"%@\", visible:true}\n"
- @"tell content of m\n"
- @"make new attachment at after last character with
properties {file name:\"%@\"}\n"
- @"end tell\n"
- @"end tell\n";
- }
-
-
- NSString *scriptString = [NSString stringWithFormat:scriptFormat, [self
displayName], [fileURL path]];
- NSAppleScript *script = [[[NSAppleScript alloc]
initWithSource:scriptString] autorelease];
- NSDictionary *errorDict = nil;
- if ([script compileAndReturnError:&errorDict] == NO) {
- NSLog(@"Error compiling mail to script: %@", errorDict);
- return NO;
- }
- if ([script executeAndReturnError:&errorDict] == NO) {
- NSLog(@"Error running mail to script: %@", errorDict);
- return NO;
- }
- return YES;
-}
-
- (IBAction)emailArchive:(id)sender {
NSString *path = [[self fileURL] path];
if (path && [[NSFileManager defaultManager] fileExistsAtPath:path] &&
[self isDocumentEdited] == NO) {
NSURL *tmpDirURL = [[NSFileManager defaultManager]
uniqueChewableItemsDirectoryURL];
NSURL *tmpFileURL = [tmpDirURL URLByAppendingPathComponent:[[self
fileURL] lastPathComponentReplacingPathExtension:@"tgz"]];
- if ([self saveArchiveToURL:tmpFileURL] == NO || [self
emailAttachmentAtURL:tmpFileURL] == NO)
- NSBeep();
+ [self saveArchiveToURL:tmpFileURL email:YES];
} else {
NSAlert *alert = [NSAlert alertWithMessageText:NSLocalizedString(@"You
must save this file first", @"Alert text when trying to create archive for
unsaved document") defaultButton:nil alternateButton:nil otherButton:nil
informativeTextWithFormat:NSLocalizedString(@"The document has unsaved changes,
or has not previously been saved to disk.", @"Informative text in alert
dialog")];
[alert beginSheetModalForWindow:[self windowForSheet]
modalDelegate:nil didEndSelector:NULL contextInfo:NULL];
}
}
-- (void)saveDiskImageWithInfo:(NSDictionary *)info {
+- (void)saveDiskImageToURL:(NSURL *)fileURL email:(BOOL)email {
+ NSTask *task = [[[NSTask alloc] init] autorelease];
+ [task setLaunchPath:@"/usr/bin/hdiutil"];
+ [task setArguments:[NSArray arrayWithObjects:@"create", @"-srcfolder",
[[self fileURL] path], @"-format", @"UDZO", @"-volname", [[fileURL
lastPathComponent] stringByDeletingPathExtension], [fileURL path], nil]];
+ [task setCurrentDirectoryPath:[[[self fileURL]
URLByDeletingLastPathComponent] path]];
- NSAutoreleasePool *pool = [NSAutoreleasePool new];
+ if (email)
+ [SKAttachmentEmailer attachmentEmailerWithFileURL:fileURL
subject:[self displayName] waitingForTask:task];
- NSURL *sourceURL = [[[info objectForKey:SOURCEURL_KEY] copy] autorelease];
- NSURL *targetURL = [[[info objectForKey:TARGETURL_KEY] copy] autorelease];
- NSArray *arguments = [NSArray arrayWithObjects:@"create", @"-srcfolder",
[sourceURL path], @"-format", @"UDZO", @"-volname", [[targetURL
lastPathComponent] stringByDeletingPathExtension], [targetURL path], nil];
-
- if ([NSTask runTaskWithLaunchPath:@"/usr/bin/hdiutil" arguments:arguments
currentDirectoryPath:[[sourceURL URLByDeletingLastPathComponent] path]] == NO)
- NSBeep();
-
- [[self progressController] performSelectorOnMainThread:@selector(hide)
withObject:nil waitUntilDone:NO];
-
- if ([[info objectForKey:EMAIL_KEY] boolValue])
- [self performSelectorOnMainThread:@selector(emailAttachmentAtURL:)
withObject:targetURL waitUntilDone:NO];
-
- [pool release];
+ [task launch];
}
-- (void)saveDiskImageToURL:(NSURL *)fileURL email:(BOOL)email {
- [[self progressController] setMessage:[NSLocalizedString(@"Saving Disk
Image", @"Message for progress sheet") stringByAppendingEllipsis]];
- [[self progressController] show];
-
- NSDictionary *info = [NSDictionary dictionaryWithObjectsAndKeys:[self
fileURL], SOURCEURL_KEY, fileURL, TARGETURL_KEY, [NSNumber
numberWithBool:email], EMAIL_KEY, nil];
- [NSThread detachNewThreadSelector:@selector(saveDiskImageWithInfo:)
toTarget:self withObject:info];
-}
-
- (IBAction)saveDiskImage:(id)sender {
NSURL *fileURL = [self fileURL];
if (fileURL && [[NSFileManager defaultManager] fileExistsAtURL:fileURL] &&
[self isDocumentEdited] == NO) {
Modified: trunk/Skim.xcodeproj/project.pbxproj
===================================================================
--- trunk/Skim.xcodeproj/project.pbxproj 2012-11-02 23:01:09 UTC (rev
7775)
+++ trunk/Skim.xcodeproj/project.pbxproj 2012-11-03 23:35:53 UTC (rev
7776)
@@ -156,6 +156,7 @@
CE4EBDDA0B7BF3B30091F228 /* SKSideWindow.m in Sources */ = {isa
= PBXBuildFile; fileRef = CE4EBDD90B7BF3B30091F228 /* SKSideWindow.m */; };
CE4EC88C0B7E6EDB0091F228 /* SKSplitView.m in Sources */ = {isa
= PBXBuildFile; fileRef = CE4EC88B0B7E6EDB0091F228 /* SKSplitView.m */; };
CE4F9DEE0BC1BE3A005BE0A1 /* Localizable.strings in Resources */
= {isa = PBXBuildFile; fileRef = CE4F9DEC0BC1BE3A005BE0A1 /*
Localizable.strings */; };
+ CE5347141645DD3000737191 /* SKAttachmentEmailer.m in Sources */
= {isa = PBXBuildFile; fileRef = CE5347131645DD3000737191 /*
SKAttachmentEmailer.m */; };
CE546FC40B32D5DB00F8AFB6 /* SKNoteWindowController.m in Sources
*/ = {isa = PBXBuildFile; fileRef = CE546FC30B32D5DB00F8AFB6 /*
SKNoteWindowController.m */; };
CE54898F0B35D50E00F8AFB6 /* SKInfoWindowController.m in Sources
*/ = {isa = PBXBuildFile; fileRef = CE54898E0B35D50E00F8AFB6 /*
SKInfoWindowController.m */; };
CE5BAF4410511A0F00161B87 /* PDFOutline_SKExtensions.m in
Sources */ = {isa = PBXBuildFile; fileRef = CE5BAF4310511A0F00161B87 /*
PDFOutline_SKExtensions.m */; };
@@ -817,6 +818,8 @@
CE4F96F70CFB4ACA00DBEA14 /* ru */ = {isa = PBXFileReference;
fileEncoding = 10; lastKnownFileType = text.plist.strings; name = ru; path =
ru.lproj/Localizable.strings; sourceTree = "<group>"; };
CE4F96FA0CFB4AD400DBEA14 /* ru */ = {isa = PBXFileReference;
fileEncoding = 10; lastKnownFileType = text.plist.strings; name = ru; path =
ru.lproj/ZoomValues.strings; sourceTree = "<group>"; };
CE4F9DED0BC1BE3A005BE0A1 /* English */ = {isa =
PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings;
name = English; path = English.lproj/Localizable.strings; sourceTree =
"<group>"; };
+ CE5347121645DD3000737191 /* SKAttachmentEmailer.h */ = {isa =
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path =
SKAttachmentEmailer.h; sourceTree = "<group>"; };
+ CE5347131645DD3000737191 /* SKAttachmentEmailer.m */ = {isa =
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path
= SKAttachmentEmailer.m; sourceTree = "<group>"; };
CE546FC20B32D5DB00F8AFB6 /* SKNoteWindowController.h */ = {isa
= PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path
= SKNoteWindowController.h; sourceTree = "<group>"; };
CE546FC30B32D5DB00F8AFB6 /* SKNoteWindowController.m */ = {isa
= PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc;
path = SKNoteWindowController.m; sourceTree = "<group>"; };
CE54898D0B35D50E00F8AFB6 /* SKInfoWindowController.h */ = {isa
= PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path
= SKInfoWindowController.h; sourceTree = "<group>"; };
@@ -1544,6 +1547,8 @@
CE0463CA0B84D24300C11E4A /* SKApplication.m */,
4530D8C70B27B04D007C59F4 /*
SKApplicationController.h */,
4530D8C80B27B04D007C59F4 /*
SKApplicationController.m */,
+ CE5347121645DD3000737191 /*
SKAttachmentEmailer.h */,
+ CE5347131645DD3000737191 /*
SKAttachmentEmailer.m */,
CE4A659D0BAB1598004AD07D /*
SKBookmarkController.h */,
CE4A659E0BAB1598004AD07D /*
SKBookmarkController.m */,
CEE9BC0614CDD98100262718 /*
SKBookmarkSheetController.h */,
@@ -2602,6 +2607,7 @@
CE0DE5BE149BBFC300F4085D /*
SKDictionaryFormatter.m in Sources */,
CEE9BC0814CDD98100262718 /*
SKBookmarkSheetController.m in Sources */,
CE10979A161320CF00C4FA18 /*
SKExportAccessoryController.m in Sources */,
+ CE5347141645DD3000737191 /*
SKAttachmentEmailer.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
------------------------------------------------------------------------------
LogMeIn Central: Instant, anywhere, Remote PC access and management.
Stay in control, update software, and manage PCs from one command center
Diagnose problems and improve visibility into emerging IT issues
Automate, monitor and manage. Do more in less time with Central
http://p.sf.net/sfu/logmein12331_d2d
_______________________________________________
Skim-app-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/skim-app-commit