Mojo-Weixin

 view release on metacpan or  search on metacpan

lib/Mojo/Weixin/Model.pm  view on Meta::CPAN

    if(not defined $contactinfo){
        $self->error("获取通讯录联系人信息失败");
        return;
    }
    my($friends,$contact_groups) = @$contactinfo;
    if(ref $friends eq "ARRAY" and @$friends>0){
        #$self->friend([ map {Mojo::Weixin::Friend->new($_)} grep {$_->{id} ne $user->{id}} @$friends ]);
        my @tmp;
        for(@$friends){
            if($_->{id} ne $user->{id}){
                push @tmp,Mojo::Weixin::Friend->new($_);
            }
            else{
                $self->user(Mojo::Weixin::User->new($_));
            }
        }
        $self->friend(\@tmp);
        $self->info("更新好友信息成功");
        $self->emit(update_user=>$self->user);
        $self->emit(update_friend=>$self->friend);
    }

    my %groups_id;
    if(ref $init_groups eq "ARRAY" and @$init_groups >0){
        for(@$init_groups){
            $groups_id{$_->{id}} = 1;
        }
    }
    if(ref $contact_groups eq "ARRAY" and @$contact_groups>0){
        for(@$contact_groups){
            $groups_id{$_->{id}} = 1;
        }
    }
    if(keys %groups_id){
        my @groups = $self->_webwxbatchgetcontact_group(0,keys %groups_id);
        if(@groups){
            if($self->is_init_group_member){
                $self->group([]);
                for my $g (@groups){
                    my @member = $self->_webwxbatchgetcontact_group_member($g->{_eid},map {$_->{id}} @{$g->{member}});
                    $g->{member} = \@member if @member;
                    my $group = Mojo::Weixin::Group->new($g);
                    push @{  $self->group },$group;
                    $self->info("更新群组[ @{[$group->displayname]} ]信息成功");
                }
                $self->emit(update_group=>$self->group);
            }
            else{
                $self->group([ map { Mojo::Weixin::Group->new($_) } @groups ]);
                $self->info("更新群组[ @{[$_->displayname]} ]信息成功") for $self->groups;
                $self->emit(update_group=>$self->group); 
            }
        }
        else{
            $self->error("更新群组信息失败");
            return;
        }
    }
    return 1;
}
sub update_user {

}
sub update_friend{
    my $self = shift;
    my @friend_ids = map {ref $_ eq "Mojo::Weixin::Friend"?$_->id:$_} @_;
    if(@friend_ids){
        my @return = $self->_webwxbatchgetcontact_friend(@friend_ids);
        return if not @return;
        $self->add_friend(Mojo::Weixin::Friend->new($_)) for @return;
        return 1;
    }
}
sub update_group{
    my $self = shift;
    my @group_ids = map {ref $_ eq "Mojo::Weixin::Group"?$_->id:$_} @_;
    my $is_update_group_member = $_[1] // $self->is_update_group_member;
    if(@group_ids){
        my @return = $self->_webwxbatchgetcontact_group($is_update_group_member,@group_ids);
        return if not @return;
        $self->add_group(Mojo::Weixin::Group->new($_)) for @return;
        return 1;
    }
}

sub search_friend{
    my $self = shift;
    my %p = @_;
    if($p{_check_remote}){
        if(wantarray){
            my @f = $self->_search($self->friend,@_);
            if(@f){return @f}
            else{
                $self->update_friend($p{id}) if defined $p{id};
                return $self->_search($self->friend,@_);
            }
        }
        else{
            my $f = $self->_search($self->friend,@_);
            if(defined $f){return $f }
            else{
                $self->update_friend($p{id}) if defined $p{id};
                return $self->_search($self->friend,@_);
            }
        }
    }
    return $self->_search($self->friend,@_);
}
sub search_group{
    my $self = shift;
    my %p = @_;
    if($p{_check_remote}){
        if(wantarray){
            my @g = $self->_search($self->group,@_);
            if(@g){return @g}
            else{
                $self->update_group($p{id}) if defined $p{id};
                return $self->_search($self->group,@_);
            }
        }
        else{
            my $g = $self->_search($self->group,@_);
            if(defined $g){return $g }
            else{
                $self->update_group($p{id}) if defined $p{id};
                return $self->_search($self->group,@_);
            }
        }
    }
    return $self->_search($self->group,@_);
}
sub add_friend{
    my $self = shift;
    my $friend = shift;



( run in 0.417 second using v1.01-cache-2.11-cpan-5b529ec07f3 )