File Coverage

blib/lib/DJabberd/Delivery/OfflineStorage/InMemoryOnly.pm
Criterion Covered Total %
statement 6 6 100.0
branch n/a
condition n/a
subroutine 2 2 100.0
pod n/a
total 8 8 100.0


line stmt bran cond sub pod time code
1             package DJabberd::Delivery::OfflineStorage::InMemoryOnly;
2 1     1   6666 use strict;
  1         3  
  1         51  
3 1     1   5 use base 'DJabberd::Delivery::OfflineStorage';
  1         3  
  1         102  
4             use warnings;
5             use Data::Dumper;
6              
7             use vars qw($VERSION);
8             $VERSION = '0.04';
9              
10              
11             our $logger = DJabberd::Log->get_logger();
12              
13              
14             sub load_offline_messages {
15             my ($self, $user) = @_;
16             $logger->info("InMemoryOnly OfflineStorage load for: $user");
17             $self->{'offline'} ||= {};
18             if (exists $self->{'offline'}{$user}) {
19             my @messages = ();
20             foreach my $message (sort keys %{$self->{'offline'}{$user}}) {
21             push(@messages, $self->{'offline'}{$message});
22             }
23             return \@messages;
24             } else {
25             return [];
26             }
27             }
28              
29              
30             sub delete_offline_message {
31             my ($self, $id) = @_;
32             $self->{'offline'} ||= {};
33             $logger->info("InMemoryOnly OfflineStorage delete for: $id");
34             # must remove it from $user too
35             if (exists $self->{'offline'}->{$id}){
36             my $user = $self->{'offline'}->{$id}->{'jid'};
37             if (exists $self->{'offline'}->{$user}) {
38             delete $self->{'offline'}->{$user}->{$id};
39             delete $self->{'offline'}->{$user}
40             unless keys %{$self->{'offline'}->{$user}};
41             }
42             delete $self->{'offline'}->{$id}
43             }
44             }
45              
46              
47             sub store_offline_message {
48             my ($self, $user, $packet) = @_;
49             $self->{offline} ||= {};
50             $self->{offline_id} ||= 1;
51              
52             my $id = $self->{'offline_id'}++;
53             $logger->info("InMemoryOnly OfflineStorage store for: $user/$id");
54             $self->{'offline'}->{$user} ||= {};
55             $self->{'offline'}->{$id} = {'id' => $id, 'packet' => $packet, 'jid' => $user};
56             $self->{'offline'}->{$user}->{$id} = 1;
57             }
58              
59             1;