mirror of
https://github.com/Omni-guides/Jackify.git
synced 2026-06-07 21:27:45 +02:00
Sync from development - prepare for v0.5.0.2
This commit is contained in:
@@ -1,5 +1,12 @@
|
||||
# Jackify Changelog
|
||||
|
||||
## v0.5.0.2 - Hotfix
|
||||
**Release Date:** 15/03/26
|
||||
|
||||
- Disk space warning at install start is no longer a hard block. If the pre-flight check fires before any download or install progress has started, Jackify now shows a warning dialog with the required and available space, a note that modlist updates typically need far less space than a fresh install, and a "Continue Anyway" option. Cancelling still aborts normally.
|
||||
- Engine: fixed a false-positive in the pre-flight filename length check that could incorrectly trigger on modlist paths using backslash separators.
|
||||
- Engine: temp folder cleanup at the end of install no longer crashes an otherwise successful installation if a BSA or temp directory is still locked.
|
||||
|
||||
## v0.5.0.1 - Hotfix
|
||||
**Release Date:** 13/03/26
|
||||
|
||||
|
||||
@@ -5,4 +5,4 @@ This package provides both CLI and GUI interfaces for managing
|
||||
Wabbajack modlists natively on Linux systems.
|
||||
"""
|
||||
|
||||
__version__ = "0.5.0.1"
|
||||
__version__ = "0.5.0.2"
|
||||
|
||||
@@ -50,20 +50,10 @@ class ModlistConfigurationMixin:
|
||||
return True
|
||||
|
||||
def _execute_configuration_steps(self, status_callback=None, manual_steps_completed=False, skip_manual_for_existing=False):
|
||||
"""
|
||||
Runs the actual configuration steps for the selected modlist.
|
||||
Args:
|
||||
status_callback (callable, optional): A function to call with status updates during configuration.
|
||||
manual_steps_completed (bool): If True, skip the manual steps prompt (used for new modlist flow).
|
||||
skip_manual_for_existing (bool): If True, always skip manual steps (for existing modlists that are already configured).
|
||||
"""
|
||||
"""Run the configuration steps for the selected modlist."""
|
||||
try:
|
||||
# Store status_callback for Configuration Summary
|
||||
self._current_status_callback = status_callback
|
||||
|
||||
self.logger.info("Executing configuration steps...")
|
||||
|
||||
# Ensure required context is set
|
||||
if not all([self.modlist_dir, self.appid, self.game_var, self.steamdeck is not None]):
|
||||
self.logger.error("Cannot execute configuration steps: Missing required context (modlist_dir, appid, game_var, steamdeck status).")
|
||||
self.logger.error("Missing required information to start configuration.")
|
||||
@@ -89,14 +79,10 @@ class ModlistConfigurationMixin:
|
||||
return False # Abort on failure
|
||||
self.logger.info("Step 1: Setting Protontricks permissions... Done")
|
||||
|
||||
# Step 2: Prompt user for manual steps and wait for compatdata
|
||||
skip_manual_prompt = skip_manual_for_existing # Existing modlists skip manual steps
|
||||
if not manual_steps_completed and not skip_manual_for_existing:
|
||||
# Check if Proton Experimental is already set and compatdata exists
|
||||
proton_ok = False
|
||||
compatdata_ok = False
|
||||
|
||||
# Check Proton version
|
||||
self.logger.debug(f"[MANUAL STEPS DEBUG] Checking Proton version for AppID {self.appid}")
|
||||
if self._detect_proton_version():
|
||||
self.logger.debug(f"[MANUAL STEPS DEBUG] Detected Proton version: {self.proton_ver}")
|
||||
@@ -106,7 +92,6 @@ class ModlistConfigurationMixin:
|
||||
else:
|
||||
self.logger.debug("[MANUAL STEPS DEBUG] Could not detect Proton version")
|
||||
|
||||
# Check compatdata/prefix
|
||||
prefix_path_str = self.path_handler.find_compat_data(str(self.appid))
|
||||
self.logger.debug(f"[MANUAL STEPS DEBUG] Compatdata path search result: {prefix_path_str}")
|
||||
|
||||
@@ -173,6 +158,24 @@ class ModlistConfigurationMixin:
|
||||
self.logger.error(f"Failed to download or apply curated user.reg.modlist or system.reg.modlist: {e}")
|
||||
self.logger.error(f"Failed to download or apply curated user.reg.modlist or system.reg.modlist. {e}")
|
||||
return False
|
||||
special_game_type = self.detect_special_game_type(self.modlist_dir)
|
||||
if special_game_type in ["fnv", "fo3", "enderal"]:
|
||||
self.logger.info(
|
||||
"Re-injecting %s game registry entries after curated registry overwrite",
|
||||
special_game_type.upper(),
|
||||
)
|
||||
try:
|
||||
from jackify.backend.services.automated_prefix_service import AutomatedPrefixService
|
||||
|
||||
AutomatedPrefixService()._inject_game_registry_entries(prefix_path_str, special_game_type)
|
||||
except Exception as e:
|
||||
self.logger.error(
|
||||
"Failed to restore %s registry entries after curated registry overwrite: %s",
|
||||
special_game_type.upper(),
|
||||
e,
|
||||
)
|
||||
self.logger.error("Could not restore required game registry entries after applying curated registry files.")
|
||||
return False
|
||||
self.logger.info("Step 3: Curated user.reg.modlist and system.reg.modlist applied successfully.")
|
||||
|
||||
# Step 4: Install Wine Components
|
||||
@@ -543,9 +546,7 @@ class ModlistConfigurationMixin:
|
||||
status_callback("") # Blank line after final Prefix Configuration step
|
||||
self.logger.info("Step 12: Checking for modlist-specific steps...")
|
||||
|
||||
# Step 13: Launch options for special games are now set during automated prefix workflow (before Steam restart)
|
||||
# Avoids a second Steam restart
|
||||
special_game_type = self.detect_special_game_type(self.modlist_dir)
|
||||
# Step 13: Launch options for special games are now set during automated workflow
|
||||
if special_game_type:
|
||||
self.logger.info(f"Step 13: Launch options for {special_game_type.upper()} were set during automated workflow")
|
||||
else:
|
||||
@@ -568,18 +569,12 @@ class ModlistConfigurationMixin:
|
||||
return True # Return True on success
|
||||
|
||||
def run_modlist_configuration_phase(self, context: dict = None) -> bool:
|
||||
"""
|
||||
Main entry point to run the full modlist configuration sequence.
|
||||
This orchestrates all the individual steps.
|
||||
"""
|
||||
"""Run the full modlist configuration sequence."""
|
||||
self.logger.info(f"Starting configuration phase for modlist: {self.game_name}")
|
||||
# Call the private method that contains the actual steps
|
||||
# Pass along the status_callback if it was provided in the context
|
||||
status_callback = context.get('status_callback') if context else None
|
||||
return self._execute_configuration_steps(status_callback=status_callback)
|
||||
|
||||
def _prompt_or_set_resolution(self):
|
||||
# If on Steam Deck, set 1280x800 automatically
|
||||
if self._is_steam_deck():
|
||||
self.selected_resolution = "1280x800"
|
||||
self.logger.info("Steam Deck detected: setting resolution to 1280x800.")
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -7,7 +7,7 @@
|
||||
"targets": {
|
||||
".NETCoreApp,Version=v8.0": {},
|
||||
".NETCoreApp,Version=v8.0/linux-x64": {
|
||||
"jackify-engine/0.5.0": {
|
||||
"jackify-engine/0.5.1": {
|
||||
"dependencies": {
|
||||
"Markdig": "0.40.0",
|
||||
"Microsoft.Extensions.Configuration.Json": "9.0.1",
|
||||
@@ -22,16 +22,16 @@
|
||||
"SixLabors.ImageSharp": "3.1.6",
|
||||
"System.CommandLine": "2.0.0-beta4.22272.1",
|
||||
"System.CommandLine.NamingConventionBinder": "2.0.0-beta4.22272.1",
|
||||
"Wabbajack.CLI.Builder": "0.5.0",
|
||||
"Wabbajack.Downloaders.Bethesda": "0.5.0",
|
||||
"Wabbajack.Downloaders.Dispatcher": "0.5.0",
|
||||
"Wabbajack.Hashing.xxHash64": "0.5.0",
|
||||
"Wabbajack.Networking.Discord": "0.5.0",
|
||||
"Wabbajack.Networking.GitHub": "0.5.0",
|
||||
"Wabbajack.Paths.IO": "0.5.0",
|
||||
"Wabbajack.Server.Lib": "0.5.0",
|
||||
"Wabbajack.Services.OSIntegrated": "0.5.0",
|
||||
"Wabbajack.VFS": "0.5.0",
|
||||
"Wabbajack.CLI.Builder": "0.5.1",
|
||||
"Wabbajack.Downloaders.Bethesda": "0.5.1",
|
||||
"Wabbajack.Downloaders.Dispatcher": "0.5.1",
|
||||
"Wabbajack.Hashing.xxHash64": "0.5.1",
|
||||
"Wabbajack.Networking.Discord": "0.5.1",
|
||||
"Wabbajack.Networking.GitHub": "0.5.1",
|
||||
"Wabbajack.Paths.IO": "0.5.1",
|
||||
"Wabbajack.Server.Lib": "0.5.1",
|
||||
"Wabbajack.Services.OSIntegrated": "0.5.1",
|
||||
"Wabbajack.VFS": "0.5.1",
|
||||
"MegaApiClient": "1.0.0.0",
|
||||
"runtimepack.Microsoft.NETCore.App.Runtime.linux-x64": "8.0.23"
|
||||
},
|
||||
@@ -1781,7 +1781,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"Wabbajack.CLI.Builder/0.5.0": {
|
||||
"Wabbajack.CLI.Builder/0.5.1": {
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Configuration.Json": "9.0.1",
|
||||
"Microsoft.Extensions.DependencyInjection": "9.0.1",
|
||||
@@ -1791,109 +1791,109 @@
|
||||
"Microsoft.Extensions.Logging.Abstractions": "9.0.1",
|
||||
"System.CommandLine": "2.0.0-beta4.22272.1",
|
||||
"System.CommandLine.NamingConventionBinder": "2.0.0-beta4.22272.1",
|
||||
"Wabbajack.Paths": "0.5.0"
|
||||
"Wabbajack.Paths": "0.5.1"
|
||||
},
|
||||
"runtime": {
|
||||
"Wabbajack.CLI.Builder.dll": {}
|
||||
}
|
||||
},
|
||||
"Wabbajack.Common/0.5.0": {
|
||||
"Wabbajack.Common/0.5.1": {
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.DependencyInjection": "9.0.1",
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.1",
|
||||
"Microsoft.Extensions.Logging.Abstractions": "9.0.1",
|
||||
"System.Reactive": "6.0.1",
|
||||
"Wabbajack.DTOs": "0.5.0",
|
||||
"Wabbajack.Networking.Http": "0.5.0",
|
||||
"Wabbajack.Paths.IO": "0.5.0"
|
||||
"Wabbajack.DTOs": "0.5.1",
|
||||
"Wabbajack.Networking.Http": "0.5.1",
|
||||
"Wabbajack.Paths.IO": "0.5.1"
|
||||
},
|
||||
"runtime": {
|
||||
"Wabbajack.Common.dll": {}
|
||||
}
|
||||
},
|
||||
"Wabbajack.Compiler/0.5.0": {
|
||||
"Wabbajack.Compiler/0.5.1": {
|
||||
"dependencies": {
|
||||
"F23.StringSimilarity": "6.0.0",
|
||||
"Microsoft.Extensions.DependencyInjection": "9.0.1",
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.1",
|
||||
"Newtonsoft.Json": "13.0.3",
|
||||
"SixLabors.ImageSharp": "3.1.6",
|
||||
"Wabbajack.Downloaders.Dispatcher": "0.5.0",
|
||||
"Wabbajack.Installer": "0.5.0",
|
||||
"Wabbajack.VFS": "0.5.0",
|
||||
"Wabbajack.Downloaders.Dispatcher": "0.5.1",
|
||||
"Wabbajack.Installer": "0.5.1",
|
||||
"Wabbajack.VFS": "0.5.1",
|
||||
"ini-parser-netstandard": "2.5.2"
|
||||
},
|
||||
"runtime": {
|
||||
"Wabbajack.Compiler.dll": {}
|
||||
}
|
||||
},
|
||||
"Wabbajack.Compression.BSA/0.5.0": {
|
||||
"Wabbajack.Compression.BSA/0.5.1": {
|
||||
"dependencies": {
|
||||
"K4os.Compression.LZ4.Streams": "1.3.8",
|
||||
"Microsoft.Extensions.DependencyInjection": "9.0.1",
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.1",
|
||||
"SharpZipLib": "1.4.2",
|
||||
"Wabbajack.Common": "0.5.0",
|
||||
"Wabbajack.DTOs": "0.5.0"
|
||||
"Wabbajack.Common": "0.5.1",
|
||||
"Wabbajack.DTOs": "0.5.1"
|
||||
},
|
||||
"runtime": {
|
||||
"Wabbajack.Compression.BSA.dll": {}
|
||||
}
|
||||
},
|
||||
"Wabbajack.Compression.Zip/0.5.0": {
|
||||
"Wabbajack.Compression.Zip/0.5.1": {
|
||||
"dependencies": {
|
||||
"Wabbajack.IO.Async": "0.5.0"
|
||||
"Wabbajack.IO.Async": "0.5.1"
|
||||
},
|
||||
"runtime": {
|
||||
"Wabbajack.Compression.Zip.dll": {}
|
||||
}
|
||||
},
|
||||
"Wabbajack.Configuration/0.5.0": {
|
||||
"Wabbajack.Configuration/0.5.1": {
|
||||
"runtime": {
|
||||
"Wabbajack.Configuration.dll": {}
|
||||
}
|
||||
},
|
||||
"Wabbajack.Downloaders.Bethesda/0.5.0": {
|
||||
"Wabbajack.Downloaders.Bethesda/0.5.1": {
|
||||
"dependencies": {
|
||||
"LibAES-CTR": "1.1.0",
|
||||
"Microsoft.Extensions.DependencyInjection": "9.0.1",
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.1",
|
||||
"SharpZipLib": "1.4.2",
|
||||
"Wabbajack.Common": "0.5.0",
|
||||
"Wabbajack.Downloaders.Interfaces": "0.5.0",
|
||||
"Wabbajack.Networking.BethesdaNet": "0.5.0"
|
||||
"Wabbajack.Common": "0.5.1",
|
||||
"Wabbajack.Downloaders.Interfaces": "0.5.1",
|
||||
"Wabbajack.Networking.BethesdaNet": "0.5.1"
|
||||
},
|
||||
"runtime": {
|
||||
"Wabbajack.Downloaders.Bethesda.dll": {}
|
||||
}
|
||||
},
|
||||
"Wabbajack.Downloaders.Dispatcher/0.5.0": {
|
||||
"Wabbajack.Downloaders.Dispatcher/0.5.1": {
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.DependencyInjection": "9.0.1",
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.1",
|
||||
"Microsoft.Extensions.Logging.Abstractions": "9.0.1",
|
||||
"Newtonsoft.Json": "13.0.3",
|
||||
"SixLabors.ImageSharp": "3.1.6",
|
||||
"Wabbajack.Downloaders.Bethesda": "0.5.0",
|
||||
"Wabbajack.Downloaders.GameFile": "0.5.0",
|
||||
"Wabbajack.Downloaders.GoogleDrive": "0.5.0",
|
||||
"Wabbajack.Downloaders.Http": "0.5.0",
|
||||
"Wabbajack.Downloaders.IPS4OAuth2Downloader": "0.5.0",
|
||||
"Wabbajack.Downloaders.Interfaces": "0.5.0",
|
||||
"Wabbajack.Downloaders.Manual": "0.5.0",
|
||||
"Wabbajack.Downloaders.MediaFire": "0.5.0",
|
||||
"Wabbajack.Downloaders.Mega": "0.5.0",
|
||||
"Wabbajack.Downloaders.ModDB": "0.5.0",
|
||||
"Wabbajack.Downloaders.Nexus": "0.5.0",
|
||||
"Wabbajack.Downloaders.VerificationCache": "0.5.0",
|
||||
"Wabbajack.Downloaders.WabbajackCDN": "0.5.0",
|
||||
"Wabbajack.Networking.WabbajackClientApi": "0.5.0"
|
||||
"Wabbajack.Downloaders.Bethesda": "0.5.1",
|
||||
"Wabbajack.Downloaders.GameFile": "0.5.1",
|
||||
"Wabbajack.Downloaders.GoogleDrive": "0.5.1",
|
||||
"Wabbajack.Downloaders.Http": "0.5.1",
|
||||
"Wabbajack.Downloaders.IPS4OAuth2Downloader": "0.5.1",
|
||||
"Wabbajack.Downloaders.Interfaces": "0.5.1",
|
||||
"Wabbajack.Downloaders.Manual": "0.5.1",
|
||||
"Wabbajack.Downloaders.MediaFire": "0.5.1",
|
||||
"Wabbajack.Downloaders.Mega": "0.5.1",
|
||||
"Wabbajack.Downloaders.ModDB": "0.5.1",
|
||||
"Wabbajack.Downloaders.Nexus": "0.5.1",
|
||||
"Wabbajack.Downloaders.VerificationCache": "0.5.1",
|
||||
"Wabbajack.Downloaders.WabbajackCDN": "0.5.1",
|
||||
"Wabbajack.Networking.WabbajackClientApi": "0.5.1"
|
||||
},
|
||||
"runtime": {
|
||||
"Wabbajack.Downloaders.Dispatcher.dll": {}
|
||||
}
|
||||
},
|
||||
"Wabbajack.Downloaders.GameFile/0.5.0": {
|
||||
"Wabbajack.Downloaders.GameFile/0.5.1": {
|
||||
"dependencies": {
|
||||
"GameFinder.StoreHandlers.EADesktop": "4.5.0",
|
||||
"GameFinder.StoreHandlers.EGS": "4.5.0",
|
||||
@@ -1903,361 +1903,361 @@
|
||||
"Microsoft.Extensions.DependencyInjection": "9.0.1",
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.1",
|
||||
"SixLabors.ImageSharp": "3.1.6",
|
||||
"Wabbajack.Downloaders.Interfaces": "0.5.0",
|
||||
"Wabbajack.VFS": "0.5.0"
|
||||
"Wabbajack.Downloaders.Interfaces": "0.5.1",
|
||||
"Wabbajack.VFS": "0.5.1"
|
||||
},
|
||||
"runtime": {
|
||||
"Wabbajack.Downloaders.GameFile.dll": {}
|
||||
}
|
||||
},
|
||||
"Wabbajack.Downloaders.GoogleDrive/0.5.0": {
|
||||
"Wabbajack.Downloaders.GoogleDrive/0.5.1": {
|
||||
"dependencies": {
|
||||
"HtmlAgilityPack": "1.11.72",
|
||||
"Microsoft.AspNetCore.Http.Extensions": "2.3.0",
|
||||
"Microsoft.Extensions.DependencyInjection": "9.0.1",
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.1",
|
||||
"Microsoft.Extensions.Logging.Abstractions": "9.0.1",
|
||||
"Wabbajack.Common": "0.5.0",
|
||||
"Wabbajack.DTOs": "0.5.0",
|
||||
"Wabbajack.Downloaders.Interfaces": "0.5.0",
|
||||
"Wabbajack.Networking.Http": "0.5.0",
|
||||
"Wabbajack.Networking.Http.Interfaces": "0.5.0"
|
||||
"Wabbajack.Common": "0.5.1",
|
||||
"Wabbajack.DTOs": "0.5.1",
|
||||
"Wabbajack.Downloaders.Interfaces": "0.5.1",
|
||||
"Wabbajack.Networking.Http": "0.5.1",
|
||||
"Wabbajack.Networking.Http.Interfaces": "0.5.1"
|
||||
},
|
||||
"runtime": {
|
||||
"Wabbajack.Downloaders.GoogleDrive.dll": {}
|
||||
}
|
||||
},
|
||||
"Wabbajack.Downloaders.Http/0.5.0": {
|
||||
"Wabbajack.Downloaders.Http/0.5.1": {
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.DependencyInjection": "9.0.1",
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.1",
|
||||
"Microsoft.Extensions.Logging.Abstractions": "9.0.1",
|
||||
"Wabbajack.Common": "0.5.0",
|
||||
"Wabbajack.DTOs": "0.5.0",
|
||||
"Wabbajack.Downloaders.Interfaces": "0.5.0",
|
||||
"Wabbajack.Networking.BethesdaNet": "0.5.0",
|
||||
"Wabbajack.Networking.Http.Interfaces": "0.5.0",
|
||||
"Wabbajack.Paths.IO": "0.5.0"
|
||||
"Wabbajack.Common": "0.5.1",
|
||||
"Wabbajack.DTOs": "0.5.1",
|
||||
"Wabbajack.Downloaders.Interfaces": "0.5.1",
|
||||
"Wabbajack.Networking.BethesdaNet": "0.5.1",
|
||||
"Wabbajack.Networking.Http.Interfaces": "0.5.1",
|
||||
"Wabbajack.Paths.IO": "0.5.1"
|
||||
},
|
||||
"runtime": {
|
||||
"Wabbajack.Downloaders.Http.dll": {}
|
||||
}
|
||||
},
|
||||
"Wabbajack.Downloaders.Interfaces/0.5.0": {
|
||||
"Wabbajack.Downloaders.Interfaces/0.5.1": {
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.DependencyInjection": "9.0.1",
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.1",
|
||||
"Wabbajack.Compression.Zip": "0.5.0",
|
||||
"Wabbajack.DTOs": "0.5.0",
|
||||
"Wabbajack.Paths.IO": "0.5.0"
|
||||
"Wabbajack.Compression.Zip": "0.5.1",
|
||||
"Wabbajack.DTOs": "0.5.1",
|
||||
"Wabbajack.Paths.IO": "0.5.1"
|
||||
},
|
||||
"runtime": {
|
||||
"Wabbajack.Downloaders.Interfaces.dll": {}
|
||||
}
|
||||
},
|
||||
"Wabbajack.Downloaders.IPS4OAuth2Downloader/0.5.0": {
|
||||
"Wabbajack.Downloaders.IPS4OAuth2Downloader/0.5.1": {
|
||||
"dependencies": {
|
||||
"F23.StringSimilarity": "6.0.0",
|
||||
"Microsoft.Extensions.DependencyInjection": "9.0.1",
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.1",
|
||||
"Microsoft.Extensions.Logging.Abstractions": "9.0.1",
|
||||
"Wabbajack.Common": "0.5.0",
|
||||
"Wabbajack.Downloaders.Interfaces": "0.5.0",
|
||||
"Wabbajack.Networking.Http": "0.5.0",
|
||||
"Wabbajack.Networking.Http.Interfaces": "0.5.0"
|
||||
"Wabbajack.Common": "0.5.1",
|
||||
"Wabbajack.Downloaders.Interfaces": "0.5.1",
|
||||
"Wabbajack.Networking.Http": "0.5.1",
|
||||
"Wabbajack.Networking.Http.Interfaces": "0.5.1"
|
||||
},
|
||||
"runtime": {
|
||||
"Wabbajack.Downloaders.IPS4OAuth2Downloader.dll": {}
|
||||
}
|
||||
},
|
||||
"Wabbajack.Downloaders.Manual/0.5.0": {
|
||||
"Wabbajack.Downloaders.Manual/0.5.1": {
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.DependencyInjection": "9.0.1",
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.1",
|
||||
"Microsoft.Extensions.Logging.Abstractions": "9.0.1",
|
||||
"Wabbajack.Common": "0.5.0",
|
||||
"Wabbajack.Downloaders.Interfaces": "0.5.0"
|
||||
"Wabbajack.Common": "0.5.1",
|
||||
"Wabbajack.Downloaders.Interfaces": "0.5.1"
|
||||
},
|
||||
"runtime": {
|
||||
"Wabbajack.Downloaders.Manual.dll": {}
|
||||
}
|
||||
},
|
||||
"Wabbajack.Downloaders.MediaFire/0.5.0": {
|
||||
"Wabbajack.Downloaders.MediaFire/0.5.1": {
|
||||
"dependencies": {
|
||||
"HtmlAgilityPack": "1.11.72",
|
||||
"Microsoft.Extensions.DependencyInjection": "9.0.1",
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.1",
|
||||
"Microsoft.Extensions.Logging.Abstractions": "9.0.1",
|
||||
"Wabbajack.Common": "0.5.0",
|
||||
"Wabbajack.Downloaders.Interfaces": "0.5.0",
|
||||
"Wabbajack.Networking.Http.Interfaces": "0.5.0"
|
||||
"Wabbajack.Common": "0.5.1",
|
||||
"Wabbajack.Downloaders.Interfaces": "0.5.1",
|
||||
"Wabbajack.Networking.Http.Interfaces": "0.5.1"
|
||||
},
|
||||
"runtime": {
|
||||
"Wabbajack.Downloaders.MediaFire.dll": {}
|
||||
}
|
||||
},
|
||||
"Wabbajack.Downloaders.Mega/0.5.0": {
|
||||
"Wabbajack.Downloaders.Mega/0.5.1": {
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.DependencyInjection": "9.0.1",
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.1",
|
||||
"Microsoft.Extensions.Logging.Abstractions": "9.0.1",
|
||||
"Newtonsoft.Json": "13.0.3",
|
||||
"Wabbajack.Common": "0.5.0",
|
||||
"Wabbajack.Downloaders.Interfaces": "0.5.0",
|
||||
"Wabbajack.Paths.IO": "0.5.0"
|
||||
"Wabbajack.Common": "0.5.1",
|
||||
"Wabbajack.Downloaders.Interfaces": "0.5.1",
|
||||
"Wabbajack.Paths.IO": "0.5.1"
|
||||
},
|
||||
"runtime": {
|
||||
"Wabbajack.Downloaders.Mega.dll": {}
|
||||
}
|
||||
},
|
||||
"Wabbajack.Downloaders.ModDB/0.5.0": {
|
||||
"Wabbajack.Downloaders.ModDB/0.5.1": {
|
||||
"dependencies": {
|
||||
"HtmlAgilityPack": "1.11.72",
|
||||
"Microsoft.Extensions.DependencyInjection": "9.0.1",
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.1",
|
||||
"Microsoft.Extensions.Logging.Abstractions": "9.0.1",
|
||||
"Newtonsoft.Json": "13.0.3",
|
||||
"Wabbajack.Common": "0.5.0",
|
||||
"Wabbajack.Downloaders.Interfaces": "0.5.0",
|
||||
"Wabbajack.Networking.Http": "0.5.0",
|
||||
"Wabbajack.Networking.Http.Interfaces": "0.5.0"
|
||||
"Wabbajack.Common": "0.5.1",
|
||||
"Wabbajack.Downloaders.Interfaces": "0.5.1",
|
||||
"Wabbajack.Networking.Http": "0.5.1",
|
||||
"Wabbajack.Networking.Http.Interfaces": "0.5.1"
|
||||
},
|
||||
"runtime": {
|
||||
"Wabbajack.Downloaders.ModDB.dll": {}
|
||||
}
|
||||
},
|
||||
"Wabbajack.Downloaders.Nexus/0.5.0": {
|
||||
"Wabbajack.Downloaders.Nexus/0.5.1": {
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.DependencyInjection": "9.0.1",
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.1",
|
||||
"Wabbajack.DTOs": "0.5.0",
|
||||
"Wabbajack.Downloaders.Interfaces": "0.5.0",
|
||||
"Wabbajack.Hashing.xxHash64": "0.5.0",
|
||||
"Wabbajack.Networking.Http": "0.5.0",
|
||||
"Wabbajack.Networking.Http.Interfaces": "0.5.0",
|
||||
"Wabbajack.Networking.NexusApi": "0.5.0",
|
||||
"Wabbajack.Paths": "0.5.0"
|
||||
"Wabbajack.DTOs": "0.5.1",
|
||||
"Wabbajack.Downloaders.Interfaces": "0.5.1",
|
||||
"Wabbajack.Hashing.xxHash64": "0.5.1",
|
||||
"Wabbajack.Networking.Http": "0.5.1",
|
||||
"Wabbajack.Networking.Http.Interfaces": "0.5.1",
|
||||
"Wabbajack.Networking.NexusApi": "0.5.1",
|
||||
"Wabbajack.Paths": "0.5.1"
|
||||
},
|
||||
"runtime": {
|
||||
"Wabbajack.Downloaders.Nexus.dll": {}
|
||||
}
|
||||
},
|
||||
"Wabbajack.Downloaders.VerificationCache/0.5.0": {
|
||||
"Wabbajack.Downloaders.VerificationCache/0.5.1": {
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.DependencyInjection": "9.0.1",
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.1",
|
||||
"Microsoft.Extensions.Logging.Abstractions": "9.0.1",
|
||||
"Stub.System.Data.SQLite.Core.NetStandard": "1.0.119",
|
||||
"Wabbajack.DTOs": "0.5.0",
|
||||
"Wabbajack.Paths.IO": "0.5.0"
|
||||
"Wabbajack.DTOs": "0.5.1",
|
||||
"Wabbajack.Paths.IO": "0.5.1"
|
||||
},
|
||||
"runtime": {
|
||||
"Wabbajack.Downloaders.VerificationCache.dll": {}
|
||||
}
|
||||
},
|
||||
"Wabbajack.Downloaders.WabbajackCDN/0.5.0": {
|
||||
"Wabbajack.Downloaders.WabbajackCDN/0.5.1": {
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.DependencyInjection": "9.0.1",
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.1",
|
||||
"Microsoft.Extensions.Logging.Abstractions": "9.0.1",
|
||||
"Microsoft.Toolkit.HighPerformance": "7.1.2",
|
||||
"Wabbajack.Common": "0.5.0",
|
||||
"Wabbajack.Downloaders.Interfaces": "0.5.0",
|
||||
"Wabbajack.Networking.Http": "0.5.0",
|
||||
"Wabbajack.RateLimiter": "0.5.0"
|
||||
"Wabbajack.Common": "0.5.1",
|
||||
"Wabbajack.Downloaders.Interfaces": "0.5.1",
|
||||
"Wabbajack.Networking.Http": "0.5.1",
|
||||
"Wabbajack.RateLimiter": "0.5.1"
|
||||
},
|
||||
"runtime": {
|
||||
"Wabbajack.Downloaders.WabbajackCDN.dll": {}
|
||||
}
|
||||
},
|
||||
"Wabbajack.DTOs/0.5.0": {
|
||||
"Wabbajack.DTOs/0.5.1": {
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.DependencyInjection": "9.0.1",
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.1",
|
||||
"Wabbajack.Hashing.xxHash64": "0.5.0",
|
||||
"Wabbajack.Paths": "0.5.0"
|
||||
"Wabbajack.Hashing.xxHash64": "0.5.1",
|
||||
"Wabbajack.Paths": "0.5.1"
|
||||
},
|
||||
"runtime": {
|
||||
"Wabbajack.DTOs.dll": {}
|
||||
}
|
||||
},
|
||||
"Wabbajack.FileExtractor/0.5.0": {
|
||||
"Wabbajack.FileExtractor/0.5.1": {
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.DependencyInjection": "9.0.1",
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.1",
|
||||
"Microsoft.Extensions.Logging.Abstractions": "9.0.1",
|
||||
"OMODFramework": "3.0.1",
|
||||
"Wabbajack.Common": "0.5.0",
|
||||
"Wabbajack.Compression.BSA": "0.5.0",
|
||||
"Wabbajack.Hashing.PHash": "0.5.0",
|
||||
"Wabbajack.Paths": "0.5.0"
|
||||
"Wabbajack.Common": "0.5.1",
|
||||
"Wabbajack.Compression.BSA": "0.5.1",
|
||||
"Wabbajack.Hashing.PHash": "0.5.1",
|
||||
"Wabbajack.Paths": "0.5.1"
|
||||
},
|
||||
"runtime": {
|
||||
"Wabbajack.FileExtractor.dll": {}
|
||||
}
|
||||
},
|
||||
"Wabbajack.Hashing.PHash/0.5.0": {
|
||||
"Wabbajack.Hashing.PHash/0.5.1": {
|
||||
"dependencies": {
|
||||
"BCnEncoder.Net.ImageSharp": "1.1.1",
|
||||
"Microsoft.Extensions.DependencyInjection": "9.0.1",
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.1",
|
||||
"Shipwreck.Phash": "0.5.0",
|
||||
"SixLabors.ImageSharp": "3.1.6",
|
||||
"Wabbajack.Common": "0.5.0",
|
||||
"Wabbajack.DTOs": "0.5.0",
|
||||
"Wabbajack.Paths": "0.5.0",
|
||||
"Wabbajack.Paths.IO": "0.5.0"
|
||||
"Wabbajack.Common": "0.5.1",
|
||||
"Wabbajack.DTOs": "0.5.1",
|
||||
"Wabbajack.Paths": "0.5.1",
|
||||
"Wabbajack.Paths.IO": "0.5.1"
|
||||
},
|
||||
"runtime": {
|
||||
"Wabbajack.Hashing.PHash.dll": {}
|
||||
}
|
||||
},
|
||||
"Wabbajack.Hashing.xxHash64/0.5.0": {
|
||||
"Wabbajack.Hashing.xxHash64/0.5.1": {
|
||||
"dependencies": {
|
||||
"Wabbajack.Paths": "0.5.0",
|
||||
"Wabbajack.RateLimiter": "0.5.0"
|
||||
"Wabbajack.Paths": "0.5.1",
|
||||
"Wabbajack.RateLimiter": "0.5.1"
|
||||
},
|
||||
"runtime": {
|
||||
"Wabbajack.Hashing.xxHash64.dll": {}
|
||||
}
|
||||
},
|
||||
"Wabbajack.Installer/0.5.0": {
|
||||
"Wabbajack.Installer/0.5.1": {
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.DependencyInjection": "9.0.1",
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.1",
|
||||
"Newtonsoft.Json": "13.0.3",
|
||||
"Octopus.Octodiff": "2.0.548",
|
||||
"SixLabors.ImageSharp": "3.1.6",
|
||||
"Wabbajack.DTOs": "0.5.0",
|
||||
"Wabbajack.Downloaders.Dispatcher": "0.5.0",
|
||||
"Wabbajack.Downloaders.GameFile": "0.5.0",
|
||||
"Wabbajack.FileExtractor": "0.5.0",
|
||||
"Wabbajack.Networking.NexusApi": "0.5.0",
|
||||
"Wabbajack.Networking.WabbajackClientApi": "0.5.0",
|
||||
"Wabbajack.Paths": "0.5.0",
|
||||
"Wabbajack.Paths.IO": "0.5.0",
|
||||
"Wabbajack.VFS": "0.5.0",
|
||||
"Wabbajack.DTOs": "0.5.1",
|
||||
"Wabbajack.Downloaders.Dispatcher": "0.5.1",
|
||||
"Wabbajack.Downloaders.GameFile": "0.5.1",
|
||||
"Wabbajack.FileExtractor": "0.5.1",
|
||||
"Wabbajack.Networking.NexusApi": "0.5.1",
|
||||
"Wabbajack.Networking.WabbajackClientApi": "0.5.1",
|
||||
"Wabbajack.Paths": "0.5.1",
|
||||
"Wabbajack.Paths.IO": "0.5.1",
|
||||
"Wabbajack.VFS": "0.5.1",
|
||||
"ini-parser-netstandard": "2.5.2"
|
||||
},
|
||||
"runtime": {
|
||||
"Wabbajack.Installer.dll": {}
|
||||
}
|
||||
},
|
||||
"Wabbajack.IO.Async/0.5.0": {
|
||||
"Wabbajack.IO.Async/0.5.1": {
|
||||
"runtime": {
|
||||
"Wabbajack.IO.Async.dll": {}
|
||||
}
|
||||
},
|
||||
"Wabbajack.Networking.BethesdaNet/0.5.0": {
|
||||
"Wabbajack.Networking.BethesdaNet/0.5.1": {
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.DependencyInjection": "9.0.1",
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.1",
|
||||
"Wabbajack.DTOs": "0.5.0",
|
||||
"Wabbajack.Networking.Http": "0.5.0",
|
||||
"Wabbajack.Networking.Http.Interfaces": "0.5.0"
|
||||
"Wabbajack.DTOs": "0.5.1",
|
||||
"Wabbajack.Networking.Http": "0.5.1",
|
||||
"Wabbajack.Networking.Http.Interfaces": "0.5.1"
|
||||
},
|
||||
"runtime": {
|
||||
"Wabbajack.Networking.BethesdaNet.dll": {}
|
||||
}
|
||||
},
|
||||
"Wabbajack.Networking.Discord/0.5.0": {
|
||||
"Wabbajack.Networking.Discord/0.5.1": {
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.1",
|
||||
"Microsoft.Extensions.Logging.Abstractions": "9.0.1",
|
||||
"Wabbajack.Networking.Http.Interfaces": "0.5.0"
|
||||
"Wabbajack.Networking.Http.Interfaces": "0.5.1"
|
||||
},
|
||||
"runtime": {
|
||||
"Wabbajack.Networking.Discord.dll": {}
|
||||
}
|
||||
},
|
||||
"Wabbajack.Networking.GitHub/0.5.0": {
|
||||
"Wabbajack.Networking.GitHub/0.5.1": {
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.DependencyInjection": "9.0.1",
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.1",
|
||||
"Microsoft.Extensions.Logging.Abstractions": "9.0.1",
|
||||
"Octokit": "14.0.0",
|
||||
"Wabbajack.DTOs": "0.5.0",
|
||||
"Wabbajack.Networking.Http.Interfaces": "0.5.0"
|
||||
"Wabbajack.DTOs": "0.5.1",
|
||||
"Wabbajack.Networking.Http.Interfaces": "0.5.1"
|
||||
},
|
||||
"runtime": {
|
||||
"Wabbajack.Networking.GitHub.dll": {}
|
||||
}
|
||||
},
|
||||
"Wabbajack.Networking.Http/0.5.0": {
|
||||
"Wabbajack.Networking.Http/0.5.1": {
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.DependencyInjection": "9.0.1",
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.1",
|
||||
"Microsoft.Extensions.Http": "9.0.1",
|
||||
"Microsoft.Extensions.Logging": "9.0.1",
|
||||
"Wabbajack.Configuration": "0.5.0",
|
||||
"Wabbajack.Downloaders.Interfaces": "0.5.0",
|
||||
"Wabbajack.Hashing.xxHash64": "0.5.0",
|
||||
"Wabbajack.Networking.Http.Interfaces": "0.5.0",
|
||||
"Wabbajack.Paths": "0.5.0",
|
||||
"Wabbajack.Paths.IO": "0.5.0"
|
||||
"Wabbajack.Configuration": "0.5.1",
|
||||
"Wabbajack.Downloaders.Interfaces": "0.5.1",
|
||||
"Wabbajack.Hashing.xxHash64": "0.5.1",
|
||||
"Wabbajack.Networking.Http.Interfaces": "0.5.1",
|
||||
"Wabbajack.Paths": "0.5.1",
|
||||
"Wabbajack.Paths.IO": "0.5.1"
|
||||
},
|
||||
"runtime": {
|
||||
"Wabbajack.Networking.Http.dll": {}
|
||||
}
|
||||
},
|
||||
"Wabbajack.Networking.Http.Interfaces/0.5.0": {
|
||||
"Wabbajack.Networking.Http.Interfaces/0.5.1": {
|
||||
"dependencies": {
|
||||
"Wabbajack.Hashing.xxHash64": "0.5.0"
|
||||
"Wabbajack.Hashing.xxHash64": "0.5.1"
|
||||
},
|
||||
"runtime": {
|
||||
"Wabbajack.Networking.Http.Interfaces.dll": {}
|
||||
}
|
||||
},
|
||||
"Wabbajack.Networking.NexusApi/0.5.0": {
|
||||
"Wabbajack.Networking.NexusApi/0.5.1": {
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.DependencyInjection": "9.0.1",
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.1",
|
||||
"Microsoft.Extensions.Logging.Abstractions": "9.0.1",
|
||||
"Wabbajack.DTOs": "0.5.0",
|
||||
"Wabbajack.Networking.Http": "0.5.0",
|
||||
"Wabbajack.Networking.Http.Interfaces": "0.5.0",
|
||||
"Wabbajack.Networking.WabbajackClientApi": "0.5.0"
|
||||
"Wabbajack.DTOs": "0.5.1",
|
||||
"Wabbajack.Networking.Http": "0.5.1",
|
||||
"Wabbajack.Networking.Http.Interfaces": "0.5.1",
|
||||
"Wabbajack.Networking.WabbajackClientApi": "0.5.1"
|
||||
},
|
||||
"runtime": {
|
||||
"Wabbajack.Networking.NexusApi.dll": {}
|
||||
}
|
||||
},
|
||||
"Wabbajack.Networking.WabbajackClientApi/0.5.0": {
|
||||
"Wabbajack.Networking.WabbajackClientApi/0.5.1": {
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.DependencyInjection": "9.0.1",
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.1",
|
||||
"Microsoft.Extensions.Logging.Abstractions": "9.0.1",
|
||||
"Octokit": "14.0.0",
|
||||
"Wabbajack.Common": "0.5.0",
|
||||
"Wabbajack.DTOs": "0.5.0",
|
||||
"Wabbajack.Paths.IO": "0.5.0",
|
||||
"Wabbajack.VFS.Interfaces": "0.5.0",
|
||||
"Wabbajack.Common": "0.5.1",
|
||||
"Wabbajack.DTOs": "0.5.1",
|
||||
"Wabbajack.Paths.IO": "0.5.1",
|
||||
"Wabbajack.VFS.Interfaces": "0.5.1",
|
||||
"YamlDotNet": "16.3.0"
|
||||
},
|
||||
"runtime": {
|
||||
"Wabbajack.Networking.WabbajackClientApi.dll": {}
|
||||
}
|
||||
},
|
||||
"Wabbajack.Paths/0.5.0": {
|
||||
"Wabbajack.Paths/0.5.1": {
|
||||
"runtime": {
|
||||
"Wabbajack.Paths.dll": {}
|
||||
}
|
||||
},
|
||||
"Wabbajack.Paths.IO/0.5.0": {
|
||||
"Wabbajack.Paths.IO/0.5.1": {
|
||||
"dependencies": {
|
||||
"Wabbajack.Paths": "0.5.0",
|
||||
"Wabbajack.Paths": "0.5.1",
|
||||
"shortid": "4.0.0"
|
||||
},
|
||||
"runtime": {
|
||||
"Wabbajack.Paths.IO.dll": {}
|
||||
}
|
||||
},
|
||||
"Wabbajack.RateLimiter/0.5.0": {
|
||||
"Wabbajack.RateLimiter/0.5.1": {
|
||||
"runtime": {
|
||||
"Wabbajack.RateLimiter.dll": {}
|
||||
}
|
||||
},
|
||||
"Wabbajack.Server.Lib/0.5.0": {
|
||||
"Wabbajack.Server.Lib/0.5.1": {
|
||||
"dependencies": {
|
||||
"FluentFTP": "52.0.0",
|
||||
"Microsoft.Extensions.DependencyInjection": "9.0.1",
|
||||
@@ -2265,58 +2265,58 @@
|
||||
"Nettle": "3.0.0",
|
||||
"Newtonsoft.Json": "13.0.3",
|
||||
"SixLabors.ImageSharp": "3.1.6",
|
||||
"Wabbajack.Common": "0.5.0",
|
||||
"Wabbajack.Networking.Http.Interfaces": "0.5.0",
|
||||
"Wabbajack.Services.OSIntegrated": "0.5.0"
|
||||
"Wabbajack.Common": "0.5.1",
|
||||
"Wabbajack.Networking.Http.Interfaces": "0.5.1",
|
||||
"Wabbajack.Services.OSIntegrated": "0.5.1"
|
||||
},
|
||||
"runtime": {
|
||||
"Wabbajack.Server.Lib.dll": {}
|
||||
}
|
||||
},
|
||||
"Wabbajack.Services.OSIntegrated/0.5.0": {
|
||||
"Wabbajack.Services.OSIntegrated/0.5.1": {
|
||||
"dependencies": {
|
||||
"DeviceId": "6.8.0",
|
||||
"Microsoft.Extensions.DependencyInjection": "9.0.1",
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.1",
|
||||
"Newtonsoft.Json": "13.0.3",
|
||||
"SixLabors.ImageSharp": "3.1.6",
|
||||
"Wabbajack.Compiler": "0.5.0",
|
||||
"Wabbajack.Downloaders.Dispatcher": "0.5.0",
|
||||
"Wabbajack.Installer": "0.5.0",
|
||||
"Wabbajack.Networking.BethesdaNet": "0.5.0",
|
||||
"Wabbajack.Networking.Discord": "0.5.0",
|
||||
"Wabbajack.VFS": "0.5.0"
|
||||
"Wabbajack.Compiler": "0.5.1",
|
||||
"Wabbajack.Downloaders.Dispatcher": "0.5.1",
|
||||
"Wabbajack.Installer": "0.5.1",
|
||||
"Wabbajack.Networking.BethesdaNet": "0.5.1",
|
||||
"Wabbajack.Networking.Discord": "0.5.1",
|
||||
"Wabbajack.VFS": "0.5.1"
|
||||
},
|
||||
"runtime": {
|
||||
"Wabbajack.Services.OSIntegrated.dll": {}
|
||||
}
|
||||
},
|
||||
"Wabbajack.VFS/0.5.0": {
|
||||
"Wabbajack.VFS/0.5.1": {
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.DependencyInjection": "9.0.1",
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.1",
|
||||
"Microsoft.Extensions.Logging.Abstractions": "9.0.1",
|
||||
"SixLabors.ImageSharp": "3.1.6",
|
||||
"System.Data.SQLite.Core": "1.0.119",
|
||||
"Wabbajack.Common": "0.5.0",
|
||||
"Wabbajack.FileExtractor": "0.5.0",
|
||||
"Wabbajack.Hashing.PHash": "0.5.0",
|
||||
"Wabbajack.Hashing.xxHash64": "0.5.0",
|
||||
"Wabbajack.Paths": "0.5.0",
|
||||
"Wabbajack.Paths.IO": "0.5.0",
|
||||
"Wabbajack.VFS.Interfaces": "0.5.0"
|
||||
"Wabbajack.Common": "0.5.1",
|
||||
"Wabbajack.FileExtractor": "0.5.1",
|
||||
"Wabbajack.Hashing.PHash": "0.5.1",
|
||||
"Wabbajack.Hashing.xxHash64": "0.5.1",
|
||||
"Wabbajack.Paths": "0.5.1",
|
||||
"Wabbajack.Paths.IO": "0.5.1",
|
||||
"Wabbajack.VFS.Interfaces": "0.5.1"
|
||||
},
|
||||
"runtime": {
|
||||
"Wabbajack.VFS.dll": {}
|
||||
}
|
||||
},
|
||||
"Wabbajack.VFS.Interfaces/0.5.0": {
|
||||
"Wabbajack.VFS.Interfaces/0.5.1": {
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.DependencyInjection": "9.0.1",
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.1",
|
||||
"Wabbajack.DTOs": "0.5.0",
|
||||
"Wabbajack.Hashing.xxHash64": "0.5.0",
|
||||
"Wabbajack.Paths": "0.5.0"
|
||||
"Wabbajack.DTOs": "0.5.1",
|
||||
"Wabbajack.Hashing.xxHash64": "0.5.1",
|
||||
"Wabbajack.Paths": "0.5.1"
|
||||
},
|
||||
"runtime": {
|
||||
"Wabbajack.VFS.Interfaces.dll": {}
|
||||
@@ -2333,7 +2333,7 @@
|
||||
}
|
||||
},
|
||||
"libraries": {
|
||||
"jackify-engine/0.5.0": {
|
||||
"jackify-engine/0.5.1": {
|
||||
"type": "project",
|
||||
"serviceable": false,
|
||||
"sha512": ""
|
||||
@@ -3022,202 +3022,202 @@
|
||||
"path": "yamldotnet/16.3.0",
|
||||
"hashPath": "yamldotnet.16.3.0.nupkg.sha512"
|
||||
},
|
||||
"Wabbajack.CLI.Builder/0.5.0": {
|
||||
"Wabbajack.CLI.Builder/0.5.1": {
|
||||
"type": "project",
|
||||
"serviceable": false,
|
||||
"sha512": ""
|
||||
},
|
||||
"Wabbajack.Common/0.5.0": {
|
||||
"Wabbajack.Common/0.5.1": {
|
||||
"type": "project",
|
||||
"serviceable": false,
|
||||
"sha512": ""
|
||||
},
|
||||
"Wabbajack.Compiler/0.5.0": {
|
||||
"Wabbajack.Compiler/0.5.1": {
|
||||
"type": "project",
|
||||
"serviceable": false,
|
||||
"sha512": ""
|
||||
},
|
||||
"Wabbajack.Compression.BSA/0.5.0": {
|
||||
"Wabbajack.Compression.BSA/0.5.1": {
|
||||
"type": "project",
|
||||
"serviceable": false,
|
||||
"sha512": ""
|
||||
},
|
||||
"Wabbajack.Compression.Zip/0.5.0": {
|
||||
"Wabbajack.Compression.Zip/0.5.1": {
|
||||
"type": "project",
|
||||
"serviceable": false,
|
||||
"sha512": ""
|
||||
},
|
||||
"Wabbajack.Configuration/0.5.0": {
|
||||
"Wabbajack.Configuration/0.5.1": {
|
||||
"type": "project",
|
||||
"serviceable": false,
|
||||
"sha512": ""
|
||||
},
|
||||
"Wabbajack.Downloaders.Bethesda/0.5.0": {
|
||||
"Wabbajack.Downloaders.Bethesda/0.5.1": {
|
||||
"type": "project",
|
||||
"serviceable": false,
|
||||
"sha512": ""
|
||||
},
|
||||
"Wabbajack.Downloaders.Dispatcher/0.5.0": {
|
||||
"Wabbajack.Downloaders.Dispatcher/0.5.1": {
|
||||
"type": "project",
|
||||
"serviceable": false,
|
||||
"sha512": ""
|
||||
},
|
||||
"Wabbajack.Downloaders.GameFile/0.5.0": {
|
||||
"Wabbajack.Downloaders.GameFile/0.5.1": {
|
||||
"type": "project",
|
||||
"serviceable": false,
|
||||
"sha512": ""
|
||||
},
|
||||
"Wabbajack.Downloaders.GoogleDrive/0.5.0": {
|
||||
"Wabbajack.Downloaders.GoogleDrive/0.5.1": {
|
||||
"type": "project",
|
||||
"serviceable": false,
|
||||
"sha512": ""
|
||||
},
|
||||
"Wabbajack.Downloaders.Http/0.5.0": {
|
||||
"Wabbajack.Downloaders.Http/0.5.1": {
|
||||
"type": "project",
|
||||
"serviceable": false,
|
||||
"sha512": ""
|
||||
},
|
||||
"Wabbajack.Downloaders.Interfaces/0.5.0": {
|
||||
"Wabbajack.Downloaders.Interfaces/0.5.1": {
|
||||
"type": "project",
|
||||
"serviceable": false,
|
||||
"sha512": ""
|
||||
},
|
||||
"Wabbajack.Downloaders.IPS4OAuth2Downloader/0.5.0": {
|
||||
"Wabbajack.Downloaders.IPS4OAuth2Downloader/0.5.1": {
|
||||
"type": "project",
|
||||
"serviceable": false,
|
||||
"sha512": ""
|
||||
},
|
||||
"Wabbajack.Downloaders.Manual/0.5.0": {
|
||||
"Wabbajack.Downloaders.Manual/0.5.1": {
|
||||
"type": "project",
|
||||
"serviceable": false,
|
||||
"sha512": ""
|
||||
},
|
||||
"Wabbajack.Downloaders.MediaFire/0.5.0": {
|
||||
"Wabbajack.Downloaders.MediaFire/0.5.1": {
|
||||
"type": "project",
|
||||
"serviceable": false,
|
||||
"sha512": ""
|
||||
},
|
||||
"Wabbajack.Downloaders.Mega/0.5.0": {
|
||||
"Wabbajack.Downloaders.Mega/0.5.1": {
|
||||
"type": "project",
|
||||
"serviceable": false,
|
||||
"sha512": ""
|
||||
},
|
||||
"Wabbajack.Downloaders.ModDB/0.5.0": {
|
||||
"Wabbajack.Downloaders.ModDB/0.5.1": {
|
||||
"type": "project",
|
||||
"serviceable": false,
|
||||
"sha512": ""
|
||||
},
|
||||
"Wabbajack.Downloaders.Nexus/0.5.0": {
|
||||
"Wabbajack.Downloaders.Nexus/0.5.1": {
|
||||
"type": "project",
|
||||
"serviceable": false,
|
||||
"sha512": ""
|
||||
},
|
||||
"Wabbajack.Downloaders.VerificationCache/0.5.0": {
|
||||
"Wabbajack.Downloaders.VerificationCache/0.5.1": {
|
||||
"type": "project",
|
||||
"serviceable": false,
|
||||
"sha512": ""
|
||||
},
|
||||
"Wabbajack.Downloaders.WabbajackCDN/0.5.0": {
|
||||
"Wabbajack.Downloaders.WabbajackCDN/0.5.1": {
|
||||
"type": "project",
|
||||
"serviceable": false,
|
||||
"sha512": ""
|
||||
},
|
||||
"Wabbajack.DTOs/0.5.0": {
|
||||
"Wabbajack.DTOs/0.5.1": {
|
||||
"type": "project",
|
||||
"serviceable": false,
|
||||
"sha512": ""
|
||||
},
|
||||
"Wabbajack.FileExtractor/0.5.0": {
|
||||
"Wabbajack.FileExtractor/0.5.1": {
|
||||
"type": "project",
|
||||
"serviceable": false,
|
||||
"sha512": ""
|
||||
},
|
||||
"Wabbajack.Hashing.PHash/0.5.0": {
|
||||
"Wabbajack.Hashing.PHash/0.5.1": {
|
||||
"type": "project",
|
||||
"serviceable": false,
|
||||
"sha512": ""
|
||||
},
|
||||
"Wabbajack.Hashing.xxHash64/0.5.0": {
|
||||
"Wabbajack.Hashing.xxHash64/0.5.1": {
|
||||
"type": "project",
|
||||
"serviceable": false,
|
||||
"sha512": ""
|
||||
},
|
||||
"Wabbajack.Installer/0.5.0": {
|
||||
"Wabbajack.Installer/0.5.1": {
|
||||
"type": "project",
|
||||
"serviceable": false,
|
||||
"sha512": ""
|
||||
},
|
||||
"Wabbajack.IO.Async/0.5.0": {
|
||||
"Wabbajack.IO.Async/0.5.1": {
|
||||
"type": "project",
|
||||
"serviceable": false,
|
||||
"sha512": ""
|
||||
},
|
||||
"Wabbajack.Networking.BethesdaNet/0.5.0": {
|
||||
"Wabbajack.Networking.BethesdaNet/0.5.1": {
|
||||
"type": "project",
|
||||
"serviceable": false,
|
||||
"sha512": ""
|
||||
},
|
||||
"Wabbajack.Networking.Discord/0.5.0": {
|
||||
"Wabbajack.Networking.Discord/0.5.1": {
|
||||
"type": "project",
|
||||
"serviceable": false,
|
||||
"sha512": ""
|
||||
},
|
||||
"Wabbajack.Networking.GitHub/0.5.0": {
|
||||
"Wabbajack.Networking.GitHub/0.5.1": {
|
||||
"type": "project",
|
||||
"serviceable": false,
|
||||
"sha512": ""
|
||||
},
|
||||
"Wabbajack.Networking.Http/0.5.0": {
|
||||
"Wabbajack.Networking.Http/0.5.1": {
|
||||
"type": "project",
|
||||
"serviceable": false,
|
||||
"sha512": ""
|
||||
},
|
||||
"Wabbajack.Networking.Http.Interfaces/0.5.0": {
|
||||
"Wabbajack.Networking.Http.Interfaces/0.5.1": {
|
||||
"type": "project",
|
||||
"serviceable": false,
|
||||
"sha512": ""
|
||||
},
|
||||
"Wabbajack.Networking.NexusApi/0.5.0": {
|
||||
"Wabbajack.Networking.NexusApi/0.5.1": {
|
||||
"type": "project",
|
||||
"serviceable": false,
|
||||
"sha512": ""
|
||||
},
|
||||
"Wabbajack.Networking.WabbajackClientApi/0.5.0": {
|
||||
"Wabbajack.Networking.WabbajackClientApi/0.5.1": {
|
||||
"type": "project",
|
||||
"serviceable": false,
|
||||
"sha512": ""
|
||||
},
|
||||
"Wabbajack.Paths/0.5.0": {
|
||||
"Wabbajack.Paths/0.5.1": {
|
||||
"type": "project",
|
||||
"serviceable": false,
|
||||
"sha512": ""
|
||||
},
|
||||
"Wabbajack.Paths.IO/0.5.0": {
|
||||
"Wabbajack.Paths.IO/0.5.1": {
|
||||
"type": "project",
|
||||
"serviceable": false,
|
||||
"sha512": ""
|
||||
},
|
||||
"Wabbajack.RateLimiter/0.5.0": {
|
||||
"Wabbajack.RateLimiter/0.5.1": {
|
||||
"type": "project",
|
||||
"serviceable": false,
|
||||
"sha512": ""
|
||||
},
|
||||
"Wabbajack.Server.Lib/0.5.0": {
|
||||
"Wabbajack.Server.Lib/0.5.1": {
|
||||
"type": "project",
|
||||
"serviceable": false,
|
||||
"sha512": ""
|
||||
},
|
||||
"Wabbajack.Services.OSIntegrated/0.5.0": {
|
||||
"Wabbajack.Services.OSIntegrated/0.5.1": {
|
||||
"type": "project",
|
||||
"serviceable": false,
|
||||
"sha512": ""
|
||||
},
|
||||
"Wabbajack.VFS/0.5.0": {
|
||||
"Wabbajack.VFS/0.5.1": {
|
||||
"type": "project",
|
||||
"serviceable": false,
|
||||
"sha512": ""
|
||||
},
|
||||
"Wabbajack.VFS.Interfaces/0.5.0": {
|
||||
"Wabbajack.VFS.Interfaces/0.5.1": {
|
||||
"type": "project",
|
||||
"serviceable": false,
|
||||
"sha512": ""
|
||||
|
||||
Binary file not shown.
@@ -34,7 +34,8 @@ class InstallerThread(QThread):
|
||||
non_premium_detected = Signal()
|
||||
|
||||
def __init__(self, modlist, install_dir, downloads_dir, api_key, modlist_name,
|
||||
install_mode='online', progress_state_manager=None, auth_service=None, oauth_info=None):
|
||||
install_mode='online', progress_state_manager=None, auth_service=None,
|
||||
oauth_info=None, skip_disk_check=False):
|
||||
super().__init__()
|
||||
self.modlist = modlist
|
||||
self.install_dir = install_dir
|
||||
@@ -47,6 +48,7 @@ class InstallerThread(QThread):
|
||||
self.progress_state_manager = progress_state_manager
|
||||
self.auth_service = auth_service
|
||||
self.oauth_info = oauth_info
|
||||
self.skip_disk_check = skip_disk_check
|
||||
self._premium_signal_sent = False
|
||||
self._non_premium_info_sent = False
|
||||
self._engine_output_buffer = []
|
||||
@@ -56,6 +58,8 @@ class InstallerThread(QThread):
|
||||
self._raw_stdout_lines: list = [] # bounded ring buffer for non-JSON stdout
|
||||
self._pending_manual_downloads: list = [] # accumulates items until list_complete
|
||||
self._resource_limit_hint: Optional[str] = None
|
||||
self._install_progress_started = False # True once any [FILE_PROGRESS] output seen
|
||||
self._last_error_raw_context: dict = {} # raw context dict from structured engine errors
|
||||
|
||||
@staticmethod
|
||||
def _is_generic_failure_text(message: Optional[str]) -> bool:
|
||||
@@ -136,6 +140,12 @@ class InstallerThread(QThread):
|
||||
error = parse_engine_error_line(line)
|
||||
if error and self.last_error is None:
|
||||
self.last_error = error
|
||||
try:
|
||||
obj = json.loads(line)
|
||||
if obj.get("type") == "disk_full":
|
||||
self._last_error_raw_context = obj.get("context") or {}
|
||||
except (json.JSONDecodeError, ValueError):
|
||||
pass
|
||||
else:
|
||||
if self.last_error is None and is_cc_content_error(line):
|
||||
self.last_error = cc_content_missing(extract_cc_filename(line) or "")
|
||||
@@ -265,6 +275,9 @@ class InstallerThread(QThread):
|
||||
if debug_mode:
|
||||
cmd.append('--debug')
|
||||
logger.debug("DEBUG: Added --debug flag to jackify-engine command")
|
||||
if self.skip_disk_check:
|
||||
cmd.append('--skip-disk-check')
|
||||
logger.debug("DEBUG: Added --skip-disk-check flag to jackify-engine command")
|
||||
logger.debug(f"DEBUG: FULL Engine command: {' '.join(cmd)}")
|
||||
logger.debug(f"DEBUG: modlist value being passed: '{self.modlist}'")
|
||||
from jackify.backend.handlers.subprocess_utils import get_clean_subprocess_env
|
||||
@@ -361,6 +374,7 @@ class InstallerThread(QThread):
|
||||
logger.debug(f"DEBUG: Parser detected {len(progress_state.active_files)} active files from line: {decoded[:80]}")
|
||||
self.progress_updated.emit(progress_state)
|
||||
if '[FILE_PROGRESS]' in decoded:
|
||||
self._install_progress_started = True
|
||||
parts = decoded.split('[FILE_PROGRESS]', 1)
|
||||
if parts[0].strip():
|
||||
self.progress_received.emit(parts[0].rstrip())
|
||||
@@ -427,6 +441,7 @@ class InstallerThread(QThread):
|
||||
continue
|
||||
self._remember_stdout_line(decoded)
|
||||
if '[FILE_PROGRESS]' in decoded:
|
||||
self._install_progress_started = True
|
||||
parts = decoded.split('[FILE_PROGRESS]', 1)
|
||||
if parts[0].strip():
|
||||
self.output_received.emit(parts[0].rstrip())
|
||||
|
||||
@@ -406,6 +406,18 @@ class ProgressHandlersMixin:
|
||||
if self._premium_failure_active:
|
||||
message = "Installation stopped because Nexus Premium is required for automated downloads."
|
||||
|
||||
if not self._premium_failure_active and not cancellation_detected:
|
||||
thread = getattr(self, 'install_thread', None)
|
||||
if (thread
|
||||
and not getattr(thread, '_install_progress_started', False)
|
||||
and getattr(getattr(thread, 'last_error', None), 'title', '') == "Disk Full"):
|
||||
ctx = getattr(thread, '_last_error_raw_context', {})
|
||||
if self._handle_preflight_disk_space(ctx):
|
||||
return
|
||||
self._installation_cancelled = True
|
||||
self.process_finished(130, QProcess.NormalExit)
|
||||
return
|
||||
|
||||
if not self._premium_failure_active:
|
||||
engine_error = getattr(self.install_thread, 'last_error', None)
|
||||
if engine_error:
|
||||
@@ -417,6 +429,68 @@ class ProgressHandlersMixin:
|
||||
self._safe_append_text(f"\nError: {message}")
|
||||
self.process_finished(1, QProcess.CrashExit) # Simulate error
|
||||
|
||||
def _handle_preflight_disk_space(self, ctx: dict) -> bool:
|
||||
"""Show pre-flight disk space warning dialog. Returns True if user chose Continue Anyway."""
|
||||
required_bytes = ctx.get('required_bytes', 0)
|
||||
available_bytes = ctx.get('available_bytes', 0)
|
||||
|
||||
def _fmt(b):
|
||||
if b >= 1024 ** 3:
|
||||
return f"{b / 1024 ** 3:.1f} GB"
|
||||
if b >= 1024 ** 2:
|
||||
return f"{b / 1024 ** 2:.1f} MB"
|
||||
return f"{b} bytes" if b else "unknown"
|
||||
|
||||
required_str = _fmt(required_bytes)
|
||||
available_str = _fmt(available_bytes)
|
||||
|
||||
body = (
|
||||
f"The disk space check reports that there may not be enough free space to complete "
|
||||
f"this installation.\n\n"
|
||||
f"Required: {required_str}\n"
|
||||
f"Available: {available_str}\n\n"
|
||||
f"If this is a modlist update, the actual space needed is likely far less — most files "
|
||||
f"are already present and will be reused rather than re-downloaded.\n\n"
|
||||
f"You can continue and free up space while downloads are running, "
|
||||
f"or cancel to resolve the space issue first."
|
||||
)
|
||||
|
||||
from PySide6.QtWidgets import QMessageBox
|
||||
dlg = QMessageBox(self)
|
||||
dlg.setWindowTitle("Disk Space Warning")
|
||||
dlg.setText("Not enough free disk space detected.")
|
||||
dlg.setInformativeText(body)
|
||||
dlg.setIcon(QMessageBox.Warning)
|
||||
continue_btn = dlg.addButton("Continue Anyway", QMessageBox.AcceptRole)
|
||||
dlg.addButton("Cancel", QMessageBox.RejectRole)
|
||||
dlg.setDefaultButton(continue_btn)
|
||||
dlg.exec()
|
||||
|
||||
if dlg.clickedButton() is not continue_btn:
|
||||
return False
|
||||
|
||||
thread = getattr(self, 'install_thread', None)
|
||||
if not thread:
|
||||
return False
|
||||
|
||||
modlist = getattr(thread, 'modlist', None)
|
||||
install_dir = getattr(thread, 'install_dir', None)
|
||||
downloads_dir = getattr(thread, 'downloads_dir', None)
|
||||
api_key = getattr(thread, 'api_key', None)
|
||||
install_mode = getattr(thread, 'install_mode', 'online')
|
||||
oauth_info = getattr(thread, 'oauth_info', None)
|
||||
|
||||
if not (modlist and install_dir and downloads_dir and api_key):
|
||||
return False
|
||||
|
||||
logger.info("Pre-flight disk space check bypassed by user — restarting with --skip-disk-check")
|
||||
self._safe_append_text("\n[WARN] Disk space check bypassed. Continuing installation...\n")
|
||||
self.run_modlist_installer(
|
||||
modlist, install_dir, downloads_dir, api_key,
|
||||
install_mode, oauth_info, skip_disk_check=True,
|
||||
)
|
||||
return True
|
||||
|
||||
def process_finished(self, exit_code, exit_status):
|
||||
logger.debug(f"DEBUG: process_finished called with exit_code={exit_code}, exit_status={exit_status}")
|
||||
# Reset button states
|
||||
|
||||
@@ -384,7 +384,7 @@ class InstallWorkflowExecutionMixin:
|
||||
self.cancel_install_btn.setVisible(False)
|
||||
logger.debug(f"DEBUG: Controls re-enabled in exception handler")
|
||||
|
||||
def run_modlist_installer(self, modlist, install_dir, downloads_dir, api_key, install_mode='online', oauth_info=None):
|
||||
def run_modlist_installer(self, modlist, install_dir, downloads_dir, api_key, install_mode='online', oauth_info=None, skip_disk_check=False):
|
||||
logger.debug('DEBUG: run_modlist_installer called - USING THREADED BACKEND WRAPPER')
|
||||
|
||||
# Rotate log file at start of each workflow run (keep 5 backups)
|
||||
@@ -408,7 +408,8 @@ class InstallWorkflowExecutionMixin:
|
||||
modlist, install_dir, downloads_dir, api_key, self.modlist_name_edit.text().strip(), install_mode,
|
||||
progress_state_manager=self.progress_state_manager, # R&D: Pass progress state manager
|
||||
auth_service=self.auth_service, # Fix Issue #127: Pass auth_service for Premium detection diagnostics
|
||||
oauth_info=oauth_info # Pass OAuth state for auto-refresh
|
||||
oauth_info=oauth_info, # Pass OAuth state for auto-refresh
|
||||
skip_disk_check=skip_disk_check,
|
||||
)
|
||||
self.install_thread.output_received.connect(self.on_installation_output)
|
||||
self.install_thread.progress_received.connect(self.on_installation_progress)
|
||||
|
||||
Reference in New Issue
Block a user