summaryrefslogtreecommitdiff
path: root/Tools/master-timer/convert-DTV2VDR.pl
diff options
context:
space:
mode:
Diffstat (limited to 'Tools/master-timer/convert-DTV2VDR.pl')
-rwxr-xr-xTools/master-timer/convert-DTV2VDR.pl151
1 files changed, 151 insertions, 0 deletions
diff --git a/Tools/master-timer/convert-DTV2VDR.pl b/Tools/master-timer/convert-DTV2VDR.pl
new file mode 100755
index 0000000..fb2a783
--- /dev/null
+++ b/Tools/master-timer/convert-DTV2VDR.pl
@@ -0,0 +1,151 @@
+#!/usr/bin/perl -w
+
+use strict;
+
+# The EPG-Entrys
+my (%Entry, %channel, $mode);
+
+# 0 = VDR -> DTV
+# 1 = DTV -> VDR
+$mode = 0;
+
+read_channel_list();
+if ($mode) {
+ &read_dtv();
+ &read_epgdata();
+} else {
+ &read_epgdata();
+ &read_dtv();
+}
+&print_VDR();
+
+sub read_epgdata {
+ my ($channel, $duration, $title, $subtitle, $description, $time);
+ open (FI,"epg.data") or die ("Can't open file \"epg.data\"\n");
+
+ while (<FI>) {
+ # Begin Channel
+ if (/^C\s(\d+)\s+(.+)/) {
+ $channel=$2;
+ while (<FI>) {
+ # End Channel
+ if (/^c$/) {
+ last;
+ }
+ # Begin Timer
+ elsif (/^E\s(\d+)\s+(\d+)\s+(\d+)$/) {
+ # Undef this Variables because it is possibel that not every timer uses this values
+ undef $duration;
+ undef $subtitle;
+ undef $description;
+
+ $time=$2;
+ $duration=$3;
+ }
+ # Title
+ elsif (/^T\s(.*)/) {
+ $title=$1;
+ }
+ # Subtitle
+ elsif (/^S\s(.*)/) {
+ $subtitle=$1;
+ }
+ # Description
+ elsif (/^D\s(.*)/) {
+ $description=$1;
+ }
+ # End Timer
+ elsif (/^e$/) {
+ if ($mode) {
+ # DTV -> VDR
+ $Entry{$channel}{$time}{subtitle}=$subtitle if ($subtitle);
+ if ($description) {
+ if ($Entry{$channel}{$time}{description}) {
+ $Entry{$channel}{$time}{description} = "DTV: '$Entry{$channel}{$time}{description}' VDR: '$description'";
+ } else {
+ $Entry{$channel}{$time}{description} = "DTV: '' VDR: '$description'";
+ }
+ }
+ } else {
+ # VDR -> DTV
+ $Entry{$channel}{$time}{title}=$title;
+ $Entry{$channel}{$time}{duration}=$duration;
+ $Entry{$channel}{$time}{subtitle}=$subtitle if ($subtitle);
+ $Entry{$channel}{$time}{description}=$description if ($description);
+ }
+ }
+ }
+ }
+ }
+ close (FI);
+}
+
+sub read_dtv {
+ my ($channel, $time, $duration, $title, $category, $subtitle, $description);
+ open (FI,$ARGV[0]) or die "Can't open DTV-File";
+
+ while (<FI>) {
+ chomp;
+ ($channel, $time, $duration, $title, $category, $subtitle, $description) = split (/\|/);
+ if (!$channel{$channel}) {
+ next;
+ }
+ $channel = $channel{$channel};
+ if ($mode) {
+ # DTV -> VDR
+ if (!$subtitle && $description =~ /^\"(.*?)\"\:\s(.*)/) {
+ $Entry{$channel}{$time}{subtitle} = $1;
+ $description = $2;
+ }
+ $Entry{$channel}{$time}{title} = $title;
+ $Entry{$channel}{$time}{duration} = $duration;
+ $Entry{$channel}{$time}{subtitle} = $subtitle if ($subtitle);
+ $Entry{$channel}{$time}{category} = $category if ($category);
+ $Entry{$channel}{$time}{description} = $description if ($description);
+ } else {
+ # VDR -> DTV
+ $Entry{$channel}{$time}{category} = $category if ($category);
+ if ($description) {
+ if (!$Entry{$channel}{$time}{subtitle} && $description =~ /^\"(.*?)\"\:\s(.*)/) {
+ $Entry{$channel}{$time}{subtitle} = $1;
+ $description = $2;
+ }
+ if ($Entry{$channel}{$time}{description}) {
+ $Entry{$channel}{$time}{description} = "DTV: '$description' VDR: '$Entry{$channel}{$time}{description}'";
+ } else {
+ $Entry{$channel}{$time}{description} = "DTV: '$description' VDR: ''";
+ }
+ }
+ }
+ }
+ close (FI);
+}
+
+sub read_channel_list {
+ my ($old, $new);
+ open (FI,"$ENV{HOME}/.master-timer/convert-channel-list") or die ("Can't read channel-List");
+ while (<FI>) {
+ chomp;
+ ($old, $new) = split (/\|/);
+ $channel{$old} = $new;
+ }
+ close (FI);
+}
+
+sub print_VDR() {
+ my ($channel, $title, $time);
+ foreach $channel (sort keys %Entry) {
+ print "C 1 $channel\n";
+ foreach $time (sort keys %{%Entry->{$channel}}) {
+ if ($Entry{$channel}{$time}{duration}) {
+ print "E 1 $time $Entry{$channel}{$time}{duration}\n";
+ print "K $Entry{$channel}{$time}{category}\n" if ($Entry{$channel}{$time}{category});
+ print "T $Entry{$channel}{$time}{title}\n";
+ print "S $Entry{$channel}{$time}{subtitle}\n" if ($Entry{$channel}{$time}{subtitle});
+ print "D $Entry{$channel}{$time}{description}\n" if ($Entry{$channel}{$time}{description});
+ print "e\n";
+ }
+ }
+ print "c\n";
+ }
+}