diverses hinzu
This commit is contained in:
862
SyncPOD
Executable file
862
SyncPOD
Executable file
@@ -0,0 +1,862 @@
|
||||
#!/usr/bin/perl -w
|
||||
|
||||
# (c) 2002 Armin Obersteiner <armin@xos.net>
|
||||
# License: GPL v2
|
||||
|
||||
use MP3::Info;
|
||||
use Unicode::String qw( latin1 utf16 );
|
||||
use Shell qw ( find gzip );
|
||||
use Getopt::Std;
|
||||
use File::Copy;
|
||||
use Filesys::DiskFree;
|
||||
|
||||
use Data::Dumper qw (Dumper);
|
||||
|
||||
use strict;
|
||||
|
||||
my $version="0.68";
|
||||
|
||||
#
|
||||
# options & config
|
||||
#
|
||||
|
||||
my %opt;
|
||||
getopts("fcnh",\%opt);
|
||||
|
||||
if($opt{h}) {
|
||||
print <<"EOF";
|
||||
$0 [-c] [-f] [Search Pattern 1] [Search Pattern 2] ...
|
||||
|
||||
-c create: create directory structure on plain ipod before syncing
|
||||
(default: you get a warning if there is no ipod structure)
|
||||
|
||||
-f force: rename ipod and use it with $0 before syncing
|
||||
(default: an unknown ipod stays untouched)
|
||||
|
||||
-n name check: checks mp3 names for possible illegal characters
|
||||
|
||||
Search Patterns: for each search pattern a playlist is created
|
||||
(case insensitive)
|
||||
EOF
|
||||
exit;
|
||||
}
|
||||
|
||||
my $buffer = 5*1024*1024; # leave some MB free for iTunesDB
|
||||
|
||||
my @required = qw ( SYNCMODE PLAYLISTDIR IPODDIR BACKUPDIR );
|
||||
|
||||
my $rc=readrc("$ENV{HOME}/.ipod/config",\@required);
|
||||
|
||||
#print Dumper($rc);
|
||||
|
||||
|
||||
#
|
||||
# check ipod name
|
||||
#
|
||||
|
||||
my ($ipod_name, $real_name, $computer_name)=get_ipodname($rc->{IPODDIR});
|
||||
unless($ipod_name) {
|
||||
die "IPOD dir not found: $rc->{IPODDIR}" unless $opt{c};
|
||||
}
|
||||
|
||||
#
|
||||
# check ipod dirs (recreate them if necessary)
|
||||
#
|
||||
|
||||
mkdir "$rc->{IPODDIR}/iPod_Control",0755 unless(-d "$rc->{IPODDIR}/iPod_Control");
|
||||
mkdir "$rc->{IPODDIR}/iPod_Control/Music",0755 unless(-d "$rc->{IPODDIR}/iPod_Control/Music");
|
||||
mkdir "$rc->{IPODDIR}/iPod_Control/iTunes",0755 unless(-d "$rc->{IPODDIR}/iPod_Control/iTunes");
|
||||
mkdir "$rc->{IPODDIR}/iPod_Control/Device",0755 unless(-d "$rc->{IPODDIR}/iPod_Control/Device");
|
||||
for(0..19) {
|
||||
my $d=sprintf "%.2d",$_;
|
||||
mkdir "$rc->{IPODDIR}/iPod_Control/Music/F$d",0755 unless(-d "$rc->{IPODDIR}/iPod_Control/Music/F$d");
|
||||
}
|
||||
|
||||
unless($opt{c}) {
|
||||
print STDERR "IPOD name: $ipod_name\n";
|
||||
print STDERR "Synced by: $real_name\n";
|
||||
print STDERR "Synced on: $computer_name\n";
|
||||
|
||||
if($rc->{WRITEDEVICEINFO} && !$opt{f}) {
|
||||
my $exit=0;
|
||||
unless($rc->{IPODNAME} eq $ipod_name) {
|
||||
$exit=1;
|
||||
print STDERR "Your IPOD name: $rc->{IPODNAME}\n";
|
||||
}
|
||||
unless($rc->{REALNAME} eq $real_name) {
|
||||
$exit=1;
|
||||
print STDERR "Your real name: $rc->{REALNAME}\n";
|
||||
}
|
||||
unless($rc->{COMPUTERNAME} eq $computer_name) {
|
||||
$exit=1;
|
||||
print STDERR "Your computer: $rc->{COMPUTERNAME}\n";
|
||||
}
|
||||
die "names mismatch, use -f to override" if $exit;
|
||||
}
|
||||
print STDERR "\n";
|
||||
}
|
||||
|
||||
#
|
||||
# write ipod name
|
||||
#
|
||||
|
||||
if($rc->{WRITEDEVICEINFO}) {
|
||||
set_ipodname(
|
||||
$rc->{IPODDIR},$rc->{BACKUPDIR},
|
||||
$rc->{IPODNAME},$rc->{REALNAME},$rc->{COMPUTERNAME}
|
||||
);
|
||||
$ipod_name=$rc->{IPODNAME};
|
||||
}
|
||||
|
||||
#
|
||||
# check for songs
|
||||
#
|
||||
|
||||
my %songs;
|
||||
my %check;
|
||||
|
||||
my $dir;
|
||||
$dir=$rc->{IPODDIR}."/iPod_Control/Music";
|
||||
$dir=$rc->{SYNCDIR} if($rc->{SYNCMODE} >= 2);
|
||||
|
||||
my %tosync;
|
||||
if(($rc->{SYNCLIST}) && ($rc->{SYNCMODE} == 2)) {
|
||||
open IN,$rc->{SYNCLIST} or die "all-playlist: $rc->{SYNCLIST} not found";
|
||||
while(<IN>) {
|
||||
chomp;
|
||||
$tosync{$_}=1;
|
||||
}
|
||||
close IN;
|
||||
}
|
||||
|
||||
my @mp3s;
|
||||
if(($rc->{SYNCMODE} == 3)) {
|
||||
my @pl=find("$rc->{PLAYLISTDIR}/* 2>/dev/null");
|
||||
my %test;
|
||||
|
||||
for my $p (@pl) {
|
||||
chomp $p;
|
||||
my ($n) = $p =~ /.*\/(.*?)$/;
|
||||
open IN,$p or die "playlist: $p could not be opened";
|
||||
while(<IN>) {
|
||||
unless($test{$_}) {
|
||||
push @mp3s,$_;
|
||||
$test{$_}=1;
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
@mp3s=find($dir);
|
||||
}
|
||||
|
||||
for(@mp3s) {
|
||||
chomp $_;
|
||||
next unless(/\.(m|M)(p|P)3$/);
|
||||
my $name=$_;
|
||||
|
||||
if(keys %tosync) {
|
||||
next unless($tosync{$name});
|
||||
}
|
||||
|
||||
if($opt{n}) {
|
||||
die "illegal character in filename [$name]\n" unless ($name =~ /^[A-Za-z0-9\.\-_\/\,]+$/);
|
||||
}
|
||||
|
||||
s/\://g;
|
||||
s/.*\///g;
|
||||
$songs{$name}{name}=$_;
|
||||
if($rc->{SYNCMODE} >= 2) {
|
||||
$songs{$name}{dir}="F".hash($_);
|
||||
} else {
|
||||
($songs{$name}{dir}) = $name =~ /\/(F\d\d)\//;
|
||||
}
|
||||
|
||||
{
|
||||
my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,
|
||||
$atime,$mtime,$ctime,$blksize,$blocks) = stat($name);
|
||||
$songs{$name}{size}=$size;
|
||||
$songs{$name}{date}=$mtime;
|
||||
}
|
||||
|
||||
my $tag;
|
||||
$tag = get_mp3tag($name) unless($rc->{ALWAYSTEMPLATES});
|
||||
|
||||
my ($artist,$album,$title,$order,$_dummy_);
|
||||
|
||||
if($tag) {
|
||||
# print Dumper($tag);
|
||||
# YEAR ARTIST COMMENT TRACKNUM TITLE ALBUM GENRE
|
||||
$artist=$tag->{ARTIST};
|
||||
$album=$tag->{ALBUM};
|
||||
$title=$tag->{TITLE};
|
||||
$order=$tag->{TRACKNUM};
|
||||
$order=$1 if($order =~ /(\d+)\s*\//);
|
||||
|
||||
} else {
|
||||
for(sort {length($b) <=> length($a)} keys %{$rc->{FILETEMPLATES}}) {
|
||||
if(my @x = $name =~ /$_/) {
|
||||
my $c=0;
|
||||
for my $x (@x) {
|
||||
#print "\$$rc->{FILETEMPLATES}->{$_}->[$c]=\"$x\";\n";
|
||||
eval "\$$rc->{FILETEMPLATES}->{$_}->[$c]=\"$x\";";
|
||||
die "eval error: $@" if($@);
|
||||
$c++;
|
||||
}
|
||||
last;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
unless($title) {
|
||||
die "no title found in: $name";
|
||||
}
|
||||
|
||||
$title =~ s/_/ /g;
|
||||
$artist =~ s/_/ /g;
|
||||
$album =~ s/_/ /g;
|
||||
|
||||
$songs{$name}{title}=$title;
|
||||
$songs{$name}{artist}="";
|
||||
$songs{$name}{album}="";
|
||||
$songs{$name}{order}=0;
|
||||
$songs{$name}{artist}=$artist if $artist;
|
||||
$songs{$name}{album}=$album if $album;
|
||||
$songs{$name}{order}=$order if $order;
|
||||
|
||||
my $info = get_mp3info ($name);
|
||||
|
||||
$songs{$name}{size}=$info->{SIZE};
|
||||
$songs{$name}{bitrate}=$info->{BITRATE};
|
||||
$songs{$name}{duration}=int($info->{SECS}*1000);
|
||||
$songs{$name}{vbr}=$info->{VBR};
|
||||
|
||||
#print Dumper($info);
|
||||
|
||||
my $n=$songs{$name}{dir}."/".$songs{$name}{name};
|
||||
unless($check{$n}) {
|
||||
$check{$n}=1;
|
||||
} else {
|
||||
die "songname: $songs{$name}{name} not unique";
|
||||
}
|
||||
}
|
||||
|
||||
#
|
||||
# deleting unwanted songs
|
||||
#
|
||||
|
||||
my %known;
|
||||
for(keys %songs) {
|
||||
$known{$songs{$_}{name}}=1;
|
||||
}
|
||||
|
||||
#print Dumper(\%known);
|
||||
|
||||
my @ipod = find ("$rc->{IPODDIR}/iPod_Control/Music");
|
||||
my @todel;
|
||||
for(@ipod) {
|
||||
next unless (/\.mp3$/i);
|
||||
chomp;
|
||||
|
||||
my ($name) = $_ =~ /\/([^\/]+\.mp3)$/i;
|
||||
unless($known{$name}) {
|
||||
push @todel,$_;
|
||||
}
|
||||
}
|
||||
|
||||
my $del;
|
||||
if($rc->{DELETEASK} && @todel) {
|
||||
for(@todel) {
|
||||
print "del: $_\n";
|
||||
}
|
||||
print "Do you really want to delete this songs? (y/N) ";
|
||||
my $in=<STDIN>;
|
||||
chomp $in;
|
||||
$del=1 if($in =~ /^y$/i);
|
||||
} else {
|
||||
$del=1;
|
||||
}
|
||||
|
||||
if($del) {
|
||||
for(@todel) {
|
||||
print STDERR "deleting: $_\n";
|
||||
unlink($_);
|
||||
}
|
||||
}
|
||||
|
||||
#
|
||||
# copy songs
|
||||
#
|
||||
|
||||
my $main_sl="";
|
||||
my $main_pl="";
|
||||
my $index=500;
|
||||
|
||||
#print Dumper(\%songs);
|
||||
|
||||
my $df = new Filesys::DiskFree;
|
||||
|
||||
SONGS: for my $song (keys %songs) {
|
||||
my $attr;
|
||||
my $out="";
|
||||
my $attr_c=3;
|
||||
|
||||
if($rc->{SYNCMODE} >= 2) {
|
||||
my $to = "$rc->{IPODDIR}/iPod_Control/Music/$songs{$song}{dir}/$songs{$song}{name}";
|
||||
#my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,
|
||||
# $atime,$mtime,$ctime,$blksize,$blocks) = stat($to);
|
||||
#$size=0 unless $size;
|
||||
#print "checking: $song [$songs{$song}{size}] -> $to [$size]\n";
|
||||
#if($size != $songs{$song}{size}) {
|
||||
|
||||
unless(-e $to) {
|
||||
print STDERR "syncing: $songs{$song}{name}\n";
|
||||
# cp "\"$song\" \"$to\"";
|
||||
|
||||
$df->df();
|
||||
my $free=$df->avail($rc->{IPODDIR});
|
||||
|
||||
if($free-$songs{$song}{size}-$buffer>0) {
|
||||
copy($song,$to);
|
||||
} else {
|
||||
print STDERR "no space availiable for: $songs{$song}{name} [$songs{$song}{size}]\n";
|
||||
delete $songs{$song};
|
||||
next SONGS;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$songs{$song}{index}=$index;
|
||||
|
||||
$out.=create_mhod($songs{$song}{title},1);
|
||||
|
||||
if($songs{$song}{artist}) {
|
||||
$attr_c++;
|
||||
$out.=create_mhod($songs{$song}{artist},4);
|
||||
}
|
||||
if($songs{$song}{album}) {
|
||||
$attr_c++;
|
||||
$out.=create_mhod($songs{$song}{album},3);
|
||||
}
|
||||
|
||||
$out.=create_mhod("MPEG audio file",6);
|
||||
$out.=create_mhod(":iPod_Control:Music:".$songs{$song}{dir}.":".$songs{$song}{name},2);
|
||||
|
||||
$out=create_mhit(
|
||||
$attr_c,length($out),$index,$songs{$song}{vbr},
|
||||
$songs{$song}{date},$songs{$song}{size},
|
||||
$songs{$song}{duration},$songs{$song}{order},
|
||||
$songs{$song}{bitrate}
|
||||
).$out;
|
||||
|
||||
$main_sl.=$out;
|
||||
|
||||
$main_pl.=create_mhod_mhip($songs{$song}{index});
|
||||
|
||||
$index++;
|
||||
}
|
||||
|
||||
#print Dumper(\%songs);
|
||||
|
||||
my %playlists;
|
||||
my @pl=find("$rc->{PLAYLISTDIR}/* 2>/dev/null");
|
||||
|
||||
for my $p (@pl) {
|
||||
chomp $p;
|
||||
my ($n) = $p =~ /.*\/(.*?)$/;
|
||||
open IN,$p or die "playlist: $p could not be opened";
|
||||
while(<IN>) {
|
||||
my $song=$_;
|
||||
chomp $song;
|
||||
|
||||
unless($songs{$song}) {
|
||||
print STDERR "ignoring song in playlist [$p], [$song] does not exist in syncdir or ipod full\n";
|
||||
} else {
|
||||
$playlists{$n}{raw}.=create_mhod_mhip($songs{$song}{index});
|
||||
$playlists{$n}{count}++;
|
||||
}
|
||||
}
|
||||
close IN;
|
||||
}
|
||||
|
||||
#
|
||||
# creating search pattern playlists
|
||||
#
|
||||
|
||||
for my $pattern (@ARGV) {
|
||||
my @list;
|
||||
for(keys %songs) {
|
||||
push @list,$songs{$_}{index} if($_ =~ /$pattern/i);
|
||||
}
|
||||
unless(@list) {
|
||||
print STDERR "nothing for searchpattern: $pattern found\n";
|
||||
} else {
|
||||
my ($name)=$pattern=~/(\S\S\S+)/;
|
||||
unless(length($name)>=3) {
|
||||
$name=$pattern;
|
||||
$name =~ s/[^A-Za-z0-9]//g;
|
||||
}
|
||||
for(@list) {
|
||||
$playlists{$name}{raw}.=create_mhod_mhip($_);
|
||||
$playlists{$name}{count}++;
|
||||
}
|
||||
print STDERR @list." songs for searchpattern: $pattern found\n";
|
||||
}
|
||||
}
|
||||
|
||||
#print Dumper(\%playlists);
|
||||
|
||||
#
|
||||
# build the pieces together
|
||||
#
|
||||
|
||||
my $output;
|
||||
|
||||
my $song_c=keys %songs;
|
||||
|
||||
print STDERR "\nFound songs: $song_c\n";
|
||||
|
||||
my $tmp=create_mhlt($song_c).$main_sl;
|
||||
$main_sl=create_mhsd(96+length($tmp),1).$tmp;
|
||||
|
||||
print STDERR "Songlist created\n";
|
||||
|
||||
my $pl_c=keys %playlists;
|
||||
|
||||
print STDERR "\nFound additional playlists: $pl_c\n";
|
||||
|
||||
$tmp=create_mhlp($pl_c+1).create_playlist_main($ipod_name,$song_c).$main_pl;
|
||||
print STDERR "\nMain playlist created: $song_c songs\n\n";
|
||||
|
||||
for(keys %playlists) {
|
||||
$tmp.=create_playlist($_,$playlists{$_}{count}).$playlists{$_}{raw};
|
||||
print STDERR "Playlist \"$_\" created: $playlists{$_}{count} songs\n";
|
||||
}
|
||||
|
||||
$main_pl=create_mhsd(96+length($tmp),2).$tmp;
|
||||
|
||||
|
||||
$output=create_mhbd(104+length($main_sl.$main_pl)).$main_sl.$main_pl;
|
||||
|
||||
# backup old iTunesDB
|
||||
if(-e "$rc->{IPODDIR}/iPod_Control/iTunes/iTunesDB") {
|
||||
my $t=time();
|
||||
copy("$rc->{IPODDIR}/iPod_Control/iTunes/iTunesDB","$rc->{BACKUPDIR}/iTunesDB_$t");
|
||||
gzip("$rc->{BACKUPDIR}/iTunesDB_$t");
|
||||
}
|
||||
|
||||
open OUT,">".$rc->{IPODDIR}."/iPod_Control/iTunes/iTunesDB" or die "cannot write iTunesDB";
|
||||
print OUT $output;
|
||||
close OUT;
|
||||
|
||||
print STDERR "\niTunesDB created.\n";
|
||||
exit;
|
||||
# END
|
||||
|
||||
|
||||
#
|
||||
# internal subroutines
|
||||
#
|
||||
|
||||
sub create_mhbd {
|
||||
my ($size) = @_;
|
||||
|
||||
my $r= "mhbd";
|
||||
$r.= pack "V",104;
|
||||
$r.= pack "V",$size;
|
||||
$r.= pack "V",1;
|
||||
$r.= pack "V",1;
|
||||
$r.= pack "V",2;
|
||||
for(1..20) {
|
||||
$r.= pack "V",0;
|
||||
}
|
||||
|
||||
return $r;
|
||||
}
|
||||
|
||||
sub create_mhlp {
|
||||
my ($count) = @_;
|
||||
|
||||
my $r= "mhlp";
|
||||
$r.= pack "V",92;
|
||||
$r.= pack "V",$count;
|
||||
for(1..20) {
|
||||
$r.= pack "V",0;
|
||||
}
|
||||
|
||||
return $r;
|
||||
}
|
||||
|
||||
sub create_playlist {
|
||||
my ($name,$anz) = @_;
|
||||
|
||||
my $ipod_name=create_mhod($name,1);
|
||||
|
||||
my $r= "mhyp";
|
||||
$r.= pack "V",108;
|
||||
$r.= pack "V",108+648+length($ipod_name)+$anz*(76+44);
|
||||
$r.= pack "V",2;
|
||||
$r.= pack "V",$anz;
|
||||
$r.= pack "V",0;
|
||||
$r.= pack "V",3088620292;
|
||||
$r.= pack "V",2317718671;
|
||||
$r.= pack "V",3655876446;
|
||||
for(1..18) {
|
||||
$r.= pack "V",0;
|
||||
}
|
||||
|
||||
$r.= "mhod";
|
||||
$r.= pack "V",24;
|
||||
$r.= pack "V",648;
|
||||
$r.= pack "V",100;
|
||||
for(1..3) {
|
||||
$r.= pack "V",0;
|
||||
}
|
||||
$r.= pack "V",12714187; # ?? 12714187
|
||||
$r.= pack "V",26215000;
|
||||
$r.= pack "V",0;
|
||||
$r.= pack "V",65736;
|
||||
$r.= pack "V",1; # ?? 1
|
||||
$r.= pack "V",6; # ?? 6
|
||||
$r.= pack "V",0; # ?? 0
|
||||
$r.= pack "V",2555905; # ?? 2555905
|
||||
for(1..3) {
|
||||
$r.= pack "V",0;
|
||||
}
|
||||
$r.= pack "V",13107202;
|
||||
for(1..3) {
|
||||
$r.= pack "V",0;
|
||||
}
|
||||
$r.= pack "V",3276813;
|
||||
for(1..3) {
|
||||
$r.= pack "V",0;
|
||||
}
|
||||
$r.= pack "V",8192004;
|
||||
for(1..3) {
|
||||
$r.= pack "V",0;
|
||||
}
|
||||
$r.= pack "V",8192003;
|
||||
for(1..3) {
|
||||
$r.= pack "V",0;
|
||||
}
|
||||
$r.= pack "V",5242888;
|
||||
for(1..107) {
|
||||
$r.= pack "V",0;
|
||||
}
|
||||
$r.= pack "V",140;
|
||||
for(1..19) {
|
||||
$r.= pack "V",0;
|
||||
}
|
||||
|
||||
return $r.$ipod_name;
|
||||
}
|
||||
|
||||
sub create_playlist_main {
|
||||
my ($name,$anz) = @_;
|
||||
|
||||
my $ipod_name=create_mhod($name,1);
|
||||
|
||||
my $r= "mhyp";
|
||||
$r.= pack "V",108;
|
||||
$r.= pack "V",108+648+length($ipod_name)+$anz*(76+44);
|
||||
$r.= pack "V",2;
|
||||
$r.= pack "V",$anz;
|
||||
$r.= pack "V",1;
|
||||
$r.= pack "V",3087491191;
|
||||
$r.= pack "V",837788566;
|
||||
$r.= pack "V",62365;
|
||||
for(1..18) {
|
||||
$r.= pack "V",0;
|
||||
}
|
||||
|
||||
$r.= "mhod";
|
||||
$r.= pack "V",24;
|
||||
$r.= pack "V",648;
|
||||
$r.= pack "V",100;
|
||||
for(1..3) {
|
||||
$r.= pack "V",0;
|
||||
}
|
||||
$r.= pack "V",13172927; # ?? 12714187
|
||||
$r.= pack "V",26215000;
|
||||
$r.= pack "V",0;
|
||||
$r.= pack "V",65736;
|
||||
$r.= pack "V",5; # ?? 1
|
||||
$r.= pack "V",6; # ?? 6
|
||||
$r.= pack "V",3; # ?? 0
|
||||
$r.= pack "V",1179649; # ?? 2555905
|
||||
for(1..3) {
|
||||
$r.= pack "V",0;
|
||||
}
|
||||
$r.= pack "V",13107202;
|
||||
for(1..3) {
|
||||
$r.= pack "V",0;
|
||||
}
|
||||
$r.= pack "V",3276813;
|
||||
for(1..3) {
|
||||
$r.= pack "V",0;
|
||||
}
|
||||
$r.= pack "V",8192004;
|
||||
for(1..3) {
|
||||
$r.= pack "V",0;
|
||||
}
|
||||
$r.= pack "V",8192003;
|
||||
for(1..3) {
|
||||
$r.= pack "V",0;
|
||||
}
|
||||
$r.= pack "V",5242888;
|
||||
for(1..107) {
|
||||
$r.= pack "V",0;
|
||||
}
|
||||
$r.= pack "V",140;
|
||||
for(1..19) {
|
||||
$r.= pack "V",0;
|
||||
}
|
||||
|
||||
return $r.$ipod_name;
|
||||
}
|
||||
|
||||
sub create_mhod_mhip {
|
||||
my ($ref) = @_;
|
||||
|
||||
my $r= "mhip";
|
||||
$r.= pack "V",76;
|
||||
$r.= pack "V",76;
|
||||
$r.= pack "V",1;
|
||||
$r.= pack "V",0;
|
||||
$r.= pack "V",$ref-1;
|
||||
$r.= pack "V",$ref;
|
||||
$r.= pack "V",3088619525;
|
||||
for(1..11) {
|
||||
$r.= pack "V",0;
|
||||
}
|
||||
|
||||
$r.="mhod";
|
||||
$r.= pack "V",24;
|
||||
$r.= pack "V",44;
|
||||
$r.= pack "V",100;
|
||||
$r.= pack "V",0;
|
||||
$r.= pack "V",0;
|
||||
$r.= pack "V",$ref-1;
|
||||
for(1..4) {
|
||||
$r.= pack "V",0;
|
||||
}
|
||||
|
||||
return $r;
|
||||
}
|
||||
|
||||
sub create_mhsd {
|
||||
my ($size,$type) = @_;
|
||||
|
||||
my $r="mhsd";
|
||||
$r.= pack "V",96;
|
||||
$r.= pack "V",$size;
|
||||
$r.= pack "V",$type;
|
||||
for(1..20) {
|
||||
$r.= pack "V",0;
|
||||
}
|
||||
|
||||
return $r;
|
||||
}
|
||||
|
||||
sub create_mhlt {
|
||||
my ($count) = @_;
|
||||
|
||||
my $r="mhlt";
|
||||
$r.= pack "V",92;
|
||||
$r.= pack "V",$count;
|
||||
for(1..20) {
|
||||
$r.= pack "V",0;
|
||||
}
|
||||
|
||||
return $r;
|
||||
}
|
||||
|
||||
sub create_mhit {
|
||||
my ($arttr_c,$attr_s,$index,$vbr,$date,$size,$dur,$order,$bitrate) = @_;
|
||||
|
||||
my $r="mhit";
|
||||
$r.= pack "V",156;
|
||||
$r.= pack "V",156+$attr_s;
|
||||
$r.= pack "V",$arttr_c;
|
||||
$r.= pack "V",$index;
|
||||
$r.= pack "V",1;
|
||||
$r.= pack "V",0;
|
||||
my $type=256;
|
||||
$type+=1 if($vbr);
|
||||
$r.= pack "V",$type;
|
||||
$r.= pack "V",$date+2082844800;
|
||||
$r.= pack "V",$size;
|
||||
$r.= pack "V",$dur;
|
||||
$r.= pack "V",$order;
|
||||
$r.= pack "V",0;
|
||||
$r.= pack "V",0;
|
||||
$r.= pack "V",$bitrate;
|
||||
$r.= pack "V",2890137600;
|
||||
for(1..23) {
|
||||
$r.= pack "V",0;
|
||||
}
|
||||
|
||||
return $r;
|
||||
}
|
||||
|
||||
sub create_mhod {
|
||||
my ($string,$type) = @_;
|
||||
my $len=length($string);
|
||||
|
||||
my $r="mhod";
|
||||
$r.= pack "V",24;
|
||||
$r.= pack "V",(40+2*$len);
|
||||
$r.= pack "V",$type;
|
||||
$r.= pack "V2",0;
|
||||
$r.= pack "V",1;
|
||||
$r.= pack "V",(2*$len);
|
||||
$r.= pack "V2",0;
|
||||
|
||||
my $u=latin1($string);
|
||||
$u->byteswap;
|
||||
$r.= $u->utf16;
|
||||
|
||||
return $r;
|
||||
}
|
||||
|
||||
sub set_ipodname {
|
||||
my ($dev,$backup,$name,$real,$cpu)=@_;
|
||||
$dev.="/iPod_Control/iTunes/DeviceInfo";
|
||||
|
||||
my $file;
|
||||
|
||||
for(1..384) {
|
||||
$file.=pack "V",0;
|
||||
}
|
||||
|
||||
my $l=length($name);
|
||||
substr($file,0,2)=pack "v",$l;
|
||||
my $u=latin1($name);
|
||||
$u->byteswap;
|
||||
substr($file,2,$l*2)=$u->utf16;
|
||||
|
||||
$l=length($real);
|
||||
substr($file,512,2)=pack "v",$l;
|
||||
$u=latin1($real);
|
||||
$u->byteswap;
|
||||
substr($file,514,$l*2)=$u->utf16;
|
||||
|
||||
$l=length($cpu);
|
||||
substr($file,1024,2)=pack "v",$l;
|
||||
$u=latin1($cpu);
|
||||
$u->byteswap;
|
||||
substr($file,1026,$l*2)=$u->utf16;
|
||||
|
||||
if(-e $dev) {
|
||||
my $t=time();
|
||||
copy($dev,"$backup/DeviceInfo_$t");
|
||||
gzip("$backup/DeviceInfo_$t");
|
||||
}
|
||||
open IPOD,">$dev" or die "cannot write DeviceInfo";
|
||||
print IPOD $file;
|
||||
close IPOD;
|
||||
}
|
||||
|
||||
sub get_ipodname {
|
||||
my $dev=shift;
|
||||
$dev.="/iPod_Control/iTunes/DeviceInfo";
|
||||
my $file;
|
||||
my $buff;
|
||||
|
||||
open IPOD,$dev or return undef;
|
||||
while (read(IPOD, $buff, 8 * 2**10)) {
|
||||
$file.=$buff;
|
||||
}
|
||||
close IPOD;
|
||||
|
||||
my $l=unpack "v",substr($file,0,2);
|
||||
my $s=substr($file,2,$l*2);
|
||||
my $u=utf16($s);
|
||||
$u->byteswap;
|
||||
my $name=$u->latin1;
|
||||
|
||||
$l=unpack "v",substr($file,512,2);
|
||||
$s=substr($file,514,$l*2);
|
||||
$u=utf16($s);
|
||||
$u->byteswap;
|
||||
my $realname=$u->latin1;
|
||||
|
||||
$l=unpack "v",substr($file,1024,2);
|
||||
$s=substr($file,1026,$l*2);
|
||||
$u=utf16($s);
|
||||
$u->byteswap;
|
||||
my $computername=$u->latin1;
|
||||
|
||||
return ($name,$realname,$computername);
|
||||
}
|
||||
|
||||
sub hash {
|
||||
my $string=shift;
|
||||
my $key;
|
||||
|
||||
my $len=length($string);
|
||||
|
||||
for(my $j=$len-1 ; $j>1 ; $j--) {
|
||||
$key+=ord(substr($string,$j,1));
|
||||
}
|
||||
|
||||
return sprintf "%.2d",(substr($key,length($key)-2,2) % 20);
|
||||
}
|
||||
|
||||
sub readrc {
|
||||
my $file = shift;
|
||||
my $req = shift;
|
||||
my $rc;
|
||||
|
||||
my $sub;
|
||||
|
||||
open IN,$file or die "cannot open rc file: $file";
|
||||
while(<IN>) {
|
||||
next if /^\s*$/;
|
||||
next if /^\s*#/;
|
||||
|
||||
if(/^\s*(\S+)\s*=\s*(.*?)\s*$/) {
|
||||
my $k=$1;
|
||||
my $n=$2;
|
||||
($n) = $n =~ /^\"(.*?)\"$/ if($n =~ /\"/);
|
||||
unless($sub) {
|
||||
$rc->{$k}=$n;
|
||||
} else {
|
||||
($k) = $k =~ /^\"(.*?)\"$/ if($k =~ /\"/);
|
||||
my @n=split /,/,$n;
|
||||
for(@n) {
|
||||
s/^\s+//g;
|
||||
s/\s+$//g;
|
||||
s/^\"//;
|
||||
s/\"$//;
|
||||
}
|
||||
$rc->{$sub}->{$k}=\@n;
|
||||
}
|
||||
} elsif (/^\s*(\S+)\s*\{/) {
|
||||
$sub=$1;
|
||||
} elsif (/^\s*}/) {
|
||||
$sub=undef;
|
||||
}
|
||||
}
|
||||
|
||||
if($rc->{SYNCMODE} == 2) {
|
||||
push @$req,"SYNCDIR";
|
||||
}
|
||||
if($rc->{WRITEDEVICEINFO} == 1) {
|
||||
push @$req,("IPODNAME","REALNAME","COMPUTERNAME");
|
||||
}
|
||||
if($rc->{ALWAYSTEMPLATES} == 1) {
|
||||
push @$req,"FILETEMPLATES";
|
||||
}
|
||||
|
||||
for my $d (keys %$rc) {
|
||||
if($d =~ /DIR$/) {
|
||||
$rc->{$d} =~ s/\~/$ENV{HOME}/;
|
||||
}
|
||||
}
|
||||
$rc->{SYNCLIST} =~ s/\~/$ENV{HOME}/ if $rc->{SYNCLIST};
|
||||
|
||||
for(@$req) {
|
||||
die "RC PARAMETER: $_ not found" unless($rc->{$_});
|
||||
}
|
||||
return $rc;
|
||||
}
|
||||
18
cd-blank
Executable file
18
cd-blank
Executable file
@@ -0,0 +1,18 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -x
|
||||
|
||||
echo
|
||||
echo "L<>schen einer CD-RW"
|
||||
echo
|
||||
|
||||
. /etc/dvd-scripts.env
|
||||
if [ "$1" == "all" ]
|
||||
then
|
||||
echo "Die CD-RW wird gr<67>ndlich gel<65>scht..."
|
||||
cdrecord -v dev="$CD_DEVICE" -blank=all
|
||||
else
|
||||
echo "Die CD-RW wird schnell gel<65>scht..."
|
||||
cdrecord -v dev="$CD_DEVICE" -blank=fast
|
||||
|
||||
fi
|
||||
25
cd-burn-files
Executable file
25
cd-burn-files
Executable file
@@ -0,0 +1,25 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -x
|
||||
|
||||
echo
|
||||
echo "Brennen eins Verzeichnisses"
|
||||
echo
|
||||
|
||||
. /etc/dvd-scripts.env
|
||||
|
||||
CD_IMAGE=$CD_IMAGE_TEMP
|
||||
DATA_DIR=$1
|
||||
|
||||
label=`date '+%Y-%m-%d'`
|
||||
|
||||
echo "Das Image f<>r das Verzeichnis $DATA_DIR wird erzeugt..."
|
||||
mkisofs -D -J -L -r -v -V "$label" -o "$CD_IMAGE" "$DATA_DIR"
|
||||
|
||||
if [ $? -eq 0 ]
|
||||
then
|
||||
cd-burn-image "$CD_IMAGE"
|
||||
rm "$CD_IMAGE"
|
||||
else
|
||||
echo "Fehler beim erzeugen des Image."
|
||||
fi
|
||||
25
cd-burn-image
Executable file
25
cd-burn-image
Executable file
@@ -0,0 +1,25 @@
|
||||
#!/bin/sh
|
||||
|
||||
#set -x
|
||||
|
||||
echo
|
||||
echo "Brennen eines CD-Images"
|
||||
echo
|
||||
|
||||
. /etc/dvd-scripts.env
|
||||
|
||||
CD_IMAGE=$1
|
||||
|
||||
hdparm -u1 -d1 $CD_DEVICE_SCSI
|
||||
if [ "$CD_IMAGE" == "" ]
|
||||
then
|
||||
echo "Usage: $0 image-file-to-burn"
|
||||
elif [ -s "$CD_IMAGE" ]
|
||||
then
|
||||
echo "Das Image $CD_IMAGE wird gebrannt..."
|
||||
cdrecord -v -eject dev="$CD_DEVICE_SCSI" -data "$CD_IMAGE"
|
||||
|
||||
else
|
||||
echo "Das Image $CD_IMAGE existiert nicht !"
|
||||
fi
|
||||
echo
|
||||
97
cd2mp3
Executable file
97
cd2mp3
Executable file
@@ -0,0 +1,97 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# /usr/local/bin/cdtomp3 -- CD rippen
|
||||
#
|
||||
#set -x
|
||||
|
||||
[ -f ~/.cd2mp3.conf ] && . ~/.cd2mp3.conf
|
||||
|
||||
[ -z $cdreader ] && cdreader="/dev/cdrom"
|
||||
[ -z $bitrate ] && bitrate=192
|
||||
[ -z $cddbdata ] && cddbdata=/tmp/cdtomp3.cddb
|
||||
[ -z $grabber ] && grabber='cdparanoia -q -w $(expr $i + 1) -d $cdreader -'
|
||||
[ -z $destdir ] && destdir=/dat/mp3Neu
|
||||
[ -z $prio ] && prio=10
|
||||
[ -z $SVDSVDRPSEND ] && SVDRPSEND=svdrpsend.pl
|
||||
[ -z $LOGFILE ] && LOGFILE=/tmp/cd2mp3.log
|
||||
|
||||
if test -f $LOGFILE; then
|
||||
rm $LOGFILE
|
||||
fi
|
||||
if test -s $cddbdata; then
|
||||
rm $cddbdata
|
||||
fi
|
||||
|
||||
#internetverbindung in de g<>nge bringen
|
||||
#ping -c 2 www.heise.de
|
||||
#sleep 15
|
||||
|
||||
cddb=$(echo $(disc-cover -t cddb -D $cdreader -o "$cddbdata") | awk -F'"' '{print $2}')
|
||||
if test -s "$cddbdata"; then
|
||||
subdir=$(grep "DTITLE" "$cddbdata" | awk -F= '{print $2}' | sed "s/ /_/g" | sed "s/[^[:alnum:]_-]//g")
|
||||
echo "CDDB Eintrag gefunden: $subdir"
|
||||
$SVDRPSEND MESG "CDDB Eintrag gefunden: $subdir"
|
||||
else
|
||||
subdir="UnbekannteCd"
|
||||
fi
|
||||
|
||||
if ! test -d "$destdir/$subdir"; then
|
||||
mkdir $destdir/$subdir
|
||||
fi
|
||||
cd $destdir/$subdir
|
||||
|
||||
if ! test -a fifo; then
|
||||
mkfifo fifo
|
||||
fi
|
||||
## Jetzt geht's los, maximal 100 Titel auf einer CD
|
||||
|
||||
for(( i=0; i<=99; i++))
|
||||
do
|
||||
## Erst den Dateinamen des Tracks ermitteln
|
||||
if test -s "$cddbdata"; then
|
||||
trackname=$(grep "TITLE$(echo $(expr $i + 0))=" $cddbdata | awk -F= '{print $2}' | sed "s/ /_/g" | sed "s/[^[:alnum:]_-]//g")
|
||||
if ! test "$trackname"; then
|
||||
trackname="track"
|
||||
fi
|
||||
else
|
||||
trackname="track"
|
||||
fi
|
||||
## Index hinzu; moegliche Namensgleichheiten beseitigen
|
||||
let "i2 = $i + 1"
|
||||
if [ $i2 -le 9 ] ; then
|
||||
index=0$i2
|
||||
else
|
||||
index=$i2
|
||||
fi
|
||||
trackname=$index"-$trackname"
|
||||
echo $trackname
|
||||
|
||||
## Get names for ID-Tags #################
|
||||
titlename=$(grep "TITLE$(echo $(expr $i + 0))=" $cddbdata | awk -F= '{print $2}')
|
||||
year=$(grep "DYEAR=" $cddbdata | awk -F= '{print $2}')
|
||||
disktitle=$(grep "DTITLE=" $cddbdata | awk -F[=/] '{print $3}' | sed "s/^ *//")
|
||||
diskartist=$(grep "DTITLE=" $cddbdata | awk -F[=/] '{print $2}')
|
||||
#echo Jahr:$year
|
||||
#echo Titel:$titlename
|
||||
#echo Album:$disktitle
|
||||
#echo Interpret:$diskartist
|
||||
$SVDRPSEND MESG "'$trackname' wird gerippt"
|
||||
## Grabber und Kodierer anwerfen ############
|
||||
# Codieren beginnt sobald das erste Byte eintrifft ...
|
||||
nice -n $prio lame --quiet --tt "$titlename" --ta "$diskartist" --tl "$disktitle" --ty "$year" --tn "$i2" --disptime 2 -b $bitrate -m s -h fifo "$trackname".mp3 > $LOGFILE &
|
||||
eval "nice -n $prio $grabber" > fifo
|
||||
|
||||
# das ist der Fall, wenn der angegebene Track existiert ...
|
||||
if test "$?" -ne 0; then
|
||||
sleep 5
|
||||
# Fehlercode des Grabbers -> reale Trackzahl ueberschritten
|
||||
# oder Fehler des CD Laufwerks
|
||||
#echo "FEHLER"
|
||||
#echo "$trackname".mp3
|
||||
rm "$trackname".mp3
|
||||
break
|
||||
fi
|
||||
done
|
||||
rm fifo
|
||||
$SVDRPSEND MESG "Rippen fertig"
|
||||
echo "Fertig !"
|
||||
24
cda2hd
Executable file
24
cda2hd
Executable file
@@ -0,0 +1,24 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
#
|
||||
set -x
|
||||
|
||||
#scsidev="0,0,0"
|
||||
cdreader="/dev/cdrom"
|
||||
destdir=/dat/tmp/audio
|
||||
driver=generic-mmc
|
||||
logfile=/tmp/cda2hd.log
|
||||
nicelevel=15
|
||||
|
||||
[ -d $destdir ] || mkdir -p $destdir
|
||||
cd $destdir
|
||||
|
||||
|
||||
# Datei cd.toc erzeugen
|
||||
[ -f cd.toc ] && rm cd.toc
|
||||
nice -n $nicelevel cdrdao read-toc --with-cddb --datafile data.raw --device $cdreader --driver $driver cd.toc > $logfile
|
||||
# Grabben (cdparanoia hat eine bessere Kratzererkennung)
|
||||
[ -f data.raw ] && rm data.raw
|
||||
nice -n $nicelevel cdparanoia -v 1- -p data.raw -d $cdreader > $logfile
|
||||
#cdrdao write --eject --speed $speed --device $scsidev --driver $driver cd.toc
|
||||
eject $cdreader
|
||||
56
convnow.sh
Executable file
56
convnow.sh
Executable file
@@ -0,0 +1,56 @@
|
||||
#!/bin/bash
|
||||
|
||||
log=/tmp/convnow.log
|
||||
#echo 0:$0 >> $log
|
||||
#echo 1:$1 >> $log
|
||||
#echo 2:$2 >> $log
|
||||
|
||||
viddir=\\/var\\/lib\\/video.00\\/
|
||||
recdir=$2
|
||||
|
||||
recpath=$(echo $recdir | sed "s/$viddir//g")
|
||||
#echo recpath: $recpath >> $log
|
||||
#echo "2" >> $log
|
||||
|
||||
function cmd2nas {
|
||||
local cmd=$1
|
||||
local nasaddr=nas@nas
|
||||
local naskey=nas
|
||||
|
||||
echo ssh -i ~/.ssh/$naskey $nasaddr "$cmd" >> $log
|
||||
ssh -i ~/.ssh/$naskey $nasaddr "$cmd"
|
||||
}
|
||||
|
||||
#echo recpath2: $recpath >> $log
|
||||
|
||||
for par in "$@"; do
|
||||
#echo "xxx:$par" >> $log
|
||||
case $par in
|
||||
vdr2mp3)
|
||||
#echo "vdr2mp3" >> $log
|
||||
cmd2nas "nohup ruby ~/bin/vdr2mp3.rb '$recpath' >/tmp/test.log 2>&1 & "
|
||||
|
||||
;;
|
||||
*)
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
#1:vdr2mp3dd
|
||||
#2:/var/lib/video.00/%Dok_5_-_Das_Feature/2012-08-05.11.00.124-0.rec
|
||||
exit
|
||||
|
||||
|
||||
ssh -i /home/marc/.ssh/nas nas@nas "nohup ruby ~/bin/vdr2mp3.rb '%Dok_5_-_Das_Feature/2012-08-05.11.00.124-0.rec' > /tmp/test.log 2>&1 &"
|
||||
|
||||
set -x
|
||||
|
||||
. /etc/vdr/vdrconvert.env
|
||||
|
||||
if [ ! -z "$SERVER" ]
|
||||
then
|
||||
ssh $SERVER $0 $1 "'$2'"
|
||||
else
|
||||
printf "%s\n" "$2" >> $VCOQUEUEDIR/$1
|
||||
fi
|
||||
|
||||
28
cp_packages.sh
Normal file
28
cp_packages.sh
Normal file
@@ -0,0 +1,28 @@
|
||||
|
||||
#scripts/feeds update
|
||||
#make
|
||||
|
||||
cd ../ipk/ar71xx
|
||||
|
||||
|
||||
#cp ../../base/bin/ar71xx/packages/fhem-enocean_eo_ar71xx.ipk .
|
||||
#cp ../../base/bin/ar71xx/packages/fhem-trunk_trunk_ar71xx.ipk .
|
||||
#cp ../../base/bin/ar71xx/packages/fhem-trunk_trunk_ar71xx.ipk .
|
||||
cp ../../base/bin/ar71xx/packages/fhem*.ipk .
|
||||
|
||||
#perl-device-serialport_1.04-2_ar71xx.ipk
|
||||
cp ../../base/bin/ar71xx/packages/perl-device-serialport_*.ipk .
|
||||
#perl-weather_0.5.5-1_ar71xx.ipk
|
||||
cp ../../base/bin/ar71xx/packages/perl-weather_*.ipk .
|
||||
cp ../../base/bin/ar71xx/packages/eibd*.ipk .
|
||||
cp ../../base/bin/ar71xx/packages/linknx*.ipk .
|
||||
|
||||
cp ../../base/bin/ar71xx/*.bin /home/marc/Dropbox-ipad/Public/
|
||||
cp ../../base/bin/ar71xx/md5sums /home/marc/Dropbox-ipad/Public/
|
||||
|
||||
|
||||
../../base/scripts/ipkg-make-index.sh . > Packages ; gzip -c Packages > Packages.gz
|
||||
cp *.ipk /home/marc/Dropbox-ipad/Public/ipk/ar71xx/
|
||||
cp Packages.gz /home/marc/Dropbox-ipad/Public/ipk/ar71xx/
|
||||
|
||||
cd -
|
||||
140
create_omtb_garmin_img.sh
Executable file
140
create_omtb_garmin_img.sh
Executable file
@@ -0,0 +1,140 @@
|
||||
#!/bin/zsh
|
||||
# License: Creative Commons Share Alive 3.0
|
||||
# Copyright: 2012, Bernhard Tittelbach <xro@realraum.at>
|
||||
# Thanks to malenki on #osm-de@oftc.net for constructive input and nagging me into making this thing useable in the first place
|
||||
|
||||
# Required software:
|
||||
# - zsh (obviously)
|
||||
# - 7z
|
||||
# - mkgmap (preferred) [http://www.mkgmap.org.uk/snapshots/] OR wine
|
||||
# - gmt linux version [ http://www.anpo.republika.pl/download.html ] OR wine
|
||||
#
|
||||
|
||||
setopt extendedglob
|
||||
setopt cshnullglob
|
||||
SCRIPT_NAME=${0:t}
|
||||
usage()
|
||||
{
|
||||
print "\nUsage: $SCRIPT_NAME [options] <mtb*.exe|velo*.exe> <TYP-file or TYP-style>" > /dev/stderr
|
||||
print " as TYP-style you can choose:" > /dev/stderr
|
||||
print " clas: classic layout - optimized for Vista/Legend series" > /dev/stderr
|
||||
print " thin: thinner tracks and pathes - optimized for Gpsmap60/76 series" > /dev/stderr
|
||||
print " wide: high contrast layout, like classic but with white forest - optimized for Oregon/Colorado dull displays" > /dev/stderr
|
||||
print " hike: like classic layout - but optimized for hiking (does not show mtb/bicycle informations)" > /dev/stderr
|
||||
print " easy: similar to classic layout - but focussed on easy readability hence not showing mtb/bicycle information except routes" > /dev/stderr
|
||||
print " velo: (comes with velomap files) Layout optimized for small GPS screen" > /dev/stderr
|
||||
print " or give the path to your own .TYP style file" > /dev/stderr
|
||||
print "\nOptions:" > /dev/stderr
|
||||
print " -m <path/to/mkgmap.jar>" > /dev/stderr
|
||||
print " -o <path/to/outputdir>\n" > /dev/stderr
|
||||
exit 1
|
||||
# descriptions taken from openmtbmap.org batch files
|
||||
}
|
||||
|
||||
zparseopts -A ARGS_A -D -E -- "m:" "o:"
|
||||
OMTB_EXE="$1"
|
||||
TYPFILE="$2"
|
||||
GMT_CMD==gmt
|
||||
MKGMAP=( ${ARGS_A[-m]}(.N,@-.) /usr/share/mkgmap/mkgmap.jar(.N,@-.) /usr/local/share/mkgmap/mkgmap.jar(.N,@-.) ${^path}/mkgmap.jar(.N,@-.) )
|
||||
MKGMAP="${MKGMAP[1]}"
|
||||
|
||||
if ! [[ -x $GMT_CMD ]] ; then
|
||||
if ! [[ -x =wine ]] ; then
|
||||
print "ERROR: You need to either install wine or the gmt linux binary !" > /dev/stderr
|
||||
exit 3
|
||||
fi
|
||||
# use supplied gmt.exe with wine
|
||||
GMT_CMD="wine ./gmt.exe"
|
||||
fi
|
||||
|
||||
if ! [[ -x =7z ]]; then
|
||||
print "\nERROR: 7z is not installed, but needed to extract openmtbmap downloads !"
|
||||
exit 3
|
||||
fi
|
||||
|
||||
[[ -z $TYPFILE || ! -f $OMTB_EXE ]] && usage
|
||||
|
||||
if [[ ${OMTB_EXE:t} == mtb* ]]; then
|
||||
OMTBORVELO=openmtbmap
|
||||
OMTB_NAME="${OMTB_EXE:t:r:s/mtb/}"
|
||||
elif [[ ${OMTB_EXE:t} == velo* ]]; then
|
||||
OMTBORVELO=openvelomap
|
||||
OMTB_NAME="${OMTB_EXE:t:r:s/velo/}"
|
||||
else
|
||||
print "\nERROR: not a openmtbmap.org or openvelomap.org file ?"
|
||||
usage
|
||||
fi
|
||||
DESC="${OMTBORVELO}_${OMTB_NAME}"
|
||||
if [[ -d ${ARGS_A[-o]} ]]; then
|
||||
DSTFILENAME="${ARGS_A[-o]:A}/${DESC}.img"
|
||||
TMPDIR=${ARGS_A[-o]:A}/OMTB_tmp
|
||||
else
|
||||
DSTFILENAME="${OMTB_EXE:A:h}/${DESC}.img"
|
||||
TMPDIR=${OMTB_EXE:A:h}/OMTB_tmp
|
||||
[[ -n $ARGS_A[-o] ]] && {print "\nWarning: -o given but ${ARGS_A[-o]} is not a directory.\n Using ${OMTB_EXE:A:h} instead..\n"}
|
||||
fi
|
||||
|
||||
if [[ -e $DSTFILENAME ]]; then
|
||||
print "\nWarning: the script will create (overwrite) $DSTFILENAME"
|
||||
print " but $DSTFILENAME already exists."
|
||||
read -q "?Continue and overwrite ? [y/N] " || exit 0
|
||||
print ""
|
||||
fi
|
||||
|
||||
if [[ -e $TMPDIR ]] ; then
|
||||
print "\nWarning: the script want's to create directory $TMPDIR, but it already exists."
|
||||
if [[ -d $TMPDIR ]] ; then
|
||||
print " If you press [y], $OMTB_EXE will be extracted"
|
||||
print " to $TMPDIR regardless of it's contents."
|
||||
print " That's fine if it was created during a previous abortet run of this script."
|
||||
print " Otherwise you should say [n] and move $OMTB_EXE into a clean directory."
|
||||
read -q "?Continue ? [y/N] " || exit 0
|
||||
print ""
|
||||
else
|
||||
print " Please use another output directory and try again."
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
mkdir $TMPDIR || exit 1
|
||||
fi
|
||||
|
||||
FIMG_a=(${TMPDIR}/6<000-999>0000.img(N))
|
||||
if [[ -z $FIMG_a ]] ; then
|
||||
print "Extracting $OMTB_EXE ..."
|
||||
7z x -y -o$TMPDIR ${OMTB_EXE} &>/dev/null || exit 1
|
||||
FIMG_a=(${TMPDIR}/6<000-999>0000.img(N[1]))
|
||||
[[ -z $FIMG_a ]] && {print "\nERROR, could not find 6*.img file after extracting $OMTB_EXE" >/dev/stderr ; exit 1}
|
||||
fi
|
||||
if [[ -f $TYPFILE ]] ; then
|
||||
TYPFILE="${TYPFILE:A}"
|
||||
else
|
||||
TYPFILE=( "${TMPDIR}/"(#i)${TYPFILE}*.typ(.N:A))
|
||||
TYPFILE="${TYPFILE[1]}"
|
||||
fi
|
||||
|
||||
trap "cd '$PWD'" EXIT
|
||||
cd $TMPDIR || exit 5
|
||||
|
||||
if [[ -z $TYPFILE ]] ; then
|
||||
print "\nERROR: TYP-file or -style not found" > /dev/stderr
|
||||
print " please choose your own file or one of these styles: " *.(#l)TYP(.N:r) > /dev/stderr
|
||||
exit 2
|
||||
fi
|
||||
|
||||
print "using display-TYP-file: $TYPFILE"
|
||||
cp $TYPFILE 01002468.TYP || exit 4
|
||||
FID=${${FIMG_a:t}[1][1,4]}
|
||||
print using FID $FID
|
||||
|
||||
$GMT_CMD -wy $FID 01002468.TYP
|
||||
if [[ -n $MKGMAP ]]; then
|
||||
print "using mkgmap, building address search index..."
|
||||
#java -Xmx1000M -jar mkgmap.jar --family-id=$FID --index --description="$DESC" --series-name="$DESC" --family-name="$DESC" --show-profiles=1 --product-id=1 --gmapsupp 6*.img 7*.img 01002468.TYP
|
||||
java -Xmx3000M -jar "$MKGMAP" --family-id=$FID --index --description="$DESC" --series-name="$DESC" --family-name="$DESC" --show-profiles=1 --product-id=1 --gmapsupp [67]*.img 01002468.TYP || exit 7
|
||||
mv (#i)gmapsupp.img "${DSTFILENAME}" || exit 7
|
||||
else
|
||||
print "mkgmap not found, using gmt..."
|
||||
$GMT_CMD -j -o "${DSTFILENAME}" -f $FID -m "$DESC" 6*.img 7*.img 01002468.TYP || exit 7
|
||||
fi
|
||||
rm -R "$TMPDIR"
|
||||
print "\nSuccessfully created ${DSTFILENAME}"
|
||||
1
create_opkg_index.sh
Normal file
1
create_opkg_index.sh
Normal file
@@ -0,0 +1 @@
|
||||
../../base/scripts/ipkg-make-index.sh . > Packages ; gzip -c Packages > Packages.gz
|
||||
9
createhdextlinks.sh
Normal file
9
createhdextlinks.sh
Normal file
@@ -0,0 +1,9 @@
|
||||
|
||||
|
||||
#dirs=$(find .. -maxdepth 1 -type d ! -name "*.rec" -exec find {} -maxdepth 1 -name "*.rec" \;)
|
||||
dirs=$(find .. -maxdepth 1 -type d -name "*.rec")
|
||||
for i in $dirs; do
|
||||
ln -s $i
|
||||
echo $i
|
||||
done
|
||||
|
||||
7
createhdextlinks.sh~
Normal file
7
createhdextlinks.sh~
Normal file
@@ -0,0 +1,7 @@
|
||||
|
||||
|
||||
dirs=§(find .. -type d -maxdepth 1 ! -name "*.rec" -exec find {} -maxdepth 1 -name "*.rec"}
|
||||
for i in $dirs do
|
||||
echo $i
|
||||
done
|
||||
|
||||
821
dropbox.py
Executable file
821
dropbox.py
Executable file
File diff suppressed because one or more lines are too long
6
dvd-blank
Executable file
6
dvd-blank
Executable file
@@ -0,0 +1,6 @@
|
||||
|
||||
. /etc/dvd-scripts.env
|
||||
|
||||
dvd+rw-format -blank $DVD_DEVICE
|
||||
|
||||
echo Fertig.
|
||||
24
dvd-burn-files
Executable file
24
dvd-burn-files
Executable file
@@ -0,0 +1,24 @@
|
||||
|
||||
set -x
|
||||
|
||||
. /etc/dvd-scripts.env
|
||||
|
||||
DVD_DIR=$1
|
||||
|
||||
echo "Verzeichnis $DVD_DIR auf DVD brennen..."
|
||||
|
||||
MAX_SIZE=4702989182
|
||||
|
||||
# DVD-Size 4,702,989,182
|
||||
size=`du -sb "$DVD_DIR" | awk '{print $1}'`
|
||||
#printf "size: %4d MB\n" `expr $size \/ 1024 \/ 1024`
|
||||
printf "size: %4d MB\n" `echo "$size/1024/1024;" | bc `
|
||||
if [ $size -gt $MAX_SIZE ]
|
||||
then
|
||||
printf "Zu Gro<72> (max: %4d MB) !!!\n" `expr $MAX_SIZE \/ 1024 \/ 1024`
|
||||
else
|
||||
growisofs -Z $DVD_DEVICE -R -J $DVD_DIR
|
||||
fi
|
||||
sleep 1
|
||||
echo Fertig.
|
||||
eject
|
||||
15
dvd-burn-image
Executable file
15
dvd-burn-image
Executable file
@@ -0,0 +1,15 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -x
|
||||
|
||||
. /etc/dvd-scripts.env
|
||||
|
||||
#/etc/init.d/hdparm restart
|
||||
hdparm -u1 -d1 $DVD_DEVICE
|
||||
|
||||
DVD_IMAGE=$1
|
||||
|
||||
[ -r $DVD_IMAGE ] && growisofs -Z $DVD_DEVICE=$DVD_IMAGE
|
||||
echo Fertig.
|
||||
sleep 1
|
||||
eject
|
||||
16
dvd-burn-video
Executable file
16
dvd-burn-video
Executable file
@@ -0,0 +1,16 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -x
|
||||
|
||||
. /etc/dvd-scripts.env
|
||||
|
||||
#A/etc/init.d/hdparm restart
|
||||
hdparm -d1 -u1 $DVD_DEVICE
|
||||
|
||||
DVD_DIR=$1
|
||||
|
||||
growisofs -Z $DVD_DEVICE -dvd-video $DVD_DIR
|
||||
growisofs -lead-out $DVD_DEVICE
|
||||
echo Fertig.
|
||||
sleep 1
|
||||
eject
|
||||
17
dvd-check-size
Executable file
17
dvd-check-size
Executable file
@@ -0,0 +1,17 @@
|
||||
|
||||
#set -x
|
||||
|
||||
. /etc/dvd-scripts.env
|
||||
|
||||
DVD_DIR=$1
|
||||
MAX_DVD_SIZE=4702989182
|
||||
|
||||
# DVD-Size 4,702,989,182
|
||||
size=`du -sb "$DVD_DIR" | awk '{print $1}'`
|
||||
printf "Gr<47><72>e: %4d MB\n" `expr $size \/ 1024 \/ 1024`
|
||||
if [ $size -gt $MAX_DVD_SIZE ]
|
||||
then
|
||||
printf "zu Gro<72> (max %4d MB)\n" `expr $MAX_DVD_SIZE \/ 1024 \/ 1024`
|
||||
else
|
||||
echo Pa<50>t.
|
||||
fi
|
||||
16
dvd-createdev
Executable file
16
dvd-createdev
Executable file
@@ -0,0 +1,16 @@
|
||||
#!/bin/sh
|
||||
|
||||
DVD_DEVICE=/dev/dvd
|
||||
|
||||
if [ -L $DVD_DEVICE ]
|
||||
then
|
||||
echo "Link l<>schen"
|
||||
rm $DVD_DEVICE
|
||||
else
|
||||
echo "Altes Device l<>schen $DVD_DEVICE"
|
||||
umount $DVD_DEVICE
|
||||
rmdir $DVD_DEVICE
|
||||
fi
|
||||
echo "neuen device erstellen"
|
||||
mkdir $DVD_DEVICE
|
||||
|
||||
6
dvd-format
Executable file
6
dvd-format
Executable file
@@ -0,0 +1,6 @@
|
||||
|
||||
. /etc/dvd-scripts.env
|
||||
|
||||
dvd+rw-format -force $DVD_DEVICE
|
||||
|
||||
echo Fertig.
|
||||
31
dvd-gen-movix
Executable file
31
dvd-gen-movix
Executable file
@@ -0,0 +1,31 @@
|
||||
|
||||
set -x
|
||||
|
||||
. /etc/dvd-scripts.env
|
||||
|
||||
DVD_DIR=$1
|
||||
FILES=$2
|
||||
|
||||
cd $DVD_DIR
|
||||
|
||||
echo "Movix DVD aus Dateien $DVD_DIR/$FILES erzeugen..."
|
||||
|
||||
#MAX_SIZE=4702989182
|
||||
|
||||
# DVD-Size 4,702,989,182
|
||||
i#size=`du -sb "$DVD_DIR" | awk '{print $1}'`
|
||||
#printf "size: %4d MB\n" `expr $size \/ 1024 \/ 1024`
|
||||
#printf "size: %4d MB\n" `echo "$size/1024/1024;" | bc `
|
||||
#if [ $size -gt $MAX_SIZE ]
|
||||
#then
|
||||
# printf "Zu Gro<72> (max: %4d MB) !!!\n" `expr $MAX_SIZE \/ 1024 \/ 1024`
|
||||
#lse
|
||||
# growisofs -Z $DVD_DEVICE -R -J $DVD_DIR
|
||||
#fi
|
||||
|
||||
mkmovixiso $FILES
|
||||
ln -s movix.iso last.iso
|
||||
|
||||
sleep 1
|
||||
echo Fertig.
|
||||
eject
|
||||
17
dvd-rip-image
Executable file
17
dvd-rip-image
Executable file
@@ -0,0 +1,17 @@
|
||||
#!/bin/sh
|
||||
|
||||
. /etc/dvd-scripts.env
|
||||
|
||||
DVD_IMAGE=$1
|
||||
|
||||
rm "$DVD_IMAGE"
|
||||
rm /dat/dvd/last.iso
|
||||
|
||||
echo Image wird erstellt...
|
||||
dd if=$DVD_DEVICE of="$DVD_IMAGE"
|
||||
|
||||
ln -s "$DVD_IMAGE" /dat/dvd/last.iso
|
||||
|
||||
echo Fertig.
|
||||
|
||||
eject
|
||||
86
dvdauthor_helperfunctions.sh
Executable file
86
dvdauthor_helperfunctions.sh
Executable file
@@ -0,0 +1,86 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# (P) & (C) 2003 by Dr. Peter Bieringer <pb at bieringer dot de>
|
||||
#
|
||||
# Original site of publishing:
|
||||
# ftp://ftp.bieringer.de/pub/linux/dvd/dvdauthor-addons/
|
||||
#
|
||||
# License: GPLv2
|
||||
#
|
||||
# Requires:
|
||||
# - gozer, imlib2, netpbm-progs
|
||||
#
|
||||
# ChangeLog
|
||||
# 20030510/PB: initial creation
|
||||
# 20030511/PB: import info function
|
||||
|
||||
. ~/.vdrconvert/vdrconvert.env
|
||||
|
||||
##### Functions ######
|
||||
|
||||
# Put text into a bitmap
|
||||
put_text() {
|
||||
local file="$1"; shift
|
||||
if [ ! -z "$PATH_FONTS" -a ! -z "$DVD_USE_FONT" ]
|
||||
then
|
||||
local font="$1"
|
||||
shift
|
||||
fi
|
||||
local color_bg="$1"; shift
|
||||
local color_fg="$1"; shift
|
||||
local loc_x="$1"; shift
|
||||
local loc_y="$1"; shift
|
||||
local text="$1"; shift
|
||||
local rest="$*"
|
||||
|
||||
local tmp_png="tmp-txt.png"
|
||||
local tmp_pnm="tmp-txt.pnm"
|
||||
local tmp_alphapnm="tmp-txt.alpha.pnm"
|
||||
local tmp_output="tmp-output.pnm"
|
||||
if [ ! -w "." ]; then
|
||||
echo "ERR(put_text): file not writable: $file"
|
||||
return 1
|
||||
fi
|
||||
|
||||
[ ! -z "$RECODE" ] && rtext="`echo $text | $RECODE`" || rtext=$text
|
||||
if [ -z "$PATH_FONTS" -o -z "$DVD_USE_FONT" ]
|
||||
then
|
||||
#set -x
|
||||
gozer --background $color_bg --foreground $color_fg --text "$rtext" $rest $tmp_png
|
||||
else
|
||||
gozer --fontpath $PATH_FONTS --font $font --background $color_bg --foreground $color_fg --text "$rtext" $rest $tmp_png
|
||||
#set +x
|
||||
fi
|
||||
|
||||
pngtopnm $tmp_png >$tmp_pnm
|
||||
pngtopnm -alpha $tmp_png >$tmp_alphapnm
|
||||
|
||||
pnmcomp -xoff=$loc_x -yoff=$loc_y -alpha=$tmp_alphapnm $tmp_pnm $file >$tmp_output
|
||||
mv $tmp_output $file
|
||||
|
||||
rm -f $tmp_png $tmp_pnm $tmp_alphapnm $tmp_output
|
||||
}
|
||||
|
||||
# Put a bitmap file into another bitmap file
|
||||
put_file() {
|
||||
local file=$1
|
||||
local loc_x=$2
|
||||
local loc_y=$3
|
||||
local file2=$4
|
||||
|
||||
local tmp_pnm="tmp-txt.pnm"
|
||||
|
||||
if [ ! -w "." ]; then
|
||||
echo "ERR(put_file): file not writable: $file"
|
||||
return 1
|
||||
fi
|
||||
if [ ! -r "$file2" ]; then
|
||||
echo "ERR(put_file): file not readable: $file2"
|
||||
return 1
|
||||
fi
|
||||
|
||||
pnmcomp -xoff=$loc_x -yoff=$loc_y $file2 $file >$tmp_pnm
|
||||
mv $tmp_pnm $file
|
||||
|
||||
rm -f $tmp_pnm
|
||||
}
|
||||
41
dvddirdel
Executable file
41
dvddirdel
Executable file
@@ -0,0 +1,41 @@
|
||||
#!/bin/sh
|
||||
|
||||
if [ -f /usr/local/etc/dvdauthor.conf ]; then
|
||||
. /usr/local/etc/dvdauthor.conf
|
||||
fi
|
||||
|
||||
if [ -f ~/.dvdauthorrc ]; then
|
||||
. ~/.dvdauthorrc
|
||||
fi
|
||||
|
||||
help=0
|
||||
out=0
|
||||
for i in "$@"; do
|
||||
if [ $out = 1 ]; then
|
||||
WORKDIR="$i"
|
||||
out=0
|
||||
elif [ "x$i" = "x-h" ]; then
|
||||
help=1
|
||||
elif [ "x$i" = "x-o" ]; then
|
||||
out=1
|
||||
fi
|
||||
done
|
||||
|
||||
if [ $help = 1 -o "x$WORKDIR" = "x" ]; then
|
||||
echo "DVDAuthor, version 0.6.18. Send bugs to <dvdauthor-users@lists.sourceforge.net>"
|
||||
echo "syntax: dvddirdel [-o DIR]"
|
||||
echo " deletes a previously authored DVD directory structure in DIR"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -d "$WORKDIR" ]; then
|
||||
rm -f "$WORKDIR/VIDEO_TS"/VIDEO_TS.VOB
|
||||
rm -f "$WORKDIR/VIDEO_TS"/VIDEO_TS.IFO
|
||||
rm -f "$WORKDIR/VIDEO_TS"/VIDEO_TS.BUP
|
||||
rm -f "$WORKDIR/VIDEO_TS"/VTS_??_?.VOB
|
||||
rm -f "$WORKDIR/VIDEO_TS"/VTS_??_0.IFO
|
||||
rm -f "$WORKDIR/VIDEO_TS"/VTS_??_0.BUP
|
||||
rmdir "$WORKDIR/VIDEO_TS"
|
||||
rmdir "$WORKDIR/AUDIO_TS"
|
||||
rmdir "$WORKDIR"
|
||||
fi
|
||||
BIN
dvdunauthor
Executable file
BIN
dvdunauthor
Executable file
Binary file not shown.
5
fv_html
Executable file
5
fv_html
Executable file
@@ -0,0 +1,5 @@
|
||||
#!/bin/bash
|
||||
|
||||
arg=$1
|
||||
|
||||
/home/marc/bin/fv $1 | awk '{printf("<p>%s</p>\n", $0);}'
|
||||
18
getrecnames.sh
Normal file
18
getrecnames.sh
Normal file
@@ -0,0 +1,18 @@
|
||||
|
||||
hd=/media/test
|
||||
videodir=/video/
|
||||
|
||||
recdirs=$(find . -name "*.rec")
|
||||
|
||||
echo $recdirs
|
||||
for i in $recdirs
|
||||
do
|
||||
echo rec:$i
|
||||
recdir=$(basename "$i")
|
||||
dirv=$(find $videodir -name "$recdir")
|
||||
d=$(echo $dirv | awk -F/ '{print $(NF-1)}')
|
||||
echo "$dirv = $d"
|
||||
mkdir -p $hd/$d
|
||||
mv $i $hd/$d
|
||||
|
||||
done
|
||||
707
git-prompt.sh
Executable file
707
git-prompt.sh
Executable file
@@ -0,0 +1,707 @@
|
||||
|
||||
# don't set prompt if this is not interactive shell
|
||||
[[ $- != *i* ]] && return
|
||||
|
||||
################################################################### CONFIG
|
||||
|
||||
##### read config file if any.
|
||||
|
||||
unset dir_color rc_color user_id_color root_id_color init_vcs_color clean_vcs_color
|
||||
unset modified_vcs_color added_vcs_color addmoded_vcs_color untracked_vcs_color op_vcs_color detached_vcs_color hex_vcs_color
|
||||
unset rawhex_len
|
||||
|
||||
conf=git-prompt.conf; [[ -r $conf ]] && . $conf
|
||||
conf=/etc/git-prompt.conf; [[ -r $conf ]] && . $conf
|
||||
conf=~/.git-prompt.conf; [[ -r $conf ]] && . $conf
|
||||
conf=~/.config/git-prompt.conf; [[ -r $conf ]] && . $conf
|
||||
unset conf
|
||||
|
||||
|
||||
##### set defaults if not set
|
||||
|
||||
git_module=${git_module:-on}
|
||||
svn_module=${svn_module:-off}
|
||||
hg_module=${hg_module:-on}
|
||||
vim_module=${vim_module:-on}
|
||||
error_bell=${error_bell:-off}
|
||||
cwd_cmd=${cwd_cmd:-\\w}
|
||||
|
||||
|
||||
#### dir, rc, root color
|
||||
cols=`tput colors` # in emacs shell-mode tput colors returns -1
|
||||
if [[ -n "$cols" && $cols -ge 8 ]]; then # if terminal supports colors
|
||||
dir_color=${dir_color:-CYAN}
|
||||
rc_color=${rc_color:-red}
|
||||
user_id_color=${user_id_color:-blue}
|
||||
root_id_color=${root_id_color:-magenta}
|
||||
else # only B/W
|
||||
dir_color=${dir_color:-bw_bold}
|
||||
rc_color=${rc_color:-bw_bold}
|
||||
fi
|
||||
unset cols
|
||||
|
||||
#### prompt character, for root/non-root
|
||||
prompt_char=${prompt_char:-'>'}
|
||||
root_prompt_char=${root_prompt_char:-'>'}
|
||||
|
||||
#### vcs colors
|
||||
init_vcs_color=${init_vcs_color:-WHITE} # initial
|
||||
clean_vcs_color=${clean_vcs_color:-blue} # nothing to commit (working directory clean)
|
||||
modified_vcs_color=${modified_vcs_color:-red} # Changed but not updated:
|
||||
added_vcs_color=${added_vcs_color:-green} # Changes to be committed:
|
||||
addmoded_vcs_color=${addmoded_vcs_color:-yellow}
|
||||
untracked_vcs_color=${untracked_vcs_color:-BLUE} # Untracked files:
|
||||
op_vcs_color=${op_vcs_color:-MAGENTA}
|
||||
detached_vcs_color=${detached_vcs_color:-RED}
|
||||
|
||||
hex_vcs_color=${hex_vcs_color:-BLACK} # gray
|
||||
|
||||
|
||||
max_file_list_length=${max_file_list_length:-100}
|
||||
short_hostname=${short_hostname:-off}
|
||||
upcase_hostname=${upcase_hostname:-on}
|
||||
count_only=${count_only:-off}
|
||||
rawhex_len=${rawhex_len:-5}
|
||||
|
||||
aj_max=20
|
||||
|
||||
|
||||
##################################################################### post config
|
||||
|
||||
################# make PARSE_VCS_STATUS
|
||||
unset PARSE_VCS_STATUS
|
||||
[[ $git_module = "on" ]] && type git >&/dev/null && PARSE_VCS_STATUS+="parse_git_status"
|
||||
[[ $svn_module = "on" ]] && type svn >&/dev/null && PARSE_VCS_STATUS+="${PARSE_VCS_STATUS+||}parse_svn_status"
|
||||
[[ $hg_module = "on" ]] && type hg >&/dev/null && PARSE_VCS_STATUS+="${PARSE_VCS_STATUS+||}parse_hg_status"
|
||||
PARSE_VCS_STATUS+="${PARSE_VCS_STATUS+||}return"
|
||||
################# terminfo colors-16
|
||||
#
|
||||
# black? 0 8
|
||||
# red 1 9
|
||||
# green 2 10
|
||||
# yellow 3 11
|
||||
# blue 4 12
|
||||
# magenta 5 13
|
||||
# cyan 6 14
|
||||
# white 7 15
|
||||
#
|
||||
# terminfo setaf/setab - sets ansi foreground/background
|
||||
# terminfo sgr0 - resets all attributes
|
||||
# terminfo colors - number of colors
|
||||
#
|
||||
################# Colors-256
|
||||
# To use foreground and background colors:
|
||||
# Set the foreground color to index N: \033[38;5;${N}m
|
||||
# Set the background color to index M: \033[48;5;${M}m
|
||||
# To make vim aware of a present 256 color extension, you can either set
|
||||
# the $TERM environment variable to xterm-256color or use vim's -T option
|
||||
# to set the terminal. I'm using an alias in my bashrc to do this. At the
|
||||
# moment I only know of two color schemes which is made for multi-color
|
||||
# terminals like urxvt (88 colors) or xterm: inkpot and desert256,
|
||||
|
||||
### if term support colors, then use color prompt, else bold
|
||||
|
||||
black='\['`tput sgr0; tput setaf 0`'\]'
|
||||
red='\['`tput sgr0; tput setaf 1`'\]'
|
||||
green='\['`tput sgr0; tput setaf 2`'\]'
|
||||
yellow='\['`tput sgr0; tput setaf 3`'\]'
|
||||
blue='\['`tput sgr0; tput setaf 4`'\]'
|
||||
magenta='\['`tput sgr0; tput setaf 5`'\]'
|
||||
cyan='\['`tput sgr0; tput setaf 6`'\]'
|
||||
white='\['`tput sgr0; tput setaf 7`'\]'
|
||||
|
||||
BLACK='\['`tput setaf 0; tput bold`'\]'
|
||||
RED='\['`tput setaf 1; tput bold`'\]'
|
||||
GREEN='\['`tput setaf 2; tput bold`'\]'
|
||||
YELLOW='\['`tput setaf 3; tput bold`'\]'
|
||||
BLUE='\['`tput setaf 4; tput bold`'\]'
|
||||
MAGENTA='\['`tput setaf 5; tput bold`'\]'
|
||||
CYAN='\['`tput setaf 6; tput bold`'\]'
|
||||
WHITE='\['`tput setaf 7; tput bold`'\]'
|
||||
|
||||
dim='\['`tput sgr0; tput setaf p1`'\]' # half-bright
|
||||
|
||||
bw_bold='\['`tput bold`'\]'
|
||||
|
||||
on=''
|
||||
off=': '
|
||||
bell="\[`eval ${!error_bell} tput bel`\]"
|
||||
colors_reset='\['`tput sgr0`'\]'
|
||||
|
||||
# replace symbolic colors names to raw treminfo strings
|
||||
init_vcs_color=${!init_vcs_color}
|
||||
modified_vcs_color=${!modified_vcs_color}
|
||||
untracked_vcs_color=${!untracked_vcs_color}
|
||||
clean_vcs_color=${!clean_vcs_color}
|
||||
added_vcs_color=${!added_vcs_color}
|
||||
op_vcs_color=${!op_vcs_color}
|
||||
addmoded_vcs_color=${!addmoded_vcs_color}
|
||||
detached_vcs_color=${!detached_vcs_color}
|
||||
hex_vcs_color=${!hex_vcs_color}
|
||||
|
||||
unset PROMPT_COMMAND
|
||||
|
||||
####### work around for MC bug.
|
||||
####### specifically exclude emacs, want full when running inside emacs
|
||||
if [[ -z "$TERM" || ("$TERM" = "dumb" && -z "$INSIDE_EMACS") || -n "$MC_SID" ]]; then
|
||||
unset PROMPT_COMMAND
|
||||
PS1="\w$prompt_char "
|
||||
return 0
|
||||
fi
|
||||
|
||||
#################################################################### MARKERS
|
||||
screen_marker="sCRn"
|
||||
if [[ $LC_CTYPE =~ "UTF" && $TERM != "linux" ]]; then
|
||||
elipses_marker="…"
|
||||
else
|
||||
elipses_marker="..."
|
||||
fi
|
||||
|
||||
export who_where
|
||||
|
||||
|
||||
cwd_truncate() {
|
||||
# based on: https://www.blog.montgomerie.net/pwd-in-the-title-bar-or-a-regex-adventure-in-bash
|
||||
|
||||
# arg1: max path lenght
|
||||
# returns abbrivated $PWD in public "cwd" var
|
||||
|
||||
cwd=${PWD/$HOME/\~} # substitute "~"
|
||||
|
||||
case $1 in
|
||||
full)
|
||||
return
|
||||
;;
|
||||
last)
|
||||
cwd=${PWD##/*/}
|
||||
[[ $PWD == $HOME ]] && cwd="~"
|
||||
return
|
||||
;;
|
||||
*)
|
||||
# if bash < v3.2 then don't truncate
|
||||
if [[ ${BASH_VERSINFO[0]} -eq 3 && ${BASH_VERSINFO[1]} -le 1 || ${BASH_VERSINFO[0]} -lt 3 ]] ; then
|
||||
return
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
# split path into: head='~/', truncateble middle, last_dir
|
||||
|
||||
local cwd_max_length=$1
|
||||
# expression which bash-3.1 or older can not understand, so we wrap it in eval
|
||||
exp31='[[ "$cwd" =~ (~?/)(.*/)([^/]*)$ ]]'
|
||||
if eval $exp31 ; then # only valid if path have more then 1 dir
|
||||
local path_head=${BASH_REMATCH[1]}
|
||||
local path_middle=${BASH_REMATCH[2]}
|
||||
local path_last_dir=${BASH_REMATCH[3]}
|
||||
|
||||
local cwd_middle_max=$(( $cwd_max_length - ${#path_last_dir} ))
|
||||
[[ $cwd_middle_max < 0 ]] && cwd_middle_max=0
|
||||
|
||||
|
||||
# trunc middle if over limit
|
||||
if [[ ${#path_middle} -gt $(( $cwd_middle_max + ${#elipses_marker} + 5 )) ]]; then
|
||||
|
||||
# truncate
|
||||
middle_tail=${path_middle:${#path_middle}-${cwd_middle_max}}
|
||||
|
||||
# trunc on dir boundary (trunc 1st, probably tuncated dir)
|
||||
exp31='[[ $middle_tail =~ [^/]*/(.*)$ ]]'
|
||||
eval $exp31
|
||||
middle_tail=${BASH_REMATCH[1]}
|
||||
|
||||
# use truncated only if we cut at least 4 chars
|
||||
if [[ $(( ${#path_middle} - ${#middle_tail})) -gt 4 ]]; then
|
||||
cwd=$path_head$elipses_marker$middle_tail$path_last_dir
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
set_shell_label() {
|
||||
|
||||
xterm_label() {
|
||||
local args="$*"
|
||||
echo -n "]2;${args:0:200}" ; # FIXME: replace hardcodes with terminfo codes
|
||||
}
|
||||
|
||||
screen_label() {
|
||||
# FIXME: run this only if screen is in xterm (how to test for this?)
|
||||
xterm_label "$screen_marker $plain_who_where $@"
|
||||
|
||||
# FIXME $STY not inherited though "su -"
|
||||
[ "$STY" ] && screen -S $STY -X title "$*"
|
||||
}
|
||||
if [[ -n "$STY" ]]; then
|
||||
screen_label "$*"
|
||||
else
|
||||
case $TERM in
|
||||
|
||||
screen*)
|
||||
screen_label "$*"
|
||||
;;
|
||||
|
||||
xterm* | rxvt* | gnome-terminal | konsole | eterm | wterm )
|
||||
# is there a capability which we can to test
|
||||
# for "set term title-bar" and its escapes?
|
||||
xterm_label "$plain_who_where $@"
|
||||
;;
|
||||
|
||||
*)
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
}
|
||||
|
||||
export -f set_shell_label
|
||||
|
||||
###################################################### ID (user name)
|
||||
id=`id -un`
|
||||
id=${id#$default_user}
|
||||
|
||||
########################################################### TTY
|
||||
tty=`tty`
|
||||
tty=`echo $tty | sed "s:/dev/pts/:p:; s:/dev/tty::" ` # RH tty devs
|
||||
tty=`echo $tty | sed "s:/dev/vc/:vc:" ` # gentoo tty devs
|
||||
|
||||
if [[ "$TERM" = "screen" ]] ; then
|
||||
|
||||
# [ "$WINDOW" = "" ] && WINDOW="?"
|
||||
#
|
||||
# # if under screen then make tty name look like s1-p2
|
||||
# # tty="${WINDOW:+s}$WINDOW${WINDOW:+-}$tty"
|
||||
# tty="${WINDOW:+s}$WINDOW" # replace tty name with screen number
|
||||
tty="$WINDOW" # replace tty name with screen number
|
||||
fi
|
||||
|
||||
# we don't need tty name under X11
|
||||
case $TERM in
|
||||
xterm* | rxvt* | gnome-terminal | konsole | eterm* | wterm | cygwin) unset tty ;;
|
||||
*);;
|
||||
esac
|
||||
|
||||
dir_color=${!dir_color}
|
||||
rc_color=${!rc_color}
|
||||
user_id_color=${!user_id_color}
|
||||
root_id_color=${!root_id_color}
|
||||
|
||||
########################################################### HOST
|
||||
### we don't display home host/domain $SSH_* set by SSHD or keychain
|
||||
|
||||
# How to find out if session is local or remote? Working with "su -", ssh-agent, and so on ?
|
||||
|
||||
## is sshd our parent?
|
||||
# if { for ((pid=$$; $pid != 1 ; pid=`ps h -o pid --ppid $pid`)); do ps h -o command -p $pid; done | grep -q sshd && echo == REMOTE ==; }
|
||||
#then
|
||||
|
||||
host=${HOSTNAME}
|
||||
if [[ $short_hostname = "on" ]]; then
|
||||
host=`hostname -s`
|
||||
fi
|
||||
host=${host#$default_host}
|
||||
uphost=`echo ${host} | tr a-z A-Z`
|
||||
if [[ $upcase_hostname = "on" ]]; then
|
||||
host=${uphost}
|
||||
fi
|
||||
|
||||
host_color=${uphost}_host_color
|
||||
host_color=${!host_color}
|
||||
if [[ -z $host_color && -x /usr/bin/cksum ]] ; then
|
||||
cksum_color_no=`echo $uphost | cksum | awk '{print $1%7}'`
|
||||
color_index=(green yellow blue magenta cyan white) # FIXME: bw, color-256
|
||||
host_color=${color_index[cksum_color_no]}
|
||||
fi
|
||||
|
||||
host_color=${!host_color}
|
||||
|
||||
# we might already have short host name
|
||||
host=${host%.$default_domain}
|
||||
|
||||
#################################################################### WHO_WHERE
|
||||
# [[user@]host[-tty]]
|
||||
|
||||
if [[ -n $id || -n $host ]] ; then
|
||||
[[ -n $id && -n $host ]] && at='@' || at=''
|
||||
color_who_where="${id}${host:+$host_color$at$host}${tty:+ $tty}"
|
||||
plain_who_where="${id}$at$host"
|
||||
|
||||
# add trailing " "
|
||||
color_who_where="$color_who_where "
|
||||
plain_who_where="$plain_who_where "
|
||||
|
||||
# if root then make it root_color
|
||||
if [ "$id" == "root" ] ; then
|
||||
user_id_color=$root_id_color
|
||||
prompt_char="$root_prompt_char"
|
||||
fi
|
||||
color_who_where="$user_id_color$color_who_where$colors_reset"
|
||||
else
|
||||
color_who_where=''
|
||||
fi
|
||||
|
||||
|
||||
parse_svn_status() {
|
||||
|
||||
[[ -d .svn ]] || return 1
|
||||
|
||||
vcs=svn
|
||||
|
||||
### get rev
|
||||
eval `
|
||||
svn info |
|
||||
sed -n "
|
||||
s@^URL[^/]*//@repo_dir=@p
|
||||
s/^Revision: /rev=/p
|
||||
"
|
||||
`
|
||||
### get status
|
||||
|
||||
unset status modified added clean init added mixed untracked op detached
|
||||
eval `svn status 2>/dev/null |
|
||||
sed -n '
|
||||
s/^A... \([^.].*\)/modified=modified; modified_files[${#modified_files[@]}]=\"\1\";/p
|
||||
s/^M... \([^.].*\)/modified=modified; modified_files[${#modified_files[@]}]=\"\1\";/p
|
||||
s/^\?... \([^.].*\)/untracked=untracked; untracked_files[${#untracked_files[@]}]=\"\1\";/p
|
||||
'
|
||||
`
|
||||
# TODO branch detection if standard repo layout
|
||||
|
||||
[[ -z $modified ]] && [[ -z $untracked ]] && clean=clean
|
||||
vcs_info=svn:r$rev
|
||||
}
|
||||
|
||||
parse_hg_status() {
|
||||
|
||||
# ☿
|
||||
|
||||
[[ -d ./.hg/ ]] || return 1
|
||||
|
||||
vcs=hg
|
||||
|
||||
### get status
|
||||
unset status modified added clean init added mixed untracked op detached
|
||||
|
||||
eval `hg status 2>/dev/null |
|
||||
sed -n '
|
||||
s/^M \([^.].*\)/modified=modified; modified_files[${#modified_files[@]}]=\"\1\";/p
|
||||
s/^A \([^.].*\)/added=added; added_files[${#added_files[@]}]=\"\1\";/p
|
||||
s/^R \([^.].*\)/added=added;/p
|
||||
s/^! \([^.].*\)/modified=modified;/p
|
||||
s/^? \([^.].*\)/untracked=untracked; untracked_files[${#untracked_files[@]}]=\\"\1\\";/p
|
||||
'`
|
||||
|
||||
branch=`hg branch 2> /dev/null`
|
||||
|
||||
[[ -z $modified ]] && [[ -z $untracked ]] && [[ -z $added ]] && clean=clean
|
||||
vcs_info=${branch/default/D}
|
||||
}
|
||||
|
||||
|
||||
|
||||
parse_git_status() {
|
||||
|
||||
# TODO add status: LOCKED (.git/index.lock)
|
||||
|
||||
git_dir=`[[ $git_module = "on" ]] && git rev-parse --git-dir 2> /dev/null`
|
||||
#git_dir=`eval \$$git_module git rev-parse --git-dir 2> /dev/null`
|
||||
#git_dir=` git rev-parse --git-dir 2> /dev/null`
|
||||
|
||||
[[ -n ${git_dir/./} ]] || return 1
|
||||
|
||||
vcs=git
|
||||
|
||||
########################################################## GIT STATUS
|
||||
file_regex='\([^/ ]*\/\{0,1\}\).*'
|
||||
added_files=()
|
||||
modified_files=()
|
||||
untracked_files=()
|
||||
freshness="$dim"
|
||||
unset branch status modified added clean init added mixed untracked op detached
|
||||
|
||||
# quoting hell
|
||||
eval " $(
|
||||
git status 2>/dev/null |
|
||||
sed -n '
|
||||
s/^# On branch /branch=/p
|
||||
s/^nothing to commi.*/clean=clean/p
|
||||
s/^# Initial commi.*/init=init/p
|
||||
|
||||
s/^# Your branch is ahead of .[/[:alnum:]]\+. by [[:digit:]]\+ commit.*/freshness=${WHITE}↑/p
|
||||
s/^# Your branch is behind .[/[:alnum:]]\+. by [[:digit:]]\+ commit.*/freshness=${YELLOW}↓/p
|
||||
s/^# Your branch and .[/[:alnum:]]\+. have diverged.*/freshness=${YELLOW}↕/p
|
||||
|
||||
/^# Changes to be committed:/,/^# [A-Z]/ {
|
||||
s/^# Changes to be committed:/added=added;/p
|
||||
|
||||
s/^# modified: '"$file_regex"'/ [[ \" ${added_files[*]} \" =~ \" \1 \" ]] || added_files[${#added_files[@]}]=\"\1\"/p
|
||||
s/^# new file: '"$file_regex"'/ [[ \" ${added_files[*]} \" =~ \" \1 \" ]] || added_files[${#added_files[@]}]=\"\1\"/p
|
||||
s/^# renamed:[^>]*> '"$file_regex"'/ [[ \" ${added_files[*]} \" =~ \" \1 \" ]] || added_files[${#added_files[@]}]=\"\1\"/p
|
||||
s/^# copied:[^>]*> '"$file_regex"'/ [[ \" ${added_files[*]} \" =~ \" \1 \" ]] || added_files[${#added_files[@]}]=\"\1\"/p
|
||||
}
|
||||
|
||||
/^# Changed but not updated:/,/^# [A-Z]/ {
|
||||
s/^# Changed but not updated:/modified=modified;/p
|
||||
s/^# modified: '"$file_regex"'/ [[ \" ${modified_files[*]} \" =~ \" \1 \" ]] || modified_files[${#modified_files[@]}]=\"\1\"/p
|
||||
s/^# unmerged: '"$file_regex"'/ [[ \" ${modified_files[*]} \" =~ \" \1 \" ]] || modified_files[${#modified_files[@]}]=\"\1\"/p
|
||||
}
|
||||
|
||||
/^# Changes not staged for commit:/,/^# [A-Z]/ {
|
||||
s/^# Changes not staged for commit:/modified=modified;/p
|
||||
s/^# modified: '"$file_regex"'/ [[ \" ${modified_files[*]} \" =~ \" \1 \" ]] || modified_files[${#modified_files[@]}]=\"\1\"/p
|
||||
s/^# unmerged: '"$file_regex"'/ [[ \" ${modified_files[*]} \" =~ \" \1 \" ]] || modified_files[${#modified_files[@]}]=\"\1\"/p
|
||||
}
|
||||
|
||||
/^# Unmerged paths:/,/^[^#]/ {
|
||||
s/^# Unmerged paths:/modified=modified;/p
|
||||
s/^# both modified:\s*'"$file_regex"'/ [[ \" ${modified_files[*]} \" =~ \" \1 \" ]] || modified_files[${#modified_files[@]}]=\"\1\"/p
|
||||
}
|
||||
|
||||
/^# Untracked files:/,/^[^#]/{
|
||||
s/^# Untracked files:/untracked=untracked;/p
|
||||
s/^# '"$file_regex"'/ [[ \" ${untracked_files[*]} ${modified_files[*]} ${added_files[*]} \" =~ \" \1 \" ]] || untracked_files[${#untracked_files[@]}]=\"\1\"/p
|
||||
}
|
||||
'
|
||||
)"
|
||||
|
||||
if ! grep -q "^ref:" $git_dir/HEAD 2>/dev/null; then
|
||||
detached=detached
|
||||
fi
|
||||
|
||||
|
||||
################# GET GIT OP
|
||||
|
||||
unset op
|
||||
|
||||
if [[ -d "$git_dir/.dotest" ]] ; then
|
||||
|
||||
if [[ -f "$git_dir/.dotest/rebasing" ]] ; then
|
||||
op="rebase"
|
||||
|
||||
elif [[ -f "$git_dir/.dotest/applying" ]] ; then
|
||||
op="am"
|
||||
|
||||
else
|
||||
op="am/rebase"
|
||||
|
||||
fi
|
||||
|
||||
elif [[ -f "$git_dir/.dotest-merge/interactive" ]] ; then
|
||||
op="rebase -i"
|
||||
# ??? branch="$(cat "$git_dir/.dotest-merge/head-name")"
|
||||
|
||||
elif [[ -d "$git_dir/.dotest-merge" ]] ; then
|
||||
op="rebase -m"
|
||||
# ??? branch="$(cat "$git_dir/.dotest-merge/head-name")"
|
||||
|
||||
# lvv: not always works. Should ./.dotest be used instead?
|
||||
elif [[ -f "$git_dir/MERGE_HEAD" ]] ; then
|
||||
op="merge"
|
||||
# ??? branch="$(git symbolic-ref HEAD 2>/dev/null)"
|
||||
|
||||
elif [[ -f "$git_dir/index.lock" ]] ; then
|
||||
op="locked"
|
||||
|
||||
else
|
||||
[[ -f "$git_dir/BISECT_LOG" ]] && op="bisect"
|
||||
# ??? branch="$(git symbolic-ref HEAD 2>/dev/null)" || \
|
||||
# branch="$(git describe --exact-match HEAD 2>/dev/null)" || \
|
||||
# branch="$(cut -c1-7 "$git_dir/HEAD")..."
|
||||
fi
|
||||
|
||||
|
||||
#### GET GIT HEX-REVISION
|
||||
if [[ $rawhex_len -gt 0 ]] ; then
|
||||
rawhex=`git rev-parse HEAD 2>/dev/null`
|
||||
rawhex=${rawhex/HEAD/}
|
||||
rawhex="=$hex_vcs_color${rawhex:0:$rawhex_len}"
|
||||
else
|
||||
rawhex=""
|
||||
fi
|
||||
|
||||
#### branch
|
||||
branch=${branch/master/M}
|
||||
|
||||
# another method of above:
|
||||
# branch=$(git symbolic-ref -q HEAD || { echo -n "detached:" ; git name-rev --name-only HEAD 2>/dev/null; } )
|
||||
# branch=${branch#refs/heads/}
|
||||
|
||||
### compose vcs_info
|
||||
|
||||
if [[ $init ]]; then
|
||||
vcs_info=${white}init
|
||||
|
||||
else
|
||||
if [[ "$detached" ]] ; then
|
||||
branch="<detached:`git name-rev --name-only HEAD 2>/dev/null`"
|
||||
|
||||
|
||||
elif [[ "$op" ]]; then
|
||||
branch="$op:$branch"
|
||||
if [[ "$op" == "merge" ]] ; then
|
||||
branch+="<--$(git name-rev --name-only $(<$git_dir/MERGE_HEAD))"
|
||||
fi
|
||||
#branch="<$branch>"
|
||||
fi
|
||||
vcs_info="$branch$freshness$rawhex"
|
||||
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
parse_vcs_status() {
|
||||
|
||||
unset file_list modified_files untracked_files added_files
|
||||
unset vcs vcs_info
|
||||
unset status modified untracked added init detached
|
||||
unset file_list modified_files untracked_files added_files
|
||||
|
||||
[[ $vcs_ignore_dir_list =~ $PWD ]] && return
|
||||
|
||||
eval $PARSE_VCS_STATUS
|
||||
|
||||
|
||||
### status: choose primary (for branch color)
|
||||
unset status
|
||||
status=${op:+op}
|
||||
status=${status:-$detached}
|
||||
status=${status:-$clean}
|
||||
status=${status:-$modified}
|
||||
status=${status:-$added}
|
||||
status=${status:-$untracked}
|
||||
status=${status:-$init}
|
||||
# at least one should be set
|
||||
: ${status?prompt internal error: git status}
|
||||
eval vcs_color="\${${status}_vcs_color}"
|
||||
# no def: vcs_color=${vcs_color:-$WHITE} # default
|
||||
|
||||
|
||||
### VIM
|
||||
|
||||
if [[ $vim_module = "on" ]] ; then
|
||||
# equivalent to vim_glob=`ls .*.vim` but without running ls
|
||||
unset vim_glob vim_file vim_files
|
||||
old_nullglob=`shopt -p nullglob`
|
||||
shopt -s nullglob
|
||||
vim_glob=`echo .*.sw?`
|
||||
eval $old_nullglob
|
||||
|
||||
if [[ $vim_glob ]]; then
|
||||
set $vim_glob
|
||||
#vim_file=${vim_glob#.}
|
||||
if [[ $# > 1 ]] ; then
|
||||
vim_files="*"
|
||||
else
|
||||
vim_file=${1#.}
|
||||
vim_file=${vim_file/.sw?/}
|
||||
[[ .${vim_file}.swp -nt $vim_file ]] && vim_files=$vim_file
|
||||
fi
|
||||
# if swap is newer, then this is unsaved vim session
|
||||
# [temoto custom] if swap is older, then it must be deleted, so show all swaps.
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
### file list
|
||||
unset file_list
|
||||
if [[ $count_only = "on" ]] ; then
|
||||
[[ ${added_files[0]} ]] && file_list+=" "${added_vcs_color}+${#added_files[@]}
|
||||
[[ ${modified_files[0]} ]] && file_list+=" "${modified_vcs_color}*${#modified_files[@]}
|
||||
[[ ${untracked_files[0]} ]] && file_list+=" "${untracked_vcs_color}?${#untracked_files[@]}
|
||||
else
|
||||
[[ ${added_files[0]} ]] && file_list+=" "$added_vcs_color${added_files[@]}
|
||||
[[ ${modified_files[0]} ]] && file_list+=" "$modified_vcs_color${modified_files[@]}
|
||||
[[ ${untracked_files[0]} ]] && file_list+=" "$untracked_vcs_color${untracked_files[@]}
|
||||
fi
|
||||
[[ ${vim_files} ]] && file_list+=" "${MAGENTA}vim:${vim_files}
|
||||
|
||||
if [[ ${#file_list} -gt $max_file_list_length ]] ; then
|
||||
file_list=${file_list:0:$max_file_list_length}
|
||||
if [[ $max_file_list_length -gt 0 ]] ; then
|
||||
file_list="${file_list% *} $elipses_marker"
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
head_local="$vcs_color(${vcs_info}$vcs_color${file_list}$vcs_color)"
|
||||
|
||||
### fringes
|
||||
head_local="${head_local+$vcs_color$head_local }"
|
||||
#above_local="${head_local+$vcs_color$head_local\n}"
|
||||
#tail_local="${tail_local+$vcs_color $tail_local}${dir_color}"
|
||||
}
|
||||
|
||||
disable_set_shell_label() {
|
||||
trap - DEBUG >& /dev/null
|
||||
}
|
||||
|
||||
# show currently executed command in label
|
||||
enable_set_shell_label() {
|
||||
disable_set_shell_label
|
||||
# check for BASH_SOURCE being empty, no point running set_shell_label on every line of .bashrc
|
||||
trap '[[ -z "$BASH_SOURCE" && ($BASH_COMMAND != prompt_command_function) ]] &&
|
||||
set_shell_label $BASH_COMMAND' DEBUG >& /dev/null
|
||||
}
|
||||
|
||||
declare -ft disable_set_shell_label
|
||||
declare -ft enable_set_shell_label
|
||||
|
||||
# autojump (see http://wiki.github.com/joelthelion/autojump)
|
||||
|
||||
# TODO reverse the line order of a file
|
||||
#awk ' { line[NR] = $0 }
|
||||
# END { for (i=NR;i>0;i--)
|
||||
# print line[i] }' listlogs
|
||||
|
||||
j (){
|
||||
: ${1? usage: j dir-beginning}
|
||||
# go in ring buffer starting from current index. cd to first matching dir
|
||||
for (( i=(aj_idx-1)%aj_max; i != aj_idx%aj_max; i=(--i+aj_max)%aj_max )) ; do
|
||||
if [[ ${aj_dir_list[$i]} =~ ^.*/$1[^/]*$ ]] ; then
|
||||
cd "${aj_dir_list[$i]}"
|
||||
return
|
||||
fi
|
||||
done
|
||||
echo '?'
|
||||
}
|
||||
|
||||
alias jumpstart='echo ${aj_dir_list[@]}'
|
||||
|
||||
###################################################################### PROMPT_COMMAND
|
||||
|
||||
prompt_command_function() {
|
||||
rc="$?"
|
||||
|
||||
if [[ "$rc" == "0" ]]; then
|
||||
rc=""
|
||||
else
|
||||
rc="$rc_color$rc$colors_reset$bell "
|
||||
fi
|
||||
|
||||
cwd=${PWD/$HOME/\~} # substitute "~"
|
||||
set_shell_label "${cwd##[/~]*/}/" # default label - path last dir
|
||||
|
||||
parse_vcs_status
|
||||
|
||||
# autojump
|
||||
if [[ ${aj_dir_list[aj_idx%aj_max]} != $PWD ]] ; then
|
||||
aj_dir_list[++aj_idx%aj_max]="$PWD"
|
||||
fi
|
||||
|
||||
# if cwd_cmd have back-slash, then assign it value to cwd
|
||||
# else eval cwd_cmd, cwd should have path after exection
|
||||
eval "${cwd_cmd/\\/cwd=\\\\}"
|
||||
|
||||
PS1="$colors_reset$rc$head_local$color_who_where$dir_color$cwd$tail_local$dir_color$prompt_char $colors_reset"
|
||||
|
||||
unset head_local tail_local pwd
|
||||
}
|
||||
|
||||
PROMPT_COMMAND=prompt_command_function
|
||||
|
||||
enable_set_shell_label
|
||||
|
||||
unset rc id tty modified_files file_list
|
||||
|
||||
# vim: set ft=sh ts=8 sw=8 et:
|
||||
@@ -4,7 +4,7 @@ set -x
|
||||
|
||||
VARTEMP=/tmp/var
|
||||
VARPERSISTENT=/var
|
||||
VARDIRS="cache"
|
||||
VARDIRS="cache log/fhem"
|
||||
BINDDIRS="cache lock run"
|
||||
|
||||
case $1 in
|
||||
@@ -14,7 +14,8 @@ case $1 in
|
||||
|
||||
for f in $VARDIRS
|
||||
do
|
||||
rsync -av $VARPERSISTENT/$f.bak/ $VARTEMP/$f
|
||||
fbase=$(basename $f)
|
||||
rsync -av $VARPERSISTENT/$fbase.bak/ $VARTEMP/$f
|
||||
done
|
||||
|
||||
for f in $BINDDIRS
|
||||
@@ -27,7 +28,8 @@ case $1 in
|
||||
echo "saving var-directory from temp to flash"
|
||||
for f in $VARDIRS
|
||||
do
|
||||
[ -d $VARTEMP/$f ] && rsync -av $VARTEMP/$f/ $VARPERSISTENT/$f.bak
|
||||
fbase=$(basename $f)
|
||||
[ -d $VARTEMP/$f ] && rsync -av $VARTEMP/$f/ $VARPERSISTENT/$fbase.bak
|
||||
done
|
||||
;;
|
||||
esac
|
||||
|
||||
10
instapaper_epub.sh
Normal file
10
instapaper_epub.sh
Normal file
@@ -0,0 +1,10 @@
|
||||
#!/bin/bash
|
||||
Username="MarcHoppe@gmx.de"
|
||||
Password="insta0815"
|
||||
Docs=~/Documents
|
||||
OutputDir=~/Documents/ePub
|
||||
|
||||
curl --cookie-jar ${Docs}/cjar --data "username=$Username" -d "password=${Password}" --output ${Docs}/insta.html http://www.instapaper.com/user/login
|
||||
curl -b ${Docs}/cjar --output ${OutputDir}/insta.epub http://www.instapaper.com/epub
|
||||
rm -f ${Docs}/cjar ${Docs}/insta.html
|
||||
|
||||
12
ipad.sh
12
ipad.sh
@@ -1,3 +1,5 @@
|
||||
#!/bin/bash
|
||||
|
||||
|
||||
ipaddir=/dat/ipad
|
||||
|
||||
@@ -40,9 +42,9 @@ do
|
||||
done
|
||||
|
||||
# Podcasts
|
||||
filedir="/dat/mp3/podcast/cache"
|
||||
dstdir=$ipaddir/
|
||||
ln -s $filedir $dstdir/podcast
|
||||
#filedir="/dat/mp3/podcast/cache"
|
||||
#dstdir=$ipaddir/
|
||||
#ln -s $filedir $dstdir/podcast
|
||||
|
||||
# Musik
|
||||
linkdir=$ipaddir/music
|
||||
@@ -90,7 +92,7 @@ done
|
||||
dstdir=$ipaddir/bilder
|
||||
srcdir=/dat/bilder
|
||||
|
||||
#[ -d $dstdir ] || mkdir -p $dstdir
|
||||
[ -d $dstdir ] || mkdir -p $dstdir
|
||||
|
||||
cd $dstdir || exit
|
||||
[ "$dstdir" != "" ] && rm -r *
|
||||
@@ -99,6 +101,8 @@ find $srcdir -name ipad -print0 | while read -d $'\0' f
|
||||
do
|
||||
fileindir=$f
|
||||
linkdest=$(dirname "$fileindir")
|
||||
echo "adding: $f"
|
||||
ln -s "$linkdest"
|
||||
|
||||
#[ -x "$artist/$album" ] || ln -s "$linkdest" "$artist/$album"
|
||||
done
|
||||
|
||||
10
iso2utf.sh
Executable file
10
iso2utf.sh
Executable file
@@ -0,0 +1,10 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -x
|
||||
|
||||
file_iso=$1
|
||||
file_utf=${file_iso}.utf8
|
||||
|
||||
[ -f $file_iso ] || exit
|
||||
iconv --from-code=ISO-8859-1 --to-code=UTF-8 $file_iso > $file_utf
|
||||
|
||||
25
m4a2ogg.sh
Normal file
25
m4a2ogg.sh
Normal file
@@ -0,0 +1,25 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# m4a to ogg
|
||||
|
||||
i=$1
|
||||
tmp=$(mktemp)
|
||||
y=`echo "$i"|sed -e 's/.m4a/.ogg/'`
|
||||
faad -i "$i" 1>/dev/null 2>"$tmp"
|
||||
if [ $? -ne 0 ] ; then
|
||||
rm "$tmp"
|
||||
echo "failed to get information from $i"
|
||||
continue
|
||||
fi
|
||||
title=`grep 'title: ' "$tmp"|sed -e 's/title: //'`
|
||||
artist=`grep 'artist: ' "$tmp"|sed -e 's/artist: //'`
|
||||
album=`grep 'album: ' "$tmp"|sed -e 's/album: //'`
|
||||
genre=`grep 'genre: ' "$tmp"|sed -e 's/genre: //'`
|
||||
track=`grep 'track: ' "$tmp"|sed -e 's/track: //'`
|
||||
year=`grep 'year: ' "$tmp"|sed -e 's/date: //'`
|
||||
faad "$i" -o - | oggenc -q 4 -t "$title" -a "$artist" -l "$album" -G "$genre" -N "$track" -d "$year" -o "$y" -
|
||||
if [ $? -ne 0 ] ; then
|
||||
echo "failed to encode $i"
|
||||
fi
|
||||
rm "$tmp"
|
||||
|
||||
15
mirrors.update
Normal file
15
mirrors.update
Normal file
@@ -0,0 +1,15 @@
|
||||
#!/bin/bash
|
||||
|
||||
fhemdir=/home/marc/src/fhem
|
||||
fhem_mirror=$fhemdir/fhem-git
|
||||
myfhem=$fhemdir/my
|
||||
|
||||
cd $fhem_mirror
|
||||
git svn rebase
|
||||
#git merge remotes/git-svn
|
||||
git push github master
|
||||
#cd $myfhem
|
||||
#git fetch origin
|
||||
#git push github master
|
||||
|
||||
|
||||
29
mkosm.sh
Normal file
29
mkosm.sh
Normal file
@@ -0,0 +1,29 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -x
|
||||
|
||||
mapfile=$1
|
||||
splitter=../splitter.jar
|
||||
mkgmap=../mkgmap.jar
|
||||
mapid=65241345
|
||||
country_name=greece
|
||||
|
||||
sudo swapon /dat/tmp/swap.img
|
||||
|
||||
|
||||
#wget http://download.geofabrik.de/osm/europe/germany/$mapfile.bz2
|
||||
#bunzip $mapfile.bz2
|
||||
|
||||
mkdir tiles
|
||||
rm -r tiles/*
|
||||
cd tiles/
|
||||
|
||||
java -Xmx5000M -jar $splitter --mapid=$mapid --max-nodes=500000 ../$mapfile
|
||||
|
||||
cd ..
|
||||
mkdir gbasemap
|
||||
rm -r gbasemap/*
|
||||
cd gbasemap
|
||||
java -Xmx5000M -jar $mkgmap --style-file=../styles/masterstyle --description='Openstreetmap' --country-name=$country_name --country-abbr=GR --family-id=3 --product-id=45 --series-name='master-edition' --family-name=OSM --area-name=GR --latin1 --lower-case --mapname=$mapid --draw-priority=10 --add-pois-to-areas --road-name-pois --net --route --gmapsupp ../tiles/*.osm.gz /home/marc/osm/styles/master.TYP
|
||||
|
||||
sudo swapoff /dat/tmp/swap.img
|
||||
7
mkvdrrecdir.sh
Executable file
7
mkvdrrecdir.sh
Executable file
@@ -0,0 +1,7 @@
|
||||
#!/bin/bash
|
||||
|
||||
#set -x
|
||||
|
||||
RECORDING_LIFETIME=99
|
||||
RECORDING="$(date +%Y-%m-%d.%H.%M).99.$RECORDING_LIFETIME.rec"
|
||||
mkdir $RECORDING
|
||||
85
mp32wav
Executable file
85
mp32wav
Executable file
@@ -0,0 +1,85 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# /usr/local/bin/mp3tocd -- mp3-Files nach wav oder au umwandeln
|
||||
# und brennen.
|
||||
# Das Format 44100 Hz, 16Bit Stereo ist notwendig, siehe Text
|
||||
#
|
||||
# mp32wav mp3dir wavdir
|
||||
|
||||
set -x
|
||||
|
||||
function usage ()
|
||||
{
|
||||
echo "
|
||||
mp32wav mp3dir wavdir
|
||||
mp3dir: Verzeichnis, in dem die mp3-Dateien gepseichert sind.
|
||||
wavdir: Verzeichnis, in das die erzeugten wave-Dateien geschrieben werden"
|
||||
}
|
||||
|
||||
function yesno ()
|
||||
{
|
||||
while true; do
|
||||
read ans
|
||||
case "$ans" in
|
||||
y|Y|j|J|[yY]es|[jJ]a)
|
||||
return 1
|
||||
;;
|
||||
n|N|[nN]o|[nN]ein)
|
||||
return 0
|
||||
;;
|
||||
*)
|
||||
echo -e '\a\nVertipper. (j,ja,y,yes/n,nein,no)'
|
||||
;;
|
||||
esac
|
||||
done
|
||||
}
|
||||
|
||||
if ! test -d "$1"; then
|
||||
usage
|
||||
fi
|
||||
if ! test -d "$2"; then
|
||||
usage
|
||||
fi
|
||||
|
||||
mp3dir="$1"
|
||||
wavdir="$2"
|
||||
|
||||
#pushd $destdir > /dev/null
|
||||
let count=0
|
||||
|
||||
for i in "$mp3dir"/*.mp3; do
|
||||
echo "$i wird decodiert"
|
||||
|
||||
## Der Umstand mit der fuehrenden Null in der 'if'-Abfrage bewirkt,
|
||||
## dass (maximal) 100 Tracks in der richtigen Reihenfolge gebrannt
|
||||
## werden
|
||||
|
||||
if test "$count" -le 9; then
|
||||
track=""0$count"track.wav"
|
||||
else
|
||||
track=""$count"track.wav"
|
||||
fi
|
||||
trakfile="$i"
|
||||
echo Datei1 "$trakfile"
|
||||
track=$(basename "$i" .mp3).wav
|
||||
echo Datei2 "$track"
|
||||
|
||||
mpg123 -v -s -r 44100 --stereo --wav "$wavdir"/"$track" "$i"
|
||||
|
||||
let count=$(expr $count + 1)
|
||||
done
|
||||
|
||||
echo -e "\n erzeugte Tracks:"
|
||||
ls -l "$wavdir"/[0-9][0-9]*.wav
|
||||
echo "KByte insgesamt: $(du -kc "$wavdir"/[0-9][0-9]*.wav | tail -n 1 | awk '{print $1}')"
|
||||
#echo "
|
||||
#Brennen durchfuehren (j,y,ja,yes/n,nein,no)?"
|
||||
|
||||
#if ! yesno; then
|
||||
#cdrecord -v -speed=$speed $blank -pad dev=$wdev -audio [0-9][0-9]track.$format
|
||||
# popd > /dev/null
|
||||
# rm -R $destdir
|
||||
#else
|
||||
# echo "Die Tracks in $destdir wurden nicht geloescht"
|
||||
#fi
|
||||
|
||||
13
podcastupdate.sh
Executable file
13
podcastupdate.sh
Executable file
@@ -0,0 +1,13 @@
|
||||
#!/bin/sh
|
||||
|
||||
LOGFILE=/tmp/podcatcher.log
|
||||
set -x
|
||||
sleep
|
||||
#swapon /dat/tmp/swap.img
|
||||
svdrpsend MESG "Podcasts aktualisieren-gestarted"
|
||||
cd /mp3/podcast
|
||||
echo "start ----------------------------" >> $LOGFILE
|
||||
date >> $LOGFILE
|
||||
./catch.sh >> $LOGFILE 2>&1
|
||||
svdrpsend MESG "Podcasts aktualisiert"
|
||||
#swapoff /dat/tmp/swap.img
|
||||
3
podcastupdated.sh
Executable file
3
podcastupdated.sh
Executable file
@@ -0,0 +1,3 @@
|
||||
#!/bin/sh
|
||||
|
||||
echo "/usr/local/bin/podcastupdate.sh" | at now
|
||||
16
queue
Executable file
16
queue
Executable file
@@ -0,0 +1,16 @@
|
||||
#!/bin/bash
|
||||
|
||||
qfile=/tmp/queue.commands
|
||||
|
||||
if [ "$1" = "-list" ]; then
|
||||
cat $qfile
|
||||
exit
|
||||
fi
|
||||
|
||||
echo $* >> $qfile
|
||||
|
||||
lines=$(cat $qfile | wc -l)
|
||||
|
||||
if [ $lines -eq 1 ]; then
|
||||
nohup /usr/local/bin/unqueue $qfile &
|
||||
fi
|
||||
5
recwebradio.sh
Normal file
5
recwebradio.sh
Normal file
@@ -0,0 +1,5 @@
|
||||
#!/bin/bash
|
||||
|
||||
t1=$1
|
||||
t2=$2
|
||||
|
||||
17
rmdvbmodules.sh
Normal file
17
rmdvbmodules.sh
Normal file
@@ -0,0 +1,17 @@
|
||||
#!/bin/bash
|
||||
|
||||
sudo rmmod budget_ci
|
||||
sudo rmmod tda1004x
|
||||
sudo rmmod dvb_ttpci
|
||||
sudo rmmod stv0299
|
||||
sudo rmmod ves1x93
|
||||
sudo rmmod rc_hauppauge
|
||||
sudo rmmod saa7146_vv
|
||||
sudo rmmod videodev
|
||||
sudo rmmod budget_core
|
||||
sudo rmmod dvb_core
|
||||
sudo rmmod v4l2_compat_ioctl32
|
||||
sudo rmmod videobuf_dma_sg
|
||||
sudo rmmod saa7146
|
||||
sudo rmmod ttpci_eeprom
|
||||
sudo rmmod v4l1_compat
|
||||
1
start_dropbox.sh
Normal file
1
start_dropbox.sh
Normal file
@@ -0,0 +1 @@
|
||||
HOME=/home/marc/.dropbox-ipad/ nohup .dropbox-dist/dropbox start
|
||||
862
sync_pod.pl
Executable file
862
sync_pod.pl
Executable file
@@ -0,0 +1,862 @@
|
||||
#!/usr/bin/perl -w
|
||||
|
||||
# (c) 2002 Armin Obersteiner <armin@xos.net>
|
||||
# License: GPL v2
|
||||
|
||||
use MP3::Info;
|
||||
use Unicode::String qw( latin1 utf16 );
|
||||
use Shell qw ( find gzip );
|
||||
use Getopt::Std;
|
||||
use File::Copy;
|
||||
use Filesys::DiskFree;
|
||||
|
||||
use Data::Dumper qw (Dumper);
|
||||
|
||||
use strict;
|
||||
|
||||
my $version="0.68";
|
||||
|
||||
#
|
||||
# options & config
|
||||
#
|
||||
|
||||
my %opt;
|
||||
getopts("fcnh",\%opt);
|
||||
|
||||
if($opt{h}) {
|
||||
print <<"EOF";
|
||||
$0 [-c] [-f] [Search Pattern 1] [Search Pattern 2] ...
|
||||
|
||||
-c create: create directory structure on plain ipod before syncing
|
||||
(default: you get a warning if there is no ipod structure)
|
||||
|
||||
-f force: rename ipod and use it with $0 before syncing
|
||||
(default: an unknown ipod stays untouched)
|
||||
|
||||
-n name check: checks mp3 names for possible illegal characters
|
||||
|
||||
Search Patterns: for each search pattern a playlist is created
|
||||
(case insensitive)
|
||||
EOF
|
||||
exit;
|
||||
}
|
||||
|
||||
my $buffer = 5*1024*1024; # leave some MB free for iTunesDB
|
||||
|
||||
my @required = qw ( SYNCMODE PLAYLISTDIR IPODDIR BACKUPDIR );
|
||||
|
||||
my $rc=readrc("$ENV{HOME}/.ipod/config",\@required);
|
||||
|
||||
#print Dumper($rc);
|
||||
|
||||
|
||||
#
|
||||
# check ipod name
|
||||
#
|
||||
|
||||
my ($ipod_name, $real_name, $computer_name)=get_ipodname($rc->{IPODDIR});
|
||||
unless($ipod_name) {
|
||||
die "IPOD dir not found: $rc->{IPODDIR}" unless $opt{c};
|
||||
}
|
||||
|
||||
#
|
||||
# check ipod dirs (recreate them if necessary)
|
||||
#
|
||||
|
||||
mkdir "$rc->{IPODDIR}/iPod_Control",0755 unless(-d "$rc->{IPODDIR}/iPod_Control");
|
||||
mkdir "$rc->{IPODDIR}/iPod_Control/Music",0755 unless(-d "$rc->{IPODDIR}/iPod_Control/Music");
|
||||
mkdir "$rc->{IPODDIR}/iPod_Control/iTunes",0755 unless(-d "$rc->{IPODDIR}/iPod_Control/iTunes");
|
||||
mkdir "$rc->{IPODDIR}/iPod_Control/Device",0755 unless(-d "$rc->{IPODDIR}/iPod_Control/Device");
|
||||
for(0..19) {
|
||||
my $d=sprintf "%.2d",$_;
|
||||
mkdir "$rc->{IPODDIR}/iPod_Control/Music/F$d",0755 unless(-d "$rc->{IPODDIR}/iPod_Control/Music/F$d");
|
||||
}
|
||||
|
||||
unless($opt{c}) {
|
||||
print STDERR "IPOD name: $ipod_name\n";
|
||||
print STDERR "Synced by: $real_name\n";
|
||||
print STDERR "Synced on: $computer_name\n";
|
||||
|
||||
if($rc->{WRITEDEVICEINFO} && !$opt{f}) {
|
||||
my $exit=0;
|
||||
unless($rc->{IPODNAME} eq $ipod_name) {
|
||||
$exit=1;
|
||||
print STDERR "Your IPOD name: $rc->{IPODNAME}\n";
|
||||
}
|
||||
unless($rc->{REALNAME} eq $real_name) {
|
||||
$exit=1;
|
||||
print STDERR "Your real name: $rc->{REALNAME}\n";
|
||||
}
|
||||
unless($rc->{COMPUTERNAME} eq $computer_name) {
|
||||
$exit=1;
|
||||
print STDERR "Your computer: $rc->{COMPUTERNAME}\n";
|
||||
}
|
||||
die "names mismatch, use -f to override" if $exit;
|
||||
}
|
||||
print STDERR "\n";
|
||||
}
|
||||
|
||||
#
|
||||
# write ipod name
|
||||
#
|
||||
|
||||
if($rc->{WRITEDEVICEINFO}) {
|
||||
set_ipodname(
|
||||
$rc->{IPODDIR},$rc->{BACKUPDIR},
|
||||
$rc->{IPODNAME},$rc->{REALNAME},$rc->{COMPUTERNAME}
|
||||
);
|
||||
$ipod_name=$rc->{IPODNAME};
|
||||
}
|
||||
|
||||
#
|
||||
# check for songs
|
||||
#
|
||||
|
||||
my %songs;
|
||||
my %check;
|
||||
|
||||
my $dir;
|
||||
$dir=$rc->{IPODDIR}."/iPod_Control/Music";
|
||||
$dir=$rc->{SYNCDIR} if($rc->{SYNCMODE} >= 2);
|
||||
|
||||
my %tosync;
|
||||
if(($rc->{SYNCLIST}) && ($rc->{SYNCMODE} == 2)) {
|
||||
open IN,$rc->{SYNCLIST} or die "all-playlist: $rc->{SYNCLIST} not found";
|
||||
while(<IN>) {
|
||||
chomp;
|
||||
$tosync{$_}=1;
|
||||
}
|
||||
close IN;
|
||||
}
|
||||
|
||||
my @mp3s;
|
||||
if(($rc->{SYNCMODE} == 3)) {
|
||||
my @pl=find("$rc->{PLAYLISTDIR}/* 2>/dev/null");
|
||||
my %test;
|
||||
|
||||
for my $p (@pl) {
|
||||
chomp $p;
|
||||
my ($n) = $p =~ /.*\/(.*?)$/;
|
||||
open IN,$p or die "playlist: $p could not be opened";
|
||||
while(<IN>) {
|
||||
unless($test{$_}) {
|
||||
push @mp3s,$_;
|
||||
$test{$_}=1;
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
@mp3s=find($dir);
|
||||
}
|
||||
|
||||
for(@mp3s) {
|
||||
chomp $_;
|
||||
next unless(/\.(m|M)(p|P)3$/);
|
||||
my $name=$_;
|
||||
|
||||
if(keys %tosync) {
|
||||
next unless($tosync{$name});
|
||||
}
|
||||
|
||||
if($opt{n}) {
|
||||
die "illegal character in filename [$name]\n" unless ($name =~ /^[A-Za-z0-9\.\-_\/\,]+$/);
|
||||
}
|
||||
|
||||
s/\://g;
|
||||
s/.*\///g;
|
||||
$songs{$name}{name}=$_;
|
||||
if($rc->{SYNCMODE} >= 2) {
|
||||
$songs{$name}{dir}="F".hash($_);
|
||||
} else {
|
||||
($songs{$name}{dir}) = $name =~ /\/(F\d\d)\//;
|
||||
}
|
||||
|
||||
{
|
||||
my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,
|
||||
$atime,$mtime,$ctime,$blksize,$blocks) = stat($name);
|
||||
$songs{$name}{size}=$size;
|
||||
$songs{$name}{date}=$mtime;
|
||||
}
|
||||
|
||||
my $tag;
|
||||
$tag = get_mp3tag($name) unless($rc->{ALWAYSTEMPLATES});
|
||||
|
||||
my ($artist,$album,$title,$order,$_dummy_);
|
||||
|
||||
if($tag) {
|
||||
# print Dumper($tag);
|
||||
# YEAR ARTIST COMMENT TRACKNUM TITLE ALBUM GENRE
|
||||
$artist=$tag->{ARTIST};
|
||||
$album=$tag->{ALBUM};
|
||||
$title=$tag->{TITLE};
|
||||
$order=$tag->{TRACKNUM};
|
||||
$order=$1 if($order =~ /(\d+)\s*\//);
|
||||
|
||||
} else {
|
||||
for(sort {length($b) <=> length($a)} keys %{$rc->{FILETEMPLATES}}) {
|
||||
if(my @x = $name =~ /$_/) {
|
||||
my $c=0;
|
||||
for my $x (@x) {
|
||||
#print "\$$rc->{FILETEMPLATES}->{$_}->[$c]=\"$x\";\n";
|
||||
eval "\$$rc->{FILETEMPLATES}->{$_}->[$c]=\"$x\";";
|
||||
die "eval error: $@" if($@);
|
||||
$c++;
|
||||
}
|
||||
last;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
unless($title) {
|
||||
die "no title found in: $name";
|
||||
}
|
||||
|
||||
$title =~ s/_/ /g;
|
||||
$artist =~ s/_/ /g;
|
||||
$album =~ s/_/ /g;
|
||||
|
||||
$songs{$name}{title}=$title;
|
||||
$songs{$name}{artist}="";
|
||||
$songs{$name}{album}="";
|
||||
$songs{$name}{order}=0;
|
||||
$songs{$name}{artist}=$artist if $artist;
|
||||
$songs{$name}{album}=$album if $album;
|
||||
$songs{$name}{order}=$order if $order;
|
||||
|
||||
my $info = get_mp3info ($name);
|
||||
|
||||
$songs{$name}{size}=$info->{SIZE};
|
||||
$songs{$name}{bitrate}=$info->{BITRATE};
|
||||
$songs{$name}{duration}=int($info->{SECS}*1000);
|
||||
$songs{$name}{vbr}=$info->{VBR};
|
||||
|
||||
#print Dumper($info);
|
||||
|
||||
my $n=$songs{$name}{dir}."/".$songs{$name}{name};
|
||||
unless($check{$n}) {
|
||||
$check{$n}=1;
|
||||
} else {
|
||||
die "songname: $songs{$name}{name} not unique";
|
||||
}
|
||||
}
|
||||
|
||||
#
|
||||
# deleting unwanted songs
|
||||
#
|
||||
|
||||
my %known;
|
||||
for(keys %songs) {
|
||||
$known{$songs{$_}{name}}=1;
|
||||
}
|
||||
|
||||
#print Dumper(\%known);
|
||||
|
||||
my @ipod = find ("$rc->{IPODDIR}/iPod_Control/Music");
|
||||
my @todel;
|
||||
for(@ipod) {
|
||||
next unless (/\.mp3$/i);
|
||||
chomp;
|
||||
|
||||
my ($name) = $_ =~ /\/([^\/]+\.mp3)$/i;
|
||||
unless($known{$name}) {
|
||||
push @todel,$_;
|
||||
}
|
||||
}
|
||||
|
||||
my $del;
|
||||
if($rc->{DELETEASK} && @todel) {
|
||||
for(@todel) {
|
||||
print "del: $_\n";
|
||||
}
|
||||
print "Do you really want to delete this songs? (y/N) ";
|
||||
my $in=<STDIN>;
|
||||
chomp $in;
|
||||
$del=1 if($in =~ /^y$/i);
|
||||
} else {
|
||||
$del=1;
|
||||
}
|
||||
|
||||
if($del) {
|
||||
for(@todel) {
|
||||
print STDERR "deleting: $_\n";
|
||||
unlink($_);
|
||||
}
|
||||
}
|
||||
|
||||
#
|
||||
# copy songs
|
||||
#
|
||||
|
||||
my $main_sl="";
|
||||
my $main_pl="";
|
||||
my $index=500;
|
||||
|
||||
#print Dumper(\%songs);
|
||||
|
||||
my $df = new Filesys::DiskFree;
|
||||
|
||||
SONGS: for my $song (keys %songs) {
|
||||
my $attr;
|
||||
my $out="";
|
||||
my $attr_c=3;
|
||||
|
||||
if($rc->{SYNCMODE} >= 2) {
|
||||
my $to = "$rc->{IPODDIR}/iPod_Control/Music/$songs{$song}{dir}/$songs{$song}{name}";
|
||||
#my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,
|
||||
# $atime,$mtime,$ctime,$blksize,$blocks) = stat($to);
|
||||
#$size=0 unless $size;
|
||||
#print "checking: $song [$songs{$song}{size}] -> $to [$size]\n";
|
||||
#if($size != $songs{$song}{size}) {
|
||||
|
||||
unless(-e $to) {
|
||||
print STDERR "syncing: $songs{$song}{name}\n";
|
||||
# cp "\"$song\" \"$to\"";
|
||||
|
||||
$df->df();
|
||||
my $free=$df->avail($rc->{IPODDIR});
|
||||
|
||||
if($free-$songs{$song}{size}-$buffer>0) {
|
||||
copy($song,$to);
|
||||
} else {
|
||||
print STDERR "no space availiable for: $songs{$song}{name} [$songs{$song}{size}]\n";
|
||||
delete $songs{$song};
|
||||
next SONGS;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$songs{$song}{index}=$index;
|
||||
|
||||
$out.=create_mhod($songs{$song}{title},1);
|
||||
|
||||
if($songs{$song}{artist}) {
|
||||
$attr_c++;
|
||||
$out.=create_mhod($songs{$song}{artist},4);
|
||||
}
|
||||
if($songs{$song}{album}) {
|
||||
$attr_c++;
|
||||
$out.=create_mhod($songs{$song}{album},3);
|
||||
}
|
||||
|
||||
$out.=create_mhod("MPEG audio file",6);
|
||||
$out.=create_mhod(":iPod_Control:Music:".$songs{$song}{dir}.":".$songs{$song}{name},2);
|
||||
|
||||
$out=create_mhit(
|
||||
$attr_c,length($out),$index,$songs{$song}{vbr},
|
||||
$songs{$song}{date},$songs{$song}{size},
|
||||
$songs{$song}{duration},$songs{$song}{order},
|
||||
$songs{$song}{bitrate}
|
||||
).$out;
|
||||
|
||||
$main_sl.=$out;
|
||||
|
||||
$main_pl.=create_mhod_mhip($songs{$song}{index});
|
||||
|
||||
$index++;
|
||||
}
|
||||
|
||||
#print Dumper(\%songs);
|
||||
|
||||
my %playlists;
|
||||
my @pl=find("$rc->{PLAYLISTDIR}/* 2>/dev/null");
|
||||
|
||||
for my $p (@pl) {
|
||||
chomp $p;
|
||||
my ($n) = $p =~ /.*\/(.*?)$/;
|
||||
open IN,$p or die "playlist: $p could not be opened";
|
||||
while(<IN>) {
|
||||
my $song=$_;
|
||||
chomp $song;
|
||||
|
||||
unless($songs{$song}) {
|
||||
print STDERR "ignoring song in playlist [$p], [$song] does not exist in syncdir or ipod full\n";
|
||||
} else {
|
||||
$playlists{$n}{raw}.=create_mhod_mhip($songs{$song}{index});
|
||||
$playlists{$n}{count}++;
|
||||
}
|
||||
}
|
||||
close IN;
|
||||
}
|
||||
|
||||
#
|
||||
# creating search pattern playlists
|
||||
#
|
||||
|
||||
for my $pattern (@ARGV) {
|
||||
my @list;
|
||||
for(keys %songs) {
|
||||
push @list,$songs{$_}{index} if($_ =~ /$pattern/i);
|
||||
}
|
||||
unless(@list) {
|
||||
print STDERR "nothing for searchpattern: $pattern found\n";
|
||||
} else {
|
||||
my ($name)=$pattern=~/(\S\S\S+)/;
|
||||
unless(length($name)>=3) {
|
||||
$name=$pattern;
|
||||
$name =~ s/[^A-Za-z0-9]//g;
|
||||
}
|
||||
for(@list) {
|
||||
$playlists{$name}{raw}.=create_mhod_mhip($_);
|
||||
$playlists{$name}{count}++;
|
||||
}
|
||||
print STDERR @list." songs for searchpattern: $pattern found\n";
|
||||
}
|
||||
}
|
||||
|
||||
#print Dumper(\%playlists);
|
||||
|
||||
#
|
||||
# build the pieces together
|
||||
#
|
||||
|
||||
my $output;
|
||||
|
||||
my $song_c=keys %songs;
|
||||
|
||||
print STDERR "\nFound songs: $song_c\n";
|
||||
|
||||
my $tmp=create_mhlt($song_c).$main_sl;
|
||||
$main_sl=create_mhsd(96+length($tmp),1).$tmp;
|
||||
|
||||
print STDERR "Songlist created\n";
|
||||
|
||||
my $pl_c=keys %playlists;
|
||||
|
||||
print STDERR "\nFound additional playlists: $pl_c\n";
|
||||
|
||||
$tmp=create_mhlp($pl_c+1).create_playlist_main($ipod_name,$song_c).$main_pl;
|
||||
print STDERR "\nMain playlist created: $song_c songs\n\n";
|
||||
|
||||
for(keys %playlists) {
|
||||
$tmp.=create_playlist($_,$playlists{$_}{count}).$playlists{$_}{raw};
|
||||
print STDERR "Playlist \"$_\" created: $playlists{$_}{count} songs\n";
|
||||
}
|
||||
|
||||
$main_pl=create_mhsd(96+length($tmp),2).$tmp;
|
||||
|
||||
|
||||
$output=create_mhbd(104+length($main_sl.$main_pl)).$main_sl.$main_pl;
|
||||
|
||||
# backup old iTunesDB
|
||||
if(-e "$rc->{IPODDIR}/iPod_Control/iTunes/iTunesDB") {
|
||||
my $t=time();
|
||||
copy("$rc->{IPODDIR}/iPod_Control/iTunes/iTunesDB","$rc->{BACKUPDIR}/iTunesDB_$t");
|
||||
gzip("$rc->{BACKUPDIR}/iTunesDB_$t");
|
||||
}
|
||||
|
||||
open OUT,">".$rc->{IPODDIR}."/iPod_Control/iTunes/iTunesDB" or die "cannot write iTunesDB";
|
||||
print OUT $output;
|
||||
close OUT;
|
||||
|
||||
print STDERR "\niTunesDB created.\n";
|
||||
exit;
|
||||
# END
|
||||
|
||||
|
||||
#
|
||||
# internal subroutines
|
||||
#
|
||||
|
||||
sub create_mhbd {
|
||||
my ($size) = @_;
|
||||
|
||||
my $r= "mhbd";
|
||||
$r.= pack "V",104;
|
||||
$r.= pack "V",$size;
|
||||
$r.= pack "V",1;
|
||||
$r.= pack "V",1;
|
||||
$r.= pack "V",2;
|
||||
for(1..20) {
|
||||
$r.= pack "V",0;
|
||||
}
|
||||
|
||||
return $r;
|
||||
}
|
||||
|
||||
sub create_mhlp {
|
||||
my ($count) = @_;
|
||||
|
||||
my $r= "mhlp";
|
||||
$r.= pack "V",92;
|
||||
$r.= pack "V",$count;
|
||||
for(1..20) {
|
||||
$r.= pack "V",0;
|
||||
}
|
||||
|
||||
return $r;
|
||||
}
|
||||
|
||||
sub create_playlist {
|
||||
my ($name,$anz) = @_;
|
||||
|
||||
my $ipod_name=create_mhod($name,1);
|
||||
|
||||
my $r= "mhyp";
|
||||
$r.= pack "V",108;
|
||||
$r.= pack "V",108+648+length($ipod_name)+$anz*(76+44);
|
||||
$r.= pack "V",2;
|
||||
$r.= pack "V",$anz;
|
||||
$r.= pack "V",0;
|
||||
$r.= pack "V",3088620292;
|
||||
$r.= pack "V",2317718671;
|
||||
$r.= pack "V",3655876446;
|
||||
for(1..18) {
|
||||
$r.= pack "V",0;
|
||||
}
|
||||
|
||||
$r.= "mhod";
|
||||
$r.= pack "V",24;
|
||||
$r.= pack "V",648;
|
||||
$r.= pack "V",100;
|
||||
for(1..3) {
|
||||
$r.= pack "V",0;
|
||||
}
|
||||
$r.= pack "V",12714187; # ?? 12714187
|
||||
$r.= pack "V",26215000;
|
||||
$r.= pack "V",0;
|
||||
$r.= pack "V",65736;
|
||||
$r.= pack "V",1; # ?? 1
|
||||
$r.= pack "V",6; # ?? 6
|
||||
$r.= pack "V",0; # ?? 0
|
||||
$r.= pack "V",2555905; # ?? 2555905
|
||||
for(1..3) {
|
||||
$r.= pack "V",0;
|
||||
}
|
||||
$r.= pack "V",13107202;
|
||||
for(1..3) {
|
||||
$r.= pack "V",0;
|
||||
}
|
||||
$r.= pack "V",3276813;
|
||||
for(1..3) {
|
||||
$r.= pack "V",0;
|
||||
}
|
||||
$r.= pack "V",8192004;
|
||||
for(1..3) {
|
||||
$r.= pack "V",0;
|
||||
}
|
||||
$r.= pack "V",8192003;
|
||||
for(1..3) {
|
||||
$r.= pack "V",0;
|
||||
}
|
||||
$r.= pack "V",5242888;
|
||||
for(1..107) {
|
||||
$r.= pack "V",0;
|
||||
}
|
||||
$r.= pack "V",140;
|
||||
for(1..19) {
|
||||
$r.= pack "V",0;
|
||||
}
|
||||
|
||||
return $r.$ipod_name;
|
||||
}
|
||||
|
||||
sub create_playlist_main {
|
||||
my ($name,$anz) = @_;
|
||||
|
||||
my $ipod_name=create_mhod($name,1);
|
||||
|
||||
my $r= "mhyp";
|
||||
$r.= pack "V",108;
|
||||
$r.= pack "V",108+648+length($ipod_name)+$anz*(76+44);
|
||||
$r.= pack "V",2;
|
||||
$r.= pack "V",$anz;
|
||||
$r.= pack "V",1;
|
||||
$r.= pack "V",3087491191;
|
||||
$r.= pack "V",837788566;
|
||||
$r.= pack "V",62365;
|
||||
for(1..18) {
|
||||
$r.= pack "V",0;
|
||||
}
|
||||
|
||||
$r.= "mhod";
|
||||
$r.= pack "V",24;
|
||||
$r.= pack "V",648;
|
||||
$r.= pack "V",100;
|
||||
for(1..3) {
|
||||
$r.= pack "V",0;
|
||||
}
|
||||
$r.= pack "V",13172927; # ?? 12714187
|
||||
$r.= pack "V",26215000;
|
||||
$r.= pack "V",0;
|
||||
$r.= pack "V",65736;
|
||||
$r.= pack "V",5; # ?? 1
|
||||
$r.= pack "V",6; # ?? 6
|
||||
$r.= pack "V",3; # ?? 0
|
||||
$r.= pack "V",1179649; # ?? 2555905
|
||||
for(1..3) {
|
||||
$r.= pack "V",0;
|
||||
}
|
||||
$r.= pack "V",13107202;
|
||||
for(1..3) {
|
||||
$r.= pack "V",0;
|
||||
}
|
||||
$r.= pack "V",3276813;
|
||||
for(1..3) {
|
||||
$r.= pack "V",0;
|
||||
}
|
||||
$r.= pack "V",8192004;
|
||||
for(1..3) {
|
||||
$r.= pack "V",0;
|
||||
}
|
||||
$r.= pack "V",8192003;
|
||||
for(1..3) {
|
||||
$r.= pack "V",0;
|
||||
}
|
||||
$r.= pack "V",5242888;
|
||||
for(1..107) {
|
||||
$r.= pack "V",0;
|
||||
}
|
||||
$r.= pack "V",140;
|
||||
for(1..19) {
|
||||
$r.= pack "V",0;
|
||||
}
|
||||
|
||||
return $r.$ipod_name;
|
||||
}
|
||||
|
||||
sub create_mhod_mhip {
|
||||
my ($ref) = @_;
|
||||
|
||||
my $r= "mhip";
|
||||
$r.= pack "V",76;
|
||||
$r.= pack "V",76;
|
||||
$r.= pack "V",1;
|
||||
$r.= pack "V",0;
|
||||
$r.= pack "V",$ref-1;
|
||||
$r.= pack "V",$ref;
|
||||
$r.= pack "V",3088619525;
|
||||
for(1..11) {
|
||||
$r.= pack "V",0;
|
||||
}
|
||||
|
||||
$r.="mhod";
|
||||
$r.= pack "V",24;
|
||||
$r.= pack "V",44;
|
||||
$r.= pack "V",100;
|
||||
$r.= pack "V",0;
|
||||
$r.= pack "V",0;
|
||||
$r.= pack "V",$ref-1;
|
||||
for(1..4) {
|
||||
$r.= pack "V",0;
|
||||
}
|
||||
|
||||
return $r;
|
||||
}
|
||||
|
||||
sub create_mhsd {
|
||||
my ($size,$type) = @_;
|
||||
|
||||
my $r="mhsd";
|
||||
$r.= pack "V",96;
|
||||
$r.= pack "V",$size;
|
||||
$r.= pack "V",$type;
|
||||
for(1..20) {
|
||||
$r.= pack "V",0;
|
||||
}
|
||||
|
||||
return $r;
|
||||
}
|
||||
|
||||
sub create_mhlt {
|
||||
my ($count) = @_;
|
||||
|
||||
my $r="mhlt";
|
||||
$r.= pack "V",92;
|
||||
$r.= pack "V",$count;
|
||||
for(1..20) {
|
||||
$r.= pack "V",0;
|
||||
}
|
||||
|
||||
return $r;
|
||||
}
|
||||
|
||||
sub create_mhit {
|
||||
my ($arttr_c,$attr_s,$index,$vbr,$date,$size,$dur,$order,$bitrate) = @_;
|
||||
|
||||
my $r="mhit";
|
||||
$r.= pack "V",156;
|
||||
$r.= pack "V",156+$attr_s;
|
||||
$r.= pack "V",$arttr_c;
|
||||
$r.= pack "V",$index;
|
||||
$r.= pack "V",1;
|
||||
$r.= pack "V",0;
|
||||
my $type=256;
|
||||
$type+=1 if($vbr);
|
||||
$r.= pack "V",$type;
|
||||
$r.= pack "V",$date+2082844800;
|
||||
$r.= pack "V",$size;
|
||||
$r.= pack "V",$dur;
|
||||
$r.= pack "V",$order;
|
||||
$r.= pack "V",0;
|
||||
$r.= pack "V",0;
|
||||
$r.= pack "V",$bitrate;
|
||||
$r.= pack "V",2890137600;
|
||||
for(1..23) {
|
||||
$r.= pack "V",0;
|
||||
}
|
||||
|
||||
return $r;
|
||||
}
|
||||
|
||||
sub create_mhod {
|
||||
my ($string,$type) = @_;
|
||||
my $len=length($string);
|
||||
|
||||
my $r="mhod";
|
||||
$r.= pack "V",24;
|
||||
$r.= pack "V",(40+2*$len);
|
||||
$r.= pack "V",$type;
|
||||
$r.= pack "V2",0;
|
||||
$r.= pack "V",1;
|
||||
$r.= pack "V",(2*$len);
|
||||
$r.= pack "V2",0;
|
||||
|
||||
my $u=latin1($string);
|
||||
$u->byteswap;
|
||||
$r.= $u->utf16;
|
||||
|
||||
return $r;
|
||||
}
|
||||
|
||||
sub set_ipodname {
|
||||
my ($dev,$backup,$name,$real,$cpu)=@_;
|
||||
$dev.="/iPod_Control/iTunes/DeviceInfo";
|
||||
|
||||
my $file;
|
||||
|
||||
for(1..384) {
|
||||
$file.=pack "V",0;
|
||||
}
|
||||
|
||||
my $l=length($name);
|
||||
substr($file,0,2)=pack "v",$l;
|
||||
my $u=latin1($name);
|
||||
$u->byteswap;
|
||||
substr($file,2,$l*2)=$u->utf16;
|
||||
|
||||
$l=length($real);
|
||||
substr($file,512,2)=pack "v",$l;
|
||||
$u=latin1($real);
|
||||
$u->byteswap;
|
||||
substr($file,514,$l*2)=$u->utf16;
|
||||
|
||||
$l=length($cpu);
|
||||
substr($file,1024,2)=pack "v",$l;
|
||||
$u=latin1($cpu);
|
||||
$u->byteswap;
|
||||
substr($file,1026,$l*2)=$u->utf16;
|
||||
|
||||
if(-e $dev) {
|
||||
my $t=time();
|
||||
copy($dev,"$backup/DeviceInfo_$t");
|
||||
gzip("$backup/DeviceInfo_$t");
|
||||
}
|
||||
open IPOD,">$dev" or die "cannot write DeviceInfo";
|
||||
print IPOD $file;
|
||||
close IPOD;
|
||||
}
|
||||
|
||||
sub get_ipodname {
|
||||
my $dev=shift;
|
||||
$dev.="/iPod_Control/iTunes/DeviceInfo";
|
||||
my $file;
|
||||
my $buff;
|
||||
|
||||
open IPOD,$dev or return undef;
|
||||
while (read(IPOD, $buff, 8 * 2**10)) {
|
||||
$file.=$buff;
|
||||
}
|
||||
close IPOD;
|
||||
|
||||
my $l=unpack "v",substr($file,0,2);
|
||||
my $s=substr($file,2,$l*2);
|
||||
my $u=utf16($s);
|
||||
$u->byteswap;
|
||||
my $name=$u->latin1;
|
||||
|
||||
$l=unpack "v",substr($file,512,2);
|
||||
$s=substr($file,514,$l*2);
|
||||
$u=utf16($s);
|
||||
$u->byteswap;
|
||||
my $realname=$u->latin1;
|
||||
|
||||
$l=unpack "v",substr($file,1024,2);
|
||||
$s=substr($file,1026,$l*2);
|
||||
$u=utf16($s);
|
||||
$u->byteswap;
|
||||
my $computername=$u->latin1;
|
||||
|
||||
return ($name,$realname,$computername);
|
||||
}
|
||||
|
||||
sub hash {
|
||||
my $string=shift;
|
||||
my $key;
|
||||
|
||||
my $len=length($string);
|
||||
|
||||
for(my $j=$len-1 ; $j>1 ; $j--) {
|
||||
$key+=ord(substr($string,$j,1));
|
||||
}
|
||||
|
||||
return sprintf "%.2d",(substr($key,length($key)-2,2) % 20);
|
||||
}
|
||||
|
||||
sub readrc {
|
||||
my $file = shift;
|
||||
my $req = shift;
|
||||
my $rc;
|
||||
|
||||
my $sub;
|
||||
|
||||
open IN,$file or die "cannot open rc file: $file";
|
||||
while(<IN>) {
|
||||
next if /^\s*$/;
|
||||
next if /^\s*#/;
|
||||
|
||||
if(/^\s*(\S+)\s*=\s*(.*?)\s*$/) {
|
||||
my $k=$1;
|
||||
my $n=$2;
|
||||
($n) = $n =~ /^\"(.*?)\"$/ if($n =~ /\"/);
|
||||
unless($sub) {
|
||||
$rc->{$k}=$n;
|
||||
} else {
|
||||
($k) = $k =~ /^\"(.*?)\"$/ if($k =~ /\"/);
|
||||
my @n=split /,/,$n;
|
||||
for(@n) {
|
||||
s/^\s+//g;
|
||||
s/\s+$//g;
|
||||
s/^\"//;
|
||||
s/\"$//;
|
||||
}
|
||||
$rc->{$sub}->{$k}=\@n;
|
||||
}
|
||||
} elsif (/^\s*(\S+)\s*\{/) {
|
||||
$sub=$1;
|
||||
} elsif (/^\s*}/) {
|
||||
$sub=undef;
|
||||
}
|
||||
}
|
||||
|
||||
if($rc->{SYNCMODE} == 2) {
|
||||
push @$req,"SYNCDIR";
|
||||
}
|
||||
if($rc->{WRITEDEVICEINFO} == 1) {
|
||||
push @$req,("IPODNAME","REALNAME","COMPUTERNAME");
|
||||
}
|
||||
if($rc->{ALWAYSTEMPLATES} == 1) {
|
||||
push @$req,"FILETEMPLATES";
|
||||
}
|
||||
|
||||
for my $d (keys %$rc) {
|
||||
if($d =~ /DIR$/) {
|
||||
$rc->{$d} =~ s/\~/$ENV{HOME}/;
|
||||
}
|
||||
}
|
||||
$rc->{SYNCLIST} =~ s/\~/$ENV{HOME}/ if $rc->{SYNCLIST};
|
||||
|
||||
for(@$req) {
|
||||
die "RC PARAMETER: $_ not found" unless($rc->{$_});
|
||||
}
|
||||
return $rc;
|
||||
}
|
||||
3
syncauto.sh
Normal file
3
syncauto.sh
Normal file
@@ -0,0 +1,3 @@
|
||||
|
||||
# sudo mount -o uid=marc /dev/sdt1 /media/hdext
|
||||
rsync -a --no-o --no-p --no-g -L --modify-window 1 --stats --delete --progress /mp3/auto/ /media/hdext/
|
||||
@@ -8,7 +8,7 @@
|
||||
# So sehen die Dateien aus:
|
||||
# http://www.taz.de/cgi-bin/digiabo/2007_04_17_HTM.zip
|
||||
|
||||
TAZDIR=/dat/books/taz
|
||||
TAZDIR=/media/nas/books/taz
|
||||
TAZUSER=103450
|
||||
TAZPASSWD=oxculo
|
||||
TAZTYPE=.pdf
|
||||
@@ -72,3 +72,6 @@ for i in {1..16}
|
||||
do
|
||||
download "${TAG[$i]}""$TAZTYPE_EPUB" "$TAZURL""taz_""${TAG[$i]}""$TAZTYPE_EPUB"
|
||||
done
|
||||
|
||||
# Sync to Dropbox
|
||||
bash /home/marc/bin/tazsync.sh
|
||||
|
||||
26
tazsync.sh
Normal file
26
tazsync.sh
Normal file
@@ -0,0 +1,26 @@
|
||||
|
||||
daysback=10
|
||||
|
||||
srcdir=/dat/books/taz
|
||||
dstdir=/home/marc/Dropbox-ipad/taz
|
||||
tmpdir=/tmp
|
||||
|
||||
[ -d $dstdir ] || exit
|
||||
[ -d $srcdir ] || exit
|
||||
[ -d $tmpdir ] || exit
|
||||
|
||||
cd $dstdir
|
||||
find . -type f | sort> $tmpdir/alt.lst
|
||||
|
||||
cd $srcdir
|
||||
find . -mtime -$daysback -name "*.epub" | sort > $tmpdir/new.lst
|
||||
|
||||
rsync --files-from=$tmpdir/new.lst . $dstdir/
|
||||
|
||||
cd $dstdir
|
||||
|
||||
cat $tmpdir/alt.lst $tmpdir/new.lst | sort -u > $tmpdir/all.lst
|
||||
cat $tmpdir/all.lst
|
||||
cat $tmpdir/new.lst
|
||||
diff $tmpdir/new.lst $tmpdir/all.lst | grep "^>" | sed "s/^> //" | xargs rm
|
||||
# $rmfiles
|
||||
7
test.sh
Normal file
7
test.sh
Normal file
@@ -0,0 +1,7 @@
|
||||
|
||||
echo "#!/bin/bash" > /tmp/cctest
|
||||
echo "dstdir=\$(dirname \$1)" >> /tmp/cctest
|
||||
echo "echo rsync -av \$1 \$bakdir/\$dstdir" >> /tmp/cctest
|
||||
|
||||
export bakdir=/media/hdext/git
|
||||
find /home/marc/ -type d -name .git -exec bash -x /tmp/cctest {} \;
|
||||
3
tonas.sh
Normal file
3
tonas.sh
Normal file
@@ -0,0 +1,3 @@
|
||||
|
||||
sudo -u vdr rsync -avz --progress --delete --exclude "*.del" /video/ /media/hdext/video/vdr/
|
||||
sudo -u vdr rsync -avz --progress --delete /mp3/ /media/hdext/audio/
|
||||
1
torrentcreate.sh
Normal file
1
torrentcreate.sh
Normal file
@@ -0,0 +1 @@
|
||||
ctorrent -t -u http://tracker.thepiratebay.org/announce -s test.torrent garmin_allinone_d_2009-07-17.tar
|
||||
12
tvm2vdr_start
Executable file
12
tvm2vdr_start
Executable file
@@ -0,0 +1,12 @@
|
||||
#!/bin/bash
|
||||
|
||||
tmpdir1=/tmp/tvmovie2vdr
|
||||
tmpdir2=/tmp/tvmovie2vdrup
|
||||
logdir=/var/log/tvmovie2vdr
|
||||
|
||||
[ -d $tmpdir1 ] || mkdir $tmpdir1
|
||||
[ -d $tmpdir2 ] || mkdir $tmpdir2
|
||||
[ -d $logdir ] || mkdir $logdir
|
||||
|
||||
tvm2vdr
|
||||
|
||||
15
unqueue
Executable file
15
unqueue
Executable file
@@ -0,0 +1,15 @@
|
||||
#!/bin/bash
|
||||
set -x
|
||||
qfile=$1
|
||||
|
||||
lines=$(cat $qfile | wc -l)
|
||||
|
||||
while [ $lines -ge 1 ]; do
|
||||
entry=$(head -n 1 $qfile)
|
||||
$entry
|
||||
tail -n +2 $qfile > ${qfile}.tmp
|
||||
mv ${qfile}.tmp ${qfile}
|
||||
lines=$(cat $qfile | wc -l)
|
||||
done
|
||||
|
||||
rm $qfile
|
||||
@@ -3,8 +3,8 @@
|
||||
|
||||
LocalDir=/dat/gps/garmin
|
||||
|
||||
allinone=1
|
||||
radfahrer=1
|
||||
allinone=0
|
||||
radfahrer=0
|
||||
kleineisel=1
|
||||
|
||||
# -------------------------------------------
|
||||
@@ -67,14 +67,15 @@ if [ $radfahrer -eq 1 ]; then
|
||||
|
||||
cd $LocalDir/radfahrer
|
||||
|
||||
wget -nv http://osm.arndnet.de/ -O index.html
|
||||
#wget -nv http://osm.arndnet.de/ -O index.html
|
||||
wget -N http://radkarte.formann.de/gmapsupp.img.zip
|
||||
#uncompress < Radkarte > Radkarte.html
|
||||
cp index.html Radkarte.html
|
||||
url_rad=$(cat Radkarte.html | grep img\.zip | cut -f 2 -d '"')
|
||||
wget -nv -N $url_rad
|
||||
#cp index.html Radkarte.html
|
||||
#url_rad=$(cat Radkarte.html | grep img\.zip | cut -f 2 -d '"')
|
||||
#wget -nv -N $url_rad
|
||||
datestr=$(stat -c %y gmapsupp.img.zip | cut -f 1 -d ' ')
|
||||
[ -f radfahrer_$datestr.zip ] || cp gmapsupp.img.zip radfahrer_$datestr.zip
|
||||
rm Radkarte.html
|
||||
#rm Radkarte.html
|
||||
|
||||
fi
|
||||
|
||||
|
||||
199
vdrrecren
Executable file
199
vdrrecren
Executable file
@@ -0,0 +1,199 @@
|
||||
#!/usr/bin/ruby
|
||||
require 'socket'
|
||||
|
||||
DEBUG=1
|
||||
#Port=6419
|
||||
Port=2001
|
||||
|
||||
def SvdrpRecv(s)
|
||||
lines=Array.new
|
||||
begin
|
||||
str=s.readline
|
||||
lines.push(str)
|
||||
#puts("SvdrpReceived: " + str + " - |" + str[3,1] + "|" ) if $DEBUG
|
||||
end while str[3,1]=="-"
|
||||
return(lines)
|
||||
end
|
||||
|
||||
def SvdrpSend( s, strSvdrpCmd )
|
||||
s.write(strSvdrpCmd + "\n")
|
||||
l=SvdrpRecv(s)
|
||||
return(l)
|
||||
end
|
||||
|
||||
def Svdrp( strSvdrpCmd )
|
||||
puts("Svdrp:" + strSvdrpCmd) if DEBUG
|
||||
s=TCPSocket::new("localhost", Port)
|
||||
l=SvdrpRecv(s)
|
||||
l=SvdrpSend(s, strSvdrpCmd)
|
||||
s.write("quit\r\n")
|
||||
s.close
|
||||
return(l)
|
||||
end
|
||||
|
||||
def CmdRen( num, strNewName )
|
||||
cmd=sprintf("MOVR %d %s", num, strNewName)
|
||||
printf("Aufnahme umbennenen in '%s' ...\n", cmd)
|
||||
Svdrp(cmd)
|
||||
end
|
||||
|
||||
if ARGV.size!=2
|
||||
printf("invalid arguments: %d\n",ARGV.size )
|
||||
exit
|
||||
end
|
||||
CMD=ARGV[0]
|
||||
REC=ARGV[1]
|
||||
if not File.directory?(REC)
|
||||
puts("not a directory")
|
||||
exit
|
||||
end
|
||||
RECDATEDIR=File.basename(REC)
|
||||
RECPATH=File.dirname(REC)
|
||||
RECNAME=File.basename(RECPATH)
|
||||
BASEDIR=File.dirname(RECPATH)
|
||||
EPISODENAME=File.basename(BASEDIR)
|
||||
|
||||
printf("recpath:%s basedir:%s recname:%s recdatedir:%s\n", RECPATH, BASEDIR, RECNAME, RECDATEDIR)
|
||||
sp=RECDATEDIR.split(".")
|
||||
RECDATE=sp[0]
|
||||
RECHOUR=sp[1].to_i
|
||||
RECMIN=sp[2].to_i
|
||||
if sp.last()!="rec"
|
||||
puts("not .rec-dir")
|
||||
exit
|
||||
end
|
||||
#printf("1\n")
|
||||
|
||||
sp=RECDATE.split("-")
|
||||
RECDAY=sp[2].to_i
|
||||
RECMON=sp[1].to_i
|
||||
RECYEAR=sp[0].to_i
|
||||
|
||||
strTime=sprintf("%02d:%02d", RECHOUR, RECMIN);
|
||||
strDate=sprintf("%02d.%02d.%02d", RECDAY, RECMON, RECYEAR % 100);
|
||||
|
||||
l=Svdrp("LSTR")
|
||||
|
||||
recs=Array.new
|
||||
printf("Date:%s ; Time:%s\n", strDate,strTime) if DEBUG
|
||||
l.each do |x|
|
||||
z=x[4..x.size-1]
|
||||
sp=z.split(" ")
|
||||
|
||||
#printf("d:%s;t:%s-%s;%s-%s\n", sp[1], sp[2], strDate,strTime, x)
|
||||
#printf("%s%s|%s %s|%s\n", z, sp[1], sp[2][0,5], strDate, strTime)
|
||||
if sp[1]==strDate && sp[2][0,5]==strTime
|
||||
puts("LSTR:"+x) if DEBUG
|
||||
recs.push(x)
|
||||
end
|
||||
end
|
||||
|
||||
if recs.size==0
|
||||
puts("Aufnahme nicht gefunden")
|
||||
exit
|
||||
end
|
||||
if recs.size>1
|
||||
puts("Aufnahmezeit nicht eindeutig")
|
||||
exit
|
||||
end
|
||||
|
||||
|
||||
#p(recs[0])
|
||||
# Get Rec-Num
|
||||
rec=recs[0][4..(recs[0].size-1)]
|
||||
puts("rec:"+rec) if DEBUG
|
||||
rec_s=rec.split(' ')
|
||||
num=rec_s[0].to_i
|
||||
printf("Num:%s\n",num) if DEBUG
|
||||
# Get Title of Rec
|
||||
title=""
|
||||
rec_s[4..rec_s.size].each { |x| title=title+x+' ' }
|
||||
printf("Title:%s\n",title) if DEBUG
|
||||
# Get Dir of Rec
|
||||
dir_s=title.split('~')
|
||||
dir=""
|
||||
printf("Dir_s:%s size:%d\n", dir_s, dir_s.size) if DEBUG
|
||||
if(dir_s.size>1)
|
||||
dir_s[0..dir_s.size-2].each { |x| dir=dir+x+'~' }
|
||||
end
|
||||
puts("Dir: " + dir) if DEBUG
|
||||
dir_parent=""
|
||||
dir_parent=dir_s[dir_s.size-2] if dir_s.size>=2
|
||||
puts("ParentDir: " + dir_parent) if DEBUG
|
||||
|
||||
# read info.vdr-file
|
||||
info_title=""
|
||||
info_short=""
|
||||
info_desc=""
|
||||
infofile=REC + "/info.vdr"
|
||||
if ! File.exists?( infofile )
|
||||
infofile=REC + "/info"
|
||||
end
|
||||
puts("Infofile: " + infofile) if DEBUG
|
||||
if File.exists?( infofile )
|
||||
puts("Infofile: " + infofile) if DEBUG
|
||||
f = File.new( infofile )
|
||||
lines=f.readlines
|
||||
f.close
|
||||
lines.each do |l|
|
||||
if l[0,2]=="T "
|
||||
info_title=l[2..l.size].chop
|
||||
elsif l[0,2]=="S "
|
||||
info_short=l[2..l.size].chop
|
||||
elsif l[0,2]=="D "
|
||||
ld=l.size
|
||||
ld=80 if ld>80
|
||||
info_desc=l[2..ld].chop
|
||||
end
|
||||
end
|
||||
end
|
||||
#printf("5\n")
|
||||
|
||||
puts("Info Title: " + info_title) if DEBUG
|
||||
puts(" Short: " + info_short) if DEBUG
|
||||
puts(" Desc : " + info_desc) if DEBUG
|
||||
#printf("6 %d\n", DEBUG)
|
||||
|
||||
puts("CMD:"+CMD) if DEBUG
|
||||
case CMD
|
||||
when "ShortToName" :
|
||||
if info_short.size>0
|
||||
puts("ShortToName") if DEBUG
|
||||
newname=(dir+info_short) #.gsub(" ", "\\ ")
|
||||
CmdRen(num, newname)
|
||||
end
|
||||
when "TitleToName" :
|
||||
if info_title.size>0
|
||||
puts("TitleToName") if DEBUG
|
||||
newname=(dir+info_title) #.gsub(" ", "\\ ")
|
||||
CmdRen(num, newname)
|
||||
end
|
||||
when "DescToName" :
|
||||
if info_desc.size>0
|
||||
puts("DescToName") if DEBUG
|
||||
newname=(dir+info_desc) #.gsub(" ", "\\ ")
|
||||
CmdRen(num, newname)
|
||||
end
|
||||
when "DirToName" :
|
||||
if dir_parent.size>0
|
||||
puts("DirToName") if DEBUG
|
||||
CmdRen(num, dir.chop)
|
||||
end
|
||||
when "TitleToDir" :
|
||||
if info_title.size>0
|
||||
puts("TitleToDir") if DEBUG
|
||||
title=info_title.gsub(" ", "_").gsub("(","\(").gsub(")","\)").gsub("/", "#2F").gsub(":", "#3A")
|
||||
printf("title:%s recpath:%s\n", title, RECPATH)
|
||||
newdir=BASEDIR+"/"+title
|
||||
cmd=sprintf("mkdir %s", newdir)
|
||||
puts(cmd)
|
||||
system("mkdir", newdir)
|
||||
cmd=sprintf("mv %s %s", RECPATH, newdir+"/"+RECNAME)
|
||||
puts(cmd)
|
||||
system("mv", RECPATH, newdir+"/"+RECNAME)
|
||||
cmd=sprintf("touch /video/.update")
|
||||
puts(cmd)
|
||||
system("touch", "/video/.update")
|
||||
#system("ls -l")
|
||||
end
|
||||
end
|
||||
144
vdrrecren.rb
Executable file
144
vdrrecren.rb
Executable file
@@ -0,0 +1,144 @@
|
||||
#!/usr/bin/ruby
|
||||
|
||||
require 'socket'
|
||||
|
||||
def SvdrpRecv(s)
|
||||
lines=Array.new
|
||||
begin
|
||||
str=s.readline
|
||||
lines.push(str)
|
||||
#puts("SvdrpReceived: " + str + " - |" + str[3,1] + "|" ) if $DEBUG
|
||||
end while str[3,1]=="-"
|
||||
return(lines)
|
||||
end
|
||||
|
||||
def SvdrpSend( s, strSvdrpCmd )
|
||||
s.write(strSvdrpCmd + "\n")
|
||||
l=SvdrpRecv(s)
|
||||
return(l)
|
||||
end
|
||||
|
||||
def Svdrp( strSvdrpCmd )
|
||||
puts("opening socket...") if $DEBUG
|
||||
s=TCPSocket::new("localhost", 2001)
|
||||
l=SvdrpRecv(s)
|
||||
l=SvdrpSend(s, strSvdrpCmd)
|
||||
s.write("quit\r\n")
|
||||
s.close
|
||||
return(l)
|
||||
end
|
||||
|
||||
def RenameRec( num, strDir, strName)
|
||||
if strName.size>0
|
||||
cmd=sprintf("RENR %d '%s'", num, strDir + strName)
|
||||
printf("Aufnahme %d umbennenen in '%s'...\n", num, strDir+strName)
|
||||
#Svdrp(cmd)
|
||||
end
|
||||
end
|
||||
|
||||
if ARGV.size!=2
|
||||
printf("invalid arguments: %d\n",ARGV.size )
|
||||
exit
|
||||
end
|
||||
|
||||
CMD=ARGV[0]
|
||||
REC=ARGV[1]
|
||||
|
||||
if not File.directory?(REC)
|
||||
puts("not a directory")
|
||||
exit
|
||||
end
|
||||
RECDATEDIR=File.basename(REC)
|
||||
RECPATH=File.dirname(REC)
|
||||
RECNAME=File.basename(RECPATH)
|
||||
BASEDIR=File.dirname(RECPATH)
|
||||
EPISODENAME=File.basename(BASEDIR)
|
||||
|
||||
sp=RECDATEDIR.split(".")
|
||||
RECDATE=sp[0]
|
||||
RECHOUR=sp[1].to_i
|
||||
RECMIN=sp[2].to_i
|
||||
if sp[5]!="rec"
|
||||
puts("not .rec-dir")
|
||||
exit
|
||||
end
|
||||
|
||||
sp=RECDATE.split("-")
|
||||
RECDAY=sp[2].to_i
|
||||
RECMON=sp[1].to_i
|
||||
RECYEAR=sp[0].to_i
|
||||
|
||||
strTime=sprintf("%02d:%02d", RECHOUR, RECMIN);
|
||||
strDate=sprintf("%02d.%02d.%02d", RECDAY, RECMON, RECYEAR % 100);
|
||||
|
||||
l=Svdrp("LSTR")
|
||||
|
||||
recs=Array.new
|
||||
#printf("Date:%s ; Time:%s\n", strDate,strTime) if $DEBUG
|
||||
l.each do |x|
|
||||
sp=x.split(" ")
|
||||
#printf("d:%s;t:%s\n", sp[1], sp[2])
|
||||
if sp[1]==strDate && sp[2][0,5]==strTime
|
||||
recs.push(x)
|
||||
end
|
||||
end
|
||||
|
||||
if recs.size>1
|
||||
puts("Aufnahmezeit nicht eindeutig")
|
||||
exit
|
||||
end
|
||||
|
||||
# Get Rec-Num
|
||||
rec=recs[0][4..(recs[0].size-1)]
|
||||
rec_s=rec.split(' ')
|
||||
num=rec_s[0].to_i
|
||||
|
||||
# Get Title of Rec
|
||||
title=""
|
||||
rec_s[3..rec_s.size].each { |x| title=title+x+' ' }
|
||||
#printf("t:%s\n",title)
|
||||
|
||||
# Get Dir of Rec
|
||||
dir_s=title.split('~')
|
||||
dir=""
|
||||
dir_s[0..dir_s.size-2].each { |x| dir=dir+x+'~' }
|
||||
dir_parent=dir_s[dir_s.size-2] if dir_s.size>=2
|
||||
#puts("D:"+dir)
|
||||
|
||||
# read info.vdr-file
|
||||
infofile=REC + "/info.vdr"
|
||||
if File.exists?( infofile )
|
||||
puts("reading " + infofile) if $DEBUG
|
||||
f = File.new( infofile )
|
||||
lines=f.readlines
|
||||
f.close
|
||||
info_title=""
|
||||
info_short=""
|
||||
info_desc=""
|
||||
lines.each do |l|
|
||||
if l[0,2]=="T "
|
||||
info_title=l[2..l.size].chop
|
||||
elsif l[0,2]=="S "
|
||||
info_short=l[2..l.size].chop
|
||||
elsif l[0,2]=="D "
|
||||
ld=l.size
|
||||
ld=80 if l.size > 80
|
||||
info_desc=l[2..ld].chop
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
puts(info_title) if $DEBUG
|
||||
puts(info_short) if $DEBUG
|
||||
puts(info_desc) if $DEBUG
|
||||
|
||||
case CMD
|
||||
when "ShortToName" :
|
||||
RenameRec(num, dir, info_short)
|
||||
when "DirToName" :
|
||||
if dir_parent.size>0
|
||||
RenameRec(num, "", dir.chop)
|
||||
end
|
||||
when "DescToName" :
|
||||
RenameRec(nu, dir, info_desc)
|
||||
end
|
||||
4
vdrrecren_start
Executable file
4
vdrrecren_start
Executable file
@@ -0,0 +1,4 @@
|
||||
#!/bin/sh
|
||||
|
||||
echo "/usr/local/bin/vdrrecren $1 '$2' 2>&1 >> /tmp/vdrrecren.log" | at now
|
||||
echo "Command: /usr/local/bin/vdrrecren $1 '$2' 2>&1 >> /tmp/vdrrecren.log" >> /tmp/vdrrecren.log
|
||||
12
zeit.sh
Normal file → Executable file
12
zeit.sh
Normal file → Executable file
@@ -1,6 +1,6 @@
|
||||
#!/bin/bash
|
||||
|
||||
destdir=~/tmp/zeit
|
||||
destdir=/dat/books/zeit
|
||||
|
||||
user=mh256
|
||||
pw=zeit0815
|
||||
@@ -17,22 +17,24 @@ tmpfile_bl=/tmp/zeit_bl.tmp
|
||||
|
||||
[ -d $destdir ] || mkdir -p $destdir
|
||||
cd $destdir
|
||||
|
||||
# links zum Download des pdf und epub ermitteln
|
||||
wget --user=$user --password=$pw $url -O $tmpfile
|
||||
pdf_url=$(cat $tmpfile | grep Download | head -n 1 | sed -r 's/href=.(.*pdf).*/\1/')
|
||||
epub_url=$(cat $tmpfile | grep content.*Download | awk -F "\"" '{print $2}')
|
||||
|
||||
# Nummer des Ausgabe zum umbenennen des epub ermitteln
|
||||
number=$(echo $pdf_url | sed -r 's/^.*DZ_ePaper_(.*)\.pdf/\1/' | awk -F_ '{ printf("%s-%s",$2,$1)}' )
|
||||
|
||||
# links zum download von Beilage und Zeitmagazin ermitteln
|
||||
wget --user=$user --password=$pw $url_zm -O $tmpfile_zm
|
||||
pdfzm_url=$(cat $tmpfile_zm | grep Download | head -n 1 | sed -r 's/href=.(.*pdf).*/\1/')
|
||||
wget --user=$user --password=$pw $url_bl -O $tmpfile_bl
|
||||
pdfbl_url=$(cat $tmpfile_bl | grep Download | head -n 1 | sed -r 's/href=.(.*pdf).*/\1/')
|
||||
|
||||
# alles herunterladen
|
||||
wget --user=$user --password=$pw $epub_url -O die_zeit_20$number.epub
|
||||
wget --user=$user --password=$pw "$url_base/$pdf_url"
|
||||
wget --user=$user --password=$pw "$url_base/$pdfzm_url"
|
||||
wget --user=$user --password=$pw "$url_base/$pdfbl_url"
|
||||
|
||||
# Temp-files loeschen
|
||||
rm $tmpfile $tmpfile_zm $tmpfile_bl
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user