#!/bin/bash
# Copyright 2020 the V8 project authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

# The purpose of this script is to make it easy to download/update
# Visual Studio Code on Linux distributions where for whatever reason there
# is no good way to do so via the package manager.

# Version of this script: 2020.07.04

# Basic checking of arguments: want at least one, and it's not --help.
VERSION="$1"
[ -z "$VERSION" -o \
    "$VERSION" == "-h" -o \
    "$VERSION" == "--help" -o \
    "$VERSION" == "help" ] && {
  echo "Usage: $0 <version>"
  echo "<version> may be --auto for auto-detecting the latest available."
  exit 1
}

die() {
  echo "Error: $1"
  exit 1
}

if [ "$VERSION" == "--auto" -o "$VERSION" == "auto" ]; then
  echo "Searching online for latest available version..."
  # Where to find the latest available version (we assume that it's mentioned
  # in the first 1000 characters, which is true as of 2020-07).
  AVAILABLE_PACKAGES_URL="https://packages.microsoft.com/repos/vscode/dists/stable/main/binary-amd64/Packages"
  VERSION=$(curl "$AVAILABLE_PACKAGES_URL" --range 0-1000 --silent \
            | grep "^Version: " \
            | sed 's/[^0-9]*\([0-9.]*\).*/\1/')
  if [ -z "$VERSION" ]; then
    die "Detecting latest version failed, please specify it manually."
  else
    echo "Latest version found: $VERSION"
  fi
fi

# Constant definitions for local paths. Edit these to your liking.
VSCODE_DIR="$HOME/vscode"
BACKUP_DIR="$HOME/vscode.prev"
DOWNLOADS_DIR="$HOME/Downloads"
DOWNLOAD_FILE="$DOWNLOADS_DIR/vscode-$VERSION.tar.gz"
DESKTOP_FILE_DIR="$HOME/.local/share/applications"
DESKTOP_FILE="$DESKTOP_FILE_DIR/code.desktop"

# Constant definitions for remote/upstream things. Might need to be updated
# when upstream changes things.
# Where to find the version inside VS Code's installation directory.
PACKAGE_JSON="$VSCODE_DIR/resources/app/package.json"
ICON="$VSCODE_DIR/resources/app/resources/linux/code.png"
# Where to download the archive.
DOWNLOAD_URL="https://update.code.visualstudio.com/$VERSION/linux-x64/stable"
CODE_BIN="$VSCODE_DIR/bin/code"

# Check for "code" in $PATH; create a symlink if we can find a good place.
SYMLINK=$(which code)
if [ -z "$SYMLINK" ]; then
  IFS=':' read -ra PATH_ARRAY <<< "$PATH"
  for P in "${PATH_ARRAY[@]}"; do
    if [ "$P" == "$HOME/bin" -o \
         "$P" == "$HOME/local/bin" -o \
         "$P" == "$HOME/.local/bin" ]; then
      LOCALBIN="$P"
      break
    fi
  done
  if [ -n "$LOCALBIN" ]; then
    echo "Adding symlink to $LOCALBIN..."
    if [ ! -d "$LOCALBIN" ]; then
      mkdir -p "$LOCALBIN" || die "Failed to create $LOCALBIN."
    fi
    ln -s "$CODE_BIN" "$LOCALBIN/code" || die "Failed to create symlink."
  else
    echo "Please put a symlink to $CODE_BIN somewhere on your \$PATH."
  fi
fi

if [ ! -r "$DESKTOP_FILE" ]; then
  echo "Creating .desktop file..."
  mkdir -p "$DESKTOP_FILE_DIR" || die "Failed to create .desktop directory."
  cat <<EOF > "$DESKTOP_FILE"
#!/usr/bin/env xdg-open
[Desktop Entry]
Name=Visual Studio Code
Comment=Code Editing. Redefined.
GenericName=Text Editor
Exec=$CODE_BIN --unity-launch %F
Icon=$ICON
Type=Application
StartupNotify=false
StartupWMClass=Code
Categories=Utility;TextEditor;Development;IDE;
MimeType=text/plain;inode/directory;
Actions=new-empty-window;
Keywords=vscode;

X-Desktop-File-Install-Version=0.24

[Desktop Action new-empty-window]
Name=New Empty Window
Exec=$CODE_BIN --new-window %F
Icon=$ICON
EOF
  chmod +x "$DESKTOP_FILE" || die "Failed to make .desktop file executable."
fi

# Find currently installed version.
if [ -d "$VSCODE_DIR" ]; then
  if [ ! -r "$PACKAGE_JSON" ]; then
    die "$PACKAGE_JSON file not found, this script must be updated."
  fi
  INSTALLED=$(grep '"version":' "$PACKAGE_JSON" \
              | sed 's/[^0-9]*\([0-9.]*\).*/\1/')
  echo "Detected installed version: $INSTALLED"
  if [ "$VERSION" == "$INSTALLED" ] ; then
    echo "You already have that version."
    exit 0
  else
    echo "Updating from $INSTALLED to $VERSION..."
  fi
fi

if [ ! -r "$DOWNLOAD_FILE" ]; then
  echo "Downloading..."
  if [ ! -d "$DOWNLOADS_DIR" ]; then
    mkdir -p "$DOWNLOADS_DIR" || die "Failed to create $DOWNLOADS_DIR."
  fi
  wget "$DOWNLOAD_URL" -O "$DOWNLOAD_FILE" || die "Downloading failed."
else
  echo "$DOWNLOAD_FILE already exists; delete it to force re-download."
fi

echo "Extracting..."
TAR_DIR=$(tar -tf "$DOWNLOAD_FILE" | head -1)
[ -z "$TAR_DIR" ] && die "Couldn't read archive."
TMP_DIR=$(mktemp -d)
tar -C "$TMP_DIR" -xf "$DOWNLOAD_FILE" || {
  rm -rf "$TMP_DIR"
  die "Extracting failed."
}

if [ -d "$BACKUP_DIR" ]; then
  echo "Deleting previous backup..."
  rm -rf "$BACKUP_DIR"
fi

if [ -d "$VSCODE_DIR" ]; then
  echo "Moving previous installation..."
  mv "$VSCODE_DIR" "$BACKUP_DIR"
fi

echo "Installing new version..."
mv "$TMP_DIR/$TAR_DIR" "$VSCODE_DIR"
rmdir "$TMP_DIR"

echo "All done, enjoy coding!"
