diff options
| author | Andreas Brachold <vdr07@deltab.de> | 2007-08-13 18:41:27 +0000 |
|---|---|---|
| committer | Andreas Brachold <vdr07@deltab.de> | 2007-08-13 18:41:27 +0000 |
| commit | bcbf441e09fb502cf64924ff2530fa144bdf52c5 (patch) | |
| tree | f377707a2dac078db8cd0c7d7abfe69ac1006d71 /contrib | |
| download | xxv-bcbf441e09fb502cf64924ff2530fa144bdf52c5.tar.gz xxv-bcbf441e09fb502cf64924ff2530fa144bdf52c5.tar.bz2 | |
* Move files to trunk
Diffstat (limited to 'contrib')
| -rw-r--r-- | contrib/README | 27 | ||||
| -rwxr-xr-x | contrib/at-vdradmin2xxv.pl | 222 | ||||
| -rwxr-xr-x | contrib/chronicle-remove-duplicate.pl | 105 | ||||
| -rw-r--r-- | contrib/create-database.sql | 22 | ||||
| -rw-r--r-- | contrib/export-data.sql | 10 | ||||
| -rw-r--r-- | contrib/import-data.sql | 17 | ||||
| -rwxr-xr-x | contrib/update-xxv | 283 | ||||
| -rw-r--r-- | contrib/upgrade-xxv-db.sql | 304 |
8 files changed, 990 insertions, 0 deletions
diff --git a/contrib/README b/contrib/README new file mode 100644 index 0000000..4640274 --- /dev/null +++ b/contrib/README @@ -0,0 +1,27 @@ +To create a empty database und create a mysql-useraccount, change on +file create-database.sql on all placed username 'xpix' and password 'xpix97' +to your our values. + +$ cat ./contrib/create-database.sql | mysql -u root + +Adjust your mysql-username and password also on xxvd.cfg +[General] +DSN=DBI:mysql:database=xxv;host=localhost;port=3306 +PWD=xpix97 +USR=xpix + + +-------------------------------------------------------------------------------- + +To upgrade database from prior release from xxv call 'update-xxv' +It's backup your own data like Autotimer or XXV-Useraccount. + +$ ./contrib/update-xxv + + +-------------------------------------------------------------------------------- + +To migrate autotimer from vdradmin to xxv call 'at-vdradmin2xxv.pl' +It's could use to export some data from xxv autotimer to vdradmin. + +$ ./contrib/at-vdradmin2xxv.pl /path/vdradmind.at diff --git a/contrib/at-vdradmin2xxv.pl b/contrib/at-vdradmin2xxv.pl new file mode 100755 index 0000000..6d41b55 --- /dev/null +++ b/contrib/at-vdradmin2xxv.pl @@ -0,0 +1,222 @@ +#!/usr/bin/perl -w +use strict; +use warnings; +use DBI; #Database independent interface for Perl +use DBD::mysql; #MySQL driver for the Perl5 Database Interface (DBI) +use Getopt::Std; + +my $db = "xxv"; +my $host = "localhost"; +my $port = "3306"; +my $usr = "root"; +my $pwd = ""; + + +my $Usage = qq{ +Import or Export Autotimer from XXV to or from a VDRAdmin file +Usage: $0 [options] file + +Options: + -H <hostname> : Host name of the MySQL server (default: '$host') + -P <port> : Port number of MySQL server (default: '$port') + -d <database> : XXV database name (default: '$db') + -u <user> : Username (default: '$usr') + -p <password> : Password (default: '$pwd') + -e : Export to file (default: Import from file) + -h : Help + +}; + +use vars qw/ %opt /; +my $dbh; + +die $Usage if (!$ARGV[0] || !getopts("d:H:P:u:p:eh", \%opt) || $opt{h} ); + + +$db = $opt{d} if($opt{d}); +$host = $opt{H} if($opt{H}); +$port = $opt{P} if($opt{P}); +$usr = $opt{u} if($opt{u}); +$pwd = $opt{p} if($opt{p}); + +my $filename = "@ARGV"; + +# ------------------ +sub ChannelArray { +# ------------------ + my $field = shift || return undef; + my $sql = sprintf('select %s, POS from CHANNELS order by POS', $field); + my $erg = $dbh->selectall_arrayref($sql); + return $erg; +} + +# ------------------ +sub PosToChannel { +# ------------------ + my $pos = shift || return undef; + my $sql = sprintf('select Id from CHANNELS where POS = "%lu"', $pos); + my $erg = $dbh->selectall_arrayref($sql); + return $erg->[0][0]; +} + +# ------------------
+sub _insert {
+# ------------------
+ my $data = shift || return;
+
+ if(ref $data eq 'HASH') {
+ my ($names, $vals, $kenn);
+ map {
+ push(@$names, $_);
+ push(@$vals, $data->{$_}),
+ push(@$kenn, '?'),
+ } sort keys %$data;
+
+ my $sql = sprintf("REPLACE INTO AUTOTIMER (%s) VALUES (%s)",
+ join(', ', @$names),
+ join(', ', @$kenn),
+ );
+ my $sth = $dbh->prepare( $sql );
+ $sth->execute( @$vals );
+ } else {
+ my $sth = $dbh->prepare('REPLACE INTO AUTOTIMER VALUES (?,?,?,?,?,?,?,?,?)');
+ $sth->execute( @$data );
+ }
+} + +# ------------------
+# Name: autotimerimport
+# Descr: Read a file for import autotimer export list.
+# Usage: autotimerimport($filename);
+# ------------------
+sub autotimerimport {
+ my $AT_FILENAME = shift || die("No filename to import! Use $0 'vdradmind.at'\n");
+ + my $cnt = "0";
+ open(AT_FILE, "$AT_FILENAME") || return die sprintf("Can't open file '%s' : %s\n",$AT_FILENAME,$!);
+ while(<AT_FILE>) {
+ chomp;
+ next if ($_ eq "");
+
+ my($active, $pattern, $section, $start, $stop, $episode, $prio,
+ $lft, $channel, $directoy) = split(/\:/, $_);
+
+ my $data;
+ $data->{Id} = 0;
+ if($active eq "1") { $data->{Activ} = 'y'; }
+ else { $data->{Activ} = 'n'; }
+
+ my @vals;
+ $data->{Done} = 'timer';
+ $data->{Search} = $pattern;
+ push(@vals, "title")
+ if($section & 1);
+ push(@vals, "subtitle")
+ if($section & 2);
+ push(@vals, "description")
+ if($section & 4);
+ $data->{InFields} = join(',', @vals);
+ if( $channel ne "") {
+ if (my $chid = &PosToChannel($channel)) {
+ $data->{Channels} = $chid;
+ }
+ }
+ $data->{Priority} = $prio;
+ $data->{Lifetime} = $lft;
+ $data->{Dir} = $directoy;
+ $data->{Start} = $start;
+ $data->{Stop} = $stop; + # autotimerimport don't support episode, i belief "1" means File = title~subtitle / "0" means File = title + # $data->{Episode} = $episode;
+
+ &_insert($data);
+ ++$cnt;
+ }
+ close (AT_FILE);
+ print STDERR sprintf("%d Autotimer read from file %s.\n",$cnt,$AT_FILENAME);
+ + return 0;
+} + +# ------------------
+# Name: autotimerexport
+# Descr: Read autotimer from database and save this to a export file.
+# Usage: autotimerexport($filename);
+# ------------------
+sub autotimerexport {
+ my $AT_FILENAME = shift || die("No filename to export! Use $0 -e 'vdradmind.at'\n");
+ + die sprintf("File to store autotimer '%s' already exist! The file can't be overwritten. Please remove the file manually.\n",$AT_FILENAME) + if(-e $AT_FILENAME); +
+ my $sql = "select Activ, Search, InFields, Channels, Dir, Start, Stop, Priority, Lifetime from AUTOTIMER order by Id";
+ my $atlist = $dbh->selectall_arrayref($sql);
+ + die "No autotimer data are to export available!\n" + if((!$atlist) || (scalar $atlist <= 0)); + + my $cnt = "0";
+ open(AT_FILE, ">$AT_FILENAME") || die sprintf("Can't open file '%s' : %s\n",$AT_FILENAME,$!);
+ foreach my $data (@$atlist) {
+ if($data->[1] ne "" and $data->[2] ne "") {
+
+ my $active = "0";
+ my $pattern = $data->[1];
+ my $section = "0";
+ my $start = "";
+ my $stop = "";
+ my $episode = "0"; # autotimerexport don't support episode, i belief "1" means File = title~subtitle / "0" means File = title
+ my $prio = "";
+ my $lft = "";
+ my $channel = "";
+ my $directoy = "";
+
+ $active = "1" if($data->[0] eq "y");
+
+ $section |= 1 if ($data->[2]=~/^.*title.*$/);
+ $section |= 2 if ($data->[2]=~/^.*subtitle.*$/);
+ $section |= 4 if ($data->[2]=~/^.*description.*$/);
+
+ if( $data->[3]) {
+ foreach my $ch (@{&ChannelArray('Id')}) {
+ if ($data->[3] eq $ch->[0]) { # vdradmin suppport only one Channel
+ $channel = $ch->[1];
+ last;
+ }
+ }
+ }
+
+ $directoy = $data->[4] if($data->[4]);
+ $start = $data->[5] if($data->[5] and $data->[5] ne $data->[6]); # Exclude if start and stop if same value e.g. 0000
+ $stop = $data->[6] if($data->[6] and $data->[5] ne $data->[6]);
+ $prio = $data->[7] if($data->[7]);
+ $lft = $data->[8] if($data->[8]);
+
+ print AT_FILE sprintf("%s:%s:%s:%s:%s:%s:%s:%s:%s:%s\n",
+ $active,$pattern,$section,$start,$stop,$episode,$prio,$lft,$channel,$directoy)
+ || die sprintf("Can't write file '%s' : %s\n",$AT_FILENAME,$!);
+ ++$cnt;
+ }
+ }
+ close (AT_FILE);
+ + print STDERR sprintf("%d Autotimer write to file %s\n",$cnt,$AT_FILENAME);
+ + return 0;
+}
+ + +$dbh = DBI->connect("DBI:mysql:database=$db;host=$host;port=$port", $usr, $pwd,{ + PrintError => 1, + AutoCommit => 1, +}) || die $DBI::errstr; + +exit 1 + unless($dbh); + +exit &autotimerexport($filename) + if($opt{e}); +exit &autotimerimport($filename) + if(!$opt{e}); + + diff --git a/contrib/chronicle-remove-duplicate.pl b/contrib/chronicle-remove-duplicate.pl new file mode 100755 index 0000000..2902107 --- /dev/null +++ b/contrib/chronicle-remove-duplicate.pl @@ -0,0 +1,105 @@ +#!/usr/bin/perl -w +use strict; +use warnings; +use DBI; #Database independent interface for Perl +use DBD::mysql; #MySQL driver for the Perl5 Database Interface (DBI) +use Getopt::Std; + +my $db = "xxv"; +my $host = "localhost"; +my $port = "3306"; +my $usr = "root"; +my $pwd = ""; + + +my $Usage = qq{ +this script search and remove duplicates from CHRONICLE. +Duplicates should never occurrence, but it's some time possible. +e.g. after migration from mysql 4.0 to 5.0. + +Usage: $0 [options] + +Options: + -H <hostname> : Host name of the MySQL server (default: '$host') + -P <port> : Port number of MySQL server (default: '$port') + -d <database> : XXV database name (default: '$db') + -u <user> : Username (default: '$usr') + -p <password> : Password (default: '$pwd') + -q : Be quiet + -h : Help + +}; + +use vars qw/ %opt /; +my $dbh; + +die $Usage if (!getopts("d:H:P:u:p:hq", \%opt) || $opt{h} ); + + +$db = $opt{d} if($opt{d}); +$host = $opt{H} if($opt{H}); +$port = $opt{P} if($opt{P}); +$usr = $opt{u} if($opt{u}); +$pwd = $opt{p} if($opt{p}); + +# ------------------
+# dump_duplicates
+# ------------------
+sub dump_duplicates {
+ +# my $sth = $dbh->prepare('select id,title,channel_id FROM CHRONICLE') + my $sth = $dbh->prepare('select id,title,channel_id FROM CHRONICLE WHERE id IN (SELECT id FROM TMPCHRONICLE)') + or die "Couldn't prepare dump statement: " . $dbh->errstr; + my @data; + + $sth->execute() + or die "Couldn't execute dump statement: " . $sth->errstr; + + while (@data = $sth->fetchrow_array()) { + print sprintf("%3d: %20s %s\n",$data[0],$data[2],$data[1]); + } + + if ($sth->rows == 0) { + print "There none duplicates found.\n"; + } +} +# ------------------
+# search and remove duplicates from CHRONICLE +# ------------------
+sub remove_duplicates {
+ + $dbh->do(qq|DROP TABLE IF EXISTS TMPCHRONICLE|) + || die "Couldn't drop temporary table: ". $dbh->errstr; + $dbh->do(qq| + CREATE TEMPORARY TABLE TMPCHRONICLE + SELECT min(id) id + FROM CHRONICLE + GROUP BY title,channel_id,starttime,duration + HAVING count(*) > 1 + |) || die "Couldn't create temporary table: ". $dbh->errstr; + + &dump_duplicates() if(! $opt{q}); + + $dbh->do(qq|DELETE FROM CHRONICLE WHERE id IN (SELECT id FROM TMPCHRONICLE)|) + || die "Couldn't delete duplicates from temporary table: ". $dbh->errstr; + + $dbh->do(qq|DROP TABLE IF EXISTS TMPCHRONICLE|) + || die "Couldn't drop temporary table: ". $dbh->errstr; + + $dbh->disconnect; + + return 0; +} + +$dbh = DBI->connect("DBI:mysql:database=$db;host=$host;port=$port", $usr, $pwd,{ + PrintError => 1, + AutoCommit => 1, +}) || die $DBI::errstr; + +exit 1 + unless($dbh); + +exit &remove_duplicates(); + + + diff --git a/contrib/create-database.sql b/contrib/create-database.sql new file mode 100644 index 0000000..8c31b90 --- /dev/null +++ b/contrib/create-database.sql @@ -0,0 +1,22 @@ +-- +-- Current Database: mysql +-- +use mysql; + +CREATE DATABASE IF NOT EXISTS xxv; + +use xxv; + +-- Create a mysql-Account : Adjust User and Password here and add this to xxvd.cfg +-- [General] +-- DSN=DBI:mysql:database=xxv;host=localhost;port=3306 +-- PWD=password +-- USR=username + +-- The first line is useful for granting access to user xxv on all computers in a network. +/* grant all privileges on xxv.* to username@'%' IDENTIFIED BY 'password'; */ + +-- Grant access to user xxv on the local machine with password 'xxv' +grant all privileges on xxv.* to xxv@localhost IDENTIFIED BY 'xxv'; + +flush privileges; diff --git a/contrib/export-data.sql b/contrib/export-data.sql new file mode 100644 index 0000000..d863159 --- /dev/null +++ b/contrib/export-data.sql @@ -0,0 +1,10 @@ +-- +-- Store Table from Database xxv to files +-- + +select * INTO OUTFILE '/tmp/autotimer.sav' from AUTOTIMER; +select * INTO OUTFILE '/tmp/user.sav' from USER; +select * INTO OUTFILE '/tmp/chronicle.sav' from CHRONICLE; +select * INTO OUTFILE '/tmp/medialib_actors.sav' from MEDIALIB_ACTORS; +select * INTO OUTFILE '/tmp/medialib_videodata.sav' from MEDIALIB_VIDEODATA; +select * INTO OUTFILE '/tmp/medialib_videogenre.sav' from MEDIALIB_VIDEOGENRE; diff --git a/contrib/import-data.sql b/contrib/import-data.sql new file mode 100644 index 0000000..fbad5e8 --- /dev/null +++ b/contrib/import-data.sql @@ -0,0 +1,17 @@ +-- +-- Load files to Database xxv +-- + +DELETE from AUTOTIMER; +DELETE from CHRONICLE; +DELETE from USER; +DELETE from MEDIALIB_ACTORS; +DELETE from MEDIALIB_VIDEODATA; +DELETE from MEDIALIB_VIDEOGENRE; + +load data infile '/tmp/autotimer.sav' into table AUTOTIMER; +load data infile '/tmp/user.sav' into table USER; +load data infile '/tmp/chronicle.sav' into table CHRONICLE; +load data infile '/tmp/medialib_actors.sav' into table MEDIALIB_ACTORS; +load data infile '/tmp/medialib_videodata.sav' into table MEDIALIB_VIDEODATA; +load data infile '/tmp/medialib_videogenre.sav' into table MEDIALIB_VIDEOGENRE; diff --git a/contrib/update-xxv b/contrib/update-xxv new file mode 100755 index 0000000..ec51119 --- /dev/null +++ b/contrib/update-xxv @@ -0,0 +1,283 @@ +#!/bin/bash +# +# Update XXV's database +# +# Usage: update-xxv [OPTIONS] +# +# Options: -b <target> : Make a backup first to <target>.gz +# -h <hostname> : Host name of the MySQL server (default: localhost) +# -P <port> : Port number of MySQL server +# -d <database> : XXV database name (default: xxv) +# -u <user> : Username (default: root) +# -p <password> : Password (default: no password) +# -a : Ask for password +# -f : Force upgrade, do not check version +# -v : Display actual Version +# -h : Help + + +# Increment the version number each time the database changes! +# +actualVersion=25 + +# Specify tables to export before and import after update +# +tables='AUTOTIMER USER CHRONICLE MEDIALIB_ACTORS MEDIALIB_VIDEODATA MEDIALIB_VIDEOGENRE' + +showTitle() +{ + echo + echo 'update-xxv' + echo '----------' + echo +} + +showHelp() +{ + echo 'Usage: update-xxv [-b] [-h hostname] [-P port] [-d database]' + echo ' [-u user] [-p password]' + echo + echo '-b <target> : Make a backup first to <target>.gz' + echo '-H <hostname> : Host name of the MySQL server (default: localhost)' + echo '-P <port> : Port number of MySQL server' + echo '-d <database> : XXV database name (default: xxv)' + echo '-u <user> : Username (default: root)' + echo '-p <password> : Password (default: no password)' + echo '-a : Ask for password' + echo '-f : Force upgrade, do not check version' + echo '-v : Display actual version' + echo '-h : Help' +} + +showCommandLineHint() +{ + echo + echo 'Hint: You might need to overwrite the defaults for the database' + echo 'server, the database name or the user name and password.' + echo + echo 'See update-xxv -h for a list of available options.' + echo +} + +showError() +{ + echo "Error: $*" >&2 +} + +showInfo() +{ + echo "Info: $*" +} + +setDefaults() +{ + [ -z $isDoBackup ] && isDoBackup='false' + [ -z $host ] && host='localhost' + [ -z $database ] && database='xxv' + [ -z $user ] && user='root' + [ -z $isForceUpdate ] && isForceUpdate='false' + [ -z $askPassword ] && askPassword='false' +} + +buildMysqlParams() +{ + mysqlParams="--host=$host --user=$user" + if [ $askPassword == 'true' ] ; then + mysqlParams="$mysqlParams -p" + else + if [ -n "$password" ] ; then + mysqlParams="$mysqlParams --password='$password'" + fi + fi + if [ -n "$port" ] ; then + mysqlParams="$mysqlParams --port=$port" + fi +} + +checkXxv() +{ + if pgrep xxvd >/dev/null 2>&1 ; then + showError 'XXV is still running, please stop XXV first!' + exit 1 + fi +} + +checkServer() +{ + showInfo 'Checking Server' + if ! eval mysql $mysqlParams </dev/null >/dev/null 2>&1 ; then + showError "Can not connect to mysql server on '$host' !" + showCommandLineHint + exit 1 + fi +} + +checkDatabase() +{ + showInfo 'Checking Database' + if ! eval mysql $mysqlParams -f -B -e '"show databases;"' | \ + grep -e "^$database$" > /dev/null 2>&1 ; then + showError "Can not access database '$database'" + showCommandLineHint + exit 1 + fi +} + +exportDb() +{ + showInfo 'Saving Data' + for table in $tables ; do + savFile="$exportDir/$table.sav" + if ! eval mysql $mysqlParams -f -B $database -e \ + "\"select * into outfile '$savFile' from $table;\"" ; then + showError "Can't save table '$table'" + fi + done +} + +importDb() +{ + showInfo 'Restoring Data' + for table in $tables ; do + savFile="$exportDir/$table.sav" + if ! eval mysql $mysqlParams -f -B $database -e \ + "\"load data infile '$savFile' into table $table;\"" ; then + showError "Can't load table '$table'" + exit 1 + fi + done +} + +updateDb() +{ + showInfo 'Updating Database' + if ! eval mysql $mysqlParams -f -B $database < upgrade-xxv-db.sql ; then + showError 'Update failed!' ; + exit 1 + fi +} + +getActualVersion() +{ + showInfo "Retrieving actual version: '$actualVersion'"; +} + +getVersion() +{ + showInfo 'Retrieving current version' + version=`eval mysql $mysqlParams -f -B -s $database -e \ + "\"select Version from VERSION;\"" 2>/dev/null` +} + +updateVersion() +{ + showInfo 'Updateing Version' + if ! eval mysql $mysqlParams -f -B $database -e \ + "\"insert into VERSION (Version) VALUES($actualVersion);\"" ; then + showError 'Could not set new version number!!!' + exit 1 + fi +} + +# +# main() +# + +showTitle + +# parse parameters +while [ $# -ge 1 ] ; do + case $1 in + -b) + backupTarget=$2 ; shift + ;; + -H) + host=$2 ; shift + ;; + -P) + port=$2 ; shift + ;; + -d) + database=$2 ; shift + ;; + -u) + user=$2 ; shift + ;; + -p) + password=$2 ; shift + ;; + -a) + askPassword='true' + ;; + -f) + isForceUpdate='true' + ;; + -v) + getActualVersion + exit 1; + ;; + *) + showHelp + exit 1 + ;; + esac + + shift +done + +# check if XXV is still running +checkXxv + +# set defaults and build mysql command line +setDefaults +buildMysqlParams + +# check the database +checkServer +checkDatabase + +# retrieve version and check if update should be performed +getVersion +[ -z $version ] && version=0 +showInfo "current database version: $version" +showInfo "new database version: $actualVersion" + +if [ $actualVersion -eq $version ] ; then + showInfo 'Database is up to date - no need to update' + if [ $isForceUpdate == 'true' ] ;then + showInfo 'As requested, the update will be forced!' + else + exit 0 + fi +fi +if [ $actualVersion -lt $version ] ; then + showError 'Database is more actual than the version you want to update to.' + showError 'Database downgrades are not advisable!' + if [ $isForceUpdate == 'true' ] ;then + showInfo 'As requested, a downgrade will be forced anyway!' + else + exit 1 + fi +fi + +# backup +if [ ! -z $backupTarget ] ; then + showInfo 'Performing backup...' + mysqldump $mysqlParams $database | gzip >"$backupTarget.gz" 2>/dev/null + if [ $? -ne 0 ] ; then + showError 'Backup failed!!!' + exit 1 + fi +fi + +# now actually perform the update +showInfo 'Starting update...' +exportDir=/tmp/xxv-update.$$ +mkdir $exportDir +chmod a+rwx $exportDir +exportDb +updateDb +importDb +updateVersion +showInfo 'Update successful' +rm -rf $exportDir diff --git a/contrib/upgrade-xxv-db.sql b/contrib/upgrade-xxv-db.sql new file mode 100644 index 0000000..f8e075a --- /dev/null +++ b/contrib/upgrade-xxv-db.sql @@ -0,0 +1,304 @@ +-- MySQL dump 10.10 +-- +-- Host: localhost Database: xxv +-- ------------------------------------------------------ +-- Server version 5.0.30-Debian_3 + +-- +-- Table structure for table `AUTOTIMER` +-- + +DROP TABLE IF EXISTS `AUTOTIMER`; +CREATE TABLE `AUTOTIMER` ( + `Id` int(11) unsigned NOT NULL auto_increment, + `Activ` enum('y','n') default 'y', + `Done` set('timer','recording','chronicle') NOT NULL default 'timer', + `Search` text NOT NULL, + `InFields` set('title','subtitle','description') NOT NULL, + `Channels` text, + `Start` char(4) default '0000', + `Stop` char(4) default '0000', + `MinLength` tinyint(4) default NULL, + `Priority` tinyint(2) default NULL, + `Lifetime` tinyint(2) default NULL, + `Dir` text, + `VPS` enum('y','n') default 'n', + `prevminutes` tinyint(4) default NULL, + `afterminutes` tinyint(4) default NULL, + `Weekdays` set('Mon','Tue','Wed','Thu','Fri','Sat','Sun') default NULL, + `startdate` datetime default NULL, + `stopdate` datetime default NULL, + `count` int(11) default NULL, + PRIMARY KEY (`Id`) +) TYPE=MyISAM; + +-- +-- Table structure for table `CHANNELGROUPS` +-- + +DROP TABLE IF EXISTS `CHANNELGROUPS`; +CREATE TABLE `CHANNELGROUPS` ( + `Id` int(11) NOT NULL auto_increment, + `Name` varchar(100) default 'unknown', + `Counter` int(11) default '0', + PRIMARY KEY (`Id`) +) TYPE=MyISAM; + +-- +-- Table structure for table `CHANNELS` +-- + +DROP TABLE IF EXISTS `CHANNELS`; +CREATE TABLE `CHANNELS` ( + `Id` varchar(100) NOT NULL, + `Name` varchar(100) NOT NULL default '', + `Frequency` int(11) NOT NULL default '0', + `Parameters` varchar(100) default '', + `Source` varchar(100) default NULL, + `Srate` int(11) default '0', + `VPID` varchar(100) default '', + `APID` varchar(100) default '', + `TPID` varchar(100) default '', + `CA` varchar(100) default '', + `SID` int(11) default '0', + `NID` int(11) default '0', + `TID` int(11) default '0', + `RID` int(11) default '0', + `GRP` int(11) default '0', + `POS` int(11) NOT NULL, + PRIMARY KEY (`Id`) +) TYPE=MyISAM; + +-- +-- Table structure for table `CHRONICLE` +-- + +DROP TABLE IF EXISTS `CHRONICLE`; +CREATE TABLE `CHRONICLE` ( + `id` int(10) unsigned NOT NULL auto_increment, + `hash` varchar(16) NOT NULL default '', + `title` text NOT NULL, + `channel_id` varchar(100) NOT NULL default '', + `starttime` datetime NOT NULL default '0000-00-00 00:00:00', + `duration` int(11) NOT NULL default '0', + PRIMARY KEY (`id`), + UNIQUE KEY `hash` (`hash`) +) TYPE=MyISAM; + +-- +-- Table structure for table `EPG` +-- + +DROP TABLE IF EXISTS `EPG`; +CREATE TABLE `EPG` ( + `eventid` bigint(20) unsigned NOT NULL default '0', + `title` text NOT NULL, + `subtitle` text, + `description` text, + `channel_id` varchar(100) NOT NULL default '', + `starttime` datetime NOT NULL default '0000-00-00 00:00:00', + `duration` int(11) NOT NULL default '0', + `tableid` tinyint(4) default '0', + `image` text, + `version` tinyint(3) default '0', + `video` varchar(100) default '', + `audio` varchar(255) default '', + `addtime` datetime NOT NULL default '0000-00-00 00:00:00', + `vpstime` datetime default '0000-00-00 00:00:00', + PRIMARY KEY (`eventid`), + KEY `starttime` (`starttime`), + KEY `channel_id` (`channel_id`) +) TYPE=MyISAM; + +-- +-- Table structure for table `MEDIALIB_ACTORS` +-- + +DROP TABLE IF EXISTS `MEDIALIB_ACTORS`; +CREATE TABLE `MEDIALIB_ACTORS` ( + `name` varchar(255) NOT NULL default '', + `actorid` varchar(15) NOT NULL default '', + `imgurl` varchar(255) NOT NULL default '', + `checked` timestamp NOT NULL, + PRIMARY KEY (`name`) +) TYPE=MyISAM; + +-- +-- Table structure for table `MEDIALIB_VIDEODATA` +-- + +DROP TABLE IF EXISTS `MEDIALIB_VIDEODATA`; +CREATE TABLE `MEDIALIB_VIDEODATA` ( + `id` int(10) unsigned NOT NULL auto_increment, + `md5` varchar(32) default NULL, + `title` varchar(255) default NULL, + `subtitle` varchar(255) default NULL, + `language` varchar(255) default NULL, + `diskid` varchar(15) default NULL, + `comment` varchar(255) default NULL, + `disklabel` varchar(32) default NULL, + `imdbID` varchar(15) default NULL, + `year` year(4) default NULL, + `imgurl` varchar(255) default NULL, + `director` varchar(255) default NULL, + `actors` text, + `runtime` int(10) unsigned default NULL, + `country` varchar(255) default NULL, + `plot` text, + `filename` varchar(255) default NULL, + `filesize` int(16) unsigned default NULL, + `filedate` datetime default NULL, + `audio_codec` varchar(255) default NULL, + `video_codec` varchar(255) default NULL, + `video_width` int(10) unsigned default NULL, + `video_height` int(10) unsigned default NULL, + `istv` tinyint(1) unsigned NOT NULL default '0', + `lastupdate` timestamp NOT NULL, + `seen` tinyint(1) unsigned NOT NULL default '0', + `mediatype` int(10) unsigned NOT NULL default '0', + `custom1` varchar(255) default NULL, + `custom2` varchar(255) default NULL, + `custom3` varchar(255) default NULL, + `custom4` varchar(255) default NULL, + `created` datetime default NULL, + `owner_id` int(11) NOT NULL default '0', + PRIMARY KEY (`id`), + KEY `seen` (`seen`), + KEY `title_idx` (`title`), + KEY `diskid_idx` (`diskid`), + KEY `mediatype` (`mediatype`,`istv`), + FULLTEXT KEY `actors_idx` (`actors`), + FULLTEXT KEY `comment` (`comment`) +) TYPE=MyISAM; + +-- +-- Table structure for table `MEDIALIB_VIDEOGENRE` +-- + +DROP TABLE IF EXISTS `MEDIALIB_VIDEOGENRE`; +CREATE TABLE `MEDIALIB_VIDEOGENRE` ( + `video_id` int(10) unsigned NOT NULL default '0', + `genre_id` int(10) unsigned NOT NULL default '0', + PRIMARY KEY (`video_id`,`genre_id`) +) TYPE=MyISAM; + +-- +-- Table structure for table `MUSIC` +-- + +DROP TABLE IF EXISTS `MUSIC`; +CREATE TABLE `MUSIC` ( + `Id` int(11) unsigned NOT NULL auto_increment, + `FILE` text NOT NULL, + `ARTIST` varchar(128) default 'unknown', + `ALBUM` varchar(128) default 'unknown', + `TITLE` varchar(128) default 'unknown', + `COMMENT` varchar(128) default NULL, + `TRACKNUM` varchar(10) default '0', + `YEAR` smallint(4) unsigned default NULL, + `GENRE` varchar(128) default NULL, + `BITRATE` smallint(4) unsigned default NULL, + `FREQUENCY` varchar(4) default NULL, + `SECS` int(11) NOT NULL, + PRIMARY KEY (`Id`) +) TYPE=MyISAM; + +-- +-- Table structure for table `OLDEPG` +-- + +DROP TABLE IF EXISTS `OLDEPG`; +CREATE TABLE `OLDEPG` ( + `eventid` bigint(20) unsigned NOT NULL default '0', + `title` text NOT NULL, + `subtitle` text, + `description` text, + `channel_id` varchar(100) NOT NULL default '', + `starttime` datetime NOT NULL default '0000-00-00 00:00:00', + `duration` int(11) NOT NULL default '0', + `tableid` tinyint(4) default '0', + `image` text, + `version` tinyint(3) default '0', + `video` varchar(100) default '', + `audio` varchar(255) default '', + `addtime` datetime NOT NULL default '0000-00-00 00:00:00', + `vpstime` datetime default '0000-00-00 00:00:00', + PRIMARY KEY (`eventid`), + KEY `starttime` (`starttime`), + KEY `channel_id` (`channel_id`) +) TYPE=MyISAM; + +-- +-- Table structure for table `RECORDS` +-- + +DROP TABLE IF EXISTS `RECORDS`; +CREATE TABLE `RECORDS` ( + `eventid` bigint(20) unsigned NOT NULL, + `RecordId` int(11) unsigned NOT NULL, + `RecordMD5` varchar(32) NOT NULL, + `Path` text NOT NULL, + `Prio` tinyint(4) NOT NULL, + `Lifetime` tinyint(4) NOT NULL, + `State` tinyint(4) NOT NULL, + `Marks` text, + `Type` enum('TV','RADIO','UNKNOWN') default 'TV', + `addtime` timestamp NOT NULL, + PRIMARY KEY (`eventid`), + UNIQUE KEY `eventid` (`eventid`) +) TYPE=MyISAM; + +-- +-- Table structure for table `TIMERS` +-- + +DROP TABLE IF EXISTS `TIMERS`; +CREATE TABLE `TIMERS` ( + `Id` int(11) unsigned NOT NULL, + `Status` char(1) default '1', + `ChannelID` varchar(100) NOT NULL default '', + `Day` varchar(20) default '-------', + `Start` int(11) unsigned default NULL, + `Stop` int(11) unsigned default NULL, + `Priority` tinyint(2) default NULL, + `Lifetime` tinyint(2) default NULL, + `File` text, + `Summary` text, + `NextStartTime` datetime default NULL, + `NextStopTime` datetime default NULL, + `Collision` varchar(100) default '0', + `eventid` bigint(20) unsigned default '0', + `eventstarttime` datetime default NULL, + `eventduration` int(10) unsigned default '0', + `AutotimerId` int(11) unsigned default '0', + `addtime` timestamp NOT NULL, + `Checked` char(1) default '0', + PRIMARY KEY (`Id`) +) TYPE=MyISAM; + +-- +-- Table structure for table `USER` +-- + +DROP TABLE IF EXISTS `USER`; +CREATE TABLE `USER` ( + `Id` int(11) unsigned NOT NULL auto_increment, + `Name` varchar(100) NOT NULL default '', + `Password` varchar(100) NOT NULL, + `Level` set('admin','user','guest') NOT NULL, + `Prefs` varchar(100) default '', + `UserPrefs` varchar(100) default '', + `Deny` set('tlist','alist','rlist','mlist','tedit','aedit','redit','remote','stream','cedit','media') default NULL, + `MaxLifeTime` tinyint(2) default '0', + `MaxPriority` tinyint(2) default '0', + PRIMARY KEY (`Id`) +) TYPE=MyISAM; + +-- +-- Table structure for table `VERSION` +-- + +DROP TABLE IF EXISTS `VERSION`; +CREATE TABLE `VERSION` ( + `Version` tinyint(4) NOT NULL default '0' +) TYPE=MyISAM; |
