App-MatrixClient

 view release on metacpan or  search on metacpan

lib/App/MatrixClient/RoomTab.pm  view on Meta::CPAN


sub format_displayname
{
   my ( $member, $full ) = @_;

   if( defined $member->displayname ) {
      my $s = String::Tagged->new
         ->append_tagged( $member->displayname, fg => "cyan" );

      $s->append_tagged( " [".$member->user->user_id."]", fg => "grey" ) if $full;

      return $s;
   }
   else {
      return String::Tagged->new
         ->append_tagged ( $member->user->user_id, fg => "grey" );
   }
}

sub cmd_me
{
   my $self = shift;
   my ( @args ) = @_;

   my $text = join " ", @args;
   my $room = $self->{room};

   $room->send_message( type => "m.emote", body => $text );
}

sub cmd_notice
{
   my $self = shift;
   my ( @args ) = @_;

   my $text = join " ", @args;
   my $room = $self->{room};

   $room->send_message( type => "m.notice", body => $text );
}

sub cmd_image
{
   my $self = shift;
   my ( $file ) = @_;

   my $dist = $self->{dist};
   my $room = $self->{room};

   unless( -e $file ) {
      $self->append_line( "File $file not found!" );
      return Future->done;
   }

   my $exifTool = Image::ExifTool->new;
   $exifTool->ImageInfo( $file );

   my $content_type = $exifTool->GetValue( 'MIMEType' ) //
      "application/octet-stream";

   $dist->fire_async( do_upload => file => $file, content_type => $content_type )->then( sub {
      my ( $uri ) = @_;

      $room->send_message( type => "m.image", body => "image attachment",
         url      => $uri,
         filename => $file,
         info     => {
            size     => $exifTool->GetValue( "FileSize", "ValueConv" ),
            w        => $exifTool->GetValue( "ImageWidth" ),
            h        => $exifTool->GetValue( "ImageHeight" ),
            mimetype => $content_type,
         },
      );
   });
}

sub cmd_audio
{
   my $self = shift;
   my ( $file ) = @_;

   my $dist = $self->{dist};
   my $room = $self->{room};

   unless( -e $file ) {
      $self->append_line( "File $file not found!" );
      return Future->done;
   }

   my $exifTool = Image::ExifTool->new;
   $exifTool->ImageInfo( $file );

   my $content_type = $exifTool->GetValue( "MIMEType" ) //
      "application/octet-stream";

   $dist->fire_async( do_upload => file => $file, content_type => $content_type )->then( sub {
      my ( $uri ) = @_;

      $room->send_message( type => "m.audio", body => "audio attachment",
         url      => $uri,
         filename => $file,
         info     => {
            size     => $exifTool->GetValue( "FileSize", "ValueConv" ),
            duration => int( $exifTool->GetValue( "Duration", "ValueConv" ) * 1000 ), # msec
            mimetype => $content_type,
         },
      );
   });
}

sub cmd_video
{
   my $self = shift;
   my ( $file ) = @_;

   my $dist = $self->{dist};
   my $room = $self->{room};

   unless( -e $file ) {
      $self->append_line( "File $file not found!" );
      return Future->done;
   }

   my $exifTool = Image::ExifTool->new;
   $exifTool->ImageInfo($file);

   my $content_type = $exifTool->GetValue( "MIMEType" ) //
      "application/octet-stream";

   $dist->fire_async( do_upload => file => $file, content_type => $content_type )->then( sub {
      my ( $uri ) = @_;

      $room->send_message( type => "m.video", body => "video attachment",
         url      => $uri,
         filename => $file,
         info     => {
            size     => $exifTool->GetValue( "FileSize", "ValueConv" ),
            duration => int( $exifTool->GetValue( "Duration", "ValueConv" ) * 1000 ), # msec
            w        => $exifTool->GetValue( "ImageWidth" ),
            h        => $exifTool->GetValue( "ImageHeight" ),
            mimetype => $content_type,
         },
      );
   });
}

sub cmd_file
{
   my $self = shift;
   my ( $file ) = @_;

   my $dist = $self->{dist};
   my $room = $self->{room};

   unless( -e $file ) {
      $self->append_line( "File $file not found!" );
      return Future->done;
   }

   my $exifTool = Image::ExifTool->new;
   $exifTool->ImageInfo($file);

   my $content_type = $exifTool->GetValue( "MIMEType" ) //
      "application/octet-stream";

   $dist->fire_async( do_upload => file => $file, content_type => $content_type )->then( sub {
      my ( $uri ) = @_;

      $room->send_message( type => "m.file", body => "file attachment",
         url      => $uri,
         filename => $file,
         info     => {
            size     => $exifTool->GetValue( "FileSize", "ValueConv" ),
            mimetype => $content_type,
         },
      );
      Future->done;
   });
}

sub cmd_leave
{
   my $self = shift;

   my $room = $self->{room};
   $room->leave;
}

sub cmd_invite
{
   my $self = shift;
   my ( $user_id ) = @_;

   my $room = $self->{room};

   $room->invite( $user_id );
}

sub cmd_level
{
   my $self = shift;
   my $delete = $_[0] eq "-del" ? shift : 0;
   my ( $user_id, $level ) = @_;

   defined $level or $delete or
      Future->fail( "Require a power level, or -del" );

   my $room = $self->{room};

   $room->change_member_levels( $user_id => $level );
}

sub cmd_roomlevels
{
   my $self = shift;

   my %levels;
   foreach (@_) {
      m/^(.*)=(\d+)$/ and $levels{$1} = $2;
   }

   my $room = $self->{room};
   $room->change_levels( %levels );
}

sub cmd_topic



( run in 1.425 second using v1.01-cache-2.11-cpan-b16cb0d3907 )