#!/usr/bin/perl

use DCOP;
use HTML::Entities;
use strict;

################################################################################
# main()
################################################################################

my $client = new DCOP();
$client->attach();

my $collection = $client->createObject("juk", "Collection");
my $player = $client->createObject("juk", "Player");

my $playlistsRef = $collection->playlists();
my $dialogCommand = "kdialog --combobox \"Export Playlist:\"";

foreach my $playlist (@$playlistsRef) {
  $playlist =~ s/\"/\\\"/g;
  $dialogCommand .= " \"$playlist\"";
}

my $playlist = `$dialogCommand`;
chomp($playlist);

if(length($playlist) == 0) {
  exit;
}

my $fileName = `kdialog --getsavefilename "" "*.html"`;
chomp($fileName);

if(length($fileName) == 0) {
  exit;
}

open(OUTPUT, ">$fileName");

my $playlistTrackListRef = $collection->playlistTracks($playlist);
my $propertiesRef = $player->trackProperties();

&printHeader($playlist, $propertiesRef);

foreach my $track (@$playlistTrackListRef) {
  my @properties;
  foreach my $property (@$propertiesRef) {
    push(@properties, $collection->trackProperty($track, $property));
  }
  &printLine(\@properties);
}

&printFooter();

close(OUTPUT);

################################################################################
# printHeader()
################################################################################

sub printHeader {
  my ($playlist, $propertiesRef) = @_;

  HTML::Entities::encode($playlist);

  print OUTPUT "<html>\n";
  print OUTPUT "<head><title>$playlist</title></head>\n";
  print OUTPUT "<body>\n";
  print OUTPUT "<h1>$playlist</h1>\n";
  print OUTPUT "<table width=\"100\%\" border=\"1\">\n";
  print OUTPUT "<tr>\n";

  foreach my $property (@$propertiesRef) {
    HTML::Entities::encode($property);
    print OUTPUT "<th>$property</th>\n";
  }

  print OUTPUT "</tr>\n";
}

################################################################################
# printLine()
################################################################################

sub printLine {
  my ($propertiesRef) = @_;

  print OUTPUT "<tr>\n";
  foreach my $property (@$propertiesRef) {
    HTML::Entities::encode($property);
    if(length($property) == 0) {
      $property = "&nbsp;";
    }
    print OUTPUT "<td>$property</td>\n";
  }
  print OUTPUT "</tr>\n";
}

################################################################################
# printFooter()
################################################################################

sub printFooter {
  print OUTPUT "</table>\n";
  print OUTPUT "</body>\n";
  print OUTPUT "</html>\n";
}

