#!/usr/bin/perl #ported from AppleScript version at: # http://people.engr.ncsu.edu/jayoung/site/pages/adium-group-chat-bookmarks-via-applescript # requirements: # * turn on UI scripting in Universal Access in System Prefs # * make glue for Adium: # these steps must be done only once per machine: # cd /System/Library/Perl/Extras/bin/ # sudo ./gluedialect # sudo ./gluescriptadds # sudo ./gluemac '/System/Library/CoreServices/System Events.app' # sudo ./gluemac /System/Library/CoreServices/Finder.app # this step must be done once per application to script: # sudo ./gluemac PATH_TO_ADIUM # * have an account this will work with, and be connected with it use warnings; use strict; use Mac::Glue ':all'; my $default_server = 'conference.example.com'; my $default_handle = 'pudge'; my $default_account = 'cnandor@jabber.example.com'; # (Jabber)'; my @rooms = ( { name => 'slashdot-authors' }, { name => 'slashdot-coders' }, ); my $adium = new Mac::Glue 'Adium'; my $sysevt = new Mac::Glue 'System Events'; $sysevt->ERRORS(1); $adium->activate; my $join_menu = $sysevt->obj( menu_item => 'Join Group Chat' . chr(201), # 201 == ellipsis menu => 1, menu_bar_item => 'File', menu_bar => 1, application_process => 'Adium' ); my $join_window = $sysevt->obj( window => 'Join Chat', application_process => 'Adium' ); my $account_list = $join_window->obj(pop_up_button => 1); my $join_button = $join_window->obj(button => 'Join'); my $handle_field = $join_window->prop(value => text_field => 4); my $server_field = $join_window->prop(value => text_field => 5); my $room_fieldb = $join_window->obj(text_field => 6); my $room_field = $room_fieldb->prop('value'); for my $room (@rooms) { $join_menu->click; print "Clicking menu item\n"; $account_list->click; print "Clicking account list\n"; $account_list->obj( menu_item => $room->{account} || $default_account, property => 'menu' )->pick; print "Selecting account name\n"; sleep 1; # give fields a chance to appear $server_field->set(to => param_type(typeChar, $room->{server} || $default_server)); print "Setting server name\n"; $handle_field->set(to => param_type(typeChar, $room->{handle} || $default_handle)); print "Setting handle\n"; # Join button cannot be clicked until we "type" something $room_fieldb->select; print "Setting room\n"; $sysevt->keystroke('i'); print "Setting room 1\n"; $room_field->set(to => param_type(typeChar, $room->{name})); print "Setting room 2\n"; $join_button->click; print "Joining\n"; } __END__