mirror of
https://github.com/cyberarm/w3d_hub_linux_launcher.git
synced 2026-09-19 14:53:49 +00:00
More work on Task towards getting app installation workin'
This commit is contained in:
@@ -10,8 +10,8 @@ module W3DHubLauncher
|
|||||||
|
|
||||||
@game = root["game"]
|
@game = root["game"]
|
||||||
@type = root["type"]
|
@type = root["type"]
|
||||||
@version = root["version"]
|
@version = root["version"] ? Gem::Version.new(root["version"]) : nil
|
||||||
@base_version = root["baseVersion"]
|
@base_version = root["baseVersion"] ? Gem::Version.new(root["baseVersion"]) : nil
|
||||||
|
|
||||||
@files = []
|
@files = []
|
||||||
@dependencies = []
|
@dependencies = []
|
||||||
@@ -49,7 +49,7 @@ module W3DHubLauncher
|
|||||||
@name = @data["name"]
|
@name = @data["name"]
|
||||||
@checksum = @data["checksum"]
|
@checksum = @data["checksum"]
|
||||||
@package = @data["package"]
|
@package = @data["package"]
|
||||||
@removed_since = @data["removedsince"]
|
@removed_since = @data["removedsince"] ? Gem::Version.new(@data["removedsince"]) : nil
|
||||||
|
|
||||||
xml.elements.each("Patch") do |patch|
|
xml.elements.each("Patch") do |patch|
|
||||||
@patch = true
|
@patch = true
|
||||||
@@ -63,7 +63,7 @@ module W3DHubLauncher
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@version = version
|
@version = version ? Gem::Version.new(version) : nil
|
||||||
end
|
end
|
||||||
|
|
||||||
def removed?
|
def removed?
|
||||||
|
|||||||
@@ -25,25 +25,91 @@ module W3DHubLauncher
|
|||||||
execute
|
execute
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def abort_task!(reason = "")
|
||||||
|
puts reason
|
||||||
|
|
||||||
|
raise reason
|
||||||
|
end
|
||||||
|
|
||||||
|
# high level methods
|
||||||
|
|
||||||
def fetch_manifests(version = @target_version)
|
def fetch_manifests(version = @target_version)
|
||||||
while (manifest = fetch_manifest(version))
|
while (manifest = fetch_manifest(version))
|
||||||
@manifests[version] = manifest
|
@manifests[version] = manifest
|
||||||
|
|
||||||
version = manifest.base_version
|
version = manifest.base_version
|
||||||
|
break unless version
|
||||||
|
break if manifest.full?
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def build_package_list
|
||||||
|
channel_manifests = []
|
||||||
|
version = @target_version
|
||||||
|
|
||||||
|
while(manifest = @manifests[version])
|
||||||
|
channel_manifests << manifest
|
||||||
|
|
||||||
|
break if manifest.full?
|
||||||
|
|
||||||
|
version = manifest.base_version
|
||||||
|
end
|
||||||
|
|
||||||
|
files = []
|
||||||
|
deleted_files = []
|
||||||
|
channel_manifests.reverse.each do |manifest|
|
||||||
|
manifest.files.each do |file|
|
||||||
|
if file.removed?
|
||||||
|
files.delete_if { |f| f.name.casecmp?(file.name) }
|
||||||
|
deleted_files << file
|
||||||
|
|
||||||
|
next
|
||||||
|
end
|
||||||
|
|
||||||
|
# remove files that are total replacements, not patches
|
||||||
|
files.delete_if { |f| f.name.casecmp?(file.name) } unless file.patch?
|
||||||
|
|
||||||
|
# add file to file list
|
||||||
|
files << file
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
pp [:files, files.map(&:name), :deleted_files, deleted_files.map(&:name)]
|
||||||
|
end
|
||||||
|
|
||||||
|
def remove_deleted_files
|
||||||
|
end
|
||||||
|
|
||||||
|
def verify_files
|
||||||
|
end
|
||||||
|
|
||||||
|
def fetch_packages
|
||||||
|
end
|
||||||
|
|
||||||
|
def install_packages
|
||||||
|
end
|
||||||
|
|
||||||
|
# helper functions
|
||||||
|
|
||||||
def fetch_manifest(version)
|
def fetch_manifest(version)
|
||||||
result = @worker.w3dhub_api.fetch_package_details([{category: "games", subcategory: @application.id, name: "manifest.xml", version: version }])
|
result = @worker.w3dhub_api.fetch_package_details([
|
||||||
|
{
|
||||||
|
category: "games",
|
||||||
|
subcategory: @application.id,
|
||||||
|
name: "manifest.xml",
|
||||||
|
version: version
|
||||||
|
}
|
||||||
|
])
|
||||||
|
|
||||||
return false unless result.okay?
|
return result unless result.okay?
|
||||||
|
|
||||||
response = JSON.parse(result.data)
|
response = JSON.parse(result.data)
|
||||||
pp response
|
package_details = response["packages"]&.map { |item| Worker::Api::LegacyManifestPackage.new(item) }&.first
|
||||||
pp package_details = response["packages"]&.map { |item| Worker::Api::LegacyManifestPackage.new(item) }&.first
|
|
||||||
|
|
||||||
return false unless package_details
|
if package_details.nil? || package_details.error?
|
||||||
return false if package_details.error?
|
pp package_details
|
||||||
|
abort_task!("Failed to fetch package details for manifest #{version}")
|
||||||
|
end
|
||||||
|
|
||||||
# FIXME: check if locally downloaded manifest is still valid, if present.
|
# FIXME: check if locally downloaded manifest is still valid, if present.
|
||||||
result = if package_details.download_url
|
result = if package_details.download_url
|
||||||
@@ -53,11 +119,11 @@ module W3DHubLauncher
|
|||||||
@worker.w3dhub_api.fetch_package("TODO")
|
@worker.w3dhub_api.fetch_package("TODO")
|
||||||
end
|
end
|
||||||
|
|
||||||
pp result
|
if result.okay?
|
||||||
|
return Worker::Api::LegacyManifest.new("manifest-#{version}.xml")
|
||||||
return Worker::Api::LegacyManifest.new("manifest-#{version}.xml") if result.okay?
|
else
|
||||||
|
abort_task!("Failed to fetch manifest #{version}")
|
||||||
false
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -11,15 +11,18 @@ module W3DHubLauncher
|
|||||||
# fetch manifests for currently installed version
|
# fetch manifests for currently installed version
|
||||||
# AND the target version so we can detect files that need to be removed
|
# AND the target version so we can detect files that need to be removed
|
||||||
# between versions
|
# between versions
|
||||||
manifests_result = fetch_manifests
|
fetch_manifests
|
||||||
abort_task!(manifests_result) unless manifests_result.okay?
|
|
||||||
|
|
||||||
package_list_result = build_package_list(manifests_result)
|
# build list of packages we'll need to download
|
||||||
abort_task!(package_list_result) unless package_list_result.okay?
|
build_package_list
|
||||||
|
|
||||||
# remove_deleted_files
|
|
||||||
|
|
||||||
verify_files
|
verify_files
|
||||||
|
|
||||||
|
fetch_packages
|
||||||
|
|
||||||
|
install_packages
|
||||||
|
|
||||||
|
remove_deleted_files
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user