2 * This file is part of MPlayer.
4 * MPlayer is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
9 * MPlayer is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License along
15 * with MPlayer; if not, write to the Free Software Foundation, Inc.,
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19 #include <Carbon/Carbon.h>
20 #include <ApplicationServices/ApplicationServices.h>
21 #include "stream/url.h"
27 static play_tree_t
*files
=NULL
;
29 static inline void add_entry(play_tree_t
**last_parentp
, play_tree_t
**last_entryp
, play_tree_t
*entry
) {
31 if(*last_entryp
==NULL
)
32 play_tree_set_child(*last_parentp
, entry
);
34 play_tree_append_entry(*last_entryp
, entry
);
39 static pascal OSErr
AppleEventHandlerProc(const AppleEvent
*theAppleEvent
, AppleEvent
* reply
, SInt32 handlerRefcon
) {
40 OSErr err
=errAEEventNotHandled
, res
=noErr
;
44 AERemoveEventHandler(kCoreEventClass
, kAEOpenDocuments
, NULL
, FALSE
);
45 if((res
=AEGetParamDesc(theAppleEvent
, keyDirectObject
, typeAEList
, &docList
))==noErr
) {
46 if((res
=AECountItems(&docList
, &itemsInList
))==noErr
) {
50 play_tree_t
*last_entry
=NULL
;
52 files
=play_tree_new();
53 for(i
=1;i
<=itemsInList
;++i
) {
59 DescType returnedType
;
61 if((e
=AEGetNthPtr(&docList
, i
, typeFileURL
, &keywd
, &returnedType
, (Ptr
)parm
, currentSize
, &actualSize
))==noErr
) {
62 if(actualSize
>=currentSize
) {
63 currentSize
=actualSize
+1;
64 parm
=realloc(parm
, currentSize
);
79 URL_t
*url
=url_new(parm
);
81 if(url
&& !strcmp(url
->protocol
,"file") && !strcmp(url
->hostname
,"localhost")) {
82 play_tree_t
*entry
=play_tree_new();
84 url_unescape_string(url
->file
, url
->file
);
85 play_tree_add_file(entry
, url
->file
);
86 add_entry(&files
, &last_entry
, entry
);
99 mp_msg(MSGT_CFGPARSER
, MSGL_ERR
, "AECountItems() error %d\n", res
);
101 AEDisposeDesc(&docList
);
104 mp_msg(MSGT_CFGPARSER
, MSGL_ERR
, "AEGetParamDesc() error %d\n", res
);
106 QuitApplicationEventLoop();
110 play_tree_t
*macosx_finder_args(m_config_t
*config
, int argc
, char **argv
) {
111 ProcessSerialNumber myPsn
;
112 char myPsnStr
[5+10+1+10+1];
114 GetCurrentProcess(&myPsn
);
115 snprintf(myPsnStr
, 5+10+1+10+1, "-psn_%u_%u", myPsn
.highLongOfPSN
, myPsn
.lowLongOfPSN
);
116 myPsnStr
[5+10+1+10]=0;
118 if((argc
==2) && !strcmp(myPsnStr
, argv
[1])) {
119 m_config_set_option(config
, "quiet", NULL
);
121 AEInstallEventHandler(kCoreEventClass
, kAEOpenDocuments
, NewAEEventHandlerUPP(AppleEventHandlerProc
), 0, FALSE
);
122 RunApplicationEventLoop();