From 2cf81465535b504fd9ed8274cb41d6f2354681e7 Mon Sep 17 00:00:00 2001 From: Cyberarm Date: Fri, 11 Sep 2026 23:55:04 -0500 Subject: [PATCH] Initial work on manifest fetching and parsing --- .gitignore | 1 + lib/worker/api/legacy_manifest_package.rb | 5 +- lib/worker/task.rb | 96 ++++++++++++++--------- 3 files changed, 64 insertions(+), 38 deletions(-) diff --git a/.gitignore b/.gitignore index b25161a..c21f7f1 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ pkg/ *.json +*.xml data/cache/* !data/cache/.gitkeep data/logs/* diff --git a/lib/worker/api/legacy_manifest_package.rb b/lib/worker/api/legacy_manifest_package.rb index 98425bd..b8d9fcd 100644 --- a/lib/worker/api/legacy_manifest_package.rb +++ b/lib/worker/api/legacy_manifest_package.rb @@ -1,12 +1,12 @@ require "json" require "digest/sha2" -module W3DHubBackend +module W3DHubLauncher class Worker class Api class LegacyManifestPackage attr_reader :category, :subcategory, :version, :name, :error, :file_size, - :checksum_chunk_size, :sha256_checksum, :checksum_chunks + :checksum_chunk_size, :sha256_checksum, :checksum_chunks, :download_url def initialize(hash) @category = hash["category"] @@ -18,6 +18,7 @@ module W3DHubBackend @checksum_chunk_size = Integer(hash["checksum-size"] || 0) @sha256_checksum = hash["checksum"] @checksum_chunks = hash["checksum-chunks"] + @download_url = hash["download_url"] end def error? diff --git a/lib/worker/task.rb b/lib/worker/task.rb index 2977b4f..2cc06d9 100644 --- a/lib/worker/task.rb +++ b/lib/worker/task.rb @@ -11,6 +11,8 @@ module W3DHubLauncher pp self + @manifests = {} + setup end @@ -24,61 +26,83 @@ module W3DHubLauncher end def fetch_manifests(version = @target_version) - result = fetch_manifest(version) - if result.okay? - pp result - else - pp [:error, result] + while (manifest = fetch_manifest(version)) + @manifests[version] = manifest + + version = manifest.base_version end end def fetch_manifest(version) - @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? + + response = JSON.parse(result.data) + pp response + pp package_details = response["packages"]&.map { |item| Worker::Api::LegacyManifestPackage.new(item) }&.first + + return false unless package_details + return false if package_details.error? + + # FIXME: check if locally downloaded manifest is still valid, if present. + result = if package_details.download_url + @worker.w3dhub_api.download(package_details.download_url, path: "manifest-#{version}.xml") + else + # TODO xD + @worker.w3dhub_api.fetch_package("TODO") + end + + pp result + + return Worker::Api::LegacyManifest.new("manifest-#{version}.xml") if result.okay? + + false end end end -def execute_task - show_application_taskbar +# def execute_task +# show_application_taskbar - fail_fast - return false if failed? +# fail_fast +# return false if failed? - fetch_manifests - return false if failed? +# fetch_manifests +# return false if failed? - build_package_list - return false if failed? +# build_package_list +# return false if failed? - remove_deleted_files - return false if failed? +# remove_deleted_files +# return false if failed? - verify_files - return false if failed? +# verify_files +# return false if failed? - fetch_packages - return false if failed? +# fetch_packages +# return false if failed? - verify_packages - return false if failed? +# verify_packages +# return false if failed? - unpack_packages - return false if failed? +# unpack_packages +# return false if failed? - create_wine_prefix - return false if failed? +# create_wine_prefix +# return false if failed? - install_dependencies - return false if failed? +# install_dependencies +# return false if failed? - write_paths_ini - return false if failed? +# write_paths_ini +# return false if failed? - mark_application_installed - return false if failed? +# mark_application_installed +# return false if failed? - sleep 1 - hide_application_taskbar +# sleep 1 +# hide_application_taskbar - true -end +# true +# end