#!/usr/bin/perl -w
# grab_fi_icons_xmltvids
# modified by g.choteau juin 2012
# By Ilkka Tengvall 14.10.2007
# Shamelesly copied from grabukicons.pl made by Justin Hornsby 19 October 2006
# 
# A script for downloading Finnish TV channel icons and set the xmltvid fields.
# Also generates videosource xml file.
#
# Usage info will be output if the script is run with no arguments (or
# insufficient arguments)
#

# PERL MODULES WE WILL BE USING
use DBI;
use DBD::mysql

#
$host     = 'localhost';
$database = 'mythconverg';
$user     = 'mythtv';
$pass     = $user;

$db = undef;
$connect = undef;
my @name;
my @data;
my $item;

######################################
#                                    #
#        SUBROUTINES ARE HERE        #
#                                    #
######################################


# Try to find the database
#
sub findDatabase()
{
    my $found = 0;
    my @mysql = (
        "$ENV{HOME}/.mythtv/config.xml",
        'config.xml'
    );
    foreach my $file (@mysql) {
        next unless (-e $file);
        $found = 1;
	open(CONF, $file) or die "Unable to read $file:  $!\n";
	while (my $line = <CONF>) {
	# Search through the XML data
        if ($line =~ m#<Host>(.*?)</Host>#) {
            $host  = $1;
        }
        elsif ($line =~ m#<UserName>(.*?)</UserName>#) {
            $user  = $1;
        }
        elsif ($line =~ m#<Password>(.*?)</Password>#) {
            $pass  = $1;
            $pass =~ s/&amp;/&/sg;
            $pass =~ s/&gt;/>/sg;
            $pass =~ s/&lt;/</sg;
        }
        elsif ($line =~ m#<DatabaseName>(.*?)</DatabaseName>#) {
            $database  = $1;
        }
        
    }
    close CONF;

if ( ! $found )
    {   die "Unable to locate mysql.txt:  $!\n\n"  }
}
}

#  DB connect subroutine
# =======================
# openDatabase() - Connect or die
#

sub openDatabase()
{
    $db = DBI->connect("dbi:mysql:database=$database" .
                       ":host=$host", $user, $pass)
    or die "Cannot connect to database: $!\n\n";

    return $db;
}


$usage = "\nPlease pass the location of the channel icons as an argument (e.g. /usr/share/mythtv/icons) \n ";

# find the database

findDatabase();

# get this script's ARGS
#

# if user hasn't passed enough arguments, die and print the usage info

unless ($ARGV[0])
{
    die "$usage";
}

$location = $ARGV[0];

$connect = openDatabase(); 

$query = "select name from channel where name != NULL or name NOT like ".'""'.";";
$query_handle = $connect->prepare($query);
$query_handle->execute()  || die "Unable to query channel table";


open(FILE, "lookup.txt") or die("Unable to open file");
                                  @data = <FILE>;
                                  close(FILE);
 
foreach $chan (@data)
{
    @name_url = split('\|', $chan);
    $xmltvid_map{$name_url[0]} = $name_url[1];
    $icon_map{$name_url[0]} = $name_url[2];
}

while (@channame = $query_handle->fetchrow())
{
    foreach $id (@channame)
    {
        if ($xmltvid_map{$id})
        {
            $xmltvid=$xmltvid_map{$id};
            $xmltvid=~ s/\s+$//;
            $xmltvid=~ s/^\s+//;
            if ($xmltvid ne "none")
            { 
                $db_xmltvid{$id} = $xmltvid;
            }
        } 
        if ($icon_map{$id})
        {
            $iconloc=$icon_map{$id};
            $iconloc =~ s/\s+$//;
            $iconloc =~ s/^\s+//;
            if ($iconloc ne "none")
            { 
                @name = split('/', $iconloc);
                $num=@name;
                $filename=$name[$num-1];
                $command = "wget -q $iconloc -O $location/$filename";
                print "grabbing $iconloc ..";
                system ($command);
                print ".. done \n";
                $dbicon{$id} = $location."/".$filename;
            }
        } 
    }
}
$query_handle->finish;

print "Icons grabbed and downloaded to $location \n.",
      "  Updating the database....\n";
foreach $item (keys %dbicon) {
    print "setting channel $item to have icon from $dbicon{$item} \n";
    $query = "UPDATE channel SET icon = ".'"'.$dbicon{$item}.'"'." WHERE name = ".'"'.$item.'"'.";";
    $query_handle = $connect->prepare($query);
    $query_handle->execute()  || die "Unable to query channel table";
}

foreach $item (keys %db_xmltvid) {
    print "setting channel $item to have xmltvid $db_xmltvid{$item} \n";
    $query = "UPDATE channel SET xmltvid = ".'"'.$db_xmltvid{$item}.'"'." WHERE name = ".'"'.$item.'"'.";";
    $query_handle = $connect->prepare($query);
    $query_handle->execute()  || die "Unable to query channel table";
}

print "To get xmltvdata with mythfilldatabase you need to copy paste \n",
      "the following text into videosource file:\n",
      "(trying to find name from database...)\n"; 
$query = "SELECT name FROM videosource;";
$query_handle = $connect->prepare($query);
$query_handle->execute()  || die "Unable to query channel table";
while ($videosource_file = $query_handle->fetchrow())
{
    print "Possible videosource filename: ~/.mythtv/$videosource_file.xmltv\n";
} 
$query_handle->finish;

print "--------------- cut beginning from here ----------------------------\n";
foreach $item (keys %db_xmltvid) {
    $ch_id = $db_xmltvid{$item}; 
    $ch_id =~ s/\.+.*$//;
    print "channel $ch_id $item\n";
}
print "--------------- end cut --------------------------------------------\n";
print "Now remember to save text above and run mythfilldatabase --update!\n";

print "done! \n";
