module U3d::Downloader

Take care of downloading files and packages

Constants

DOWNLOAD_DIRECTORY

Name of the directory for the package downloading

DOWNLOAD_PATH

Path to the directory for the package downloading

UNITY_LANGUAGE_FILE_REGEX

Regex to get the name of a localization asset

UNITY_MODULE_FILE_REGEX

Regex to get the name of a package out of its file name

Public Class Methods

download_directory() click to toggle source
# File lib/u3d/downloader.rb, line 39
def download_directory
  File.expand_path(ENV['U3D_DOWNLOAD_PATH'] || File.join(DOWNLOAD_PATH, DOWNLOAD_DIRECTORY))
end
download_modules(definition, packages: []) click to toggle source

download packages

# File lib/u3d/downloader.rb, line 53
def download_modules(definition, packages: [])
  files = []
  validator, downloader = setup_os(definition.os)

  packages.each do |package|
    get_package(downloader, validator, package, definition, files)
  end
  files
end
fetch_modules(definition, packages: [], download: nil) click to toggle source

fetch modules and put them in local cache

# File lib/u3d/downloader.rb, line 44
def fetch_modules(definition, packages: [], download: nil)
  if download
    download_modules(definition, packages: packages)
  else
    local_files(definition, packages: packages)
  end
end
local_files(definition, packages: []) click to toggle source

find already downloaded packages

# File lib/u3d/downloader.rb, line 64
def local_files(definition, packages: [])
  files = []
  validator, downloader = setup_os(definition.os)

  packages.each do |package|
    path = downloader.destination_for(package, definition)
    if File.file?(path)
      if validator.validate(package, path, definition)
        files << [package, path, definition[package]]
      else
        UI.important "File present at #{path} is not correct, will not be used. Skipping #{package}"
      end
    else
      UI.error "No file has been downloaded for #{package}, or it has been moved from #{path}"
    end
  end

  files
end

Public Instance Methods

download_package(path, url, size: nil) click to toggle source
# File lib/u3d/downloader.rb, line 134
def download_package(path, url, size: nil)
  Utils.download_file(path, url, size: size)
rescue Interrupt => e
  # Ensure that the file is deleted if download is aborted
  File.delete path
  raise e
end
get_package(downloader, validator, package, definition, files) click to toggle source
# File lib/u3d/downloader.rb, line 104
def get_package(downloader, validator, package, definition, files)
  path, url = downloader.destination_and_url_for(package, definition)
  package_info = definition[package]
  if File.file?(path)
    UI.verbose "Installer file for #{package_info.name} seems to be present at #{path}"
    if validator.validate(package, path, definition)
      UI.message "#{package_info.name} is already downloaded"
      files << [package, path, package_info]
      return
    else
      extension = File.extname(path)
      new_path = File.join(File.dirname(path), File.basename(path, extension) + '_CORRUPTED' + extension)
      UI.important "File present at #{path} is not correct, it has been renamed to #{new_path}"
      File.rename(path, new_path)
    end
  end

  UI.header "Downloading #{package_info.name} version #{definition.version}"
  UI.message 'Downloading from ' + url.to_s.cyan.underline
  UI.message 'Download will be found at ' + path
  download_package(path, url, size: package_info.download_size)

  if validator.validate(package, path, definition)
    UI.success "Successfully downloaded #{package}."
    files << [package, path, package_info]
  else
    UI.error "Failed to download #{package}"
  end
end