The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
# $Id: Entry.pm,v 1.2 2004/03/31 20:28:29 claes Exp $

package WWW::Search::Tv::Sweden::TvDotNu::Entry;
use strict;

sub new {
  my ($class, %attr) = @_;
  $class = ref($class) || $class;
  bless {
	 description => "",
	 imdb => "",
	 channel => "",
	 showview => "",
	 
	 %attr,
	}, $class;
}

# Mutators
sub title {
  my $self = shift;
  $self->{title} = shift if @_;
  return $self->{title};
}
  
sub channel {
  my $self = shift;
  $self->{channel} = shift if @_;
  return $self->{channel};
}

sub url {
  my $self = shift;
  return $self->{url};
}

sub showview {
  my $self = shift;
  $self->{showview} = shift if @_;
  return $self->{showview};
}

sub description {
  my $self = shift;
  $self->{description} = shift if @_;
  return $self->{description};
}

sub imdb {
  my $self = shift;
  $self->{imdb} = shift if @_;
  return $self->{imdb};
}

# HTML::Parser callbacks
sub _entry_start_h {
  my ($self) = @_;
  
  return sub {
    my ($tagname, $attr) = @_;

    if($tagname eq 'a') {
      if(exists $attr->{href} && $attr->{href} =~ /imdb\.com/) {
	my $imdb = $attr->{href};
	$imdb =~ s/\n//g;
	$self->imdb($imdb);
      }
    }
  };
}

sub _entry_text_h {
  my ($self) = @_;
  
  return sub {
    my ($text) = @_;
    
    # Make text look nicer
    $text =~ s/^\s+//;
    $text =~ s/\n/ /g;
    $text =~ s/\s+$//;
    $text =~ s/\s+/ /;
    
    if($text =~ /ShowView\s*\|\s*(\d+)\s*\|/i) {  # Check for showview
      $self->showview($1);
    } elsif($text =~ /^.vrigt:\s*(.*)$/) {        # Check for description
      $self->description($1);
    }
  };
}

sub _entry_end_h {
  my ($self) = @_;
  
  return sub {};
}

# Checkers
sub in {
  my ($self, $start_hour, $start_min, $end_hour, $end_min) = @_;
  
  my $start_time = ($start_hour * 60) + $start_min;
  my $end_time = ($end_hour * 60) + $end_min;
  $end_time += 1440 if $end_time < $start_time;
  
  my $entry_start_time = ($self->{start_time}->[0] * 60) + $self->{start_time}->[1];
  return 1 if($entry_start_time > $start_time && $entry_start_time < $end_time);
    
  0;
}

# Formating
sub start_time {
    my ($self) = @_;
    return sprintf("%02d:%02d", $self->{start_time}->[0], $self->{start_time}->[1]);
}

sub end_time {
    my ($self) = @_;
    return sprintf("%02d:%02d", $self->{end_time}->[0], $self->{end_time}->[1]);
}

1;