class U3d::UnityVersions::LinuxVersions

Constants

JSON_OS

Attributes

unity_forums[RW]

Public Class Methods

list_available() click to toggle source
# File lib/u3d/unity_versions.rb, line 200
def list_available
  UI.message 'Loading Unity releases'
  versions = @unity_forums.pagination_urls(UNITY_LINUX_DOWNLOADS).map do |page_url|
    list_available_from_page(@unity_forums, unity_forums.page_content(page_url))
  end.reduce({}, :merge)

  versions_fetcher = VersionsFetcher.new(pattern: LINUX_INSTALLER)
  versions.merge!(versions_fetcher.fetch_json('linux'))

  if versions.count.zero?
    UI.important 'Found no releases'
  else
    UI.success "Found #{versions.count} releases."
  end
  versions
end

Private Class Methods

list_available_from_page(unity_forums, data) click to toggle source
# File lib/u3d/unity_versions.rb, line 219
def list_available_from_page(unity_forums, data)
  versions = {}

  data.scan(LINUX_DOWNLOAD_DATED) do |capt|
    versions[capt[1]] = capt[0]
  end

  data.scan(LINUX_DOWNLOAD) do |capt|
    versions[capt[2]] = capt[0]
  end

  data.scan(LINUX_DOWNLOAD_RECENT_PAGE) do |page|
    url = page[0]
    page_body = unity_forums.page_content(url)
    capt = page_body.match(LINUX_DOWNLOAD_RECENT_FILE)
    if capt && capt[1] && capt[2]
      ver = capt[2].delete('x')
      UI.important "Version #{ver} does not match standard Unity versions" unless ver =~ Utils::UNITY_VERSION_REGEX
      versions[ver] = capt[1]
    else
      capt = page_body.match(LINUX_DOWNLOAD)
      # newer version of unity on linux support ini files
      # http://beta.unity3d.com/download/3c89f8d277f5/unity-2017.3.0f1-linux.ini
      if capt && capt[1] && capt[3]
        ver = capt[3]
        UI.verbose("Linux version #{ver}. Could not retrieve a fitting file from #{url}. Assuming ini file present")
        versions[ver] = capt[1]
      else
        UI.important("Could not retrieve a fitting file from #{url}.")
      end
    end
  end

  versions
end