Создайте новый чат в Adium с помощью Cocoa ScriptingBridge - PullRequest
0 голосов
/ 13 марта 2010

Следующий код AppleScript работает нормально:

tell application "Adium" to tell first account to make new chat with contacts {first contact} with new chat window

Но как я могу сделать то же самое, используя ScriptingBridge Cocoa?

Ответы [ 2 ]

0 голосов
/ 14 марта 2010

Как правило, вы должны быть в состоянии сделать это, следуя Apple Руководство по программированию Scripting Bridge для Cocoa . Для начала я создал заголовочный файл для Adium, запустив sdef /Applications/Adium.app | sdp -fh --basename Adium в Терминале (создает Adium.h в текущем каталоге). Созданный заголовочный файл дает подсказки о том, как выполнять вызовы AppleScript через Scripting Bridge.

Проблема, с которой я столкнулся, заключается в том, что я не могу найти способ, основываясь на сгенерированном заголовочном файле, сделать make new chat with contacts {...} with new chat window (я могу создать новый чат и, возможно, даже подключить его к новому окну, но я не смог найдите способ заставить этот чат взять контакт).

Следующим лучшим вариантом может быть использование NSAppleScript для выполнения допустимого кода AppleScript:

NSAppleScript *appleScript = [[NSAppleScript alloc] initWithSource:@"tell application \"Adium\" to tell first account to make new chat with contacts {first contact} with new chat window"];
NSDictionary *errorDictionary;
NSAppleEventDescriptor *eventDescriptor = [appleScript executeAndReturnError:&errorDictionary];
0 голосов
/ 14 марта 2010

Если не использовать необработанные коды событий Apple, вы не можете. Должен работать с objc-appscript . Выполнение команды AppleScript с помощью инструмента ASTranslate в приложении дает следующее:

#import "ADGlue/ADGlue.h"
ADApplication *adium = [ADApplication applicationWithName: @"Adium"];
ADReference *ref = [[adium accounts] at: 1];
ADMakeCommand *cmd = [[[[ref make] newChatWindow: ASTrue] withContacts: [NSArray arrayWithObject: [[[[adium accounts] at: 1] contacts] at: 1]]] new_: [ADConstant chat]];
id result = [cmd send];
...