OSDN Git Service

first implementation of restore
authorlonginus <longinus@4e526526-5e11-4fc0-8910-f8fd03428081>
Fri, 10 Aug 2012 02:41:27 +0000 (02:41 +0000)
committerlonginus <longinus@4e526526-5e11-4fc0-8910-f8fd03428081>
Fri, 10 Aug 2012 02:41:27 +0000 (02:41 +0000)
git-svn-id: svn+ssh://svn.sourceforge.jp/svnroot/rec10@948 4e526526-5e11-4fc0-8910-f8fd03428081

rectool/trunk/rectool.pl
rectool/trunk/rectool.spec

index 95a3dec..93f7e8b 100755 (executable)
@@ -34,6 +34,7 @@ use XML::Atom::Feed;
 use XML::Atom::Entry;
 use XML::Generator::DBI;
 use XML::SAX::Writer;
 use XML::Atom::Entry;
 use XML::Generator::DBI;
 use XML::SAX::Writer;
+use XML::TreePP;
 #%DB::packages = ( 'main' => 1 );
 
 
 #%DB::packages = ( 'main' => 1 );
 
 
@@ -1735,7 +1736,7 @@ if ( $mode eq 'expert' ) {
                goto end;
        }
 
                goto end;
        }
 
-       if ( $mode_sub eq 'dump' ) {
+       if ( $params{ 'dump' } ) {
                # id、epgXXを除外して出力
                my $sth = $dbh->prepare(
                        "SELECT type, chtxt, title, btime, etime, deltatime, deltaday, opt, counter 
                # id、epgXXを除外して出力
                my $sth = $dbh->prepare(
                        "SELECT type, chtxt, title, btime, etime, deltatime, deltaday, opt, counter 
@@ -1750,11 +1751,39 @@ if ( $mode eq 'expert' ) {
                );
                $gen->execute($sth);
                # $HTML .= join "\n", @{$yaw->{Strings}};
                );
                $gen->execute($sth);
                # $HTML .= join "\n", @{$yaw->{Strings}};
-               print "Content-Type: text/xml\n\n";
+               utf8::encode($output);
+               my $len = length $output;
+               print "Content-Type: text/xml\n";
+               print "Content-Length: $len\n";
+               print "Content-Disposition: attachment; filename=\"rec10-reserve-dump.xml\"\n\n";
                print $output;
                exit;
        }
 
                print $output;
                exit;
        }
 
+       if ( $params{ 'restore' } ) {
+               my $fh = $q->upload('upfile');
+               my $xml = read_file( $fh );
+               my $tpp = XML::TreePP->new;
+               my $tree = $tpp->parse( $xml );
+               my @rows = @{ $tree->{database}->{select}->{row} };
+
+               # 高速化のためVALUESを連結
+               # INSERT INTO timeline ( ... ) VALUES ( aa, bb, cc ), ( kk, ll, mm ), ( xx, yy, zz )
+               my @keys = qw/type chtxt title btime etime deltatime deltaday opt counter/;
+               my $keys = join ', ', @keys;
+               my @values;
+
+               foreach my $row ( @rows ) {
+                       my $values = join ', ', map { "'".$row->{'-'.$_}."'" } @keys;
+                       utf8::decode( $values );
+                       push @values, "( $values )";
+               }
+               my $sql = "INSERT INTO timeline ( $keys ) VALUES " . join ', ', @values;
+               $dbh->do( "TRUNCATE TABLE timeline" );
+               $dbh->do( $sql );
+               goto end;
+       }
+
        my @ary = $dbh->selectrow_array(
                "SELECT auto_jbk, auto_bayes, auto_del_tmp, auto_opt 
                FROM in_settings " );
        my @ary = $dbh->selectrow_array(
                "SELECT auto_jbk, auto_bayes, auto_del_tmp, auto_opt 
                FROM in_settings " );
@@ -1829,6 +1858,17 @@ if ( $mode eq 'expert' ) {
        }
 
 
        }
 
 
+       $HTML .= qq {<hr>\n予約の保存・復元<br>\n};
+       $HTML .= qq {<form action="rectool.pl" method="post" enctype="multipart/form-data">\n};
+       $HTML .= qq {<div>\n};
+       $HTML .= qq {<input type="hidden" name="mode" value="expert">\n};
+       $HTML .= qq {<input type="submit" name="dump" value="保存">\n};
+       $HTML .= qq {<input type="file" name="upfile">\n};
+       $HTML .= qq {<input type="submit" name="restore" value="復元">\n};
+       $HTML .= qq {</div>\n};
+       $HTML .= qq {</form>\n};
+
+
        $ary_ref = $dbh->selectall_arrayref( 
                "SELECT chname, chtxt, bctype, ch, csch, tsid, updatetime, status, visible 
                FROM epg_ch 
        $ary_ref = $dbh->selectall_arrayref( 
                "SELECT chname, chtxt, bctype, ch, csch, tsid, updatetime, status, visible 
                FROM epg_ch 
index 7fd51fe..1d6c95f 100644 (file)
@@ -14,7 +14,7 @@ BuildRoot:    %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
 BuildRequires: make
 Requires:      perl-Algorithm-Diff perl-Archive-Zip perl-CGI perl-Config-Simple perl-Data-Dumper-Concise
 Requires:      perl-Date-Simple perl-DateTime perl-DBI perl-File-Slurp perl-Sort-Naturally perl-SVG
 BuildRequires: make
 Requires:      perl-Algorithm-Diff perl-Archive-Zip perl-CGI perl-Config-Simple perl-Data-Dumper-Concise
 Requires:      perl-Date-Simple perl-DateTime perl-DBI perl-File-Slurp perl-Sort-Naturally perl-SVG
-Requires:      perl-Time-Piece perl-Tie-IxHash perl-List-Compare perl-XML-Atom perl-XML-Generator-DBI XML-SAX-Writer
+Requires:      perl-Time-Piece perl-Tie-IxHash perl-List-Compare perl-XML-Atom perl-XML-Generator-DBI perl-XML-SAX-Writer perl-XML-TreePP
 
 %description
 rectool-0.0.1
 
 %description
 rectool-0.0.1