#!/bin/sh --
# Title:    get-mozapps
# Purpose:  retrieve Mozilla application files, including latest versions
# Project:  CSC
# Author:   Stephen Dowdy (sdowdy@ucar.edu)

# REF: https://ftangftang.wordpress.com/2015/11/17/the-latest-on-firefoxreleaseslatest/

# URL Example= https://download.mozilla.org/?product=firefox-latest&os=win&lang=en-US
# product=firefox-latest|firefox-esr-latest|firefox-beta-latest|firefox-{version}
#         |thunderbird-latest|thunderbird-beta-latest|thunderbird-{version}
# os=win|win64|osx|linux|linux64
# lang=en-US|...

is_debug() { [ "${RAL_DEBUG:-0}" != 0 ] ;}
debug() { is_debug && printf "DEBUG: %s\n" "$@" 1>&2 ;}
error() { printf "ERROR: %s\n" "$@" 1>&2 ;}
warn() { printf "WARNING: %s\n" "$@" 1>&2 ;}

save_root=/src/Mozilla/auto/

if [ ! -d "${save_root}/" ]; then
    echo "Save Root directory \"${save_root}\" does not exist, aborting..."
    exit 1
fi

moz_proto="https"
moz_site="download.mozilla.org"
app_os="linux64"
app_lang="en-US"

latest_app_names="firefox-latest firefox-esr-latest firefox-beta-latest thunderbird-latest thunderbird-beta-latest"
latest_app_names="firefox-latest firefox-esr-latest thunderbird-latest"
app_names="${latest_app_names}"
curl_verbose="${RAL_VERBOSE:+--verbose}"

while [ $# -gt 0 ]; do
    case "${1}" in
        --product|--appname|-p)  shift; app_names="${1}" ;;
        --os|-o)  shift; app_os="${1}" ;;
        --lang|-l)  shift; app_lang="${1}" ;;
        *) error "Invalid command line argument ${1}."; exit 1 ;;
    esac
    shift
done

debug "app_names=${app_names}"
for app_name in ${app_names}; do
    echo "##   [APP=${app_name}]"
    app_dir="${app_name%-*}"
    app_save_dir="${save_root}/${app_dir}/${app_os}-${app_lang}"
    if [ ! -d "${app_save_dir}/" ]; then
        mkdir -p "${app_save_dir}/"
    fi

    app_url="${moz_proto}://${moz_site}/?product=${app_name}&os=${app_os}&lang=${app_lang}"
    debug "looking for ${app_url}"
    app_fname="$(curl ${curl_verbose} --silent --head "${app_url}" | sed -ne '/^Location:/{s/^.*\///;s/\r$//;p}')"
    if [ -z "${app_fname}" ]; then
        error "request app ${app_name} returned no response from server"
    else
        debug "got app_fname=[${app_fname}]"
        cd ${app_save_dir}/ || { echo "FAILED TO CD to ${app_save_dir}, aborting..." ; exit 1 ;}
        debug "I am in Directory $(pwd -P)"
        if [ -e "${app_fname}" ]; then
            debug "app file ${app_fname} already exists, skipping..."
        else
            echo "File ${app_fname} not already downloaded.  fetching..."
            debug "curl ${curl_verbose} --silent --location -o \"${app_fname}\" \"${app_url}\""
            if ! curl ${curl_verbose} --silent --location -o "${app_fname}" "${app_url}"; then
                error "curl download failed with rc=$?"
            fi
            echo "Download Location: ${app_save_dir}/${app_fname}"
        fi
    fi
done
