105 lines
2.4 KiB
Perl
105 lines
2.4 KiB
Perl
#!/perl -w
|
|
use warnings;
|
|
use File::Slurp qw(:std);
|
|
use File::stat;
|
|
use File::Path;
|
|
use Archive::Zip; # imports
|
|
# use IO::Socket::SSL;
|
|
use LWP::UserAgent;
|
|
use Data::Printer;
|
|
use Crypt::SSLeay;
|
|
use Net::SSL;
|
|
|
|
$ENV{PERL_NET_HTTPS_SSL_SOCKET_CLASS} = "Net::SSL";
|
|
$ENV{PERL_LWP_SSL_VERIFY_HOSTNAME} = 0;
|
|
|
|
my $delzip = 0;
|
|
my @folders = (
|
|
'D:\\vsc\\vsc-insider\\',
|
|
'D:\\vsc\\vsc-insider-local\\',
|
|
'D:\\vsc\\vsc-insider-home\\'
|
|
);
|
|
|
|
|
|
# löschen aller Cached Dateien und Unterordner
|
|
my @cacheddir = qw(Cache GPUCache CachedData CachedData-x64);
|
|
|
|
my $downloadfolder = 'D:\\Downloads\\';
|
|
|
|
my $url = 'https://code.visualstudio.com/sha/download?build=insider&os=win32-x64-archive';
|
|
my $filename = 'VSCode-win32-x64-last-insider.zip';
|
|
|
|
#if ( -e $downloadfolder.$filename ) {
|
|
# print "entferne $downloadfolder$filename\n";
|
|
# unlink("$downloadfolder.$filename");
|
|
#}
|
|
|
|
print "downloade neue VS-Code-Insider Version\n";
|
|
my $ua = LWP::UserAgent->new(timeout => 10);
|
|
$ua->max_redirect( 2 );
|
|
$ua->agent('Mozilla/5.0');
|
|
$ua->show_progress( 1 );
|
|
my $response = $ua->get($url, ':content_file' => $downloadfolder.$filename);
|
|
|
|
if ( -e $downloadfolder.$filename ) {
|
|
for my $fold ( @folders ) {
|
|
opendir (my $dh, $fold);
|
|
print "$fold --> ";
|
|
my @fol = readdir $dh;
|
|
|
|
my $test = 1;
|
|
if ( -e $fold.'Code - Insiders.exe' ) {
|
|
$test = unlink($fold.'Code - Insiders.exe');
|
|
}
|
|
|
|
if ( $test == 1 ) {
|
|
for my $d ( @fol ) {
|
|
if ( $d =~ /^\.|^\.\./ ) {
|
|
next;
|
|
}
|
|
|
|
if ( -d "$fold$d" ) {
|
|
if ( $d ne 'data' ) {
|
|
rmtree("$fold$d");
|
|
} else {
|
|
# Cache löschen
|
|
print "leere";
|
|
for my $cdir ( @cacheddir ) {
|
|
print " $cdir";
|
|
rmtree( "$fold$d\\user-data\\$cdir", {keep_root => 1} );
|
|
}
|
|
}
|
|
} else{
|
|
unlink("$fold$d");
|
|
}
|
|
}
|
|
print "--> geloescht, Userdaten behalten\n";
|
|
$delzip++;
|
|
}
|
|
}
|
|
|
|
my $obj = Archive::Zip->new(); # new instance
|
|
my $status = $obj->read("$downloadfolder$filename"); # read file contents
|
|
|
|
if ($status != 0) {
|
|
die('Error in file!');
|
|
} else {
|
|
if ( scalar @folders == $delzip ) {
|
|
for my $f ( @folders ) {
|
|
print "entpacke neue Version in $f\n";
|
|
$obj->extractTree(undef, $f); # extract files
|
|
}
|
|
unlink("$downloadfolder$filename");
|
|
print "zip datei von VSCode gelöscht\n";
|
|
} else {
|
|
print "zip nicht gelöscht da nicht alle Ordner verarbeitet wurden\n";
|
|
}
|
|
}
|
|
} else {
|
|
print "keine neue Version gefunden\n";
|
|
}
|
|
|
|
system("pause");
|
|
|
|
1;
|