Make index.php

From MythTV Official Wiki
Revision as of 21:16, 17 July 2012 by Edster (talk | contribs) (New script submitted - make_index.php)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search


Author Ed ODonnell
Description A simple script to create a directory structure with links to the recordings inside them so it can be used by simple media players like the Apple TV box.
Supports


make_index.php

Here is a simple script to create a directory structure with links to the recordings inside them so it can be used by simple media players like the Apple TV box. It can be used on the command line.

Command line usage

If using on the command line, the usage information is as follows:

php -f /---location of script---/make_index.php

The Code

Script.png make_index.php

<?php

## Make a set of symbolic links for mythtv recordings
## with program names and dates so they can be used by other media players
##
## by Ed ODonnell
##
## Version 00.01 - First draft

# real mythtv recordings directory (note it ends in /)
$realdir = "/var/lib/mythtv/recordings/";

# Directory to make links in (note it ends in /)
$linkdir = "/var/lib/mythtv/index/";

# Mythtv Database details
$dbserver = "localhost";
$dbname = "mythconverg";
$dbuser = "mythtv";
$dbpasswd = "mythtv";

#First lets check the detination directory exists
if (!is_dir($linkdir)) {
        if (!mkdir($linkdir, 0777, true)) {
            die('Failed to create folder');
        }
}

# Next we connect to the database
mysql_connect($dbserver,$dbuser,$dbpasswd);
mysql_select_db($dbname) or die( "Unable to select database");

# Setup a query to return the names of the programs and their filenames
$query="select chanid, starttime, title FROM recordedprogram ;";
$result=mysql_query($query);
$num=mysql_numrows($result);

# Now loop through each program
$i=0;
while ($i < $num) {
        $chanid=mysql_result($result,$i,"chanid");
        $starttime=mysql_result($result,$i,"starttime");
        $title=mysql_result($result,$i,"title");
        # These lines might be of use later on :
        # $subtitle=mysql_result($result,$i,"subtitle");
        # $description=mysql_result($result,$i,"description");

        # Take just the date from 'startdate' as it also has the time
        $startdate = substr($starttime,0,10);

        # Compile the existing filename from the chanid and the date
        $infilename = $chanid . "_" . substr($starttime,0,4) . substr($starttime,5,2) . substr($starttime,8,2) . substr($starttime,11,2) . substr($starttime,14,2) . substr($starttime,17,2) . ".mpg";

        # strip out characters we cannot have in filenames
        $title = preg_replace('/[^\w\-~_]+/u', '-', $title);

        # get the file names ready for in and out
        $infile = "$realdir" . "$infilename";
        $outfilepath = "$linkdir" . "$title/$startdate";
        $outfile = "$outfilepath" . "/" . "$title-$startdate" . ".mpg";

        # create link folder
        if (!is_dir($outfilepath)) {
                if (!mkdir($outfilepath, 0777, true)) {
                    die('Failed to create link folder\n');
                }
        }

        # and create a hard link (note I do not use -S for symbolic so it works
        # on firecore media player on an apple tv box. add the -s if you need it
        exec ("ln -v $infile $outfile");
        $i++;
}
# and close the database now we are finished with it
mysql_close();

?>



Note use of hard links

The FireCore Media player that I tested on does not work with symbolic links so I took the "-s" off the link command. This make a new filename pointer which points at the same data area on the disk (the same file). If you delete one the other will be left alone.