107 lines
2.2 KiB
Perl
107 lines
2.2 KiB
Perl
package HexChat::List::Network::Entry;
|
|
use strict;
|
|
use warnings;
|
|
|
|
my %key_for = (
|
|
I => "irc_nick1",
|
|
i => "irc_nick2",
|
|
U => "irc_user_name",
|
|
R => "irc_real_name",
|
|
P => "server_password",
|
|
B => "nickserv_password",
|
|
N => "network",
|
|
D => "selected",
|
|
E => "encoding",
|
|
);
|
|
my $letter_key_re = join "|", keys %key_for;
|
|
|
|
sub parse {
|
|
my $data = shift;
|
|
my $entry = {
|
|
irc_nick1 => undef,
|
|
irc_nick2 => undef,
|
|
irc_user_name => undef,
|
|
irc_real_name => undef,
|
|
server_password => undef,
|
|
|
|
# the order of the channels need to be maintained
|
|
# list of { channel => .., key => ... }
|
|
autojoins => HexChat::List::Network::AutoJoin->new( '' ),
|
|
connect_commands => [],
|
|
flags => {},
|
|
selected => undef,
|
|
encoding => undef,
|
|
servers => [],
|
|
nickserv_password => undef,
|
|
network => undef,
|
|
};
|
|
|
|
my @fields = split /\n/, $data;
|
|
chomp @fields;
|
|
|
|
$entry->{ autojoins } = HexChat::List::Network::AutoJoin->new();
|
|
|
|
for my $field ( @fields ) {
|
|
SWITCH: for ( $field ) {
|
|
/^($letter_key_re)=(.*)/ && do {
|
|
$entry->{ $key_for{ $1 } } = $2;
|
|
last SWITCH;
|
|
};
|
|
|
|
/^J.(.*)/ && do {
|
|
$entry->{ autojoins }->add( $1 );
|
|
};
|
|
|
|
/^F.(.*)/ && do {
|
|
$entry->{ flags } = parse_flags( $1 );
|
|
};
|
|
|
|
/^S.(.+)/ && do {
|
|
push @{$entry->{servers}}, parse_server( $1 );
|
|
};
|
|
|
|
/^C.(.+)/ && do {
|
|
push @{$entry->{connect_commands}}, $1;
|
|
};
|
|
}
|
|
}
|
|
|
|
# $entry->{ autojoins } = $entry->{ autojoin_channels };
|
|
return $entry;
|
|
}
|
|
|
|
sub parse_flags {
|
|
my $value = shift || 0;
|
|
my %flags;
|
|
|
|
$flags{ "cycle" } = $value & 1 ? 1 : 0;
|
|
$flags{ "use_global" } = $value & 2 ? 1 : 0;
|
|
$flags{ "use_ssl" } = $value & 4 ? 1 : 0;
|
|
$flags{ "autoconnect" } = $value & 8 ? 1 : 0;
|
|
$flags{ "use_proxy" } = $value & 16 ? 1 : 0;
|
|
$flags{ "allow_invalid" } = $value & 32 ? 1 : 0;
|
|
|
|
return \%flags;
|
|
}
|
|
|
|
sub parse_server {
|
|
my $data = shift;
|
|
if( $data ) {
|
|
my ($host, $port) = split /\//, $data;
|
|
unless( $port ) {
|
|
my @parts = split /:/, $host;
|
|
|
|
# if more than 2 then we are probably dealing with a IPv6 address
|
|
# if less than 2 then no port was specified
|
|
if( @parts == 2 ) {
|
|
$port = $parts[1];
|
|
}
|
|
}
|
|
|
|
$port ||= 6667;
|
|
return { host => $host, port => $port };
|
|
}
|
|
}
|
|
|
|
1
|