Minetest/update.pl

86 lines
No EOL
2.4 KiB
Perl

#!/usr/bin/perl
# This was a bash script until I determined the level of invoking the ancient gods of the console required to make
# that work would be just too much
use Storable;
#use Data::Dumper;
# I know declaring a empty hash is 100% unnessecary but I am anyway
%conf = {}; # this will be stored used to keep track of stuff
$updfile = "index.json"; # I could use JSON here, but it might be easier to abuse jq
$updlsturl = "https://content.minetest.net/api/packages/"; # give use a json file of everything available
$modpath = "/home/kake26/.var/app/net.minetest.Minetest/.minetest/mods/"; # where your server stores its mods
sub chk_update () {
print "Checking for updates...\n";
foreach my $key (keys %{ $conf->{"mods"}}) { # the fing arrow -> sigh could have saved so much time
print "Checking mod $key \n";
# So we can now check against index2.json
$author2 = `jq -c '.[] | select(.name =="$key") | .author' index2.json`;
$author2 =~ s/\"//g;
$release2 = `jq -c '.[] | select(.name =="$key") | .release' index2.json`;
$release2 =~ s/\"//g;
chomp($author2);
chomp($release2);
if ($conf->{"mods"}{$key}{"release"} != $release2) {
print "Mod $key current release: " . $release2 . " installed: " . $conf->{"mods"}{$key}{"release"} ."!\n";
}else{
print "Mod $key up to date\n";
}
}
}
sub get_ready (){
$mods = `find $modpath -maxdepth 1 -type d -print`; # -print is there for a reason, find saved a huge amount of time
@mods = split("\n",$mods);
foreach(@mods){
@tmods = split("\/",$_);
$tmname = pop(@tmods);
if ($tmname eq "mods"){
next;
}
# At this point we should have a mod's name
$author = `jq -c '.[] | select(.name =="$tmname") | .author' index.json`; #jq is a time saver
$author =~ s/\"//g;
chomp($author);
$release = `jq -c '.[] | select(.name =="$tmname") | .release' index.json`;
$release =~ s/\"//g;
chomp($release);
$conf{"mods"}{$tmname}{"author"} = $author;
$conf{"mods"}{$tmname}{"release"} = $release;
}
store \%conf, 'mods';
return;
}
sub get_file () {
# get the
system("wget -O index2.json $updlsturl");
return;
}
sub do_update () {
}
if (-e "mods"){
# load data
print "Loading data\n";
$conf = retrieve('mods');
chk_update();
}else{
get_ready();
# chk_update expects a hash retrived from storables so program needs to be run again after this
#chk_update();
}