Mac::EyeTV - Interface to the Elgato EyeTV Digital Video Recorder


Mac-EyeTV documentation Contained in the Mac-EyeTV distribution.

Index


Code Index:

NAME

Top

Mac::EyeTV - Interface to the Elgato EyeTV Digital Video Recorder

SYNOPSIS

Top

  use Mac::EyeTV;
  my $eyetv = Mac::EyeTV->new();

  # See Mac::EyeTV::Channel
  foreach my $channel ($eyetv->channels) {
    my $name   = $channel->name;
    my $number = $channel->number;
    print "$number $name\n";
  }

  # See Mac::EyeTV::Programme
  foreach my $programme ($eyetv->programmes) {
    my $start = $programme->start;
    my $stop  = $programme->stop;
    my $title = $programme->title;
    print "$title $start - $stop\n";
  }

DESCRIPTION

Top

This module allows you to interface to the Elgato EyeTV Digital Video Recorder. EyeTV is a piece of software and hardware for Mac OS X which can record and play back television much like a Tivo. This module allows you to interface to the EyeTV software, view the channel list and the recorded programmes and schedule recordings.

See Mac::EyeTV::Programme for information on scheduling a recording.

You should create Mac::Glue bindings to EyeTV before using this (along the lines of 'sudo gluemac EyeTV').

The EyeTV software itself is available from Elgato Systems at http://www.elgato.com/index.php?file=support_updates_eyetv

METHODS

Top

new

This is the constructor, which takes no arguments:

  my $eyetv = Mac::EyeTV->new();

channels

This returns the channels known by EyeTV:

  # See Mac::EyeTV::Channel
  foreach my $channel ($eyetv->channels) {
    my $name   = $channel->name;
    my $number = $channel->number;
    print "$number $name\n";
  }

programmes

This returns the programmes known by EyeTV:

  # See Mac::EyeTV::Programme
  foreach my $program ($eyetv->programmes) {
    my $start = $programme->start;
    my $stop  = $programme->stop;
    my $title = $programme->title;
    print "$title $start - $stop\n";
  }

recordings

This returns the recordings known by EyeTV:

  # See Mac::EyeTV::Programme
  foreach my $program ($eyetv->programmes) {
    my $start = $programme->start;
    my $stop  = $programme->stop;
    my $title = $programme->title;
    print "$title $start - $stop\n";
  }

AUTHOR

Top

Leon Brocard <acme@astray.com>.

COPYRIGHT

Top


Mac-EyeTV documentation Contained in the Mac-EyeTV distribution.

package Mac::EyeTV;
use strict;
use warnings;
use Mac::Glue;
use Mac::EyeTV::Channel;
use Mac::EyeTV::Programme;
use Mac::EyeTV::Recording;
use base qw(Class::Accessor::Fast);
__PACKAGE__->mk_accessors(qw(eyetv));
our $VERSION = "0.30";

sub new {
  my $class = shift;
  my $self  = {};
  bless $self, $class;

  my $eyetv = Mac::Glue->new('EyeTV');
  $self->eyetv($eyetv);

  return $self;
}

sub channels {
  my $self  = shift;
  my $eyetv = $self->eyetv;
  my @channels;

  my @eyetv_channels = $eyetv->obj('channels')->get;
  foreach my $eyetv_channel (@eyetv_channels) {
    my $channel = Mac::EyeTV::Channel->new;
    $channel->channel($eyetv_channel);
    $channel->number($eyetv_channel->prop('channel number')->get);
    $channel->name($eyetv_channel->prop('name')->get);
    push @channels, $channel;
  }
  return @channels;
}

sub programmes {
  my $self  = shift;
  my $eyetv = $self->eyetv;
  my @programmes;

  my @eyetv_programmes = $eyetv->obj('programs')->get;
  foreach my $eyetv_programme (@eyetv_programmes) {
    my $programme = Mac::EyeTV::Programme->new;
    $programme->programme($eyetv_programme);

    my $start =
      DateTime->from_epoch(epoch => $eyetv_programme->prop("start time")->get);
    my $duration =
      DateTime::Duration->new(
      seconds => $eyetv_programme->prop("duration")->get);
    my $stop = $start + $duration;

    $programme->start($start);
    $programme->stop($stop);

    my %map = (
      'channel_number' => 'channel number',
      'station_name '  => 'station name',
      'input_source'   => 'input source',
      'id'             => 'unique ID',
    );

    foreach my $prop (
      qw(title description channel_number station_name input_source repeats quality enabled id)
      )
    {
      my $eyetv_prop = $map{$prop} || $prop;
      my $value = $eyetv_programme->prop($eyetv_prop)->get;
      $programme->$prop($value);
    }

    push @programmes, $programme;
  }
  return @programmes;
}

sub recordings {
  my $self  = shift;
  my $eyetv = $self->eyetv;
  my @programmes;

  my @eyetv_programmes = $eyetv->obj('recordings')->get;
  foreach my $eyetv_programme (@eyetv_programmes) {
    my $programme = Mac::EyeTV::Recording->new;
    $programme->recording($eyetv_programme);

    my $start =
      DateTime->from_epoch(epoch => $eyetv_programme->prop("start time")->get);
    my $duration =
      DateTime::Duration->new(
      seconds => $eyetv_programme->prop("duration")->get);
    my $stop = $start + $duration;

    $programme->start($start);
    $programme->stop($stop);

    my %map = (
      'channel_number' => 'channel number',
      'station_name '  => 'station name',
      'input_source'   => 'input source',
      'id'             => 'unique ID',
    );

    foreach my $prop (
      qw(title description channel_number station_name input_source repeats quality enabled busy id)
      )
    {
      my $eyetv_prop = $map{$prop} || $prop;
      my $value = $eyetv_programme->prop($eyetv_prop)->get;
      $programme->$prop($value);
    }

    push @programmes, $programme;
  }
  return @programmes;
}

1;

__END__