diff options
author | Cecil Hugh Watson <knoppmyth@gmail.com> | 2009-09-26 01:57:08 (GMT) |
---|---|---|
committer | Cecil Hugh Watson <knoppmyth@gmail.com> | 2009-09-26 01:57:08 (GMT) |
commit | 7b29169fff9e7c624890c5edffe85def8a293136 (patch) | |
tree | 47753889faa3a2063b66d1c7e7681e703eb1b39a /abs/extra/myth2ipod | |
parent | c491dea779dac29afff3578bf8245943817c2339 (diff) | |
download | linhes_pkgbuild-7b29169fff9e7c624890c5edffe85def8a293136.zip linhes_pkgbuild-7b29169fff9e7c624890c5edffe85def8a293136.tar.gz linhes_pkgbuild-7b29169fff9e7c624890c5edffe85def8a293136.tar.bz2 |
LinHES 6.01.00
Diffstat (limited to 'abs/extra/myth2ipod')
-rwxr-xr-x | abs/extra/myth2ipod/PKGBUILD | 19 | ||||
-rwxr-xr-x | abs/extra/myth2ipod/iPod.pm | 184 | ||||
-rwxr-xr-x | abs/extra/myth2ipod/m2iweb.php | 157 | ||||
-rwxr-xr-x | abs/extra/myth2ipod/myth2ipod | 310 | ||||
-rwxr-xr-x | abs/extra/myth2ipod/myth2ipod-userjob.sh | 6 | ||||
-rwxr-xr-x | abs/extra/myth2ipod/myth2ipod.install | 38 |
6 files changed, 714 insertions, 0 deletions
diff --git a/abs/extra/myth2ipod/PKGBUILD b/abs/extra/myth2ipod/PKGBUILD new file mode 100755 index 0000000..1942f2b --- /dev/null +++ b/abs/extra/myth2ipod/PKGBUILD @@ -0,0 +1,19 @@ +pkgname=myth2ipod +pkgver=0.2 +pkgrel=28 +arch=("i686") +pkgdesc="A multimedia framework based on the MPEG-4 Systems standard" +url="myth2ipod.com" +depends=('gpac' 'nuvexport' ) +install="myth2ipod.install" +source=( myth2ipod iPod.pm myth2ipod-userjob.sh m2iweb.php) + + +build() { + cd $startdir/src + install -D -m 755 myth2ipod $startdir/pkg/usr/bin/myth2ipod + install -D -m 755 myth2ipod-userjob.sh /$startdir/pkg/usr/bin/myth2ipod-userjob.sh + install -D -m755 iPod.pm $startdir/pkg/usr/share/nuvexport/export/ffmpeg/iPod.pm + mkdir -m755 -p $startdir/pkg/myth/ipodfeed + install -D -m755 m2iweb.php $startdir/pkg/myth/ipodfeed/ +} diff --git a/abs/extra/myth2ipod/iPod.pm b/abs/extra/myth2ipod/iPod.pm new file mode 100755 index 0000000..24eae99 --- /dev/null +++ b/abs/extra/myth2ipod/iPod.pm @@ -0,0 +1,184 @@ +# +# $Date: 2006-01-18 00:15:31 -0800 (Wed, 18 Jan 2006) $ +# $Revision: 226 $ +# $Author: xris $ +# +# export::ffmpeg::iPod +# + +package export::ffmpeg::iPod; + use base 'export::ffmpeg'; + +# Load the myth and nuv utilities, and make sure we're connected to the database + use nuv_export::shared_utils; + use nuv_export::cli; + use nuv_export::ui; + use mythtv::db; + use mythtv::recordings; + +# Load the following extra parameters from the commandline + add_arg('quantisation|q=i', 'Quantisation'); + add_arg('a_bitrate|a=i', 'Audio bitrate'); + add_arg('v_bitrate|v=i', 'Video bitrate'); + add_arg('multipass!', 'Enably two-pass encoding.'); + + sub new { + my $class = shift; + my $self = { + 'cli' => qr/\bipod\b/i, + 'name' => 'Export to iPod', + 'enabled' => 1, + 'errors' => [], + 'defaults' => {}, + }; + bless($self, $class); + + # Initialize the default parameters + $self->load_defaults(); + + # Verify any commandline or config file options + die "Audio bitrate must be > 0\n" unless (!defined $self->val('a_bitrate') || $self->{'a_bitrate'} > 0); + die "Video bitrate must be > 0\n" unless (!defined $self->val('v_bitrate') || $self->{'v_bitrate'} > 0); + + # VBR, multipass, etc. + if ($self->val('multipass')) { + $self->{'vbr'} = 0; + } + elsif ($self->val('quantisation')) { + die "Quantisation must be a number between 1 and 31 (lower means better quality).\n" if ($self->{'quantisation'} < 1 || $self->{'quantisation'} > 31); + $self->{'vbr'} = 1; + } + + # Initialize and check for ffmpeg + $self->init_ffmpeg(); + + # Can we even encode ipod? + # if (!$self->can_encode('mov')) { + # push @{$self->{'errors'}}, "Your ffmpeg installation doesn't support encoding to mov file formats."; + # } + if (!$self->can_encode('xvid')) { + push @{$self->{'errors'}}, "Your ffmpeg installation doesn't support encoding to xvid video."; + } + if (!$self->can_encode('aac')) { + push @{$self->{'errors'}}, "Your ffmpeg installation doesn't support encoding to aac audio."; + } + # Any errors? disable this function + $self->{'enabled'} = 0 if ($self->{'errors'} && @{$self->{'errors'}} > 0); + # Return + return $self; + } + +# Load default settings + sub load_defaults { + my $self = shift; + # Load the parent module's settings + $self->SUPER::load_defaults(); + # Default bitrates + $self->{'defaults'}{'v_bitrate'} = 384; + $self->{'defaults'}{'a_bitrate'} = 64; + } + +# Gather settings from the user + sub gather_settings { + my $self = shift; + # Load the parent module's settings + $self->SUPER::gather_settings(); + # Audio Bitrate + $self->{'a_bitrate'} = query_text('Audio bitrate?', + 'int', + $self->val('a_bitrate')); + # VBR options + if (!$is_cli) { + $self->{'vbr'} = query_text('Variable bitrate video?', + 'yesno', + $self->val('vbr')); + if ($self->{'vbr'}) { + $self->{'multipass'} = query_text('Multi-pass (slower, but better quality)?', + 'yesno', + $self->val('multipass')); + if (!$self->{'multipass'}) { + while (1) { + my $quantisation = query_text('VBR quality/quantisation (1-31)?', + 'float', + $self->val('quantisation')); + if ($quantisation < 1) { + print "Too low; please choose a number between 1 and 31.\n"; + } + elsif ($quantisation > 31) { + print "Too high; please choose a number between 1 and 31\n"; + } + else { + $self->{'quantisation'} = $quantisation; + last; + } + } + } + } else { + $self->{'multipass'} = 0; + } + # Ask the user what video bitrate he/she wants + $self->{'v_bitrate'} = query_text('Video bitrate?', + 'int', + $self->val('v_bitrate')); + } + } + + sub export { + my $self = shift; + my $episode = shift; + # Force to 4:3 aspect ratio + $self->{'out_aspect'} = 1.3333; + $self->{'aspect_stretched'} = 1; + # PAL or NTSC? + my $standard = ($episode->{'finfo'}{'fps'} =~ /^2(?:5|4\.9)/) ? 'PAL' : 'NTSC'; + $self->{'width'} = 320; + $self->{'height'} = ($standard eq 'PAL') ? '288' : '240'; + $self->{'out_fps'} = ($standard eq 'PAL') ? 25 : 29.97; + # Embed the title + my $safe_title = shell_escape($episode->{'show_name'}.' - '.$episode->{'title'}); + # Dual pass? + if ($self->{'multipass'}) { + # Build the common ffmpeg string + my $ffmpeg_xtra = ' -b ' . $self->{'v_bitrate'} + .' -bufsize 65535' + .' -vcodec xvid -acodec aac ' + .' -ab ' . $self->{'a_bitrate'} + ." -f mp4 -title $safe_title"; + # Add the temporary file to the list + push @tmpfiles, "/tmp/xvid.$$.log"; + # Back up the path and use /dev/null for the first pass + my $path_bak = $self->{'path'}; + $self->{'path'} = '/dev/null'; + # Build the ffmpeg string + print "First pass...\n"; + $self->{'ffmpeg_xtra'} = " -pass 1 -passlogfile '/tmp/divx.$$.log'" + .$ffmpeg_xtra; + $self->SUPER::export($episode, ''); + # Restore the path + $self->{'path'} = $path_bak; + # Second Pass + print "Final pass...\n"; + $self->{'ffmpeg_xtra'} = " -pass 2 -passlogfile '/tmp/divx.$$.log'" + .$ffmpeg_xtra; + } + # Single Pass + else { + $self->{'ffmpeg_xtra'} = ' -b ' . $self->{'v_bitrate'} + .(($self->{'vbr'}) + ? ' -qmin '.$self->{'quantisation'} + .' -qmax 31 -minrate 32' + .' -maxrate '.(2*$self->{'v_bitrate'}) + .' -bt 32' + : '') + .' -vcodec xvid -acodec aac ' + .' -ab ' . $self->{'a_bitrate'} + ." -f mp4 -title $safe_title"; + } + # Execute the (final pass) encode + $self->SUPER::export($episode, '.mp4'); + } + +1; #return true + +# vim:ts=4:sw=4:ai:et:si:sts=4 + diff --git a/abs/extra/myth2ipod/m2iweb.php b/abs/extra/myth2ipod/m2iweb.php new file mode 100755 index 0000000..a8a9e4d --- /dev/null +++ b/abs/extra/myth2ipod/m2iweb.php @@ -0,0 +1,157 @@ +<? +//archive.php +// based on m2iweb.php by http://anthony.lusby.us/m2iweb/ +//release 0.1 +//10/05/07 +?> + +<html> +<head> + <title>MythWeb - Archive Recordings</title> + + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + + <script type="text/javascript" src="/mythweb/js/init.js"></script> + <script type="text/javascript" src="/mythweb/js/browser.js"></script> + <script type="text/javascript" src="/mythweb/js/utils.js"></script> + + <script type="text/javascript" src="/mythweb/js/mouseovers.js"></script> + <script type="text/javascript" src="/mythweb/js/visibility.js"></script> + <script type="text/javascript" src="/mythweb/js/ajax.js"></script> + + <link rel="stylesheet" type="text/css" href="/mythweb/skins/default/style.css" /> + <link rel="stylesheet" type="text/css" href="/mythweb/skins/default/header.css" /> + <link rel="stylesheet" type="text/css" href="/mythweb/skins/default/menus.css" /> + <link rel="stylesheet" type="text/css" href="/mythweb/skins/default/programming.css" /> + + <link rel="stylesheet" type="text/css" href="/mythweb/skins/default/status.css" /> + +</head> + +<body> + +<div id="page_header" class="clearfix"> + <div id="logo_box"> + <a id="mythtv_logo" href="/mythweb/"> + <img src="/mythweb/skins/default/img/mythtv-logo.png" +width="174" height="48" border="0" alt="MythTV" class="alpha_png"> + </a> + + </div> + <div id="sections"> + <a id="tv_link" href="/mythweb/tv" onmouseover="return help_text('TV functions, including recorded programs.')" onmouseout="return help_text()"> + <img src="/mythweb/skins/default/img/tv.png" width="48" height="48" class="alpha_png" alt="MythTV"/> + </a> + <a id="video_link" href="/mythweb/video" onmouseover="return help_text('MythVideo on the web.')" onmouseout="return help_text()"> + <img src="/mythweb/skins/default/img/video.png" width="48" height="48" class="alpha_png" alt="MythVideo" /> + </a> + <a id="weather_link" href="/mythweb/weather" onmouseover="return help_text('MythWeb Weather.')" onmouseout="return help_text()"> + <img src="/mythweb/skins/default/img/weather.png" width="48" height="48" class="alpha_png" alt="MythWeather" /> + </a> + <a id="settings_link" href="/mythweb/settings" onmouseover="return help_text('Edit MythWeb and some MythTV settings.')" onmouseout="return help_text()"> + <img src="/mythweb/skins/default/img/settings.png" width="48" height="48" class="alpha_png" alt="Settings" /> + </a> + </div> + <div id="extra_header"> + <div id="help_wrapper"> + <div id="help_box"> + + <div id="help_text_default"> + MythWeb: Mon May 16, 2006, 09:09 PM </div> + <div id="help_text"> + </div> + </div> + </div> + <div id="search" > + <form action="/mythweb/tv/search" method="post"> + + <div id="simple_search"> + <input id="search_text" type="text" name="searchstr" size="15" value=""> + <input id="search_submit" type="submit" class="submit" value="Search"> (<a href="/mythweb/tv/search">Advanced</a>) + </div> + <div id="search_options"> + </div> + </form> + + </div> + </div> +</div> + + +<table width="100%" border="0" cellspacing="2" cellpadding="0"> +<tr> + + <td colspan="2" class="menu menu_border_t menu_border_b"><table class="body" width="100%" border="0" + +cellspacing="2" cellpadding="2"> + <tr> + <td><div id="command_choices"> + <a href="/mythweb/" id="category_legend" onmouseover="popup('category_legend'); return true;">MythTV:</a> + + <a href="/mythweb/tv/list">Listings</a> + | + <a href="/mythweb/tv/searches">Searches</a> + | + <a href="/mythweb/tv/schedules">Recording Schedules</a> + (<a href="/mythweb/tv/schedules/manual">Manual</a>, + <a href="/mythweb/tv/schedules/custom">Custom</a>) + | + <a href="/mythweb/tv/upcoming">Upcoming Recordings</a> + | + <a href="/mythweb/tv/recorded">Recorded Programs</a> + | + <a href="/ipodfeed/m2iweb.php">Myth2iPod</a> + | + <a href="/archive/archive.php">Myt2XviD3</a> + | + <a href="/mythweb/status">Backend Status</a> + </div></td> + </tr> + </table></td> + +</tr> +</table> +<table width="100%" border="0" cellpadding="4" cellspacing="2" class="list small"> +<tr><td colspan="10" class="list_separator">View information and delete myth2ipod recordings.</td></tr> +<?php +if (isset($_REQUEST['delete'])){ +$delete = $_REQUEST['delete']; +if ($delete AND substr($delete, -9) == ".ipod.xml") { + echo '<br><font color="red">'; + echo $delete; + unlink($delete) or print(" failed to be "); + echo 'deleted<br>'; + $deletetoo = substr($delete, 0, -3)."mp4"; + echo $deletetoo; + unlink($deletetoo) or print(" failed to be "); + echo 'deleted<br><br><a href="?">Home</a>'; +} +} +else { + $i=1; + foreach (glob("*.ipod.xml") as $file) { + $lines = file($file); + echo '<tr class="recorded"><td class="list"> </td><td>'; + echo '<font color="'; + if (!file_exists(substr($file, 0, -3)."mp4")) { + echo "red"; + } + echo '">'.$i.'</font>'; + echo "</td></td><td><a href=".'"'.substr($file, 0, -3)."mp4".'"'."style='color:white'>".strip_tags($lines[1])."</a></td><td>".strip_tags($lines[7])."</td><td>".strip_tags($lines[6])."</td><td nowrap>".filesizeparse(filesize(substr($file, 0, -3)."mp4"))."</td><td>".'<a href="?delete='.$file.'" onclick="return confirm('."'Are you sure you want to delete?'".')">Delete</a>'."</td>".'<td class="list"> </td>'."</tr>"; + $i++; + } +} +function filesizeparse($size){ + $i=0; + $iec = array(" B", " KB", " MB", " GB", " TB"); + while (($size/1024)>1) { + $size=$size/1024; + $i++; + } + return substr($size,0,strpos($size,'.')+3).$iec[$i]; +} +?> +</table> +</body> +</html> +</code> diff --git a/abs/extra/myth2ipod/myth2ipod b/abs/extra/myth2ipod/myth2ipod new file mode 100755 index 0000000..268a522 --- /dev/null +++ b/abs/extra/myth2ipod/myth2ipod @@ -0,0 +1,310 @@ +#!/usr/bin/perl -w +# VERSION: 1.0b2 - myth2ipod +# Get the latest version, and change log at myth2ipod.com +# Author: Chris aka Wififun - email: wififun@myth2ipod.com +# Contributions and testing by Paul Egli +# modified to use nuvexport by starv at juniks dot org + +# Includes +use DBI; +use Getopt::Long; +use File::Path; + +# User variables +my $portable = "ipod"; +my $feedfile = "/myth/ipodfeed/feed.php"; +my $feedpath = "/myth/ipodfeed/"; +my $wwwloc = "/data/srv/httpd/htdocs"; +my $feedurl = "http://REPLACEME/ipodfeed/"; +my $nuvoptions ="--mode=iPod --nice=19 --cutlist --nodenoise --nodeinterlace --nomultipass"; + +# Some variables +our ($dest, $format, $usage); +our ($db_host, $db_user, $db_name, $db_pass, $video_dir); +our ($hostname, $db_handle, $sql, $statement, $row_ref); +our ($chanid, $start, $nuvfile, @nuvarray); +my $rebuild = '0'; +my $encode = '0'; +my $debug = '0'; +my $setup = '0'; +my $cut = '0'; +my( $rightnow ) = `date`; + +GetOptions ("rebuild" => \$rebuild, + "encode" => \$encode, + "debug" => \$debug, + "setup" => \$setup, + "cut" => \$cut); + +if ($setup == 1){ + system("clear"); + print "Setup will do everything needed to run this script.\n"; + print "This has only been tested on KnoppMyth R5A22.\n"; + print "make sure you have edited the variables for your conguration.\n"; + my $cksetup = &promptUser("\nAre you sure you want to procceed?","n"); + if ($cksetup =~ "y") { + DoSetup(); + exit; + } + print "Setup exited. Nothing done.\n"; + exit; +} +elsif ($rebuild == 1){ + GenerateRSSFeed(); + print "Rebuilding of RSS feed is complete.\n"; + exit; +} +else { + Encode4Portable(); + print "$title is ready for your $portable\n"; + + # Check to see if the feed file exists; if not, create it. + if (! -e $feedfile) { + print "No feed file found. I will make one for you.\n"; + GenerateRSSFeed(); + print "All done.\n"; + } +} + +sub Encode4Portable{ + if ($#ARGV != 1) { + print "Encoding requires options.\nusage: myth2ipod <options> DIRECTORY FILE\n"; + exit; + } + + # Get the show information + $directory = $ARGV[0]; + $file = $ARGV[1]; + @file = split(/_/, $file); + $chanid = $file[0]; + $start = substr $file[1],0,14; + if($debug == 1){ print "$chanid\n$start\n"}; + if (! -e $directory."/".$file){ + print "Oops, the file ".$directory.$file." does not exist.\n"; + exit; + } + + # Connect to the database + PrepSQLRead(); + $db_handle = DBI->connect("dbi:mysql:database=$db_name:host=$db_host", $db_user, $db_pass) + or die "Cannot connect to database: $!\n\n"; + $sql = "SELECT title, subtitle, description, category, starttime FROM recorded WHERE chanid = $chanid AND DATE_FORMAT(starttime,'%Y%m%d%H%i%s') = $start"; + + $statement = $db_handle->prepare($sql) + or die "Couldn't prepare query '$sql': $DBI::errstr\n"; + + $statement->execute() + or die "Couldn't execute query '$sql': $DBI::errstr\n"; + $row_ref = $statement->fetchrow_hashref(); + if($debug == 1){ print "$row_ref->{starttime}\n"}; + $title = $row_ref->{title}; + $subtitle = $row_ref->{subtitle}; + $recorddate = $row_ref->{starttime}; + $description = $row_ref->{description}; + $category = $row_ref->{category}; + $filename = $title."-".$subtitle."-".substr $start, 0, 8; + $filename =~ s/ /_/g; + $filename =~ s/&/+/g; + $filename =~ s/\047//g; + $filename =~ s/[^+0-9a-zA-Z_-]+/_/g; + $filename =~ s/_$//g; + + printf("Starting nuvexport...\n"); + EncodeIt(); + printf("Nuvexport completed, starting xml generation...\n"); + CreateItemXML(); + printf("XML file created for \"$filename\" : Yipeee\n"); + printf("Cleaning up temporary files\n"); + $cmd = "rm -f $feedpath$chanid\_$start.temp.mp4"; + print $cmd."\n"; + if(system($cmd)) { print "Removing nuvexport temp file failed\n"; } + + # remove the cutlist incase we added it. + if ($cut == 1){ + printf("Generating cutlist\n"); + $cmd = "/usr/bin/mythcommflag --chanid $chanid --starttime $start --clearcutlist"; + print $cmd."\n"; + if(system($cmd)) { print "It looks like I was not able to generate a cutlist.\n"; } + } + return 0; +} + +# +# Encode for Portable +# +sub EncodeIt { + # Create cutlist from commercial flagging if -cut was passed to the script + if ($cut == 1){ + printf("Generating cutlist\n"); + $cmd = "/usr/bin/mythcommflag --chanid $chanid --starttime $start --gencutlist"; + print $cmd."\n"; + if(system($cmd)) { print "It looks like I was not able to generate a cutlist.\n"; } + } + + # Use nuvexport to do the work + $cmd = "/usr/bin/nuvexport --chanid=$chanid --start=$start $nuvoptions --filename=$chanid\_$start.temp --path=$feedpath"; + print $cmd."\n"; + if(system($cmd)) { print "Nuvexport encoding seems to have failed\n"; } + + # Now clean up the output so iPods with firmware 1.1 and above can use it + $cmd = "/usr/bin/MP4Box -add $feedpath$chanid\_$start.temp.mp4 $feedpath$chanid\_$start.$portable.mp4"; + print $cmd."\n"; + if(system($cmd)) { print "MP4Box cleanup seems to have failed\n"; } + return 0; +} + +# +# Create XML with <ITEM> tag for this video file +# +sub CreateItemXML { + open(ITEM, ">$feedpath$chanid\_$start.$portable.xml"); + print ITEM "<item>\n"; + print ITEM "<title>".&encodeForXML($title." - ".$subtitle)."</title>\n"; + print ITEM "<itunes:author>MythTV</itunes:author>\n"; + print ITEM "<author>MythTV</author>\n"; + print ITEM "<itunes:category text=\"TV Shows\"></itunes:category>\n"; + print ITEM "<comments>".&encodeForXML($file)."</comments>\n"; + print ITEM "<description>".&encodeForXML($description)."</description>\n"; + print ITEM "<pubDate>".$recorddate."</pubDate>\n"; + print ITEM "<enclosure url=\"".&encodeForXML("$feedurl$chanid\_$start.$portable.mp4")."\" type=\"video/quicktime\" />\n"; + print ITEM "<itunes:duration></itunes:duration>\n"; + print ITEM "<itunes:keywords>".&encodeForXML($title." - ".$subtitle." - ".$category)."</itunes:keywords>\n"; + print ITEM "<category>".&encodeForXML($category)."</category>\n"; + print ITEM "</item>\n"; + print "\"$filename\" has been added to the feed.\n"; + close(ITEM); + return 0; +} + +# +# Generate the RSS feed by combining the ITEM XML Files +# +sub GenerateRSSFeed { + + open(RSS, ">$feedfile"); + print RSS "<?php\n"; + print RSS "header(\"Content-Type: text/xml\");\n"; + print RSS "echo \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\"; ?>\n"; + print RSS "<rss xmlns:itunes=\"http://www.itunes.com/DTDs/Podcast-1.0.dtd\" version=\"2.0\">\n"; + print RSS "<channel>\n"; + print RSS "<title>MythTV - <? if (\$_GET['title'] == \"\") { \$title = \"*\"; echo \"Recorded Programs\"; }\n"; + print RSS "else { \$title = \$_GET['title']; echo str_replace(\"_\",\" \",\$_GET['title']); } ?> </title>\n"; + print RSS "<itunes:author>MythTV - myth2ipod</itunes:author>\n"; + print RSS "<link>".&encodeForXML($feedurl)."</link>\n"; + print RSS "<itunes:subtitle>Transcoded recording for your iPod Video.</itunes:subtitle>\n"; + print RSS "<itunes:summary>Myth TV Recorded Programs for the iPod v.1</itunes:summary>\n"; + print RSS "<description>Myth TV Recorded Programs for the iPod v.1</description>\n"; + print RSS "<itunes:owner>\n"; + print RSS "<itunes:name>MythTV</itunes:name>\n"; + print RSS "<itunes:email>mythtv\@localhost</itunes:email>\n"; + print RSS "</itunes:owner>\n"; + print RSS "<itunes:explicit>No</itunes:explicit>\n"; + print RSS "<language>en-us</language>\n"; + print RSS "<copyright>Copyright 2005.</copyright>\n"; + print RSS "<webMaster>mythtv\@localhost</webMaster>\n"; + print RSS "<itunes:image href=\"http://myth2ipod.com/mythipod_200.jpg\" />\n"; + print RSS "<itunes:category text=\"TV Shows\"></itunes:category>\n"; + print RSS "<category>TV Shows</category>\n"; + print RSS "<itunes:image href=\"http://myth2ipod.com/mythipod_200.jpg\"/>"; + print RSS "<image>"; + print RSS "<url>http://myth2ipod.com/mythipod_200.jpg</url>\n"; + print RSS "<title>MythTV 2 iPod</title>\n"; + print RSS "<link>".&encodeForXML($feedurl)."</link>\n"; + print RSS "<width>200</width>\n"; + print RSS "<height>200</height>\n"; + print RSS "</image>\n"; + print RSS "<? foreach (glob(\$title\.\"*\.$portable\.xml\") as \$file) {include \$file;} ?>\n"; + print RSS "</channel>\n"; + print RSS "</rss>\n"; + close(RSS); + if($debug == 1){ print "I created a feed file, was I supposed to?\n"}; + + return 0; +} + +# substitute for XML entities +sub encodeForXML { + local $result; + $result = $_[0]; + $result =~ s/&/&/g; + $result =~ s/</</g; + $result =~ s/>/>/g; + $result; +} + + +# +# This code taken from one of the mythlink.sh scripts to get MySQL information +# +sub PrepSQLRead{ +# Get the hostname of this machine + $hostname = `hostname`; + chomp($hostname); + +# Read the mysql.txt file in use by MythTV. +# could be in a couple places, so try the usual suspects + my $found = 0; + my @mysql = ('/usr/share/mythtv/mysql.txt', + '/usr/share/mythtv/mysql.txt', + '/etc/mythtv/mysql.txt', + '/usr/local/etc/mythtv/mysql.txt', + "$ENV{HOME}/.mythtv/mysql.txt", + 'mysql.txt' + ); + foreach my $file (@mysql) { + next unless (-e $file); + $found = 1; + open(CONF, $file) or die "Unable to open $file: $!\n\n"; + while (my $line = <CONF>) { + # Cleanup + next if ($line =~ /^\s*#/); + $line =~ s/^str //; + chomp($line); + # Split off the var=val pairs + my ($var, $val) = split(/\=/, $line, 2); + next unless ($var && $var =~ /\w/); + if ($var eq 'DBHostName') { + $db_host = $val; + } + elsif ($var eq 'DBUserName') { + $db_user = $val; + } + elsif ($var eq 'DBName') { + $db_name = $val; + } + elsif ($var eq 'DBPassword') { + $db_pass = $val; + } + # Hostname override + elsif ($var eq 'LocalHostName') { + $hostname = $val; + } + } + close CONF; + } + die "Unable to locate mysql.txt: $!\n\n" unless ($found && $db_host); + return 0; +} + +sub promptUser { + local($promptString,$defaultValue) = @_; + if ($defaultValue) { + print $promptString, "[", $defaultValue, "]: "; + } else { + print $promptString, ": "; + } + + $| = 1; # force a flush after our print + $_ = <STDIN>; # get the input from STDIN (presumably the keyboard) + chomp; + if ("$defaultValue") { + return $_ ? $_ : $defaultValue; # return $_ if it has a value + } else { + return $_; + } +} + +sub DoSetup { + print "\nNot ready yet. How do you send the cd command from perl?\n"; + return 0; +} diff --git a/abs/extra/myth2ipod/myth2ipod-userjob.sh b/abs/extra/myth2ipod/myth2ipod-userjob.sh new file mode 100755 index 0000000..9ed65b2 --- /dev/null +++ b/abs/extra/myth2ipod/myth2ipod-userjob.sh @@ -0,0 +1,6 @@ +#!/bin/bash +. /etc/profile +#su mythtv -c "TERM=vt100 /usr/bin/myth2ipod "$1" "$2" >/tmp/logfile" +su mythtv -c "TERM=vt100 /usr/bin/myth2ipod "$1" "$2" " +#or to also use commercial flagging cutlist +#su mythtv -c "TERM=vt100 /usr/bin/myth2ipod -cut "$1" "$2" >/tmp/logfile" diff --git a/abs/extra/myth2ipod/myth2ipod.install b/abs/extra/myth2ipod/myth2ipod.install new file mode 100755 index 0000000..367d90f --- /dev/null +++ b/abs/extra/myth2ipod/myth2ipod.install @@ -0,0 +1,38 @@ + +pre_install() { + mkdir -p /myth/ipodfeed + chown mythtv:http /myth/ipodfeed +} + +pre_upgrade() { + pre_install +} + +pre_remove() { + pre_install +} + +post_install() { + . /etc/systemconfig + ln -s /myth/ipodfeed /data/srv/httpd/htdocs/ipodfeed + ln -s /myth/ipodfeed/m2iweb.php /myth/ipodfeed/index.php + sed -i -e "s/REPLACEME/$hostname/g" /usr/bin/myth2ipod + chown -R mythtv:http /myth/ipodfeed + /usr/bin/myth2ipod -rebuild +} + +post_upgrade() { + /usr/bin/myth2ipod -rebuild +} + +post_remove() { + rm -fr /data/srv/httpd/htdocs/ipodfeed + rm -rf /myth/ipodfeed/m2iweb.php + rm -rf /myth/ipodfeed/index.php + # don't delete content that the user may still want, so leave /myth/ipodfeed +} + +op=$1 +shift + +$op $* |