Class: U3d::UnityVersions::LinuxVersions

Inherits:
Object
  • Object
show all
Defined in:
lib/u3d/unity_versions.rb

REGEX: expressions to interpret data collapse

Class Method Details

.list_availableObject



90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
# File 'lib/u3d/unity_versions.rb', line 90

def list_available
  UI.message 'Loading Unity releases'
  request = nil
  response = nil
  data = ''
  uri = URI(UNITY_LINUX_DOWNLOADS)
  Net::HTTP.start(uri.host, uri.port, use_ssl: true) do |http|
    request = Net::HTTP::Get.new uri
    request['Connection'] = 'keep-alive'
    response = http.request request

    case response
    when Net::HTTPSuccess then
      # Successfully retrieved forum content
      data = response.body
    when Net::HTTPRedirection then
      # A session must be opened with the server before accessing forum
      res = nil
      cookie_str = ''
      # Store the name and value of the cookies returned by the server
      response['set-cookie'].gsub(/\s+/, '').split(',').each do |c|
        cookie_str << c.split(';', 2)[0] + '; '
      end
      cookie_str.chomp!('; ')

      # It should be the Unity register API
      uri = URI(response['location'])
      Net::HTTP.start(uri.host, uri.port, use_ssl: true) do |http_api|
        request = Net::HTTP::Get.new uri
        request['Connection'] = 'keep-alive'
        res = http_api.request request
      end

      raise 'Unexpected result' unless res.is_a? Net::HTTPRedirection
      # It should be a redirection to the forum to perform authentication
      uri = URI(res['location'])

      request = Net::HTTP::Get.new uri
      request['Connection'] = 'keep-alive'
      request['Cookie'] = cookie_str

      res = http.request request

      raise 'Unable to establish a session with Unity forum' unless res.is_a? Net::HTTPRedirection

      cookie_str << '; ' + res['set-cookie'].gsub(/\s+/, '').split(';', 2)[0]

      uri = URI(res['location'])

      request = Net::HTTP::Get.new uri
      request['Connection'] = 'keep-alive'
      request['Cookie'] = cookie_str

      res = http.request request

      data = res.body if res.is_a? Net::HTTPSuccess
    else raise "Request failed with status #{response.code}"
    end
  end
  data.gsub(/[ \t]+/, '').each_line { |l| puts l if /<a href=/ =~ l }
  versions = {}
  results = data.scan(LINUX_DOWNLOAD)
  results.each do |capt|
    versions[capt[1]] = capt[0]
  end
  if versions.count.zero?
    UI.important 'Found no releases'
  else
    UI.success "Found #{versions.count} releases."
  end
  versions
end