use strictures 1;
package Test::Irssi::Callbacks;
use Moose;
use Data::Dump qw/dump/;
use Data::Dumper;
has 'parent'
=> (
is => 'ro',
isa => 'Test::Irssi',
required => 1,
);
sub register_callbacks {
my ($self) = @_;
my $vt = $self->parent->vt;
$self->log("Callbacks registered");
$vt->callback_set(OUTPUT => sub { $self->vt_output(@_) }, undef);
$vt->callback_set(ROWCHANGE => sub { $self->vt_rowchange(@_) }, undef);
$vt->callback_set(CLEAR => sub { $self->vt_clear(@_) }, undef);
$vt->callback_set(SCROLL_DOWN => sub { $self->vt_scr_up(@_) }, undef);
$vt->callback_set(SCROLL_UP => sub { $self->vt_scr_dn(@_) }, undef);
$vt->callback_set(GOTO => sub { $self->vt_goto(@_) }, undef);
}
sub vt_output {
my ($self, $vt, $cb_name, $cb_data) = @_;
$self->log( "OUTPUT: " . dump([@_[1..$#_]]));
}
sub vt_rowchange {
my $self = shift;
my ($vt, $cb_name, $arg1, $arg2) = @_;
$arg1 //= '?';
$arg2 //= '?';
$self->log( "-" x 100);
$self->log( "Row $arg1 changed: ");
my $bottom_line = $vt->rows();
$self->log( "-" x 100);
$self->log( "Window Line");
$self->log( "-" x 100);
$self->log( $vt->row_plaintext($bottom_line - 1));
$self->log( "-" x 100);
$self->log( "Prompt line");
$self->log( "-" x 100);
$self->log( $vt->row_plaintext($bottom_line));
}
sub vt_clear {
my $self = shift;
my ($vt, $cb_name, $arg1, $arg2) = @_;
$arg1 //= '?';
$arg2 //= '?';
$self->log( "VT Cleared");
}
sub vt_scr_dn {
my $self = shift;
my ($vt, $cb_name, $arg1, $arg2) = @_;
$arg1 //= '?';
$arg2 //= '?';
$self->log( "Scroll Down");
}
sub vt_scr_up {
my $self = shift;
my ($vt, $cb_name, $arg1, $arg2) = @_;
$arg1 //= '?';
$arg2 //= '?';
$self->log( "Scroll Up");
}
sub vt_goto {
my $self = shift;
my ($vt, $cb_name, $arg1, $arg2) = @_;
$arg1 //= '?';
$arg2 //= '?';
$self->log( "Goto: $arg1, $arg2");
}
sub vt_dump {
my ($self) = @_;
my $vt = $self->parent->vt;
my $rows = $self->parent->terminal_height;
my $str = '';
for my $y (1..$rows) {
$str .= $vt->row_sgrtext($y) . "\n";
}
return $str;
}
sub log {
my ($self, $msg) = @_;
$self->parent->_logfile_fh->say($msg);
}
__PACKAGE__->meta->make_immutable;
no Moose;