aboutsummaryrefslogtreecommitdiff
path: root/Foundation/GTMNSString+FindFolder.m
diff options
context:
space:
mode:
authorGravatar thomasvl@gmail.com <thomasvl@gmail.com@7dc7ac4e-7543-0410-b95c-c1676fc8e2a3>2008-07-09 21:19:26 +0000
committerGravatar thomasvl@gmail.com <thomasvl@gmail.com@7dc7ac4e-7543-0410-b95c-c1676fc8e2a3>2008-07-09 21:19:26 +0000
commit6ddca07d6c48b0226550b6ff3e01a177b6afd6a5 (patch)
treeadbd23d96eacb322eb47a1c8c525bc4d2536dfc3 /Foundation/GTMNSString+FindFolder.m
parent098f7782e376e818b131a8f9a8222056c63d51ee (diff)
- Added GTMSignalHandler for simple signal handling (via kqueue/runloop).
- Fixed up GTMIPhoneUnitTestDelegate to be pickier about which tests it runs - Added GTMNSString+URLArguments to GTMiPhone - Added GTMHTTPFetcher and GTMHTTPServer to GTMiPhone - Made sure that build would work with iPhone device attached, and that all tests run directly on the phone. - Added GTMValidatingContainers which are a set of mutable container classes that allow you to have a selector on a target that is called to verify that the objects being put into the container are valid. This can be controlled at compile time so that you don't take the performance hit in a release build. - Added GTMPath, which represents an existing absolute path on the file system. It also makes it very easy to contruct new paths in the file system as well as whole directory hierarchies. - Added GTMNSString+Replace for a common replacement need. - Added NSString+FindFolder for two commen helpers for building paths to common locations. - Added GTMLargeTypeWindow for doing display windows similar to Address Book Large Type display for phone numbers.
Diffstat (limited to 'Foundation/GTMNSString+FindFolder.m')
-rw-r--r--Foundation/GTMNSString+FindFolder.m79
1 files changed, 79 insertions, 0 deletions
diff --git a/Foundation/GTMNSString+FindFolder.m b/Foundation/GTMNSString+FindFolder.m
new file mode 100644
index 0000000..7d2f3b5
--- /dev/null
+++ b/Foundation/GTMNSString+FindFolder.m
@@ -0,0 +1,79 @@
+//
+// GTMNSString+FindFolder.m
+//
+// Copyright 2006-2008 Google Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License"); you may not
+// use this file except in compliance with the License. You may obtain a copy
+// of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+// License for the specific language governing permissions and limitations under
+// the License.
+//
+
+#import "GTMNSString+FindFolder.h"
+#import "GTMGarbageCollection.h"
+
+@implementation NSString (GTMStringFindFolderAdditions)
+
++ (NSString *)gtm_stringWithPathForFolder:(OSType)theFolderType
+ inDomain:(short)theDomain
+ doCreate:(BOOL)doCreate {
+
+ NSString* folderPath = nil;
+ FSRef folderRef;
+
+ OSErr err = FSFindFolder(theDomain, theFolderType, doCreate, &folderRef);
+ if (err == noErr) {
+
+ CFURLRef folderURL = CFURLCreateFromFSRef(kCFAllocatorSystemDefault, &folderRef);
+ if (folderURL) {
+
+ folderPath = GTMNSMakeCollectable(CFURLCopyFileSystemPath(folderURL, kCFURLPOSIXPathStyle));
+ [folderPath autorelease];
+
+ CFRelease(folderURL);
+ }
+ }
+ return folderPath;
+}
+
++ (NSString *)gtm_stringWithPathForFolder:(OSType)theFolderType
+ subfolderName:(NSString *)subfolderName
+ inDomain:(short)theDomain
+ doCreate:(BOOL)doCreate {
+ NSString *resultPath = nil;
+ NSString *subdirPath = nil;
+ NSString *parentFolderPath = [self gtm_stringWithPathForFolder:theFolderType
+ inDomain:theDomain
+ doCreate:doCreate];
+ if (parentFolderPath) {
+
+ // find the path to the subdirectory
+ subdirPath = [parentFolderPath stringByAppendingPathComponent:subfolderName];
+
+ NSFileManager* fileMgr = [NSFileManager defaultManager];
+ BOOL isDir = NO;
+ if ([fileMgr fileExistsAtPath:subdirPath isDirectory:&isDir] && isDir) {
+ // it already exists
+ resultPath = subdirPath;
+ } else if (doCreate) {
+
+ // create the subdirectory with the parent folder's attributes
+ NSDictionary* attrs = [fileMgr fileAttributesAtPath:parentFolderPath
+ traverseLink:YES];
+ if ([fileMgr createDirectoryAtPath:subdirPath
+ attributes:attrs]) {
+ resultPath = subdirPath;
+ }
+ }
+ }
+ return resultPath;
+}
+
+@end