ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/cvsroot/Net-XMPP2/lib/Net/XMPP2/IM/Presence.pm
Revision: 1.3
Committed: Sun Apr 22 14:36:52 2007 UTC (19 years, 6 months ago) by elmex
Branch: MAIN
Changes since 1.2: +20 -11 lines
Log Message:
implemented addition/removal/update of roster items and
first functionality for subscription.

File Contents

# User Rev Content
1 elmex 1.1 package Net::XMPP2::IM::Presence;
2     use strict;
3     use Net::XMPP2::Util;
4     use Net::XMPP2::IM::Message;
5    
6     sub new {
7     my $this = shift;
8     my $class = ref($this) || $this;
9     bless { @_ }, $class;
10     }
11    
12 elmex 1.2 sub clone {
13     my ($self) = @_;
14     my $p = $self->new (connection => $self->{connection});
15 elmex 1.3 $p->{$_} = $self->{$_} for qw/show jid priority status/;
16 elmex 1.2 $p
17     }
18    
19 elmex 1.3 sub update {
20     my ($self, $node) = @_;
21    
22     my $type = $node->attr ('type');
23     my ($show) = $node->find_all ([qw/client show/]);
24     my ($priority) = $node->find_all ([qw/client priority/]);
25    
26     my %stati;
27     $stati{$_->attr ('lang') || ''} = $_->text
28     for $node->find_all ([qw/client status/]);
29    
30     my $old = $self->clone;
31    
32     $self->{show} = $show ? $show->text : undef;
33     $self->{priority} = $priority ? $priority->text : undef;
34     $self->{status} = \%stati;
35     $self->{type} = $type;
36    
37     $old
38 elmex 1.1 }
39    
40     sub jid { $_[0]->{jid} }
41    
42     sub priority { $_[0]->{priority} }
43    
44     sub status_all_lang {
45     my ($self, $jid) = @_;
46     keys %{$self->{status} || []}
47     }
48    
49     sub show { $_[0]->{show} }
50    
51     sub status {
52     my ($self, $lang) = @_;
53    
54     if (defined $lang) {
55     return $self->{status}->{$lang}
56     } else {
57     return $self->{status}->{''}
58     if defined $self->{status}->{''};
59     return $self->{status}->{en}
60     if defined $self->{status}->{en};
61     }
62    
63     undef
64     }
65    
66     sub make_message {
67     my ($self) = @_;
68     Net::XMPP2::IM::Message->new (
69     connection => $self->{connection},
70     to => $self->jid
71     );
72     }
73    
74     sub debug_dump {
75     my ($self) = @_;
76     printf " * %-30s [%-5s] (%3d) {%s}\n",
77     $self->jid,
78     $self->show || '',
79     $self->priority || 0,
80     $self->status || '',
81     }
82    
83     1;