#!/usr/bin/perl
#
#  A ajouter dans /etc/crontab
#  49 2,5,8,11,14,17,20,23 * * * perl /usr/local/bin/clouds.pl
#49 2,5,8,11,14,17,20,23 * * * mathieu  perl /usr/local/bin/clouds.pl > /home/mathieu/xplanetclouds.log
# ------------------------------------------------------------------------------------
#  Program for downloading XPlanet cloud images from a random mirror
# 
#  Copyright (c) 2003, cueSim Ltd.                  http://www.cueSim.com, Bedford, UK
#  
# ------------------------------------------------------------------------------------
#  
#  Redistribution and use, with or without modification, are permitted provided 
#  that the following conditions are met:
#  
#      * Redistributions of source code must retain the above copyright notice, 
#     this list of conditions and the following disclaimer.
#      * Neither the cueSim name nor the names of its contributors may 
#     be used to endorse or promote products derived from this software without 
#     specific prior written permission.
#  
#  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY 
#  EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 
#  OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT 
#  SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
#  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT 
#  OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 
#  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 
#  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 
#  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# 
# (2005-06) hacked by mose at nguild.org for personal use on a debian SID
# (2008-08) hacked by benhaim_jerome at yahoo.fr for personal use on a ubuntu Hardy
 
use LWP::Simple;
 
# Options:
#  - ou sauvegarder l'image des nuages (par defaut le répertoire courant)
# 
 
my $Filename = "/home/mathieu/.xplanet/images/clouds.jpg";
 
# - fréquences de mise à jour de l'image sur le serveur
my $MaxDownloadFrequencyHours = 2;
 
# - Combien d'essais, si le serveur ne répond pas 
my $MaxRetries = 3;
 
## Note: excessive requests to a single image server is discouraged.
## This script limits max retries, does not download more frequently
## than every two hours (the file is generated every 3 hours). and 
## picks a random mirror location for every download.
##
## Changer les paramètres risque de vous exclure (blacklisted)
## des serveurs d'images
 
if(-f $Filename) {
  my @Stats = stat($Filename);
  my $FileAge = (time() - $Stats[9]);
  my $FileSize = $Stats[7];
  if($FileAge < 60 * 60 * $MaxDownloadFrequencyHours && $FileSize > 400000) {
    print "File is already up to date\n";
    exit(1);
  }
}
 
for(1..$MaxRetries) {
  my $MirrorURL = GetRandomMirror();
  print "Using $MirrorURL\nDownloading...\n";
  my $Response = getstore($MirrorURL, $Filename);
  if( IndicatesSuccess($Response)) {
    print "Finished: file successfully downloaded to $Filename\n";
    exit(0);
  }
  print "Download not available, trying another website\n\n";
}
print "ERROR: Tried to download the file $MaxRetries times, but no servers could provide the file\n";
exit(2);
 
sub IndicatesSuccess() {
  my $Response = shift();
  if($Response =~ /2\d\d/) {
    return(1); 
  } else {
    return(0);
  } 
} 
## Liste des serveurs miroir
sub GetRandomMirror() {
  my @Mirrors = (
     "http://xplanet.arculeo.com/clouds_2048.jpg",
     "http://xplanet.sourceforge.net/clouds/clouds_2048.jpg",
     "http://www.ruwenzori.net/earth/clouds_2048.jpg",
     "http://xplanet.dyndns.org/clouds/clouds_2048.jpg",
     "http://userpage.fu-berlin.de/~jml/clouds_2048.jpg",
     "http://userpage.fu-berlin.de/~jml/clouds_4096.jpg",
     "http://php.nctu.edu.tw/~ijliao/clouds_2048.jpg",
     "http://home.megapass.co.kr/~gitto88/cloud_data/clouds_2048.jpg",
     "http://home.megapass.co.kr/~holywatr/cloud_data/clouds_2048.jpg",
     "ftp://ftp.iastate.edu/pub/xplanet/clouds_2048.jpg",
     "http://xplanet.explore-the-world.net/clouds_2048.jpg",
     "ftp://mirror.pacific.net.au/xplanet/clouds_2048.jpg",
     "http://www.narrabri.atnf.csiro.au/operations/NASA/clouds_2048.jpg",
  );
  return $Mirrors[rand scalar(@Mirrors)];
}
