Bump for 4.0-11
[LibreOffice.git] / fpicker / source / aqua / NSURL_OOoAdditions.mm
blob55a3a2598b801425d93b72bfa3c4b36ca64f4c38
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
3  * This file is part of the LibreOffice project.
4  *
5  * This Source Code Form is subject to the terms of the Mozilla Public
6  * License, v. 2.0. If a copy of the MPL was not distributed with this
7  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8  *
9  * This file incorporates work covered by the following license notice:
10  *
11  *   Licensed to the Apache Software Foundation (ASF) under one or more
12  *   contributor license agreements. See the NOTICE file distributed
13  *   with this work for additional information regarding copyright
14  *   ownership. The ASF licenses this file to you under the Apache
15  *   License, Version 2.0 (the "License"); you may not use this file
16  *   except in compliance with the License. You may obtain a copy of
17  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
18  */
20 #ifndef _NSSTRING_OOOADDITIONS_HXX_
21 #include "NSString_OOoAdditions.hxx"
22 #endif
24 #include "NSURL_OOoAdditions.hxx"
26 @implementation NSURL (OOoAdditions)
27 - (rtl::OUString) OUStringForInfo:(InfoType)info
29     NSAutoreleasePool *pool = [NSAutoreleasePool new];
31     NSString *sURLString = nil;
33     switch(info) {
34         case FULLPATH:
35             OSL_TRACE("Extracting the full path of an item");
36             sURLString = [self absoluteString];
37             [sURLString retain];
38             break;
39         case FILENAME:
40             {
41                 OSL_TRACE("Extracting the file name of an item");
42                 NSString *path = [self path];
43                 if (path == nil) {
44                     sURLString = @"";
45                 }
46                 else {
47                     sURLString = [path lastPathComponent];
48                 }
49                 [sURLString retain];
50             }
51             break;
52         case PATHWITHOUTLASTCOMPONENT:
53             {
54                 OSL_TRACE("Extracting the last but one component of an item's path");
55                 NSString *path = [self absoluteString];
56                 if (path == nil) {
57                     sURLString = @"";
58                 }
59                 else {
60                     NSString* lastComponent = [path lastPathComponent];
61                     unsigned int lastLength = [lastComponent length];
62                     sURLString = [path substringToIndex:([path length] - lastLength)];
63                 }
64                 [sURLString retain];
65             }
66             break;
67         default:
68             break;
69     }
71     rtl::OUString sResult = [sURLString OUString];
72     [sURLString release];
74     [pool release];
76     return sResult;
78 @end
80 NSString* resolveAlias( NSString* i_pSystemPath )
82     NSString* pResolvedPath = nil;
83     CFURLRef rUrl = CFURLCreateWithFileSystemPath( kCFAllocatorDefault,
84                                                    (CFStringRef)i_pSystemPath,
85                                                    kCFURLPOSIXPathStyle, false);
86     if( rUrl != NULL )
87     {
88         FSRef rFS;
89         if( CFURLGetFSRef( rUrl, &rFS ) )
90         {
91             Boolean bIsFolder = false;
92             Boolean bAlias = false;
93             OSErr err = FSResolveAliasFile( &rFS, true, &bIsFolder, &bAlias);
94             if( (err == noErr) && bAlias )
95             {
96                 CFURLRef rResolvedUrl = CFURLCreateFromFSRef( kCFAllocatorDefault, &rFS );
97                 if( rResolvedUrl != NULL )
98                 {
99                     pResolvedPath = (NSString*)CFURLCopyFileSystemPath( rResolvedUrl, kCFURLPOSIXPathStyle );
100                     CFRelease( rResolvedUrl );
101                 }
102             }
103         }
104         CFRelease( rUrl );
105     }
106     
107     return pResolvedPath;
110 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */