mirror of
https://github.com/cyberarm/w3d_hub_linux_launcher.git
synced 2025-12-16 09:12: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:
@@ -30,7 +30,7 @@ class W3DHub
|
||||
|
||||
def parse_files
|
||||
@document.root.elements.each("//File") do |element|
|
||||
@files.push(ManifestFile.new(element))
|
||||
@files.push(ManifestFile.new(element, @version))
|
||||
end
|
||||
end
|
||||
|
||||
@@ -42,9 +42,9 @@ class W3DHub
|
||||
|
||||
# TODO: Support patches
|
||||
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
|
||||
|
||||
@name = @data["name"]
|
||||
@@ -58,6 +58,8 @@ class W3DHub
|
||||
@from = patch["from"]
|
||||
@package = patch["package"]
|
||||
end
|
||||
|
||||
@version = version
|
||||
end
|
||||
|
||||
def removed?
|
||||
|
||||
@@ -224,7 +224,9 @@ class W3DHub
|
||||
|
||||
@status.step = :build_package_list
|
||||
|
||||
files = []
|
||||
packages = []
|
||||
deleted_files = [] # TODO: remove removed files
|
||||
|
||||
manifests.reverse.each do |manifest|
|
||||
logger.info(LOG_TAG) { "#{manifest.game}-#{manifest.type}: #{manifest.version} (#{manifest.base_version})" }
|
||||
@@ -232,32 +234,36 @@ class W3DHub
|
||||
manifest.files.each do |file|
|
||||
@files["#{file.name}:#{manifest.version}"] = file
|
||||
|
||||
next if file.removed? # No package data
|
||||
|
||||
# if file.patch?
|
||||
# fail!("#{@application.name} requires patches. Patching is not yet supported.")
|
||||
# break
|
||||
# end
|
||||
|
||||
next if packages.detect do |pkg|
|
||||
pkg.category == "games" &&
|
||||
pkg.subcategory == @app_id &&
|
||||
pkg.name == file.package &&
|
||||
pkg.version == manifest.version
|
||||
if file.removed? # No package data
|
||||
files.delete_if { |f| f.name == file.name }
|
||||
deleted_files.push(file)
|
||||
next
|
||||
end
|
||||
|
||||
packages.push(
|
||||
Api::Package.new(
|
||||
{ category: "games", subcategory: @app_id, name: file.package, version: manifest.version }
|
||||
)
|
||||
)
|
||||
files.delete_if { |f| f.name == file.name } unless file.patch?
|
||||
|
||||
packages.last.is_patch = file if file.patch?
|
||||
files.push(file)
|
||||
end
|
||||
|
||||
# TODO: Dependencies
|
||||
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
|
||||
end
|
||||
|
||||
@@ -326,6 +332,7 @@ class W3DHub
|
||||
selected_packages = []
|
||||
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|
|
||||
next if selected_packages_hash["#{hash[:file].package}_#{hash[:manifest_version]}"]
|
||||
|
||||
|
||||
Reference in New Issue
Block a user