summary refs log tree commit diff stats
path: root/plugins/perl/lib/Xchat/List/Network.pm
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/perl/lib/Xchat/List/Network.pm')
-rw-r--r--plugins/perl/lib/Xchat/List/Network.pm32
1 files changed, 32 insertions, 0 deletions
diff --git a/plugins/perl/lib/Xchat/List/Network.pm b/plugins/perl/lib/Xchat/List/Network.pm
new file mode 100644
index 00000000..da2f52dd
--- /dev/null
+++ b/plugins/perl/lib/Xchat/List/Network.pm
@@ -0,0 +1,32 @@
+package Xchat::List::Network;
+use strict;
+use warnings;
+use Storable qw(dclone);
+my $last_modified;
+my @servers;
+
+sub get {
+	my $server_file = Xchat::get_info( "xchatdirfs" ) . "/servlist_.conf";
+
+	# recreate the list only if the server list file has changed
+	if( -f $server_file && 
+			(!defined $last_modified || $last_modified != -M $server_file ) ) {
+		$last_modified = -M _;
+
+		if( open my $fh, "<", $server_file ) {
+			local $/ = "\n\n";
+			while( my $record = <$fh> ) {
+				chomp $record;
+				next if $record =~ /^v=/; # skip the version line
+				push @servers, Xchat::List::Network::Entry::parse( $record );
+			}
+		} else {
+			warn "Unable to open '$server_file': $!";
+		}
+	}
+
+	my $clone = dclone( \@servers );
+	return @$clone;
+}
+
+1