Ticket #186: mythlink.sh

File mythlink.sh, 4.5 KB (added by sphery <mtdean@…>, 20 years ago)

Enhanced mythlink.sh file

Line 
1#!/bin/sh
2# mythlink.sh
3#
4# Creates readable symlinks referring to MythTV recordings
5#
6# Based on the script mythlink.sh by Dale Gass
7#
8# Modified by Mike Dean
9# - Provides multiple easily-configurable "views"
10# - System specific information is specified as environment variables
11# - Uses '-' to separate portions of the filename (instead of '_' since '_'
12# is used to replace special characters (such as the space character))
13# - Shows recording year
14# - Shows end time
15# - Separates date and time info
16# - Removes trailing separator (i.e. for movies, which have no subtitle)
17# - Adds an optional extension (for specifying filetype to Windows)
18
19
20### Modify these values for your installation ###
21# The location of the MythTV Recordings (with "ugly" filenames)
22MYTH_RECORDINGS_PATH=/var/storage/mythtv
23# The path in which the views ("pretty" links) will be created
24VIEWS_PATH=/var/storage/mythtv/views
25# The extension added to the end of the links, including the period.
26# For no extension, specify '' for the value.
27EXTENSION='.mpg'
28# Enables output for debugging (set to 0 for no output)
29DEBUG=0
30
31### The following directory names and formats may be customized ###
32
33# Formats may consist of any combination of
34# ${title}, ${subtitle}
35# ${date}, ${starttime}, ${endtime}, ${originalairdate}
36# ${category}, ${recgroup}
37
38# Files will be sorted "alphabetically" so the appropriate fields on which you
39# would like to sort should be placed at the beginning of the format
40
41# Formats of the individual fields were chosen to minimize confusion caused by
42# use of different sorting algorithms by clients (i.e. alphabetically versus
43# alphanumerically).
44
45# To add a custom format, simply include a directory name and format in the
46# environment variables below. (Whitespace separates the values.)
47
48# The names of the directories containing the views
49DIRECTORIES='time
50 title
51 group
52 category
53 original_airdate'
54# The formats used for the respective directories specified above
55FORMATS='${date}-${starttime}-${endtime}-${title}-${subtitle}
56 ${title}-${date}-${starttime}-${endtime}-${subtitle}
57 ${recgroup}-${title}-${date}-${starttime}-${endtime}-${subtitle}
58 ${category}-${title}-${date}-${starttime}-${endtime}-${subtitle}
59 ${title}-${originalairdate}-${subtitle}'
60
61
62### These values most likely do not need modification ###
63# The name of the MythTV database
64MYTH_DB=mythconverg
65# The database username and password
66MYTH_DB_USER=mythtv
67MYTH_DB_PASSWD=mythtv
68
69
70export MYTH_RECORDINGS_PATH VIEWS_PATH EXTENSION DEBUG DIRECTORIES FORMATS
71
72
73for dir in ${DIRECTORIES}
74 do
75 rm -rf ${VIEWS_PATH}/${dir}/*
76done
77mysql -u${MYTH_DB_USER} -p${MYTH_DB_PASSWD} ${MYTH_DB} -B --exec "select chanid,starttime,endtime,title,subtitle,recgroup,category,originalairdate from recorded;" >/tmp/mythlink.$$
78perl -w -e '
79 my $mythpath=$ENV{"MYTH_RECORDINGS_PATH"};
80 my $viewspath=$ENV{"VIEWS_PATH"};
81 my $extension=$ENV{"EXTENSION"};
82 my $debug=$ENV{"DEBUG"};
83 my $dirs=$ENV{"DIRECTORIES"};
84 my $fmts=$ENV{"FORMATS"};
85 my @directories=split(/\s+/,$dirs);
86 my @formats=split(/\s+/,$fmts);
87 if (!-d ${viewspath}) {
88 mkdir ${viewspath} or die "Failed to make directory: ${viewspath}\n";
89 }
90 foreach (@directories) {
91 if (!-d "${viewspath}/$_") {
92 mkdir "${viewspath}/$_" or die "Failed to make directory: ${viewspath}/$_\n";
93 }
94 }
95 <>;
96 while (<>) {
97 chomp;
98 my ($chanid,$start,$end,$title,$subtitle,$recgroup,$category,$originalairdate) = split /\t/;
99 $start =~ s/[^0-9]//g;
100 $end =~ s/[^0-9]//g;
101 $subtitle = "" if(!defined $subtitle);
102 my $filename = "${chanid}_${start}_${end}.nuv";
103 do { print "Skipping ${mythpath}/${filename}\n"; next } unless -e "${mythpath}/${filename}";
104 $end =~ /^........(....)/;
105 my $endtime = $1;
106 $start =~ /^(........)(....)/;
107 my $date = $1;
108 my $starttime = $2;
109 $originalairdate =~ s/[^0-9]//g;
110 $originalairdate = "00000000" if(($originalairdate eq ""));
111 for ($i = 0; $i < @directories; $i++) {
112 my $directory = $directories[$i];
113 my $link=$formats[$i];
114 $link =~ s/(\${\w+})/$1/gee;
115 $link =~ s/-$//;
116 $link =~ s/ /_/g;
117 $link =~ s/&/+/g;
118 $link =~ s/[^+0-9a-zA-Z_-]+/_/g;
119 $link = $link . $extension;
120 print "Creating $link\n" if ($debug);
121 unlink "${viewspath}/${directory}/${link}" if(-e "${viewspath}/${directory}/${link}");
122 symlink "${mythpath}/${filename}", "${viewspath}/${directory}/${link}" or die "Failed to create symlink ${viewspath}/${directory}/${link}: $!";
123 }
124 }
125' /tmp/mythlink.$$
126rm /tmp/mythlink.$$
127