#!/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;