mirror of
https://github.com/cyberarm/w3d_hub_linux_launcher.git
synced 2025-12-16 17:22:35 +00:00
Refactored Task#build_package_list to fix 'overdownloading' packages that then are replaced/no longer needed; FIXME: broke Repair task in the process.
This commit is contained in:
@@ -222,6 +222,7 @@ class W3DHub
|
|||||||
|
|
||||||
if response.status == 200
|
if response.status == 200
|
||||||
hash = JSON.parse(response.body, symbolize_names: true)
|
hash = JSON.parse(response.body, symbolize_names: true)
|
||||||
|
|
||||||
hash[:packages].map { |pkg| Package.new(pkg) }
|
hash[:packages].map { |pkg| Package.new(pkg) }
|
||||||
else
|
else
|
||||||
logger.error(LOG_TAG) { "Failed to fetch package details for:" }
|
logger.error(LOG_TAG) { "Failed to fetch package details for:" }
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ class W3DHub
|
|||||||
|
|
||||||
def parse_files
|
def parse_files
|
||||||
@document.root.elements.each("//File") do |element|
|
@document.root.elements.each("//File") do |element|
|
||||||
@files.push(ManifestFile.new(element))
|
@files.push(ManifestFile.new(element, @version))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -42,9 +42,9 @@ class W3DHub
|
|||||||
|
|
||||||
# TODO: Support patches
|
# TODO: Support patches
|
||||||
class ManifestFile
|
class ManifestFile
|
||||||
attr_reader :name, :checksum, :package, :removed_since, :from
|
attr_reader :name, :checksum, :package, :removed_since, :from, :version
|
||||||
|
|
||||||
def initialize(xml)
|
def initialize(xml, version)
|
||||||
@data = xml
|
@data = xml
|
||||||
|
|
||||||
@name = @data["name"]
|
@name = @data["name"]
|
||||||
@@ -58,6 +58,8 @@ class W3DHub
|
|||||||
@from = patch["from"]
|
@from = patch["from"]
|
||||||
@package = patch["package"]
|
@package = patch["package"]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@version = version
|
||||||
end
|
end
|
||||||
|
|
||||||
def removed?
|
def removed?
|
||||||
|
|||||||
@@ -224,7 +224,9 @@ class W3DHub
|
|||||||
|
|
||||||
@status.step = :build_package_list
|
@status.step = :build_package_list
|
||||||
|
|
||||||
|
files = []
|
||||||
packages = []
|
packages = []
|
||||||
|
deleted_files = [] # TODO: remove removed files
|
||||||
|
|
||||||
manifests.reverse.each do |manifest|
|
manifests.reverse.each do |manifest|
|
||||||
logger.info(LOG_TAG) { "#{manifest.game}-#{manifest.type}: #{manifest.version} (#{manifest.base_version})" }
|
logger.info(LOG_TAG) { "#{manifest.game}-#{manifest.type}: #{manifest.version} (#{manifest.base_version})" }
|
||||||
@@ -232,32 +234,36 @@ class W3DHub
|
|||||||
manifest.files.each do |file|
|
manifest.files.each do |file|
|
||||||
@files["#{file.name}:#{manifest.version}"] = file
|
@files["#{file.name}:#{manifest.version}"] = file
|
||||||
|
|
||||||
next if file.removed? # No package data
|
if file.removed? # No package data
|
||||||
|
files.delete_if { |f| f.name == file.name }
|
||||||
# if file.patch?
|
deleted_files.push(file)
|
||||||
# fail!("#{@application.name} requires patches. Patching is not yet supported.")
|
next
|
||||||
# break
|
|
||||||
# end
|
|
||||||
|
|
||||||
next if packages.detect do |pkg|
|
|
||||||
pkg.category == "games" &&
|
|
||||||
pkg.subcategory == @app_id &&
|
|
||||||
pkg.name == file.package &&
|
|
||||||
pkg.version == manifest.version
|
|
||||||
end
|
end
|
||||||
|
|
||||||
packages.push(
|
files.delete_if { |f| f.name == file.name } unless file.patch?
|
||||||
Api::Package.new(
|
|
||||||
{ category: "games", subcategory: @app_id, name: file.package, version: manifest.version }
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
packages.last.is_patch = file if file.patch?
|
files.push(file)
|
||||||
end
|
end
|
||||||
|
|
||||||
# TODO: Dependencies
|
# TODO: Dependencies
|
||||||
end
|
end
|
||||||
|
|
||||||
|
files.each do |file|
|
||||||
|
next if packages.detect do |pkg|
|
||||||
|
pkg.category == "games" &&
|
||||||
|
pkg.subcategory == @app_id &&
|
||||||
|
pkg.name == file.package &&
|
||||||
|
pkg.version == file.version
|
||||||
|
end
|
||||||
|
|
||||||
|
package = Api::Package.new({ category: "games", subcategory: @app_id, name: file.package, version: file.version })
|
||||||
|
|
||||||
|
package.is_patch = file if file.patch?
|
||||||
|
|
||||||
|
packages.push(package)
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
packages
|
packages
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -326,6 +332,7 @@ class W3DHub
|
|||||||
selected_packages = []
|
selected_packages = []
|
||||||
selected_packages_hash = {}
|
selected_packages_hash = {}
|
||||||
|
|
||||||
|
# FIXME: Refactoring `build_package_list` has broken this bit since we no longer fetch EVERYTHING and actually DON'T download REMOVED files
|
||||||
rejected_files.each do |hash|
|
rejected_files.each do |hash|
|
||||||
next if selected_packages_hash["#{hash[:file].package}_#{hash[:manifest_version]}"]
|
next if selected_packages_hash["#{hash[:file].package}_#{hash[:manifest_version]}"]
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user