## --- BEGIN LICENSE BLOCK --- # Copyright (c) 2016-present WeWantToKnow AS # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. ## --- END LICENSE BLOCK --- require 'inifile' require 'u3d/utils' require 'u3d_core/helper' module U3d # Backwards compatibility module INIParser class << self def method_missing(method_name, *arguments, &block) UI.deprecated 'INIParser is obsolete, Use INIModulesParser instead' if INIModulesParser.respond_to?(method_name) INIModulesParser.send(method_name, *arguments, &block) else super end end def respond_to?(method_name, include_private = false) UI.deprecated 'INIParser is obsolete, Use INIModulesParser instead' INIModulesParser.respond_to?(method_name, include_private) end def respond_to_missing?(method_name, include_private = false) UI.deprecated 'INIParser is obsolete, Use INIModulesParser instead' INIModulesParser.respond_to_missing?(method_name, include_private) end end end # Load and parse INI files module INIModulesParser ##################################################### # @!group INI parameters to load and save ini files ##################################################### INI_NAME = 'unity-%s-%s.ini'.freeze class << self def load_ini(version, cached_versions, os: U3dCore::Helper.operating_system, offline: false) os = if os == :mac 'osx' else os.id2name end ini_name = format(INI_NAME, version: version, os: os) Utils.ensure_dir(default_ini_path) ini_path = File.expand_path(ini_name, default_ini_path) unless File.file?(ini_path) && File.size(ini_path) > 0 raise "INI file does not exist at #{ini_path}" if offline download_ini(version, cached_versions, os, ini_name, ini_path) end begin result = IniFile.load(ini_path).to_h rescue StandardError => e raise "Could not parse INI data (#{e})" end result end def create_linux_ini(version, size, url) ini_name = format(INI_NAME, version: version, os: 'linux') Utils.ensure_dir(default_ini_path) ini_path = File.expand_path(ini_name, default_ini_path) return if File.file?(ini_path) && File.size(ini_path) > 0 data = %([Unity] ; -- NOTE -- ; This is not an official Unity file ; This has been created by u3d ; ---------- title=Unity size=#{size} url=#{url} ) write_ini_file(ini_path, data) end private def download_ini(version, cached_versions, os, ini_name, ini_path) # former urls for Linux pointed to unity-editor-installer.sh directlry if os == 'linux' && cached_versions[version] =~ /.*.sh$/ UI.verbose "No INI on server. Faking one by finding out package size for version #{version}" url = cached_versions[version] size = Utils.get_url_content_length(url) if size create_linux_ini(version, size, url) else UI.important "u3d tried to get the size of the installer for version #{version}, but wasn't able to" end return end uri = URI(cached_versions[version] + ini_name) UI.verbose("Searching for ini file at #{uri}") data = Net::HTTP.get(uri) data.tr!("\"", '') data.gsub!(/Note:.+\n/, '') write_ini_file(ini_path, data) end def write_ini_file(ini_path, data) File.open(ini_path, 'wb') do |f| f.write(data) end end def default_ini_path File.join(U3dCore::Helper.data_path, 'ini_files') end end end end