AnyEvent-XMPP
view release on metacpan or search on metacpan
lib/AnyEvent/XMPP/IM/Message.pm view on Meta::CPAN
=item lang => $lang
This is the default language that will be used to tag the values
passed in the C<body> and C<subject> argument to C<new>.
=item body => $body
This is the text C<$body> of the message either with the language
tag from the C<lang> attached or without any language tag.
If you want to attach multiple bodies with different languages use the C<add_body>
method.
=item subject => $subject
This is the C<$subject> of the message either with the language
tag from the C<lang> attached or without any language tag.
If you want to attach the subject with a different language use the C<add_subject>
method.
=item type => $type
This field sets the type of the message. See also the L<type> method below.
The default value for C<$type> is 'normal'.
=back
=cut
sub new {
my $this = shift;
my $class = ref($this) || $this;
my $self = bless { @_ }, $class;
if (my $sub = delete $self->{subject}) {
$self->add_subject ($sub);
}
if (my $body = delete $self->{body}) {
$self->add_body ($body);
}
$self->{type} ||= 'normal'; # default it to 'normal'
$self->{lang} ||= '';
$self
}
sub from_node {
my ($self, $node) = @_;
$self->{node} = $node;
$self->fetch_delay_from_node ($node);
my $id = $node->attr ('id');
my $from = $node->attr ('from');
my $to = $node->attr ('to');
my $type = $node->attr ('type');
my ($thread) = $node->find_all ([qw/client thread/]);
my %bodies;
my %subjects;
$bodies{$_->attr ('lang') || ''} = $_->text
for $node->find_all ([qw/client body/]);
$subjects{$_->attr ('lang') || ''} = $_->text
for $node->find_all ([qw/client subject/]);
$self->{id} = $id;
$self->{from} = $from;
$self->{to} = $to;
$self->{type} = $type;
$self->{thread} = $thread;
$self->{bodies} = \%bodies;
$self->{subjects} = \%subjects;
}
sub to_string {
my ($self) = @_;
$self->any_body
}
=item B<id ([$msg_id])>
This method returns the ID of this message.
If C<$msg_id> is not undef it will replace the current
message id.
=cut
sub id {
my ($self, $id) = @_;
$self->{id} = $id if defined $id;
$self->{id}
}
=item B<from ([$jid])>
This method returns the source JID of this message.
If C<$jid> is not undef it will replace the current
source address.
=cut
sub from {
my ($self, $from) = @_;
$self->{from} = $from if defined $from;
$self->{from}
}
=item B<to ([$jid])>
This method returns the destination JID of this message.
If C<$jid> is not undef it will replace the current
destination address.
=cut
sub to {
my ($self, $to) = @_;
$self->{to} = $to if defined $to;
$self->{to}
}
=item B<make_reply ([$msg])>
This method returns a new instance of L<AnyEvent::XMPP::IM::Message>.
The destination address, connection and type of the returned message
object will be set.
If C<$msg> is defined and an instance of L<AnyEvent::XMPP::IM::Message>
the destination address, connection and type of C<$msg> will be changed
and this method will not return a new instance of L<AnyEvent::XMPP::IM::Message>.
=cut
sub make_reply {
my ($self, $msg) = @_;
unless ($msg) {
$msg = $self->new ();
}
$msg->{connection} = $self->{connection};
$msg->to ($self->from);
$msg->type ($self->type);
$msg
}
=item B<is_connected ()>
This method returns 1 when the message is "connected".
That means: It returns 1 when you can call the C<send> method
without a connection argument. (It will also return only 1 when
the connection that is referenced by this message is still
connected).
=cut
sub is_connected {
my ($self) = @_;
$self->{connection}->is_connected
}
=item B<send ([$connection])>
This method send this message. If C<$connection>
is defined it will set the connection of this
message object before it is send.
=cut
sub send {
my ($self, $connection) = @_;
$self->{connection} = $connection if $connection;
my @add;
push @add, (subject => $self->{subjects})
if %{$self->{subjects} || {}};
push @add, (thread => $self->thread)
if $self->thread;
push @add, (from => $self->from)
if $self->from;
push @add, (id => $self->id)
if $self->id;
$self->{connection}->send_message (
$self->to, $self->type, $self->{create_cbs},
body => $self->{bodies},
@add
);
}
=item B<type ([$type])>
This method returns the type of the message, which
is either undefined or one of the following values:
'chat', 'error', 'groupchat', 'headline', 'normal'
If the C<$type> argument is defined it will set the type
of this message.
=cut
sub type {
my ($self, $type) = @_;
$self->{type} = $type
if defined $type;
$self->{type}
}
=item B<thread ([$thread])>
This method returns the thread id of this message,
which might be undefined.
If you want to set the threadid simply pass the C<$thread>
argument.
=cut
sub thread {
my ($self, $thread) = @_;
$self->{thread} = $thread
if defined $thread;
$self->{thread}
}
=item B<lang ([$lang])>
This returns the default language tag of this message,
which can be undefined.
To set the language tag pass the C<$lang> argument, which
should be the new default language tag.
If you do not want to specify any language pass the empty
string as language tag.
=cut
sub lang {
my ($self, $lang) = @_;
$self->{lang} = $lang
if defined $lang;
$self->{lang}
}
=item B<subject ([$lang])>
This method returns the subject of this message.
If the C<$lang> argument is defined a subject of that
language will be returned or undef.
If the C<$lang> argument is undefined this method will
return either the subject in the default language.
=cut
sub subject {
my ($self, $lang) = @_;
if (defined $lang) {
return $self->{subjects}->{$lang}
}
return $self->{subjects}->{$self->{lang}};
undef
}
=item B<any_subject ([$lang])>
This method will try to find any subject on the message with the
following try order of languagetags:
1. $lang argument if one passed
2. default language
3. subject without any language tag
4. subject with the 'en' language tag
5. any subject from any language
=cut
sub any_subject {
my ($self, $lang) = @_;
if (defined $lang) {
( run in 2.613 seconds using v1.01-cache-2.11-cpan-8f98c5d2c55 )