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 )