Net::FreeDB2::Response::Sites - FreeDB/CDDB sites response class


Net-FreeDB2 documentation Contained in the Net-FreeDB2 distribution.

Index


Code Index:

NAME

Top

Net::FreeDB2::Response::Sites - FreeDB/CDDB sites response class

SYNOPSIS

Top

See Net::FreeDB2.

DESCRIPTION

Top

The Net::FreeDB2::Response::Sites class contains FreeDB/CDDB response information for sites. It is a subclass of Net::FreeDB2::Response.

CONSTRUCTOR

Top

new ([OPT_HASH_REF])

Creates a new Net::FreeDB2::Response::Sites object. Calls read () if option content_ref is passed through OPT_HASH_REF.

Options for OPT_HASH_REF may include:

content_ref

If defined, passed to read ().

METHODS

Top

read (OPT_HASH_REF)

Reads a FreeDB/CDDB response from the content_ref option passed through HASH reference OPT_HASH_REF. Throws an Error::Simple exception option content_ref is not specified or if the first line of content_ref does not contain a valid code.

Options for OPT_HASH_REF may include:

content_ref

Mandatory option containing the content replies from the FreeDB/CDDB server.

setSites (LIST)

Set the site objects. LIST is a list of Net::FreeDB2::Site objects.

pushSites (LIST)

Push site objects onto the site list. LIST is a list of Net::FreeDB2::Site objects.

getSites ()

Returns the list of all Net::FreeDB2::Site objects.

SEE ALSO

Top

Net::FreeDB2::Response.

BUGS

Top

None known.

HISTORY

Top

First development: September 2002

AUTHOR

Top

Vincenzo Zocca <Vincenzo@Zocca.com>

COPYRIGHT

Top

LICENSE

Top

This file is part of the Net::FreeDB2 module hierarchy for Perl by Vincenzo Zocca.

The Net::FreeDB2 module hierarchy is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

The Net::FreeDB2 module hierarchy is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with the Net::FreeDB2 module hierarchy; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA


Net-FreeDB2 documentation Contained in the Net-FreeDB2 distribution.

package Net::FreeDB2::Response::Sites;

# Copyright 2002, Vincenzo Zocca.

# See LICENSE section for usage and distribution rights.

require 5.005_62;
use strict;
use warnings;

require Exporter;
use AutoLoader qw(AUTOLOAD);
use Error qw (:try);
use base qw (Net::FreeDB2::Response Exporter);

#our @ISA = qw(Exporter);

# Items to export into callers namespace by default. Note: do not export
# names by default without a very good reason. Use EXPORT_OK instead.
# Do not simply export all your public functions/methods/constants.

# This allows declaration	use Net::FreeDB2::Response::Sites ':all';
# If you do not need this, moving things directly into @EXPORT or @EXPORT_OK
# will save memory.
our %EXPORT_TAGS = ( 'all' => [ qw(
	
) ] );

our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } );

our @EXPORT = qw(
	
);
our $VERSION = '0.01';

my $CODE_RX = '^\s*(\d{3})\s+';

sub new {
	my $class = shift;

	my $self = {};
	bless ($self, (ref($class) || $class));
	return ($self->_initialize (@_));
}

sub _initialize {
	my $self = shift;
	my $opt = shift || {};

	defined ($opt->{content_ref}) and $self->read ($opt);
	return ($self);
}

sub read {
	my $self = shift;
	my $opt = shift || {};

	# Check if content_ref is specified
	exists ($opt->{content_ref}) || throw Error::Simple ('ERROR: Net::FreeDB2::Response::Sites::read, option \'content_ref\' not defined.');

	# Convert $opt->{content_ref} to @content_ref
	my @content_ref = split (/[\n\r]+/, ${$opt->{content_ref}});

	# Parse first line
	my $line = shift (@content_ref);
	my ($code) = $line =~ /$CODE_RX/;
	defined ($code) || throw Error::Simple ('ERROR: Net::FreeDB2::Response::Sites::read, first line of specified \'content_ref\' does not contain a code.');
	if ($code == 210) {
		my @sites = ();
		while (my $line = shift (@content_ref)) {
			$line eq '.' && last;
			$line =~ /^\s*.\s*$/ && last;
			my @line = split (/\s/, $line, 5);
			use Net::FreeDB2::Site;
			push (@sites, Net::FreeDB2::Site->new ({
				site => $line[0],
				port => $line[1],
				latitude => $line[2],
				longitude => $line[3],
				description => $line[4],
			}));
		}
		$self->setSites (@sites);
		$self->setError (0);
		$self->setResult ('OK');
	} elsif ($code == 401) {
		$self->setSites ();
		$self->setError (0);
		$self->setResult ('No site information available');
	} else {
		throw Error::Simple ("ERROR: Net::FreeDB2::Response::Sites::read, unknown code '$code' returned.");
	}
}

sub setSites {
	my $self = shift;

	@{$self->{Net_FreeDB2_Response_Sites}{sites}} = @_;
}

sub pushSites {
	my $self = shift;

	push (@{$self->{Net_FreeDB2_Response_Sites}{sites}}, @_);
}

sub getSites {
	my $self = shift;

	return (@{$self->{Net_FreeDB2_Response_Sites}{sites}});
}

1;
__END__