Elive
view release on metacpan or search on metacpan
script/elive_raise_meeting view on Meta::CPAN
'participants|participant|others|other=s{,}' => \@participants,
'upload=s' => \$upload,
'import_from_server|import=s' => \$import,
'add_preload|use_preload=i' => \$preload_opt,
'occurs=i%' => \%occurs,
'use=s' => \$class,
'all_moderators!' => \$session_data{allModerators},
'boundary=i' => \$session_data{boundaryMinutes},
'cost_center|cost_centre=s' => \$session_data{costCenter},
'exit_url|redirect_url=s' => \$session_data{redirectURL},
'facilitator=s' => \$session_data{facilitatorId},
'follow|follow_moderator!' => \$session_data{followModerator},
'invites|invitations!' => \$session_data{inSessionInvitation},
'meeting_password|meeting_pass|session_password|session_pass=s' => \$session_data{password},
'max_cameras|cameras|video_window=i' => \$session_data{videoWindow},
'max_talkers|talkers=i' => \$session_data{maxTalkers},
'moderator_notes=s' => \$session_data{moderatorNotes},
'name|meeting_name=s' => \$session_data{name},
'private!' => \$session_data{privateMeeting},
'permissions!' => \$session_data{fullPermissions},
'profile|profile_display=s' => \$session_data{profile},
'raise_hands!' => \$session_data{raiseHandOnEnter},
'restricted!' => \$session_data{restrictedMeeting},
'recording_resolution=s' => \$session_data{recordingResolution},
'recording|recording_status=s' => \$session_data{recordingStatus},
'seats=i' => \ $session_data{seats},
'supervised!' => \$session_data{supervised},
'user_notes=s' => \$session_data{userNotes},
'v|version' => \$version,
'debug=i' => \$debug,
'help|?' => \$help,
'dump=s' => \$dump,
)
or pod2usage(2);
pod2usage(0) if $help;
if ($version) {
print "Elive v${Elive::VERSION} (c) 2009 - 2012\n";
exit(0);
};
($url = shift @ARGV)
or pod2usage("missing url argument");
Elive->debug($debug) if defined $debug;
# debug may also be set via $ENV{ELIVE_DEBUG}
$debug = Elive->debug;
if ($debug) {
$SIG{__WARN__} = \&Carp::cluck if $debug > 1;
$SIG{__DIE__} = \&Carp::confess;
}
$url ||= Elive::Util::prompt("Url ('http[s]://...'): ");
unless ($username && $password) {
#
# look for credentials encoded in the uri
#
my $uri_obj = URI->new($url);
my $userinfo = $uri_obj->userinfo; # credentials supplied in URI
if ($userinfo) {
my ($uri_user, $uri_pass) = split(':', $userinfo, 2);
$username ||= URI::Escape::uri_unescape($uri_user);
$password ||= URI::Escape::uri_unescape($uri_pass)
if $uri_pass;
}
}
$username ||= Elive::Util::prompt('Username: ');
$password ||= Elive::Util::prompt('Password: ', password => 1);
our $connection;
$connection = Elive->connect($url, $username, $password);
$class ||= do {
#
# use hasn't specified elluminate compatibility, or which session
# class to use. Guess it from their Elluminate server version.
#
my $server_version = eval {$connection->version}
or bail ($@ || "unable to get server details version\n");
my $server_version_num = version->new($server_version)->numify;
my $elm3_min_version_num = version->declare( '9.5.0' )->numify;
warn "Elluminate Live! version: $server_version_num (elm3 min: $elm3_min_version_num)\n" if $debug;
$server_version_num >= $elm3_min_version_num
? 'elm3'
: 'elm2'
};
$class = {elm2 => 'Elive::View::Session',
elm3 => 'Elive::Entity::Session'}->{$class} || $class;
warn "Session class: $class\n" if $debug;
eval "use $class";
bail("unable to load class $class: $@") if $@;
bail("class $class: does not implement the 'insert' method")
unless eval{ $class->can('insert') };
for ($session_data{recordingStatus}) {
next unless defined;
$_ = lc $_;
#
# accept some of the other synonyms for the various modes as
# seen in documentation and Elluminate's web interface.
#
s{^none|disabled$}{off}x;
s{^manual$}{remote}x;
s{^auto(matic)?$}{on}x;
pod2usage("-recording_status must be: on/auto, off/none/disabled or manual/remote\n")
unless m{^on|off|remote$}x;
}
for ($session_data{recordingResolution}) {
next unless defined;
( run in 0.733 second using v1.01-cache-2.11-cpan-39bf76dae61 )