Net-YahooMessenger
view release on metacpan or search on metacpan
lib/Net/YahooMessenger/Buddy.pm view on Meta::CPAN
package Net::YahooMessenger::Buddy;
use strict;
use constant IM_AVAILABLE => 0;
use constant BE_RIGHT_BACK => 1;
use constant BUSY => 2;
use constant NOT_AT_HOME => 3;
use constant NOT_AT_MY_DESK => 4;
use constant NOT_IN_THE_OFFICE => 5;
use constant ON_THE_PHONE => 6;
use constant ON_VACATION => 7;
use constant OUT_TO_LUNCH => 8;
use constant STEPPED_OUT => 9;
use constant CUSTOM_STATUS => 99;
use constant SLEEP => 999;
use constant ICON_AVAILABLE => 0;
use constant ICON_BUSY => 1;
use constant ICON_SLEEP => 2;
use constant STATUS_MESSAGE => [
"I'm Available",
'Be Right Back',
'Busy',
'Not At Home',
'Not At My Desk',
'Not In The Office',
'On The Phone',
'On Vacation',
'Out To Lunch',
'Stepped Out',
];
use constant IS_ONLINE => 1;
use constant IS_OFFLINE => 0;
sub new {
my $class = shift;
bless {
name => 'nobody',
status => IM_AVAILABLE,
custom_status => '',
busy => ICON_AVAILABLE,
online => IS_OFFLINE,
session_id => 0,
}, $class;
}
sub name {
my $self = shift;
$self->{name} = shift if @_;
$self->{name};
}
sub status {
my $self = shift;
if (@_) {
$self->{status} = shift;
$self->busy(ICON_BUSY) if $self->{status} <= STEPPED_OUT;
$self->busy(ICON_SLEEP) if $self->{status} == SLEEP;
$self->busy(ICON_AVAILABLE)
if $self->{status} == CUSTOM_STATUS
|| $self->{status} == IM_AVAILABLE;
}
$self->{status};
}
sub custom_status {
my $self = shift;
if (@_) {
$self->{custom_status} = shift;
$self->status(CUSTOM_STATUS);
}
$self->{custom_status};
}
sub busy {
my $self = shift;
if (@_) {
$self->{busy} = shift;
}
$self->{busy};
}
sub online {
my $self = shift;
if (@_) {
$self->{online} = shift;
}
$self->{online};
}
sub session_id {
my $self = shift;
$self->{session_id} = shift if @_;
$self->{session_id};
}
sub is_online {
my $self = shift;
$self->online;
}
sub get_status_message {
my $self = shift;
return unless $self->is_online;
if ( $self->status == SLEEP ) {
return sprintf '%s', 'Sleep';
}
elsif ( $self->status == CUSTOM_STATUS ) {
return sprintf '%s', $self->custom_status;
}
elsif ( $self->status >= IM_AVAILABLE && $self->status <= STEPPED_OUT ) {
return sprintf '%s', STATUS_MESSAGE->[ $self->status ];
}
else {
return 'Unknown';
}
}
sub to_string {
my $self = shift;
if ( $self->is_online ) {
return
sprintf "%s %s (%s)",
$self->busy == ICON_AVAILABLE ? ':-)'
: $self->busy == ICON_BUSY ? ':-@'
: $self->busy == ICON_SLEEP ? '|-I'
: '?',
$self->name,
$self->get_status_message;
}
else {
return sprintf "%s %s (%s)", ' ', $self->name, 'Not online';
}
}
1;
__END__
( run in 0.742 second using v1.01-cache-2.11-cpan-75ffa21a3d4 )