diff --git a/src/define.sh b/src/define.sh index 9da1979..31df027 100644 --- a/src/define.sh +++ b/src/define.sh @@ -436,7 +436,7 @@ printVersion() { "tiny11"* ) desc="Tiny 11" ;; "tiny10"* ) desc="Tiny 10" ;; "core11"* ) desc="Core 11" ;; - "nano11"* ) desc="Nano 11" ;; + "nano11"* ) desc="Nano 11" ;; "win7"* ) desc="Windows 7" ;; "win8"* ) desc="Windows 8" ;; "win10"* ) desc="Windows 10" ;; @@ -577,7 +577,7 @@ fromFile() { ;; "nano11"* | "nano_11"* ) id="nano11" - ;; + ;; "tiny11core"* | "tiny11_core"* | "tiny_11_core"* ) id="core11" ;; @@ -1885,10 +1885,6 @@ skipVersion() { return 1 } -isCompatible() { - return 0 -} - setMachine() { local id="$1" diff --git a/src/mido.sh b/src/mido.sh index dba6dfb..a6dada2 100644 --- a/src/mido.sh +++ b/src/mido.sh @@ -364,36 +364,6 @@ getWindows() { return 0 } -getBuild() { - - local id="$1" - local ret="$2" - local url="" - local name="" - local build="$3" - local edition="" - local file="catalog.xml" - - case "${id,,}" in - "win11${PLATFORM,,}" ) - name="Windows 11 Pro" - url="https://worproject.com/dldserv/esd/getcatalog.php?build=${build}&arch=${PLATFORM^^}&edition=Professional" ;; - "win11${PLATFORM,,}-enterprise" | "win11${PLATFORM,,}-enterprise-eval") - name="Windows 11 Enterprise" - url="https://worproject.com/dldserv/esd/getcatalog.php?build=${build}&arch=${PLATFORM^^}&edition=Enterprise" ;; - esac - - case "${ret,,}" in - "url" ) echo "$url" ;; - "file" ) echo "$file" ;; - "name" ) echo "$name" ;; - "edition" ) echo "$edition" ;; - *) echo "";; - esac - - return 0 -} - getCatalog() { local id="$1" @@ -401,12 +371,6 @@ getCatalog() { local url="" local name="" local edition="" - local file="catalog.cab" - - if [[ "${id,,}" == "win11"* ]] && ! isCompatible; then - # ARMv8.0 cannot run Windows 11 builds higher than 22631 - getBuild "$1" "$2" "22631.2861" && return 0 - fi case "${id,,}" in "win11${PLATFORM,,}" ) @@ -429,9 +393,8 @@ getCatalog() { case "${ret,,}" in "url" ) echo "$url" ;; - "file" ) echo "$file" ;; "name" ) echo "$name" ;; - "edition" ) echo '[Edition="'"${edition}"'"]' ;; + "edition" ) echo "$edition" ;; *) echo "";; esac @@ -444,71 +407,62 @@ getESD() { local version="$2" local lang="$3" local desc="$4" - local file local result local culture local language - local edition - local catalog + local editionName + local winCatalog - file=$(getCatalog "$version" "file") - catalog=$(getCatalog "$version" "url") culture=$(getLanguage "$lang" "culture") - edition=$(getCatalog "$version" "edition") + winCatalog=$(getCatalog "$version" "url") + editionName=$(getCatalog "$version" "edition") - if [ -z "$file" ] || [ -z "$catalog" ]; then + if [ -z "$winCatalog" ] || [ -z "$editionName" ]; then error "Invalid VERSION specified, value \"$version\" is not recognized!" && return 1 fi - local msg="Downloading product information..." + local msg="Downloading product information from Microsoft server..." info "$msg" && html "$msg" rm -rf "$dir" mkdir -p "$dir" + local wFile="catalog.cab" local xFile="products.xml" local eFile="esd_edition.xml" local fFile="products_filter.xml" - { wget "$catalog" -O "$dir/$file" -q --timeout=30 --no-http-keep-alive; rc=$?; } || : + { wget "$winCatalog" -O "$dir/$wFile" -q --timeout=30 --no-http-keep-alive; rc=$?; } || : - msg="Failed to download $catalog" + msg="Failed to download $winCatalog" (( rc == 3 )) && error "$msg , cannot write file (disk full?)" && return 1 (( rc == 4 )) && error "$msg , network failure!" && return 1 (( rc == 8 )) && error "$msg , server issued an error response!" && return 1 (( rc != 0 )) && error "$msg , reason: $rc" && return 1 - if [[ "$file" == *".xml" ]]; then - - mv -f "$dir/$file" "$dir/$xFile" - - else - - cd "$dir" - - if ! cabextract "$file" > /dev/null; then - cd /run - error "Failed to extract $file!" && return 1 - fi + cd "$dir" + if ! cabextract "$wFile" > /dev/null; then cd /run - + error "Failed to extract $wFile!" && return 1 fi + cd /run + if [ ! -s "$dir/$xFile" ]; then - error "Failed to find $xFile in $file!" && return 1 + error "Failed to find $xFile in $wFile!" && return 1 fi - local edQuery='//File[Architecture="'${PLATFORM,,}'"]'"${edition}"'' + local edQuery='//File[Architecture="'${PLATFORM,,}'"][Edition="'${editionName}'"]' result=$(xmllint --nonet --xpath "${edQuery}" "$dir/$xFile" 2>/dev/null) if [ -z "$result" ]; then - edQuery='//File[Architecture="'${PLATFORM^^}'"]'"${edition}"'' - + edQuery='//File[Architecture="'${PLATFORM^^}'"][Edition="'${editionName}'"]' result=$(xmllint --nonet --xpath "${edQuery}" "$dir/$xFile" 2>/dev/null) if [ -z "$result" ]; then + desc=$(printEdition "$version" "$desc") language=$(getLanguage "$lang" "desc") error "No download link available for $desc!" && return 1 @@ -669,40 +623,25 @@ downloadFile() { return 1 } -delay() { - - local i - local delay="$1" - local msg="Will retry in X seconds..." - - info "${msg/X/$delay}" - - for i in $(seq "$delay" -1 1); do - html "${msg/X/$i}" - sleep 1 - done - - return 0 -} - downloadImage() { local iso="$1" local version="$2" local lang="$3" + local delay=5 local tried="n" local success="n" - local seconds="5" local url sum size base desc language + local msg="Will retry after $delay seconds..." if [[ "${version,,}" == "http"* ]]; then base=$(basename "$iso") desc=$(fromFile "$base") - rm -f "$iso" + rm -f "$iso" downloadFile "$iso" "$version" "" "" "" "$desc" && return 0 - delay "$seconds" + info "$msg" && html "$msg" && sleep "$delay" downloadFile "$iso" "$version" "" "" "" "$desc" && return 0 rm -f "$iso" @@ -732,7 +671,7 @@ downloadImage() { if getWindows "$version" "$lang" "$desc"; then success="y" else - delay "$seconds" + info "$msg" && html "$msg" && sleep "$delay" getWindows "$version" "$lang" "$desc" && success="y" fi @@ -740,9 +679,9 @@ downloadImage() { size=$(getMido "$version" "$lang" "size" ) sum=$(getMido "$version" "$lang" "sum") - rm -f "$iso" + rm -f "$iso" downloadFile "$iso" "$MIDO_URL" "$sum" "$size" "$lang" "$desc" && return 0 - delay "$seconds" + info "$msg" && html "$msg" && sleep "$delay" downloadFile "$iso" "$MIDO_URL" "$sum" "$size" "$lang" "$desc" && return 0 rm -f "$iso" fi @@ -762,7 +701,7 @@ downloadImage() { if getESD "$TMP/esd" "$version" "$lang" "$desc"; then success="y" else - delay "$seconds" + info "$msg" && html "$msg" && sleep "$delay" getESD "$TMP/esd" "$version" "$lang" "$desc" && success="y" fi @@ -771,7 +710,7 @@ downloadImage() { rm -f "$ISO" downloadFile "$ISO" "$ESD" "$ESD_SUM" "$ESD_SIZE" "$lang" "$desc" && return 0 - delay "$seconds" + info "$msg" && html "$msg" && sleep "$delay" downloadFile "$ISO" "$ESD" "$ESD_SUM" "$ESD_SIZE" "$lang" "$desc" && return 0 rm -f "$ISO" ISO="$iso" @@ -788,14 +727,14 @@ downloadImage() { if [[ "$tried" != "n" ]]; then info "Failed to download $desc, will try another mirror now..." fi - + tried="y" size=$(getSize "$i" "$version" "$lang") sum=$(getHash "$i" "$version" "$lang") - rm -f "$iso" + rm -f "$iso" downloadFile "$iso" "$url" "$sum" "$size" "$lang" "$desc" && return 0 - delay "$seconds" + info "$msg" && html "$msg" && sleep "$delay" downloadFile "$iso" "$url" "$sum" "$size" "$lang" "$desc" && return 0 rm -f "$iso" fi