From ce969eba1bea273f12daa76fe7a9c0f99c7b415a Mon Sep 17 00:00:00 2001 From: Omni Date: Sat, 6 Dec 2025 20:09:55 +0000 Subject: [PATCH] Sync from development - prepare for v0.2.0 --- CHANGELOG.md | 107 + jackify/__init__.py | 2 +- jackify/backend/core/modlist_operations.py | 171 +- jackify/backend/handlers/config_handler.py | 314 ++- jackify/backend/handlers/hoolamike_handler.py | 1415 ----------- jackify/backend/handlers/menu_handler.py | 54 - jackify/backend/handlers/modlist_handler.py | 44 +- .../backend/handlers/modlist_install_cli.py | 221 +- .../backend/handlers/oauth_token_handler.py | 434 ++++ jackify/backend/handlers/path_handler.py | 249 +- jackify/backend/handlers/progress_parser.py | 1167 ++++++++++ .../handlers/progress_parser_example.py | 51 + .../backend/handlers/protontricks_handler.py | 406 +++- jackify/backend/handlers/shortcut_handler.py | 5 +- jackify/backend/handlers/subprocess_utils.py | 112 +- .../backend/handlers/ttw_installer_handler.py | 742 ++++++ jackify/backend/handlers/wine_utils.py | 4 +- .../backend/handlers/winetricks_handler.py | 344 +-- jackify/backend/models/configuration.py | 6 +- jackify/backend/models/modlist_metadata.py | 216 ++ .../services/automated_prefix_service.py | 117 +- .../services/modlist_gallery_service.py | 474 ++++ jackify/backend/services/modlist_service.py | 20 +- .../backend/services/native_steam_service.py | 30 +- .../backend/services/nexus_auth_service.py | 258 ++ .../backend/services/nexus_oauth_service.py | 759 ++++++ .../protontricks_detection_service.py | 68 +- .../backend/services/steam_restart_service.py | 251 +- jackify/backend/utils/__init__.py | 3 + .../backend/utils/nexus_premium_detector.py | 46 + jackify/engine/Microsoft.CSharp.dll | Bin 817424 -> 817416 bytes jackify/engine/Microsoft.VisualBasic.Core.dll | Bin 1218832 -> 1218824 bytes jackify/engine/Microsoft.VisualBasic.dll | Bin 17680 -> 17672 bytes jackify/engine/Microsoft.Win32.Primitives.dll | Bin 15632 -> 15624 bytes jackify/engine/Microsoft.Win32.Registry.dll | Bin 33040 -> 33064 bytes jackify/engine/System.AppContext.dll | Bin 15656 -> 15640 bytes jackify/engine/System.Buffers.dll | Bin 15632 -> 15656 bytes .../engine/System.Collections.Concurrent.dll | Bin 255760 -> 255768 bytes .../engine/System.Collections.Immutable.dll | Bin 755984 -> 756008 bytes .../engine/System.Collections.NonGeneric.dll | Bin 93992 -> 94008 bytes .../engine/System.Collections.Specialized.dll | Bin 93992 -> 93960 bytes jackify/engine/System.Collections.dll | Bin 252688 -> 252728 bytes .../System.ComponentModel.Annotations.dll | Bin 192784 -> 192792 bytes .../System.ComponentModel.DataAnnotations.dll | Bin 17192 -> 17192 bytes .../System.ComponentModel.EventBasedAsync.dll | Bin 36656 -> 36656 bytes .../System.ComponentModel.Primitives.dll | Bin 71464 -> 71448 bytes .../System.ComponentModel.TypeConverter.dll | Bin 748304 -> 748296 bytes jackify/engine/System.ComponentModel.dll | Bin 17672 -> 17704 bytes jackify/engine/System.Configuration.dll | Bin 19752 -> 19720 bytes jackify/engine/System.Console.dll | Bin 200456 -> 200488 bytes jackify/engine/System.Core.dll | Bin 23824 -> 23864 bytes jackify/engine/System.Data.Common.dll | Bin 2899216 -> 2899256 bytes .../engine/System.Data.DataSetExtensions.dll | Bin 16184 -> 16184 bytes jackify/engine/System.Data.dll | Bin 25360 -> 25352 bytes .../engine/System.Diagnostics.Contracts.dll | Bin 16656 -> 16656 bytes jackify/engine/System.Diagnostics.Debug.dll | Bin 16168 -> 16168 bytes .../System.Diagnostics.FileVersionInfo.dll | Bin 43280 -> 43272 bytes jackify/engine/System.Diagnostics.Process.dll | Bin 273160 -> 273208 bytes .../engine/System.Diagnostics.StackTrace.dll | Bin 31016 -> 31032 bytes ...em.Diagnostics.TextWriterTraceListener.dll | Bin 60176 -> 60168 bytes jackify/engine/System.Diagnostics.Tools.dll | Bin 15632 -> 15648 bytes .../engine/System.Diagnostics.TraceSource.dll | Bin 134920 -> 134952 bytes jackify/engine/System.Diagnostics.Tracing.dll | Bin 16672 -> 16680 bytes jackify/engine/System.Drawing.Primitives.dll | Bin 125216 -> 125224 bytes jackify/engine/System.Drawing.dll | Bin 20776 -> 20752 bytes jackify/engine/System.Dynamic.Runtime.dll | Bin 16680 -> 16672 bytes jackify/engine/System.Formats.Asn1.dll | Bin 230672 -> 230664 bytes jackify/engine/System.Formats.Tar.dll | Bin 277816 -> 277800 bytes .../engine/System.Globalization.Calendars.dll | Bin 16168 -> 16160 bytes .../System.Globalization.Extensions.dll | Bin 15656 -> 15640 bytes jackify/engine/System.Globalization.dll | Bin 16160 -> 16144 bytes .../engine/System.IO.Compression.Brotli.dll | Bin 72464 -> 72456 bytes .../System.IO.Compression.FileSystem.dll | Bin 15656 -> 15640 bytes .../engine/System.IO.Compression.ZipFile.dll | Bin 55568 -> 55592 bytes jackify/engine/System.IO.Compression.dll | Bin 259872 -> 259856 bytes .../System.IO.FileSystem.AccessControl.dll | Bin 32040 -> 32040 bytes .../engine/System.IO.FileSystem.DriveInfo.dll | Bin 78616 -> 78600 bytes .../System.IO.FileSystem.Primitives.dll | Bin 15656 -> 15624 bytes .../engine/System.IO.FileSystem.Watcher.dll | Bin 102160 -> 102184 bytes jackify/engine/System.IO.FileSystem.dll | Bin 16144 -> 16152 bytes jackify/engine/System.IO.IsolatedStorage.dll | Bin 77072 -> 77096 bytes .../engine/System.IO.MemoryMappedFiles.dll | Bin 80160 -> 80152 bytes .../engine/System.IO.Pipes.AccessControl.dll | Bin 23824 -> 23816 bytes jackify/engine/System.IO.Pipes.dll | Bin 127248 -> 127240 bytes .../System.IO.UnmanagedMemoryStream.dll | Bin 15632 -> 15656 bytes jackify/engine/System.IO.dll | Bin 16160 -> 16168 bytes jackify/engine/System.Linq.Expressions.dll | Bin 3766544 -> 3766552 bytes jackify/engine/System.Linq.Parallel.dll | Bin 798480 -> 798504 bytes jackify/engine/System.Linq.Queryable.dll | Bin 168208 -> 168232 bytes jackify/engine/System.Linq.dll | Bin 530184 -> 530216 bytes jackify/engine/System.Memory.dll | Bin 147728 -> 147720 bytes jackify/engine/System.Net.Http.Json.dll | Bin 120112 -> 120080 bytes jackify/engine/System.Net.Http.dll | Bin 1710352 -> 1710376 bytes jackify/engine/System.Net.HttpListener.dll | Bin 296720 -> 296760 bytes jackify/engine/System.Net.Mail.dll | Bin 424208 -> 424232 bytes jackify/engine/System.Net.NameResolution.dll | Bin 84752 -> 84792 bytes .../engine/System.Net.NetworkInformation.dll | Bin 170792 -> 170792 bytes jackify/engine/System.Net.Ping.dll | Bin 101136 -> 101160 bytes jackify/engine/System.Net.Primitives.dll | Bin 229640 -> 229640 bytes jackify/engine/System.Net.Quic.dll | Bin 281360 -> 281400 bytes jackify/engine/System.Net.Requests.dll | Bin 341280 -> 341288 bytes jackify/engine/System.Net.Security.dll | Bin 804136 -> 804136 bytes jackify/engine/System.Net.ServicePoint.dll | Bin 35592 -> 35624 bytes jackify/engine/System.Net.Sockets.dll | Bin 593696 -> 593704 bytes jackify/engine/System.Net.WebClient.dll | Bin 163640 -> 163616 bytes .../engine/System.Net.WebHeaderCollection.dll | Bin 57616 -> 57640 bytes jackify/engine/System.Net.WebProxy.dll | Bin 33560 -> 33576 bytes .../engine/System.Net.WebSockets.Client.dll | Bin 90408 -> 90408 bytes jackify/engine/System.Net.WebSockets.dll | Bin 180512 -> 180496 bytes jackify/engine/System.Net.dll | Bin 17704 -> 17696 bytes jackify/engine/System.Numerics.Vectors.dll | Bin 16144 -> 16136 bytes jackify/engine/System.Numerics.dll | Bin 15648 -> 15632 bytes jackify/engine/System.ObjectModel.dll | Bin 68880 -> 68920 bytes jackify/engine/System.Private.CoreLib.dll | Bin 12784440 -> 12784424 bytes ...stem.Private.DataContractSerialization.dll | Bin 2098448 -> 2098472 bytes jackify/engine/System.Private.Uri.dll | Bin 249128 -> 249104 bytes jackify/engine/System.Private.Xml.Linq.dll | Bin 400144 -> 400144 bytes jackify/engine/System.Private.Xml.dll | Bin 8133904 -> 8133896 bytes .../System.Reflection.DispatchProxy.dll | Bin 65848 -> 65816 bytes .../System.Reflection.Emit.ILGeneration.dll | Bin 16184 -> 16136 bytes .../System.Reflection.Emit.Lightweight.dll | Bin 16144 -> 16168 bytes jackify/engine/System.Reflection.Emit.dll | Bin 119072 -> 119056 bytes .../engine/System.Reflection.Extensions.dll | Bin 15672 -> 15656 bytes jackify/engine/System.Reflection.Metadata.dll | Bin 1098024 -> 1097992 bytes .../engine/System.Reflection.Primitives.dll | Bin 16152 -> 16136 bytes .../System.Reflection.TypeExtensions.dll | Bin 32048 -> 32032 bytes jackify/engine/System.Reflection.dll | Bin 16656 -> 16656 bytes jackify/engine/System.Resources.Reader.dll | Bin 15648 -> 15624 bytes .../System.Resources.ResourceManager.dll | Bin 16168 -> 16144 bytes jackify/engine/System.Resources.Writer.dll | Bin 43296 -> 43288 bytes ...System.Runtime.CompilerServices.Unsafe.dll | Bin 15656 -> 15624 bytes ...ystem.Runtime.CompilerServices.VisualC.dll | Bin 19728 -> 19728 bytes jackify/engine/System.Runtime.Extensions.dll | Bin 18192 -> 18208 bytes jackify/engine/System.Runtime.Handles.dll | Bin 15664 -> 15624 bytes ...tem.Runtime.InteropServices.JavaScript.dll | Bin 39184 -> 39208 bytes ...ime.InteropServices.RuntimeInformation.dll | Bin 15648 -> 15672 bytes .../engine/System.Runtime.InteropServices.dll | Bin 86304 -> 86280 bytes jackify/engine/System.Runtime.Intrinsics.dll | Bin 17192 -> 17168 bytes jackify/engine/System.Runtime.Loader.dll | Bin 16144 -> 16136 bytes jackify/engine/System.Runtime.Numerics.dll | Bin 305968 -> 306984 bytes ...ystem.Runtime.Serialization.Formatters.dll | Bin 305936 -> 305968 bytes .../System.Runtime.Serialization.Json.dll | Bin 16144 -> 16160 bytes ...ystem.Runtime.Serialization.Primitives.dll | Bin 28944 -> 28968 bytes .../System.Runtime.Serialization.Xml.dll | Bin 17168 -> 17176 bytes .../engine/System.Runtime.Serialization.dll | Bin 17192 -> 17192 bytes jackify/engine/System.Runtime.dll | Bin 43792 -> 43816 bytes .../engine/System.Security.AccessControl.dll | Bin 58640 -> 58680 bytes jackify/engine/System.Security.Claims.dll | Bin 90384 -> 90408 bytes ...ystem.Security.Cryptography.Algorithms.dll | Bin 17704 -> 17720 bytes .../System.Security.Cryptography.Cng.dll | Bin 16656 -> 16680 bytes .../System.Security.Cryptography.Csp.dll | Bin 16144 -> 16136 bytes .../System.Security.Cryptography.Encoding.dll | Bin 16176 -> 16152 bytes .../System.Security.Cryptography.OpenSsl.dll | Bin 15632 -> 15640 bytes ...ystem.Security.Cryptography.Primitives.dll | Bin 16144 -> 16144 bytes ...Security.Cryptography.X509Certificates.dll | Bin 17192 -> 17160 bytes .../engine/System.Security.Cryptography.dll | Bin 2193720 -> 2193696 bytes .../System.Security.Principal.Windows.dll | Bin 37688 -> 37672 bytes jackify/engine/System.Security.Principal.dll | Bin 15632 -> 15672 bytes .../engine/System.Security.SecureString.dll | Bin 15656 -> 15672 bytes jackify/engine/System.Security.dll | Bin 18720 -> 18696 bytes jackify/engine/System.ServiceModel.Web.dll | Bin 17192 -> 17176 bytes jackify/engine/System.ServiceProcess.dll | Bin 16144 -> 16168 bytes .../engine/System.Text.Encoding.CodePages.dll | Bin 852776 -> 852784 bytes .../System.Text.Encoding.Extensions.dll | Bin 16160 -> 16152 bytes jackify/engine/System.Text.Encoding.dll | Bin 16184 -> 16144 bytes .../engine/System.Text.RegularExpressions.dll | Bin 1022760 -> 1022752 bytes jackify/engine/System.Threading.Channels.dll | Bin 122144 -> 122120 bytes .../engine/System.Threading.Overlapped.dll | Bin 16144 -> 16160 bytes .../System.Threading.Tasks.Dataflow.dll | Bin 489768 -> 489768 bytes .../System.Threading.Tasks.Extensions.dll | Bin 16176 -> 16152 bytes .../System.Threading.Tasks.Parallel.dll | Bin 124728 -> 124712 bytes jackify/engine/System.Threading.Tasks.dll | Bin 17176 -> 17168 bytes jackify/engine/System.Threading.Thread.dll | Bin 16144 -> 16168 bytes .../engine/System.Threading.ThreadPool.dll | Bin 16160 -> 16168 bytes jackify/engine/System.Threading.Timer.dll | Bin 15656 -> 15632 bytes jackify/engine/System.Threading.dll | Bin 74024 -> 74040 bytes jackify/engine/System.Transactions.Local.dll | Bin 365368 -> 365320 bytes jackify/engine/System.Transactions.dll | Bin 16696 -> 16680 bytes jackify/engine/System.ValueTuple.dll | Bin 15648 -> 15656 bytes jackify/engine/System.Web.HttpUtility.dll | Bin 49960 -> 49976 bytes jackify/engine/System.Web.dll | Bin 15648 -> 15632 bytes jackify/engine/System.Windows.dll | Bin 16168 -> 16160 bytes jackify/engine/System.Xml.Linq.dll | Bin 16168 -> 16144 bytes jackify/engine/System.Xml.ReaderWriter.dll | Bin 22288 -> 22288 bytes jackify/engine/System.Xml.Serialization.dll | Bin 16656 -> 16664 bytes jackify/engine/System.Xml.XDocument.dll | Bin 16144 -> 16168 bytes jackify/engine/System.Xml.XPath.XDocument.dll | Bin 17704 -> 17704 bytes jackify/engine/System.Xml.XPath.dll | Bin 16144 -> 16136 bytes jackify/engine/System.Xml.XmlDocument.dll | Bin 16176 -> 16152 bytes jackify/engine/System.Xml.XmlSerializer.dll | Bin 18192 -> 18192 bytes jackify/engine/System.Xml.dll | Bin 23848 -> 23824 bytes jackify/engine/System.dll | Bin 50448 -> 50440 bytes jackify/engine/Wabbajack.CLI.Builder.dll | Bin 13824 -> 13824 bytes jackify/engine/Wabbajack.Common.dll | Bin 202752 -> 207872 bytes jackify/engine/Wabbajack.Compiler.dll | Bin 160256 -> 160256 bytes jackify/engine/Wabbajack.Compression.BSA.dll | Bin 94720 -> 94720 bytes jackify/engine/Wabbajack.Compression.Zip.dll | Bin 18944 -> 18944 bytes jackify/engine/Wabbajack.Configuration.dll | Bin 4608 -> 4096 bytes jackify/engine/Wabbajack.DTOs.dll | Bin 142336 -> 142336 bytes .../engine/Wabbajack.Downloaders.Bethesda.dll | Bin 18432 -> 18432 bytes .../Wabbajack.Downloaders.Dispatcher.dll | Bin 27136 -> 29184 bytes .../engine/Wabbajack.Downloaders.GameFile.dll | Bin 16384 -> 16384 bytes .../Wabbajack.Downloaders.GoogleDrive.dll | Bin 17920 -> 17920 bytes jackify/engine/Wabbajack.Downloaders.Http.dll | Bin 15872 -> 15872 bytes ...ajack.Downloaders.IPS4OAuth2Downloader.dll | Bin 35328 -> 35328 bytes .../Wabbajack.Downloaders.Interfaces.dll | Bin 7168 -> 7168 bytes .../engine/Wabbajack.Downloaders.Manual.dll | Bin 9216 -> 9216 bytes .../Wabbajack.Downloaders.MediaFire.dll | Bin 15872 -> 15872 bytes jackify/engine/Wabbajack.Downloaders.Mega.dll | Bin 16384 -> 16384 bytes .../engine/Wabbajack.Downloaders.ModDB.dll | Bin 19456 -> 19456 bytes .../engine/Wabbajack.Downloaders.Nexus.dll | Bin 23552 -> 23552 bytes ...abbajack.Downloaders.VerificationCache.dll | Bin 13824 -> 13824 bytes .../Wabbajack.Downloaders.WabbajackCDN.dll | Bin 24576 -> 24576 bytes jackify/engine/Wabbajack.FileExtractor.dll | Bin 75776 -> 77312 bytes jackify/engine/Wabbajack.Hashing.PHash.dll | Bin 43520 -> 49664 bytes jackify/engine/Wabbajack.Hashing.xxHash64.dll | Bin 21504 -> 21504 bytes jackify/engine/Wabbajack.IO.Async.dll | Bin 15360 -> 15360 bytes jackify/engine/Wabbajack.Installer.dll | Bin 122880 -> 133632 bytes .../Wabbajack.Networking.BethesdaNet.dll | Bin 39936 -> 39936 bytes .../engine/Wabbajack.Networking.Discord.dll | Bin 14336 -> 14336 bytes .../engine/Wabbajack.Networking.GitHub.dll | Bin 21504 -> 21504 bytes .../Wabbajack.Networking.Http.Interfaces.dll | Bin 5632 -> 5632 bytes jackify/engine/Wabbajack.Networking.Http.dll | Bin 29184 -> 29696 bytes .../engine/Wabbajack.Networking.NexusApi.dll | Bin 62976 -> 62976 bytes ...abbajack.Networking.WabbajackClientApi.dll | Bin 77824 -> 77824 bytes jackify/engine/Wabbajack.Paths.IO.dll | Bin 33280 -> 33280 bytes jackify/engine/Wabbajack.Paths.dll | Bin 17408 -> 17408 bytes jackify/engine/Wabbajack.RateLimiter.dll | Bin 24064 -> 24064 bytes jackify/engine/Wabbajack.Server.Lib.dll | Bin 6656 -> 6656 bytes .../Wabbajack.Services.OSIntegrated.dll | Bin 54784 -> 54784 bytes jackify/engine/Wabbajack.VFS.Interfaces.dll | Bin 5120 -> 5120 bytes jackify/engine/Wabbajack.VFS.dll | Bin 64512 -> 64512 bytes jackify/engine/WindowsBase.dll | Bin 16680 -> 16680 bytes jackify/engine/createdump | Bin 108688 -> 108688 bytes jackify/engine/jackify-engine | Bin 72568 -> 72568 bytes jackify/engine/jackify-engine.deps.json | 786 +++---- jackify/engine/jackify-engine.dll | Bin 194560 -> 218624 bytes .../engine/jackify-engine.runtimeconfig.json | 2 +- .../engine/libSystem.Globalization.Native.so | Bin 60560 -> 60560 bytes .../engine/libSystem.IO.Compression.Native.so | Bin 867416 -> 867416 bytes jackify/engine/libSystem.Native.so | Bin 90512 -> 90544 bytes .../engine/libSystem.Net.Security.Native.so | Bin 13544 -> 13544 bytes ...em.Security.Cryptography.Native.OpenSsl.so | Bin 160288 -> 160288 bytes jackify/engine/libclrgc.so | Bin 823720 -> 823752 bytes jackify/engine/libclrjit.so | Bin 3612176 -> 3612176 bytes jackify/engine/libcoreclr.so | Bin 6906232 -> 6905880 bytes jackify/engine/libcoreclrtraceptprovider.so | Bin 760632 -> 760632 bytes jackify/engine/libhostfxr.so | Bin 288784 -> 288848 bytes jackify/engine/libhostpolicy.so | Bin 309728 -> 309792 bytes jackify/engine/libmscordaccore.so | Bin 2430048 -> 2430048 bytes jackify/engine/libmscordbi.so | Bin 1625304 -> 1625304 bytes jackify/engine/mscorlib.dll | Bin 59680 -> 59688 bytes jackify/engine/netstandard.dll | Bin 101160 -> 101136 bytes jackify/frontends/cli/main.py | 24 +- jackify/frontends/cli/menus/__init__.py | 2 - .../frontends/cli/menus/additional_menu.py | 246 +- jackify/frontends/cli/menus/hoolamike_menu.py | 32 - jackify/frontends/gui/__main__.py | 118 +- jackify/frontends/gui/dialogs/about_dialog.py | 7 +- .../frontends/gui/dialogs/warning_dialog.py | 83 +- jackify/frontends/gui/main.py | 772 +++++- .../frontends/gui/screens/additional_tasks.py | 72 +- .../gui/screens/configure_existing_modlist.py | 446 +++- .../gui/screens/configure_new_modlist.py | 277 ++- .../frontends/gui/screens/install_modlist.py | 2069 ++++++++++++++--- jackify/frontends/gui/screens/install_ttw.py | 1527 ++++++++---- .../gui/screens/install_ttw_simple_output.py | 63 + jackify/frontends/gui/screens/main_menu.py | 72 +- .../frontends/gui/screens/modlist_gallery.py | 1500 ++++++++++++ .../frontends/gui/screens/modlist_tasks.py | 71 +- jackify/frontends/gui/shared_theme.py | 2 +- jackify/frontends/gui/utils.py | 273 ++- .../gui/widgets/file_progress_list.py | 848 +++++++ .../gui/widgets/progress_indicator.py | 178 ++ jackify/shared/progress_models.py | 318 +++ jackify/shared/steam_utils.py | 77 + requirements.txt | 3 + 277 files changed, 14059 insertions(+), 3899 deletions(-) delete mode 100644 jackify/backend/handlers/hoolamike_handler.py create mode 100644 jackify/backend/handlers/oauth_token_handler.py create mode 100644 jackify/backend/handlers/progress_parser.py create mode 100644 jackify/backend/handlers/progress_parser_example.py create mode 100644 jackify/backend/handlers/ttw_installer_handler.py create mode 100644 jackify/backend/models/modlist_metadata.py create mode 100644 jackify/backend/services/modlist_gallery_service.py create mode 100644 jackify/backend/services/nexus_auth_service.py create mode 100644 jackify/backend/services/nexus_oauth_service.py create mode 100644 jackify/backend/utils/__init__.py create mode 100644 jackify/backend/utils/nexus_premium_detector.py mode change 100644 => 100755 jackify/engine/Microsoft.CSharp.dll mode change 100644 => 100755 jackify/engine/System.Collections.Concurrent.dll mode change 100644 => 100755 jackify/engine/System.Collections.Immutable.dll mode change 100644 => 100755 jackify/engine/System.Collections.NonGeneric.dll mode change 100644 => 100755 jackify/engine/System.Collections.Specialized.dll mode change 100644 => 100755 jackify/engine/System.Collections.dll mode change 100644 => 100755 jackify/engine/System.ComponentModel.EventBasedAsync.dll mode change 100644 => 100755 jackify/engine/System.ComponentModel.Primitives.dll mode change 100644 => 100755 jackify/engine/System.ComponentModel.TypeConverter.dll mode change 100644 => 100755 jackify/engine/System.ComponentModel.dll mode change 100644 => 100755 jackify/engine/System.Console.dll mode change 100644 => 100755 jackify/engine/System.Data.Common.dll mode change 100644 => 100755 jackify/engine/System.Diagnostics.FileVersionInfo.dll mode change 100644 => 100755 jackify/engine/System.Diagnostics.Process.dll mode change 100644 => 100755 jackify/engine/System.Diagnostics.StackTrace.dll mode change 100644 => 100755 jackify/engine/System.Diagnostics.TraceSource.dll mode change 100644 => 100755 jackify/engine/System.Drawing.Primitives.dll mode change 100644 => 100755 jackify/engine/System.Drawing.dll mode change 100644 => 100755 jackify/engine/System.Formats.Asn1.dll mode change 100644 => 100755 jackify/engine/System.IO.Compression.Brotli.dll mode change 100644 => 100755 jackify/engine/System.IO.Compression.ZipFile.dll mode change 100644 => 100755 jackify/engine/System.IO.Compression.dll mode change 100644 => 100755 jackify/engine/System.IO.FileSystem.DriveInfo.dll mode change 100644 => 100755 jackify/engine/System.IO.FileSystem.Watcher.dll mode change 100644 => 100755 jackify/engine/System.IO.MemoryMappedFiles.dll mode change 100644 => 100755 jackify/engine/System.IO.Pipes.dll mode change 100644 => 100755 jackify/engine/System.Linq.Expressions.dll mode change 100644 => 100755 jackify/engine/System.Linq.Parallel.dll mode change 100644 => 100755 jackify/engine/System.Linq.dll mode change 100644 => 100755 jackify/engine/System.Memory.dll mode change 100644 => 100755 jackify/engine/System.Net.Http.Json.dll mode change 100644 => 100755 jackify/engine/System.Net.Http.dll mode change 100644 => 100755 jackify/engine/System.Net.Mail.dll mode change 100644 => 100755 jackify/engine/System.Net.NameResolution.dll mode change 100644 => 100755 jackify/engine/System.Net.NetworkInformation.dll mode change 100644 => 100755 jackify/engine/System.Net.Primitives.dll mode change 100644 => 100755 jackify/engine/System.Net.Quic.dll mode change 100644 => 100755 jackify/engine/System.Net.Requests.dll mode change 100644 => 100755 jackify/engine/System.Net.Security.dll mode change 100644 => 100755 jackify/engine/System.Net.ServicePoint.dll mode change 100644 => 100755 jackify/engine/System.Net.Sockets.dll mode change 100644 => 100755 jackify/engine/System.Net.WebHeaderCollection.dll mode change 100644 => 100755 jackify/engine/System.Net.WebProxy.dll mode change 100644 => 100755 jackify/engine/System.ObjectModel.dll mode change 100644 => 100755 jackify/engine/System.Private.CoreLib.dll mode change 100644 => 100755 jackify/engine/System.Private.Uri.dll mode change 100644 => 100755 jackify/engine/System.Private.Xml.Linq.dll mode change 100644 => 100755 jackify/engine/System.Private.Xml.dll mode change 100644 => 100755 jackify/engine/System.Reflection.Metadata.dll mode change 100644 => 100755 jackify/engine/System.Runtime.Numerics.dll mode change 100644 => 100755 jackify/engine/System.Runtime.Serialization.Formatters.dll mode change 100644 => 100755 jackify/engine/System.Runtime.Serialization.Primitives.dll mode change 100644 => 100755 jackify/engine/System.Runtime.dll mode change 100644 => 100755 jackify/engine/System.Security.Claims.dll mode change 100644 => 100755 jackify/engine/System.Security.Cryptography.dll mode change 100644 => 100755 jackify/engine/System.Security.Principal.Windows.dll mode change 100644 => 100755 jackify/engine/System.Text.Encoding.CodePages.dll mode change 100644 => 100755 jackify/engine/System.Text.RegularExpressions.dll mode change 100644 => 100755 jackify/engine/System.Threading.Channels.dll mode change 100644 => 100755 jackify/engine/System.Threading.Tasks.Parallel.dll mode change 100644 => 100755 jackify/engine/System.Threading.dll mode change 100644 => 100755 jackify/engine/System.Transactions.Local.dll mode change 100644 => 100755 jackify/engine/System.Web.HttpUtility.dll mode change 100644 => 100755 jackify/engine/System.Xml.Linq.dll mode change 100644 => 100755 jackify/engine/System.dll delete mode 100644 jackify/frontends/cli/menus/hoolamike_menu.py create mode 100644 jackify/frontends/gui/screens/install_ttw_simple_output.py create mode 100644 jackify/frontends/gui/screens/modlist_gallery.py create mode 100644 jackify/frontends/gui/widgets/file_progress_list.py create mode 100644 jackify/frontends/gui/widgets/progress_indicator.py create mode 100644 jackify/shared/progress_models.py create mode 100644 jackify/shared/steam_utils.py diff --git a/CHANGELOG.md b/CHANGELOG.md index 1b7bede..1a059d6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,95 @@ # Jackify Changelog +## v0.2.0 - Modlist Gallery, OAuth Authentication & Performance Improvements +**Release Date:** 2025-12-06 + +### Major Features + +#### Modlist Selection Gallery +Complete overhaul of modlist selection (First pass): + +**Core Features:** +- Card-based Modlist Selection browser with modlist images, titles, authors and metadata +- Game-specific filtering automatically applied based on selected game type +- Details per card: download/install/total sizes, tags, version, badges +- Async image loading from GitHub with local 7-day caching +- Detail view with full descriptions, banner images, and external links +- Selected modlist automatically populates Install Modlist workflow + +**Search and Filtering:** +- Text search across modlist names and descriptions +- Multi-select tag filtering with normalized tags +- Show Official Only, Show NSFW, Hide Unavailable toggles +- Mod search capability - find modlists containing specific Nexus mods +- Randomised card ordering + +**Performance:** +- Gallery images loading from cache +- Background metadata and image preloading when Install Modlist screen opens +- Efficient rendering - cards created once, filters toggle visibility +- Non-blocking UI with concurrent image downloads + +**Steam Deck Optimized:** +- Dynamic card sizing (e.g 250x270 on Steam Deck, larger on desktop) +- Responsive grid layout (up to 4 columns on large screens, 3 on Steam Deck) +- Optimized spacing and padding for 1280x800 displays + +#### OAuth 2.0 Authentication +Modern authentication for Nexus Mods with secure token management: + +- One-click browser-based authorization with PKCE security +- Automatic token refresh with encrypted storage +- Authorisation status indicator on Install Modlist screen +- Works in both GUI and CLI workflows + +#### Compact Mode UI Redesign +Streamlined interface with dynamic window management: + +- Default compact mode with optional Details view +- Activity window tab (default), across all workflow screens +- Process Monitor tab still available +- Show Details toggle for console output when needed + +### Critical Fixes + +### Replaced TTW Installer +- Replaced the previous TTW Installer due to complexities with its config file + +#### GPU Texture Conversion (jackify-engine 0.4.0) +- Fixed GPU not being used for BC7/BC6H texture conversions +- Previous versions fell back to CPU-only despite GPU availability +- Added GPU toggle in Settings (enabled by default) + +#### Winetricks Compatibility & Protontricks +- Fixed bundled winetricks path incompatibility +- Hopefully fixed winetricks in cases where it failed to download components +- For now, Jackify still defaults to bundled winetricks (Protontricks toggle in settings) + +#### Steam Restart Reliability +- Enhanced Steam Restart so that is now hopefully works more reliably on all distros +- Fixed Flatpak detection blocking normal Steam start methods + +### Technical Improvements + +- Proton version usage clarified: Install Proton for installation/texture processing, Game Proton for shortcuts +- Centralised Steam detection in SystemInfo +- ConfigHandler refactored to always read fresh from disk +- Removed obsolete dotnet4.x code +- Enhanced Flatpak Steam compatdata detection with proper VDF parsing + +### Bug Fixes + +- TTW installation UI performance (batched output processing, non-blocking operations) +- Activity window animations (removed custom timers, Qt native rendering) +- Timer reset when returning from TTW screen +- Fixed bandwidth limit KB/s to bytes conversion +- Fixed AttributeError in AutomatedPrefixService.restart_steam() + +### Engine Updates +- jackify-engine 0.4.0 with GPU texture conversion fixes and refactored file progress reporting + +--- + ## v0.1.7.1 - Wine Component Verification & Flatpak Steam Fixes **Release Date:** November 11, 2025 @@ -479,6 +569,23 @@ laf - TTW Installation function using Hoolamike application - https://github.co - **Clean Architecture**: Removed obsolete service imports, initializations, and cleanup methods - **Code Quality**: Eliminated "tombstone comments" and unused service references +### Deferred Features (Available in Future Release) + +#### OAuth 2.0 Authentication for Nexus Mods +**Status:** Fully implemented but disabled pending Nexus Mods approval + +The OAuth 2.0 authentication system has been fully developed and tested, but is temporarily disabled in v0.1.8 as we await approval from Nexus Mods for our OAuth application. The backend code remains intact and will be re-enabled immediately upon approval. + +**Features (ready for deployment):** +- **Secure OAuth 2.0 + PKCE Flow**: Modern authentication to replace API key dependency +- **Encrypted Token Storage**: Tokens stored using Fernet encryption with automatic refresh +- **GUI Integration**: Clean status display on Install Modlist screen with authorize/revoke functionality +- **CLI Integration**: OAuth menu in Additional Tasks for command-line users +- **API Key Fallback**: Optional legacy API key support (configurable in Settings) +- **Unified Auth Service**: Single authentication layer supporting both OAuth and API key methods + +**Current Limitation:** Awaiting Nexus approval for `jackify://oauth/callback` custom URI. Once approved, OAuth will be enabled as the primary authentication method with API key as optional fallback. + ### Technical Details - **Single Shortcut Creation Path**: All workflows now use `run_working_workflow()` → `create_shortcut_with_native_service()` - **Service Layer Cleanup**: Removed dual codepath architecture in favor of proven automated workflows diff --git a/jackify/__init__.py b/jackify/__init__.py index 130752b..a01e7cb 100644 --- a/jackify/__init__.py +++ b/jackify/__init__.py @@ -5,4 +5,4 @@ This package provides both CLI and GUI interfaces for managing Wabbajack modlists natively on Linux systems. """ -__version__ = "0.1.7.1" +__version__ = "0.2.0" diff --git a/jackify/backend/core/modlist_operations.py b/jackify/backend/core/modlist_operations.py index 6d8b13f..4537407 100644 --- a/jackify/backend/core/modlist_operations.py +++ b/jackify/backend/core/modlist_operations.py @@ -30,6 +30,8 @@ def _get_user_proton_version(): from jackify.backend.handlers.wine_utils import WineUtils config_handler = ConfigHandler() + # Use Install Proton (not Game Proton) for installation/texture processing + # get_proton_path() returns the Install Proton path user_proton_path = config_handler.get_proton_path() if user_proton_path == 'auto': @@ -90,15 +92,15 @@ def get_jackify_engine_path(): logger.debug(f"Using engine from environment variable: {env_engine_path}") return env_engine_path - # Priority 2: PyInstaller bundle (most specific detection) + # Priority 2: Frozen bundle (most specific detection) if getattr(sys, 'frozen', False) and hasattr(sys, '_MEIPASS'): - # Running in a PyInstaller bundle + # Running inside a frozen bundle # Engine is expected at /jackify/engine/jackify-engine engine_path = os.path.join(sys._MEIPASS, 'jackify', 'engine', 'jackify-engine') if os.path.exists(engine_path): return engine_path # Fallback: log warning but continue to other detection methods - logger.warning(f"PyInstaller engine not found at expected path: {engine_path}") + logger.warning(f"Frozen-bundle engine not found at expected path: {engine_path}") # Priority 3: Check if THIS process is actually running from Jackify AppImage # (not just inheriting APPDIR from another AppImage like Cursor) @@ -123,7 +125,7 @@ def get_jackify_engine_path(): # If all else fails, log error and return the source path anyway logger.error(f"jackify-engine not found in any expected location. Tried:") - logger.error(f" PyInstaller: {getattr(sys, '_MEIPASS', 'N/A')}/jackify/engine/jackify-engine") + logger.error(f" Frozen bundle: {getattr(sys, '_MEIPASS', 'N/A')}/jackify/engine/jackify-engine") logger.error(f" AppImage: {appdir or 'N/A'}/opt/jackify/engine/jackify-engine") logger.error(f" Source: {engine_path}") logger.error("This will likely cause installation failures.") @@ -481,53 +483,76 @@ class ModlistInstallCLI: self.context['download_dir'] = download_dir_path self.logger.debug(f"Download directory context set to: {self.context['download_dir']}") - # 5. Prompt for Nexus API key (skip if in context and valid) + # 5. Get Nexus authentication (OAuth or API key) if 'nexus_api_key' not in self.context or not self.context.get('nexus_api_key'): - from jackify.backend.services.api_key_service import APIKeyService - api_key_service = APIKeyService() - saved_key = api_key_service.get_saved_api_key() - api_key = None - if saved_key: - print("\n" + "-" * 28) - print(f"{COLOR_INFO}A Nexus API Key is already saved.{COLOR_RESET}") - use_saved = input(f"{COLOR_PROMPT}Use the saved API key? [Y/n]: {COLOR_RESET}").strip().lower() - if use_saved in ('', 'y', 'yes'): - api_key = saved_key + from jackify.backend.services.nexus_auth_service import NexusAuthService + auth_service = NexusAuthService() + + # Get current auth status + authenticated, method, username = auth_service.get_auth_status() + + if authenticated: + # Already authenticated - use existing auth + if method == 'oauth': + print("\n" + "-" * 28) + print(f"{COLOR_SUCCESS}Nexus Authentication: Authorized via OAuth{COLOR_RESET}") + if username: + print(f"{COLOR_INFO}Logged in as: {username}{COLOR_RESET}") + elif method == 'api_key': + print("\n" + "-" * 28) + print(f"{COLOR_INFO}Nexus Authentication: Using API Key (Legacy){COLOR_RESET}") + + # Get valid token/key + api_key = auth_service.ensure_valid_auth() + if api_key: + self.context['nexus_api_key'] = api_key else: - new_key = input(f"{COLOR_PROMPT}Enter a new Nexus API Key (or press Enter to keep the saved one): {COLOR_RESET}").strip() - if new_key: - api_key = new_key - replace = input(f"{COLOR_PROMPT}Replace the saved key with this one? [y/N]: {COLOR_RESET}").strip().lower() - if replace == 'y': - if api_key_service.save_api_key(api_key): - print(f"{COLOR_SUCCESS}API key saved successfully.{COLOR_RESET}") - else: - print(f"{COLOR_WARNING}Failed to save API key. Using for this session only.{COLOR_RESET}") + # Auth expired or invalid - prompt to set up + print(f"\n{COLOR_WARNING}Your authentication has expired or is invalid.{COLOR_RESET}") + authenticated = False + + if not authenticated: + # Not authenticated - offer to set up OAuth + print("\n" + "-" * 28) + print(f"{COLOR_WARNING}Nexus Mods authentication is required for downloading mods.{COLOR_RESET}") + print(f"\n{COLOR_PROMPT}Would you like to authorize with Nexus now?{COLOR_RESET}") + print(f"{COLOR_INFO}This will open your browser for secure OAuth authorization.{COLOR_RESET}") + + authorize = input(f"{COLOR_PROMPT}Authorize now? [Y/n]: {COLOR_RESET}").strip().lower() + + if authorize in ('', 'y', 'yes'): + # Launch OAuth authorization + print(f"\n{COLOR_INFO}Starting OAuth authorization...{COLOR_RESET}") + print(f"{COLOR_WARNING}Your browser will open shortly.{COLOR_RESET}") + print(f"{COLOR_INFO}Note: You may see a security warning about a self-signed certificate.{COLOR_RESET}") + print(f"{COLOR_INFO}This is normal - click 'Advanced' and 'Proceed' to continue.{COLOR_RESET}") + + def show_message(msg): + print(f"\n{COLOR_INFO}{msg}{COLOR_RESET}") + + success = auth_service.authorize_oauth(show_browser_message_callback=show_message) + + if success: + print(f"\n{COLOR_SUCCESS}OAuth authorization successful!{COLOR_RESET}") + _, _, username = auth_service.get_auth_status() + if username: + print(f"{COLOR_INFO}Authorized as: {username}{COLOR_RESET}") + + api_key = auth_service.ensure_valid_auth() + if api_key: + self.context['nexus_api_key'] = api_key else: - print(f"{COLOR_INFO}Using new key for this session only. Saved key unchanged.{COLOR_RESET}") + print(f"{COLOR_ERROR}Failed to retrieve auth token after authorization.{COLOR_RESET}") + return None else: - api_key = saved_key - else: - print("\n" + "-" * 28) - print(f"{COLOR_INFO}A Nexus Mods API key is required for downloading mods.{COLOR_RESET}") - print(f"{COLOR_INFO}You can get your personal key at: {COLOR_SELECTION}https://www.nexusmods.com/users/myaccount?tab=api{COLOR_RESET}") - print(f"{COLOR_WARNING}Your API Key is NOT saved locally. It is used only for this session unless you choose to save it.{COLOR_RESET}") - api_key = input(f"{COLOR_PROMPT}Enter Nexus API Key (or 'q' to cancel): {COLOR_RESET}").strip() - if not api_key or api_key.lower() == 'q': - self.logger.info("User cancelled or provided no API key.") - return None - save = input(f"{COLOR_PROMPT}Would you like to save this API key for future use? [y/N]: {COLOR_RESET}").strip().lower() - if save == 'y': - if api_key_service.save_api_key(api_key): - print(f"{COLOR_SUCCESS}API key saved successfully.{COLOR_RESET}") - else: - print(f"{COLOR_WARNING}Failed to save API key. Using for this session only.{COLOR_RESET}") + print(f"\n{COLOR_ERROR}OAuth authorization failed.{COLOR_RESET}") + return None else: - print(f"{COLOR_INFO}Using API key for this session only. It will not be saved.{COLOR_RESET}") - - # Set the API key in context regardless of which path was taken - self.context['nexus_api_key'] = api_key - self.logger.debug(f"NEXUS_API_KEY is set in environment for engine (presence check).") + # User declined OAuth - cancelled + print(f"\n{COLOR_INFO}Authorization required to proceed. Installation cancelled.{COLOR_RESET}") + self.logger.info("User declined Nexus authorization.") + return None + self.logger.debug(f"Nexus authentication configured for engine.") # Display summary and confirm self._display_summary() # Ensure this method exists or implement it @@ -622,11 +647,23 @@ class ModlistInstallCLI: if isinstance(download_dir_display, tuple): download_dir_display = download_dir_display[0] # Get the Path object from (Path, bool) print(f"Download Directory: {download_dir_display}") - - if self.context.get('nexus_api_key'): - print(f"Nexus API Key: [SET]") + + # Show authentication method + from jackify.backend.services.nexus_auth_service import NexusAuthService + auth_service = NexusAuthService() + authenticated, method, username = auth_service.get_auth_status() + + if method == 'oauth': + auth_display = f"Nexus Authentication: OAuth" + if username: + auth_display += f" ({username})" + elif method == 'api_key': + auth_display = "Nexus Authentication: API Key (Legacy)" else: - print(f"Nexus API Key: [NOT SET - WILL LIKELY FAIL]") + # Should never reach here since we validate auth before getting to summary + auth_display = "Nexus Authentication: Unknown" + + print(auth_display) print(f"{COLOR_INFO}----------------------------------------{COLOR_RESET}") def configuration_phase(self): @@ -719,7 +756,7 @@ class ModlistInstallCLI: # --- End Patch --- # Build command - cmd = [engine_path, 'install'] + cmd = [engine_path, 'install', '--show-file-progress'] # Determine if this is a local .wabbajack file or an online modlist modlist_value = self.context.get('modlist_value') if modlist_value and modlist_value.endswith('.wabbajack') and os.path.isfile(modlist_value): @@ -738,6 +775,12 @@ class ModlistInstallCLI: cmd.append('--debug') self.logger.info("Adding --debug flag to jackify-engine") + # Check GPU setting and add --no-gpu flag if disabled + gpu_enabled = config_handler.get('enable_gpu_texture_conversion', True) + if not gpu_enabled: + cmd.append('--no-gpu') + self.logger.info("GPU texture conversion disabled - adding --no-gpu flag to jackify-engine") + # Store original environment values to restore later original_env_values = { 'NEXUS_API_KEY': os.environ.get('NEXUS_API_KEY'), @@ -771,9 +814,11 @@ class ModlistInstallCLI: else: self.logger.warning(f"File descriptor limit: {message}") - # Popen now inherits the modified os.environ because env=None + # Use cleaned environment to prevent AppImage variable inheritance + from jackify.backend.handlers.subprocess_utils import get_clean_subprocess_env + clean_env = get_clean_subprocess_env() # Store process reference for cleanup - self._current_process = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, text=False, env=None, cwd=engine_dir) + self._current_process = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, text=False, env=clean_env, cwd=engine_dir) proc = self._current_process # Read output in binary mode to properly handle carriage returns @@ -1512,9 +1557,21 @@ class ModlistInstallCLI: if isinstance(download_dir_display, tuple): download_dir_display = download_dir_display[0] # Get the Path object from (Path, bool) print(f"Download Directory: {download_dir_display}") - - if self.context.get('nexus_api_key'): - print(f"Nexus API Key: [SET]") + + # Show authentication method + from jackify.backend.services.nexus_auth_service import NexusAuthService + auth_service = NexusAuthService() + authenticated, method, username = auth_service.get_auth_status() + + if method == 'oauth': + auth_display = f"Nexus Authentication: OAuth" + if username: + auth_display += f" ({username})" + elif method == 'api_key': + auth_display = "Nexus Authentication: API Key (Legacy)" else: - print(f"Nexus API Key: [NOT SET - WILL LIKELY FAIL]") + # Should never reach here since we validate auth before getting to summary + auth_display = "Nexus Authentication: Unknown" + + print(auth_display) print(f"{COLOR_INFO}----------------------------------------{COLOR_RESET}") \ No newline at end of file diff --git a/jackify/backend/handlers/config_handler.py b/jackify/backend/handlers/config_handler.py index fba8633..88909bd 100644 --- a/jackify/backend/handlers/config_handler.py +++ b/jackify/backend/handlers/config_handler.py @@ -11,7 +11,9 @@ import logging import shutil import re import base64 +import hashlib from pathlib import Path +from typing import Optional # Initialize logger logger = logging.getLogger(__name__) @@ -40,7 +42,7 @@ class ConfigHandler: self.config_dir = os.path.expanduser("~/.config/jackify") self.config_file = os.path.join(self.config_dir, "config.json") self.settings = { - "version": "0.0.5", + "version": "0.2.0", "last_selected_modlist": None, "steam_libraries": [], "resolution": None, @@ -52,13 +54,20 @@ class ConfigHandler: "modlist_install_base_dir": os.path.expanduser("~/Games"), # Configurable base directory for modlist installations "modlist_downloads_base_dir": os.path.expanduser("~/Games/Modlist_Downloads"), # Configurable base directory for downloads "jackify_data_dir": None, # Configurable Jackify data directory (default: ~/Jackify) - "use_winetricks_for_components": True, # True = use winetricks (faster), False = use protontricks for all (legacy) - "game_proton_path": None # Proton version for game shortcuts (can be any Proton 9+), separate from install proton + "use_winetricks_for_components": True, # DEPRECATED: Migrated to component_installation_method. Kept for backward compatibility. + "component_installation_method": "winetricks", # "winetricks" (default) or "system_protontricks" + "game_proton_path": None, # Proton version for game shortcuts (can be any Proton 9+), separate from install proton + "steam_restart_strategy": "jackify", # "jackify" (default) or "nak_simple" + "window_width": None, # Saved window width (None = use dynamic sizing) + "window_height": None # Saved window height (None = use dynamic sizing) } # Load configuration if exists self._load_config() + # Perform version migrations + self._migrate_config() + # If steam_path is not set, detect it if not self.settings["steam_path"]: self.settings["steam_path"] = self._detect_steam_path() @@ -115,7 +124,10 @@ class ConfigHandler: return None def _load_config(self): - """Load configuration from file""" + """ + Load configuration from file and update in-memory cache. + For legacy compatibility with initialization code. + """ try: if os.path.exists(self.config_file): with open(self.config_file, 'r') as f: @@ -129,6 +141,78 @@ class ConfigHandler: except Exception as e: logger.error(f"Error loading configuration: {e}") + def _migrate_config(self): + """ + Migrate configuration between versions + Handles breaking changes and data format updates + """ + current_version = self.settings.get("version", "0.0.0") + target_version = "0.2.0" + + if current_version == target_version: + return + + logger.info(f"Migrating config from {current_version} to {target_version}") + + # Migration: v0.0.x -> v0.2.0 + # Encryption changed from cryptography (Fernet) to pycryptodome (AES-GCM) + # Old encrypted API keys cannot be decrypted, must be re-entered + if current_version < "0.2.0": + # Clear old encrypted credentials + if self.settings.get("nexus_api_key"): + logger.warning("Clearing saved API key due to encryption format change") + logger.warning("Please re-enter your Nexus API key in Settings") + self.settings["nexus_api_key"] = None + + # Clear OAuth token file (different encryption format) + oauth_token_file = Path(self.config_dir) / "nexus-oauth.json" + if oauth_token_file.exists(): + logger.warning("Clearing saved OAuth token due to encryption format change") + logger.warning("Please re-authorize with Nexus Mods") + try: + oauth_token_file.unlink() + except Exception as e: + logger.error(f"Failed to remove old OAuth token: {e}") + + # Remove obsolete keys + obsolete_keys = [ + "hoolamike_install_path", + "hoolamike_version", + "api_key_fallback_enabled", + "proton_version", # Display string only, path stored in proton_path + "game_proton_version" # Display string only, path stored in game_proton_path + ] + + removed_count = 0 + for key in obsolete_keys: + if key in self.settings: + del self.settings[key] + removed_count += 1 + + if removed_count > 0: + logger.info(f"Removed {removed_count} obsolete config keys") + + # Update version + self.settings["version"] = target_version + self.save_config() + logger.info("Config migration completed") + + def _read_config_from_disk(self): + """ + Read configuration directly from disk without caching. + Returns merged config (defaults + saved values). + """ + try: + config = self.settings.copy() # Start with defaults + if os.path.exists(self.config_file): + with open(self.config_file, 'r') as f: + saved_config = json.load(f) + config.update(saved_config) + return config + except Exception as e: + logger.error(f"Error reading configuration from disk: {e}") + return self.settings.copy() + def reload_config(self): """Reload configuration from disk to pick up external changes""" self._load_config() @@ -154,8 +238,12 @@ class ConfigHandler: return False def get(self, key, default=None): - """Get a configuration value by key""" - return self.settings.get(key, default) + """ + Get a configuration value by key. + Always reads fresh from disk to avoid stale data. + """ + config = self._read_config_from_disk() + return config.get(key, default) def set(self, key, value): """Set a configuration value""" @@ -214,48 +302,178 @@ class ConfigHandler: """Get the path to protontricks executable""" return self.settings.get("protontricks_path") + def _get_encryption_key(self) -> bytes: + """ + Generate encryption key for API key storage using same method as OAuth tokens + + Returns: + Fernet-compatible encryption key + """ + import socket + import getpass + + try: + hostname = socket.gethostname() + username = getpass.getuser() + + # Try to get machine ID + machine_id = None + try: + with open('/etc/machine-id', 'r') as f: + machine_id = f.read().strip() + except: + try: + with open('/var/lib/dbus/machine-id', 'r') as f: + machine_id = f.read().strip() + except: + pass + + if machine_id: + key_material = f"{hostname}:{username}:{machine_id}:jackify" + else: + key_material = f"{hostname}:{username}:jackify" + + except Exception as e: + logger.warning(f"Failed to get machine info for encryption: {e}") + key_material = "jackify:default:key" + + # Generate Fernet-compatible key + key_bytes = hashlib.sha256(key_material.encode('utf-8')).digest() + return base64.urlsafe_b64encode(key_bytes) + + def _encrypt_api_key(self, api_key: str) -> str: + """ + Encrypt API key using AES-GCM + + Args: + api_key: Plain text API key + + Returns: + Encrypted API key string + """ + try: + from Crypto.Cipher import AES + from Crypto.Random import get_random_bytes + + # Derive 32-byte AES key + key = base64.urlsafe_b64decode(self._get_encryption_key()) + + # Generate random nonce + nonce = get_random_bytes(12) + + # Encrypt with AES-GCM + cipher = AES.new(key, AES.MODE_GCM, nonce=nonce) + ciphertext, tag = cipher.encrypt_and_digest(api_key.encode('utf-8')) + + # Combine and encode + combined = nonce + ciphertext + tag + return base64.b64encode(combined).decode('utf-8') + + except ImportError: + # Fallback to base64 if pycryptodome not available + logger.warning("pycryptodome not available, using base64 encoding (less secure)") + return base64.b64encode(api_key.encode('utf-8')).decode('utf-8') + except Exception as e: + logger.error(f"Error encrypting API key: {e}") + return "" + + def _decrypt_api_key(self, encrypted_key: str) -> Optional[str]: + """ + Decrypt API key using AES-GCM + + Args: + encrypted_key: Encrypted API key string + + Returns: + Decrypted API key or None on failure + """ + try: + from Crypto.Cipher import AES + + # Derive 32-byte AES key + key = base64.urlsafe_b64decode(self._get_encryption_key()) + + # Decode and split + combined = base64.b64decode(encrypted_key.encode('utf-8')) + nonce = combined[:12] + tag = combined[-16:] + ciphertext = combined[12:-16] + + # Decrypt with AES-GCM + cipher = AES.new(key, AES.MODE_GCM, nonce=nonce) + plaintext = cipher.decrypt_and_verify(ciphertext, tag) + + return plaintext.decode('utf-8') + + except ImportError: + # Fallback to base64 decode + try: + return base64.b64decode(encrypted_key.encode('utf-8')).decode('utf-8') + except: + return None + except Exception as e: + # Might be old base64-only format, try decoding + try: + return base64.b64decode(encrypted_key.encode('utf-8')).decode('utf-8') + except: + logger.error(f"Error decrypting API key: {e}") + return None + def save_api_key(self, api_key): """ - Save Nexus API key with base64 encoding - + Save Nexus API key with Fernet encryption + Args: api_key (str): Plain text API key - + Returns: bool: True if saved successfully, False otherwise """ try: if api_key: - # Encode the API key using base64 - encoded_key = base64.b64encode(api_key.encode('utf-8')).decode('utf-8') - self.settings["nexus_api_key"] = encoded_key - logger.debug("API key saved successfully") + # Encrypt the API key using Fernet + encrypted_key = self._encrypt_api_key(api_key) + if not encrypted_key: + logger.error("Failed to encrypt API key") + return False + + self.settings["nexus_api_key"] = encrypted_key + logger.debug("API key encrypted and saved successfully") else: # Clear the API key if empty self.settings["nexus_api_key"] = None logger.debug("API key cleared") - - return self.save_config() + + result = self.save_config() + + # Set restrictive permissions on config file + if result: + try: + os.chmod(self.config_file, 0o600) + except Exception as e: + logger.warning(f"Could not set restrictive permissions on config: {e}") + + return result + except Exception as e: logger.error(f"Error saving API key: {e}") return False - + def get_api_key(self): """ - Retrieve and decode the saved Nexus API key - Always reads fresh from disk to pick up changes from other instances - + Retrieve and decrypt the saved Nexus API key. + Always reads fresh from disk. + Returns: - str: Decoded API key or None if not saved + str: Decrypted API key or None if not saved """ try: - # Reload config from disk to pick up changes from Settings dialog - self._load_config() - encoded_key = self.settings.get("nexus_api_key") - if encoded_key: - # Decode the base64 encoded key - decoded_key = base64.b64decode(encoded_key.encode('utf-8')).decode('utf-8') - return decoded_key + config = self._read_config_from_disk() + encrypted_key = config.get("nexus_api_key") + if encrypted_key: + # Decrypt the API key + decrypted_key = self._decrypt_api_key(encrypted_key) + return decrypted_key return None except Exception as e: logger.error(f"Error retrieving API key: {e}") @@ -263,15 +481,14 @@ class ConfigHandler: def has_saved_api_key(self): """ - Check if an API key is saved in configuration - Always reads fresh from disk to pick up changes from other instances - + Check if an API key is saved in configuration. + Always reads fresh from disk. + Returns: bool: True if API key exists, False otherwise """ - # Reload config from disk to pick up changes from Settings dialog - self._load_config() - return self.settings.get("nexus_api_key") is not None + config = self._read_config_from_disk() + return config.get("nexus_api_key") is not None def clear_api_key(self): """ @@ -519,16 +736,15 @@ class ConfigHandler: def get_proton_path(self): """ - Retrieve the saved Install Proton path from configuration (for jackify-engine) - Always reads fresh from disk to pick up changes from Settings dialog + Retrieve the saved Install Proton path from configuration (for jackify-engine). + Always reads fresh from disk. Returns: str: Saved Install Proton path or 'auto' if not saved """ try: - # Reload config from disk to pick up changes from Settings dialog - self._load_config() - proton_path = self.settings.get("proton_path", "auto") + config = self._read_config_from_disk() + proton_path = config.get("proton_path", "auto") logger.debug(f"Retrieved fresh install proton_path from config: {proton_path}") return proton_path except Exception as e: @@ -537,21 +753,20 @@ class ConfigHandler: def get_game_proton_path(self): """ - Retrieve the saved Game Proton path from configuration (for game shortcuts) - Falls back to install Proton path if game Proton not set - Always reads fresh from disk to pick up changes from Settings dialog + Retrieve the saved Game Proton path from configuration (for game shortcuts). + Falls back to install Proton path if game Proton not set. + Always reads fresh from disk. Returns: str: Saved Game Proton path, Install Proton path, or 'auto' if not saved """ try: - # Reload config from disk to pick up changes from Settings dialog - self._load_config() - game_proton_path = self.settings.get("game_proton_path") + config = self._read_config_from_disk() + game_proton_path = config.get("game_proton_path") # If game proton not set or set to same_as_install, use install proton if not game_proton_path or game_proton_path == "same_as_install": - game_proton_path = self.settings.get("proton_path", "auto") + game_proton_path = config.get("proton_path", "auto") logger.debug(f"Retrieved fresh game proton_path from config: {game_proton_path}") return game_proton_path @@ -561,16 +776,15 @@ class ConfigHandler: def get_proton_version(self): """ - Retrieve the saved Proton version from configuration - Always reads fresh from disk to pick up changes from Settings dialog + Retrieve the saved Proton version from configuration. + Always reads fresh from disk. Returns: str: Saved Proton version or 'auto' if not saved """ try: - # Reload config from disk to pick up changes from Settings dialog - self._load_config() - proton_version = self.settings.get("proton_version", "auto") + config = self._read_config_from_disk() + proton_version = config.get("proton_version", "auto") logger.debug(f"Retrieved fresh proton_version from config: {proton_version}") return proton_version except Exception as e: diff --git a/jackify/backend/handlers/hoolamike_handler.py b/jackify/backend/handlers/hoolamike_handler.py deleted file mode 100644 index 12962c3..0000000 --- a/jackify/backend/handlers/hoolamike_handler.py +++ /dev/null @@ -1,1415 +0,0 @@ -import logging -import os -import subprocess -import zipfile -import tarfile -from pathlib import Path -import yaml # Assuming PyYAML is installed -from typing import Dict, Optional, List -import requests - -# Import necessary handlers from the current Jackify structure -from .path_handler import PathHandler -from .vdf_handler import VDFHandler # Keeping just in case -from .filesystem_handler import FileSystemHandler -from .config_handler import ConfigHandler -# Import color constants needed for print statements in this module -from .ui_colors import COLOR_ERROR, COLOR_SUCCESS, COLOR_WARNING, COLOR_RESET, COLOR_INFO, COLOR_PROMPT, COLOR_SELECTION -from .logging_handler import LoggingHandler -from .status_utils import show_status, clear_status -from .subprocess_utils import get_clean_subprocess_env - -logger = logging.getLogger(__name__) - -# Define default Hoolamike AppIDs for relevant games -TARGET_GAME_APPIDS = { - 'Fallout 3': '22370', # GOTY Edition - 'Fallout New Vegas': '22380', # Base game - 'Skyrim Special Edition': '489830', - 'Oblivion': '22330', # GOTY Edition - 'Fallout 4': '377160' -} - -# Define the expected name of the native Hoolamike executable -HOOLAMIKE_EXECUTABLE_NAME = "hoolamike" # Assuming this is the binary name -# Keep consistent with logs directory - use ~/Jackify/ for user-visible managed components -JACKIFY_BASE_DIR = Path.home() / "Jackify" -# Use Jackify base directory for ALL Hoolamike-related files to centralize management -DEFAULT_HOOLAMIKE_APP_INSTALL_DIR = JACKIFY_BASE_DIR / "Hoolamike" -HOOLAMIKE_CONFIG_DIR = DEFAULT_HOOLAMIKE_APP_INSTALL_DIR -HOOLAMIKE_CONFIG_FILENAME = "hoolamike.yaml" -# Default dirs for other components -DEFAULT_HOOLAMIKE_DOWNLOADS_DIR = JACKIFY_BASE_DIR / "Mod_Downloads" -DEFAULT_MODLIST_INSTALL_BASE_DIR = Path.home() / "ModdedGames" - -class HoolamikeHandler: - """Handles discovery, configuration, and execution of Hoolamike tasks. - Assumes Hoolamike is a native Linux CLI application. - """ - - def __init__(self, steamdeck: bool, verbose: bool, filesystem_handler: FileSystemHandler, config_handler: ConfigHandler, menu_handler=None): - """Initialize the handler and perform initial discovery.""" - self.steamdeck = steamdeck - self.verbose = verbose - self.path_handler = PathHandler() - self.filesystem_handler = filesystem_handler - self.config_handler = config_handler - self.menu_handler = menu_handler - # Set up dedicated log file for TTW operations - logging_handler = LoggingHandler() - logging_handler.rotate_log_for_logger('ttw-install', 'TTW_Install_workflow.log') - self.logger = logging_handler.setup_logger('ttw-install', 'TTW_Install_workflow.log') - - # --- Discovered/Managed State --- - self.game_install_paths: Dict[str, Path] = {} - # Allow user override for Hoolamike app install path later - self.hoolamike_app_install_path: Path = DEFAULT_HOOLAMIKE_APP_INSTALL_DIR - self.hoolamike_executable_path: Optional[Path] = None # Path to the binary - self.hoolamike_installed: bool = False - self.hoolamike_config_path: Path = HOOLAMIKE_CONFIG_DIR / HOOLAMIKE_CONFIG_FILENAME - self.hoolamike_config: Optional[Dict] = None - - # Load Hoolamike install path from Jackify config if it exists - saved_path_str = self.config_handler.get('hoolamike_install_path') - if saved_path_str and Path(saved_path_str).is_dir(): # Basic check if path exists - self.hoolamike_app_install_path = Path(saved_path_str) - self.logger.info(f"Loaded Hoolamike install path from Jackify config: {self.hoolamike_app_install_path}") - - self._load_hoolamike_config() - self._run_discovery() - - def _ensure_hoolamike_dirs_exist(self): - """Ensure base directories for Hoolamike exist.""" - try: - HOOLAMIKE_CONFIG_DIR.mkdir(parents=True, exist_ok=True) # Separate Hoolamike config - self.hoolamike_app_install_path.mkdir(parents=True, exist_ok=True) # Install dir (~/Jackify/Hoolamike) - # Default downloads dir also needs to exist if we reference it - DEFAULT_HOOLAMIKE_DOWNLOADS_DIR.mkdir(parents=True, exist_ok=True) - except OSError as e: - self.logger.error(f"Error creating Hoolamike directories: {e}", exc_info=True) - # Decide how to handle this - maybe raise an exception? - - def _check_hoolamike_installation(self): - """Check if Hoolamike executable exists at the expected location. - Prioritizes path stored in config if available. - """ - potential_exe_path = self.hoolamike_app_install_path / HOOLAMIKE_EXECUTABLE_NAME - check_path = None - if potential_exe_path.is_file() and os.access(potential_exe_path, os.X_OK): - check_path = potential_exe_path - self.logger.info(f"Found Hoolamike at current path: {check_path}") - else: - self.logger.info(f"Hoolamike executable ({HOOLAMIKE_EXECUTABLE_NAME}) not found or not executable at current path {self.hoolamike_app_install_path}.") - - # Update state based on whether we found a valid path - if check_path: - self.hoolamike_installed = True - self.hoolamike_executable_path = check_path - else: - self.hoolamike_installed = False - self.hoolamike_executable_path = None - - def _generate_default_config(self) -> Dict: - """Generates the default configuration dictionary.""" - self.logger.info("Generating default Hoolamike config structure.") - # Detection is now handled separately after loading config - detected_paths = self.path_handler.find_game_install_paths(TARGET_GAME_APPIDS) - - config = { - "downloaders": { - "downloads_directory": str(DEFAULT_HOOLAMIKE_DOWNLOADS_DIR), - "nexus": {"api_key": "YOUR_API_KEY_HERE"} - }, - "installation": { - "wabbajack_file_path": "", # Placeholder, set per-run - "installation_path": "" # Placeholder, set per-run - }, - "games": { # Only include detected games with consistent formatting (no spaces) - self._format_game_name(game_name): {"root_directory": str(path)} - for game_name, path in detected_paths.items() - }, - "fixup": { - "game_resolution": "1920x1080" - }, - "extras": { - "tale_of_two_wastelands": { - "path_to_ttw_mpi_file": "", # Placeholder - "variables": { - "DESTINATION": "" # Placeholder - } - } - } - } - # Add comment if no games detected - if not detected_paths: - # This won't appear in YAML, logic adjusted below - pass - return config - - def _format_game_name(self, game_name: str) -> str: - """Formats game name for Hoolamike configuration (removes spaces). - - Hoolamike expects game names without spaces like: Fallout3, FalloutNewVegas, SkyrimSpecialEdition - """ - # Handle specific game name formats that Hoolamike expects - game_name_map = { - "Fallout 3": "Fallout3", - "Fallout New Vegas": "FalloutNewVegas", - "Skyrim Special Edition": "SkyrimSpecialEdition", - "Fallout 4": "Fallout4", - "Oblivion": "Oblivion" # No change needed - } - - # Use predefined mapping if available - if game_name in game_name_map: - return game_name_map[game_name] - - # Otherwise, just remove spaces as fallback - return game_name.replace(" ", "") - - def _load_hoolamike_config(self): - """Load hoolamike.yaml if it exists, or generate a default one.""" - self._ensure_hoolamike_dirs_exist() # Ensure parent dir exists - - if self.hoolamike_config_path.is_file(): - self.logger.info(f"Found existing hoolamike.yaml at {self.hoolamike_config_path}. Loading...") - try: - with open(self.hoolamike_config_path, 'r', encoding='utf-8') as f: - self.hoolamike_config = yaml.safe_load(f) - if not isinstance(self.hoolamike_config, dict): - self.logger.warning(f"Failed to parse hoolamike.yaml as a dictionary. Generating default.") - self.hoolamike_config = self._generate_default_config() - self.save_hoolamike_config() # Save the newly generated default - else: - self.logger.info("Successfully loaded hoolamike.yaml configuration.") - # Game path merging is handled in _run_discovery now - except yaml.YAMLError as e: - self.logger.error(f"Error parsing hoolamike.yaml: {e}. The file may be corrupted.") - # Don't automatically overwrite - let user decide - self.hoolamike_config = None - return False - except Exception as e: - self.logger.error(f"Error reading hoolamike.yaml: {e}.", exc_info=True) - # Don't automatically overwrite - let user decide - self.hoolamike_config = None - return False - else: - self.logger.info(f"hoolamike.yaml not found at {self.hoolamike_config_path}. Generating default configuration.") - self.hoolamike_config = self._generate_default_config() - self.save_hoolamike_config() - - return True - - def save_hoolamike_config(self): - """Saves the current configuration dictionary to hoolamike.yaml.""" - if self.hoolamike_config is None: - self.logger.error("Cannot save config, internal config dictionary is None.") - return False - - self._ensure_hoolamike_dirs_exist() # Ensure parent dir exists - self.logger.info(f"Saving configuration to {self.hoolamike_config_path}") - try: - with open(self.hoolamike_config_path, 'w', encoding='utf-8') as f: - # Add comments conditionally - f.write("# Configuration file created or updated by Jackify\n") - if not self.hoolamike_config.get("games"): - f.write("# No games were detected by Jackify. Add game paths manually if needed.\n") - # Dump the actual YAML - yaml.dump(self.hoolamike_config, f, default_flow_style=False, sort_keys=False, width=float('inf')) - self.logger.info("Configuration saved successfully.") - return True - except Exception as e: - self.logger.error(f"Error saving hoolamike.yaml: {e}", exc_info=True) - return False - - def _run_discovery(self): - """Execute all discovery steps.""" - self.logger.info("Starting Hoolamike feature discovery phase...") - - # Check if Hoolamike is installed - self._check_hoolamike_installation() - - # Detect game paths and update internal state + config - self._detect_and_update_game_paths() - - self.logger.info("Hoolamike discovery phase complete.") - - def _detect_and_update_game_paths(self): - """Detect game install paths and update state and config.""" - self.logger.info("Detecting game install paths...") - # Always run detection - detected_paths = self.path_handler.find_game_install_paths(TARGET_GAME_APPIDS) - self.game_install_paths = detected_paths # Update internal state - self.logger.info(f"Detected game paths: {detected_paths}") - - # Update the loaded config if it exists - if self.hoolamike_config is not None: - self.logger.debug("Updating loaded hoolamike.yaml with detected game paths.") - if "games" not in self.hoolamike_config or not isinstance(self.hoolamike_config.get("games"), dict): - self.hoolamike_config["games"] = {} # Ensure games section exists - - # Define a unified format for game names in config - no spaces - # Clear existing entries first to avoid duplicates - self.hoolamike_config["games"] = {} - - # Add detected paths with proper formatting - no spaces - for game_name, detected_path in detected_paths.items(): - formatted_name = self._format_game_name(game_name) - self.hoolamike_config["games"][formatted_name] = {"root_directory": str(detected_path)} - - self.logger.info(f"Updated config with {len(detected_paths)} game paths using correct naming format (no spaces)") - - # Save the updated config to disk so Hoolamike can read it - if detected_paths: - self.logger.info("Saving updated game paths to hoolamike.yaml") - self.save_hoolamike_config() - else: - self.logger.warning("Cannot update game paths in config because config is not loaded.") - - # --- Methods for Hoolamike Tasks --- - # GUI-safe, non-interactive installer used by Install TTW screen - def install_hoolamike(self, install_dir: Optional[Path] = None) -> tuple[bool, str]: - """Non-interactive install/update of Hoolamike for GUI usage. - - Downloads the latest Linux x86_64 release from GitHub, extracts it to the - Jackify-managed directory (~/Jackify/Hoolamike by default or provided install_dir), - sets executable permissions, and saves the install path to Jackify config. - - Returns: - (success, message) - """ - try: - self._ensure_hoolamike_dirs_exist() - # Determine target install directory - target_dir = Path(install_dir) if install_dir else self.hoolamike_app_install_path - target_dir.mkdir(parents=True, exist_ok=True) - - # Fetch latest release info - release_url = "https://api.github.com/repos/Niedzwiedzw/hoolamike/releases/latest" - self.logger.info(f"Fetching latest Hoolamike release info from {release_url}") - resp = requests.get(release_url, timeout=15, verify=True) - resp.raise_for_status() - data = resp.json() - release_tag = data.get("tag_name") or data.get("name") - - linux_asset = None - for asset in data.get("assets", []): - name = asset.get("name", "").lower() - if "linux" in name and (name.endswith(".tar.gz") or name.endswith(".tgz") or name.endswith(".zip")) and ("x86_64" in name or "amd64" in name): - linux_asset = asset - break - - if not linux_asset: - return False, "No suitable Linux x86_64 Hoolamike asset found in latest release" - - download_url = linux_asset.get("browser_download_url") - asset_name = linux_asset.get("name") - if not download_url or not asset_name: - return False, "Latest release is missing required asset metadata" - - # Download to target directory - temp_path = target_dir / asset_name - if not self.filesystem_handler.download_file(download_url, temp_path, overwrite=True, quiet=True): - return False, "Failed to download Hoolamike asset" - - # Extract - try: - if asset_name.lower().endswith((".tar.gz", ".tgz")): - with tarfile.open(temp_path, "r:*") as tar: - tar.extractall(path=target_dir) - elif asset_name.lower().endswith(".zip"): - with zipfile.ZipFile(temp_path, "r") as zf: - zf.extractall(target_dir) - else: - return False, f"Unknown archive format: {asset_name}" - finally: - try: - temp_path.unlink(missing_ok=True) # cleanup - except Exception: - pass - - # Ensure executable bit on binary - exe_path = target_dir / HOOLAMIKE_EXECUTABLE_NAME - if not exe_path.is_file(): - # Some archives may include a subfolder; try to locate the binary - for p in target_dir.rglob(HOOLAMIKE_EXECUTABLE_NAME): - if p.is_file(): - exe_path = p - break - if not exe_path.is_file(): - return False, "Hoolamike binary not found after extraction" - try: - os.chmod(exe_path, 0o755) - except Exception as e: - self.logger.warning(f"Failed to chmod +x on {exe_path}: {e}") - - # Mark installed and persist path - self.hoolamike_app_install_path = target_dir - self.hoolamike_executable_path = exe_path - self.hoolamike_installed = True - self.config_handler.set('hoolamike_install_path', str(target_dir)) - if release_tag: - self.config_handler.set('hoolamike_version', str(release_tag)) - self.config_handler.save_config() - - return True, f"Hoolamike installed at {target_dir}" - except Exception as e: - self.logger.error("Hoolamike installation failed", exc_info=True) - return False, f"Error installing Hoolamike: {e}" - - def get_installed_hoolamike_version(self) -> Optional[str]: - """Return the installed Hoolamike version stored in Jackify config, if any.""" - try: - v = self.config_handler.get('hoolamike_version') - return str(v) if v else None - except Exception: - return None - - def is_hoolamike_update_available(self) -> tuple[bool, Optional[str], Optional[str]]: - """ - Check GitHub for the latest Hoolamike release and compare with installed version. - Returns (update_available, installed_version, latest_version). - """ - installed = self.get_installed_hoolamike_version() - try: - release_url = "https://api.github.com/repos/Niedzwiedzw/hoolamike/releases/latest" - resp = requests.get(release_url, timeout=10, verify=True) - resp.raise_for_status() - latest = resp.json().get('tag_name') or resp.json().get('name') - if not latest: - return (False, installed, None) - if not installed: - # No version recorded but installed may exist; treat as update available - return (True, None, latest) - return (installed != str(latest), installed, str(latest)) - except Exception: - return (False, installed, None) - - def install_update_hoolamike(self, context=None) -> bool: - """Install or update Hoolamike application. - - Returns: - bool: True if installation/update was successful or process was properly cancelled, - False if a critical error occurred. - """ - self.logger.info("Starting Hoolamike Installation/Update...") - print("\nStarting Hoolamike Installation/Update...") - - # 1. Prompt user to install/reinstall/update - try: - # Check if Hoolamike is already installed at the expected path - self._check_hoolamike_installation() - if self.hoolamike_installed: - self.logger.info(f"Hoolamike appears to be installed at: {self.hoolamike_executable_path}") - print(f"{COLOR_INFO}Hoolamike is already installed at:{COLOR_RESET}") - print(f" {self.hoolamike_executable_path}") - # Use a menu-style prompt for reinstall/update - print(f"\n{COLOR_PROMPT}Choose an action for Hoolamike:{COLOR_RESET}") - print(f" 1. Reinstall/Update Hoolamike") - print(f" 2. Keep existing installation (return to menu)") - while True: - choice = input(f"Select an option [1-2]: ").strip() - if choice == '1': - self.logger.info("User chose to reinstall/update Hoolamike.") - break - elif choice == '2' or choice.lower() == 'q': - self.logger.info("User chose to keep existing Hoolamike installation.") - print("Skipping Hoolamike installation/update.") - return True - else: - print(f"{COLOR_WARNING}Invalid choice. Please enter 1 or 2.{COLOR_RESET}") - # 2. Get installation directory from user (allow override) - self.logger.info(f"Default install path: {self.hoolamike_app_install_path}") - print("\nHoolamike Installation Directory:") - print(f"Default: {self.hoolamike_app_install_path}") - install_dir = self.menu_handler.get_directory_path( - prompt_message=f"Specify where to install Hoolamike (or press Enter for default)", - default_path=self.hoolamike_app_install_path, - create_if_missing=True, - no_header=True - ) - if install_dir is None: - self.logger.warning("User cancelled Hoolamike installation path selection.") - print("Installation cancelled.") - return True - # Check if hoolamike already exists at this specific path - potential_existing_exe = install_dir / HOOLAMIKE_EXECUTABLE_NAME - if potential_existing_exe.is_file() and os.access(potential_existing_exe, os.X_OK): - self.logger.info(f"Hoolamike executable found at the chosen path: {potential_existing_exe}") - print(f"{COLOR_INFO}Hoolamike appears to already be installed at:{COLOR_RESET}") - print(f" {install_dir}") - # Use menu-style prompt for overwrite - print(f"{COLOR_PROMPT}Choose an action for the existing installation:{COLOR_RESET}") - print(f" 1. Download and overwrite (update)") - print(f" 2. Keep existing installation (return to menu)") - while True: - overwrite_choice = input(f"Select an option [1-2]: ").strip() - if overwrite_choice == '1': - self.logger.info("User chose to update (overwrite) existing Hoolamike installation.") - break - elif overwrite_choice == '2' or overwrite_choice.lower() == 'q': - self.logger.info("User chose to keep existing Hoolamike installation at chosen path.") - print("Update cancelled. Using existing installation for this session.") - self.hoolamike_app_install_path = install_dir - self.hoolamike_executable_path = potential_existing_exe - self.hoolamike_installed = True - return True - else: - print(f"{COLOR_WARNING}Invalid choice. Please enter 1 or 2.{COLOR_RESET}") - # Proceed with install/update - self.logger.info(f"Proceeding with installation to directory: {install_dir}") - self.hoolamike_app_install_path = install_dir - # Get latest release info from GitHub - release_url = "https://api.github.com/repos/Niedzwiedzw/hoolamike/releases/latest" - download_url = None - asset_name = None - try: - self.logger.info(f"Fetching latest release info from {release_url}") - show_status("Fetching latest Hoolamike release info...") - response = requests.get(release_url, timeout=15, verify=True) - response.raise_for_status() - release_data = response.json() - self.logger.debug(f"GitHub Release Data: {release_data}") - linux_tar_asset = None - linux_zip_asset = None - for asset in release_data.get('assets', []): - name = asset.get('name', '').lower() - self.logger.debug(f"Checking asset: {name}") - is_linux = 'linux' in name - is_x64 = 'x86_64' in name or 'amd64' in name - is_incompatible_arch = 'arm' in name or 'aarch64' in name or 'darwin' in name - if is_linux and is_x64 and not is_incompatible_arch: - if name.endswith(('.tar.gz', '.tgz')): - linux_tar_asset = asset - self.logger.debug(f"Found potential tar asset: {name}") - break - elif name.endswith('.zip') and not linux_tar_asset: - linux_zip_asset = asset - self.logger.debug(f"Found potential zip asset: {name}") - chosen_asset = linux_tar_asset or linux_zip_asset - if not chosen_asset: - clear_status() - self.logger.error("Could not find a suitable Linux x86_64 download asset (tar.gz/zip) in the latest release.") - print(f"{COLOR_ERROR}Error: Could not find a linux x86_64 download asset in the latest Hoolamike release.{COLOR_RESET}") - return False - download_url = chosen_asset.get('browser_download_url') - asset_name = chosen_asset.get('name') - if not download_url or not asset_name: - clear_status() - self.logger.error(f"Chosen asset is missing URL or name: {chosen_asset}") - print(f"{COLOR_ERROR}Error: Found asset but could not get download details.{COLOR_RESET}") - return False - self.logger.info(f"Found asset '{asset_name}' for download: {download_url}") - clear_status() - except requests.exceptions.RequestException as e: - clear_status() - self.logger.error(f"Failed to fetch release info from GitHub: {e}") - print(f"Error: Failed to contact GitHub to check for Hoolamike updates: {e}") - return False - except Exception as e: - clear_status() - self.logger.error(f"Error parsing release info: {e}", exc_info=True) - print("Error: Failed to understand release information from GitHub.") - return False - # Download the asset - show_status(f"Downloading {asset_name}...") - temp_download_path = self.hoolamike_app_install_path / asset_name - if not self.filesystem_handler.download_file(download_url, temp_download_path, overwrite=True, quiet=True): - clear_status() - self.logger.error(f"Failed to download {asset_name} from {download_url}") - print(f"{COLOR_ERROR}Error: Failed to download Hoolamike asset.{COLOR_RESET}") - return False - clear_status() - self.logger.info(f"Downloaded {asset_name} successfully to {temp_download_path}") - show_status("Extracting Hoolamike archive...") - # Extract the asset - try: - if asset_name.lower().endswith(('.tar.gz', '.tgz')): - self.logger.debug(f"Extracting tar file: {temp_download_path}") - with tarfile.open(temp_download_path, 'r:*') as tar: - tar.extractall(path=self.hoolamike_app_install_path) - self.logger.info("Extracted tar file successfully.") - elif asset_name.lower().endswith('.zip'): - self.logger.debug(f"Extracting zip file: {temp_download_path}") - with zipfile.ZipFile(temp_download_path, 'r') as zip_ref: - zip_ref.extractall(self.hoolamike_app_install_path) - self.logger.info("Extracted zip file successfully.") - else: - clear_status() - self.logger.error(f"Unknown archive format for asset: {asset_name}") - print(f"{COLOR_ERROR}Error: Unknown file type '{asset_name}'. Cannot extract.{COLOR_RESET}") - return False - clear_status() - print("Extraction complete. Setting permissions...") - except (tarfile.TarError, zipfile.BadZipFile, EOFError) as e: - clear_status() - self.logger.error(f"Failed to extract archive {temp_download_path}: {e}", exc_info=True) - print(f"{COLOR_ERROR}Error: Failed to extract downloaded file: {e}{COLOR_RESET}") - return False - except Exception as e: - clear_status() - self.logger.error(f"An unexpected error occurred during extraction: {e}", exc_info=True) - print(f"{COLOR_ERROR}An unexpected error occurred during extraction.{COLOR_RESET}") - return False - finally: - # Clean up downloaded archive - if temp_download_path.exists(): - try: - temp_download_path.unlink() - self.logger.debug(f"Removed temporary download file: {temp_download_path}") - except OSError as e: - self.logger.warning(f"Could not remove temporary download file {temp_download_path}: {e}") - # Set execute permissions on the binary - executable_path = self.hoolamike_app_install_path / HOOLAMIKE_EXECUTABLE_NAME - if executable_path.is_file(): - try: - show_status("Setting permissions on Hoolamike executable...") - os.chmod(executable_path, 0o755) - self.logger.info(f"Set execute permissions (+x) on {executable_path}") - clear_status() - print("Permissions set successfully.") - except OSError as e: - clear_status() - self.logger.error(f"Failed to set execute permission on {executable_path}: {e}") - print(f"{COLOR_ERROR}Error: Could not set execute permission on Hoolamike executable.{COLOR_RESET}") - else: - clear_status() - self.logger.error(f"Hoolamike executable not found after extraction at {executable_path}") - print(f"{COLOR_ERROR}Error: Hoolamike executable missing after extraction!{COLOR_RESET}") - return False - # Update self.hoolamike_installed and self.hoolamike_executable_path state - self.logger.info("Refreshing Hoolamike installation status...") - self._check_hoolamike_installation() - if not self.hoolamike_installed: - self.logger.error("Hoolamike check failed after apparent successful install/extract.") - print(f"{COLOR_ERROR}Error: Installation completed, but failed final verification check.{COLOR_RESET}") - return False - # Save install path to Jackify config - self.logger.info(f"Saving Hoolamike install path to Jackify config: {self.hoolamike_app_install_path}") - self.config_handler.set('hoolamike_install_path', str(self.hoolamike_app_install_path)) - if not self.config_handler.save_config(): - self.logger.warning("Failed to save Jackify config file after updating Hoolamike path.") - # Non-fatal, but warn user? - print(f"{COLOR_WARNING}Warning: Could not save installation path to main Jackify config file.{COLOR_RESET}") - print(f"{COLOR_SUCCESS}Hoolamike installation/update successful!{COLOR_RESET}") - self.logger.info("Hoolamike install/update process completed successfully.") - return True - except Exception as e: - self.logger.error(f"Error during Hoolamike installation/update: {e}", exc_info=True) - print(f"{COLOR_ERROR}Error: An unexpected error occurred during Hoolamike installation/update: {e}{COLOR_RESET}") - return False - - def install_modlist(self, wabbajack_path=None, install_path=None, downloads_path=None, premium=False, api_key=None, game_resolution=None, context=None): - """ - Install a Wabbajack modlist using Hoolamike, following Jackify's Discovery/Configuration/Confirmation pattern. - """ - self.logger.info("Starting Hoolamike modlist install (Discovery Phase)") - self._check_hoolamike_installation() - menu = self.menu_handler - print(f"\n{'='*60}") - print(f"{COLOR_INFO}Hoolamike Modlist Installation{COLOR_RESET}") - print(f"{'='*60}\n") - - # --- Discovery Phase --- - # 1. Auto-detect games (robust, multi-library) - detected_games = self.path_handler.find_vanilla_game_paths() - # 2. Prompt for .wabbajack file (custom prompt, only accept .wabbajack, q to exit, with tab-completion) - print() - while not wabbajack_path: - print(f"{COLOR_WARNING}This option requires a Nexus Mods Premium account for automatic downloads.{COLOR_RESET}") - print(f"If you don't have a premium account, please use the '{COLOR_SELECTION}Non-Premium Installation{COLOR_RESET}' option from the previous menu instead.\n") - print(f"Before continuing, you'll need a .wabbajack file. You can usually find these at:") - print(f" 1. {COLOR_INFO}https://build.wabbajack.org/authored_files{COLOR_RESET} - Official Wabbajack modlist repository") - print(f" 2. {COLOR_INFO}https://www.nexusmods.com/{COLOR_RESET} - Some modlist authors publish on Nexus Mods") - print(f" 3. Various Discord communities for specific modlists\n") - print(f"{COLOR_WARNING}NOTE: Download the .wabbajack file first, then continue. Enter 'q' to exit.{COLOR_RESET}\n") - # Use menu.get_existing_file_path for tab-completion - candidate = menu.get_existing_file_path( - prompt_message="Enter the path to your .wabbajack file (or 'q' to cancel):", - extension_filter=".wabbajack", - no_header=True - ) - if candidate is None: - print(f"{COLOR_WARNING}Cancelled by user.{COLOR_RESET}") - return False - # If user literally typed 'q', treat as cancel - if str(candidate).strip().lower() == 'q': - print(f"{COLOR_WARNING}Cancelled by user.{COLOR_RESET}") - return False - wabbajack_path = candidate - # 3. Prompt for install directory - print() - while True: - install_path_result = menu.get_directory_path( - prompt_message="Select the directory where the modlist should be installed:", - default_path=DEFAULT_MODLIST_INSTALL_BASE_DIR / wabbajack_path.stem, - create_if_missing=True, - no_header=False - ) - if not install_path_result: - print(f"{COLOR_WARNING}Cancelled by user.{COLOR_RESET}") - return False - # Handle tuple (path, should_create) - if isinstance(install_path_result, tuple): - install_path, install_should_create = install_path_result - else: - install_path, install_should_create = install_path_result, False - # Check if directory exists and is not empty - if install_path.exists() and any(install_path.iterdir()): - print(f"{COLOR_WARNING}Warning: The selected directory '{install_path}' already exists and is not empty. Its contents may be overwritten!{COLOR_RESET}") - confirm = input(f"{COLOR_PROMPT}This directory is not empty and may be overwritten. Proceed? (y/N): {COLOR_RESET}").strip().lower() - if not confirm.startswith('y'): - print(f"{COLOR_INFO}Please select a different directory.\n{COLOR_RESET}") - continue - break - # 4. Prompt for downloads directory - print() - if not downloads_path: - downloads_path_result = menu.get_directory_path( - prompt_message="Select the directory for mod downloads:", - default_path=DEFAULT_HOOLAMIKE_DOWNLOADS_DIR, - create_if_missing=True, - no_header=False - ) - if not downloads_path_result: - print(f"{COLOR_WARNING}Cancelled by user.{COLOR_RESET}") - return False - # Handle tuple (path, should_create) - if isinstance(downloads_path_result, tuple): - downloads_path, downloads_should_create = downloads_path_result - else: - downloads_path, downloads_should_create = downloads_path_result, False - else: - downloads_should_create = False - # 5. Nexus API key - print() - current_api_key = self.hoolamike_config.get('downloaders', {}).get('nexus', {}).get('api_key') if self.hoolamike_config else None - if not current_api_key or current_api_key == 'YOUR_API_KEY_HERE': - api_key = menu.get_nexus_api_key(current_api_key) - if not api_key: - print(f"{COLOR_WARNING}Cancelled by user.{COLOR_RESET}") - return False - else: - api_key = current_api_key - - # --- Summary & Confirmation --- - print(f"\n{'-'*60}") - print(f"{COLOR_INFO}Summary of configuration:{COLOR_RESET}") - print(f"- Wabbajack file: {wabbajack_path}") - print(f"- Install directory: {install_path}") - print(f"- Downloads directory: {downloads_path}") - print(f"- Nexus API key: [{'Set' if api_key else 'Not Set'}]") - print("- Games:") - for game in ["Fallout 3", "Fallout New Vegas", "Skyrim Special Edition", "Oblivion", "Fallout 4"]: - found = detected_games.get(game) - print(f" {game}: {found if found else 'Not Found'}") - print(f"{'-'*60}") - print(f"{COLOR_WARNING}Proceed with these settings and start Hoolamike install? (Warning: This can take MANY HOURS){COLOR_RESET}") - confirm = input(f"{COLOR_PROMPT}[Y/n]: {COLOR_RESET}").strip().lower() - if confirm and not confirm.startswith('y'): - print(f"{COLOR_WARNING}Cancelled by user.{COLOR_RESET}") - return False - # --- Actually create directories if needed --- - if install_should_create and not install_path.exists(): - try: - install_path.mkdir(parents=True, exist_ok=True) - print(f"{COLOR_SUCCESS}Install directory created: {install_path}{COLOR_RESET}") - except Exception as e: - print(f"{COLOR_ERROR}Failed to create install directory: {e}{COLOR_RESET}") - return False - if downloads_should_create and not downloads_path.exists(): - try: - downloads_path.mkdir(parents=True, exist_ok=True) - print(f"{COLOR_SUCCESS}Downloads directory created: {downloads_path}{COLOR_RESET}") - except Exception as e: - print(f"{COLOR_ERROR}Failed to create downloads directory: {e}{COLOR_RESET}") - return False - - # --- Configuration Phase --- - # Prepare config dict - config = { - "downloaders": { - "downloads_directory": str(downloads_path), - "nexus": {"api_key": api_key} - }, - "installation": { - "wabbajack_file_path": str(wabbajack_path), - "installation_path": str(install_path) - }, - "games": { - self._format_game_name(game): {"root_directory": str(path)} - for game, path in detected_games.items() - }, - "fixup": { - "game_resolution": "1920x1080" - }, - # Resolution intentionally omitted - # "extras": {}, - # No 'jackify_managed' key here - } - self.hoolamike_config = config - if not self.save_hoolamike_config(): - print(f"{COLOR_ERROR}Failed to save hoolamike.yaml. Aborting.{COLOR_RESET}") - return False - - # --- Run Hoolamike --- - print(f"\n{COLOR_INFO}Starting Hoolamike...{COLOR_RESET}") - print(f"{COLOR_INFO}Streaming output below. Press Ctrl+C to cancel and return to Jackify menu.{COLOR_RESET}\n") - # Defensive: Ensure executable path is set and valid - if not self.hoolamike_executable_path or not Path(self.hoolamike_executable_path).is_file(): - print(f"{COLOR_ERROR}Error: Hoolamike executable not found or not set. Please (re)install Hoolamike from the menu before continuing.{COLOR_RESET}") - input(f"{COLOR_PROMPT}Press Enter to return to the Hoolamike menu...{COLOR_RESET}") - return False - try: - cmd = [str(self.hoolamike_executable_path), "install"] - ret = subprocess.call(cmd, cwd=str(self.hoolamike_app_install_path), env=get_clean_subprocess_env()) - if ret == 0: - print(f"\n{COLOR_SUCCESS}Hoolamike completed successfully!{COLOR_RESET}") - input(f"{COLOR_PROMPT}Press Enter to return to the Hoolamike menu...{COLOR_RESET}") - return True - else: - print(f"\n{COLOR_ERROR}Hoolamike process failed with exit code {ret}.{COLOR_RESET}") - input(f"{COLOR_PROMPT}Press Enter to return to the Hoolamike menu...{COLOR_RESET}") - return False - except KeyboardInterrupt: - print(f"\n{COLOR_WARNING}Hoolamike install interrupted by user. Returning to menu.{COLOR_RESET}") - input(f"{COLOR_PROMPT}Press Enter to return to the Hoolamike menu...{COLOR_RESET}") - return False - except Exception as e: - print(f"\n{COLOR_ERROR}Error running Hoolamike: {e}{COLOR_RESET}") - input(f"{COLOR_PROMPT}Press Enter to return to the Hoolamike menu...{COLOR_RESET}") - return False - - def install_ttw_backend(self, ttw_mpi_path, ttw_output_path): - """Clean backend function for TTW installation - no user interaction. - - Args: - ttw_mpi_path: Path to the TTW installer .mpi file (required) - ttw_output_path: Target installation directory for TTW (required) - - Returns: - tuple: (success: bool, message: str) - """ - self.logger.info(f"Starting Tale of Two Wastelands installation via Hoolamike") - - # Validate required parameters - if not ttw_mpi_path or not ttw_output_path: - return False, "Missing required parameters: ttw_mpi_path and ttw_output_path are required" - - # Convert to Path objects - ttw_mpi_path = Path(ttw_mpi_path) - ttw_output_path = Path(ttw_output_path) - - # Validate paths exist - if not ttw_mpi_path.exists(): - return False, f"TTW .mpi file not found: {ttw_mpi_path}" - - if not ttw_output_path.exists(): - try: - ttw_output_path.mkdir(parents=True, exist_ok=True) - except Exception as e: - return False, f"Failed to create output directory: {e}" - - # Check Hoolamike installation - self._check_hoolamike_installation() - - # Ensure config is loaded - if self.hoolamike_config is None: - loaded = self._load_hoolamike_config() - if not loaded or self.hoolamike_config is None: - self.logger.error("Failed to load or generate hoolamike.yaml configuration.") - return False, "Failed to load or generate Hoolamike configuration" - - # Verify required games are detected - required_games = ['Fallout 3', 'Fallout New Vegas'] - detected_games = self.path_handler.find_vanilla_game_paths() - missing_games = [game for game in required_games if game not in detected_games] - if missing_games: - self.logger.error(f"Missing required games for TTW installation: {', '.join(missing_games)}") - return False, f"Missing required games: {', '.join(missing_games)}. TTW requires both Fallout 3 and Fallout New Vegas." - - # Update TTW configuration - self._update_hoolamike_config_for_ttw(ttw_mpi_path, ttw_output_path) - if not self.save_hoolamike_config(): - self.logger.error("Failed to save hoolamike.yaml configuration.") - return False, "Failed to save Hoolamike configuration" - - # Construct and execute command - cmd = [ - str(self.hoolamike_executable_path), - "tale-of-two-wastelands" - ] - self.logger.info(f"Executing Hoolamike command: {' '.join(cmd)}") - - try: - ret = subprocess.call(cmd, cwd=str(self.hoolamike_app_install_path), env=get_clean_subprocess_env()) - if ret == 0: - self.logger.info("TTW installation completed successfully.") - return True, "TTW installation completed successfully!" - else: - self.logger.error(f"TTW installation process returned non-zero exit code: {ret}") - return False, f"TTW installation failed with exit code {ret}" - except Exception as e: - self.logger.error(f"Error executing Hoolamike TTW installation: {e}", exc_info=True) - return False, f"Error executing Hoolamike TTW installation: {e}" - - def install_ttw(self, ttw_mpi_path=None, ttw_output_path=None, context=None): - """CLI interface for TTW installation - handles user interaction and calls backend. - - Args: - ttw_mpi_path: Path to the TTW installer .mpi file (optional for CLI) - ttw_output_path: Target installation directory for TTW (optional for CLI) - - Returns: - bool: True if successful, False otherwise - """ - menu = self.menu_handler - print(f"\n{'='*60}") - print(f"{COLOR_INFO}Hoolamike: Tale of Two Wastelands Installation{COLOR_RESET}") - print(f"{'='*60}\n") - print(f"This feature will install Tale of Two Wastelands (TTW) using Hoolamike.") - print(f"Requirements:") - print(f" • Fallout 3 and Fallout New Vegas must be installed and detected.") - print(f" • You must provide the path to your TTW .mpi installer file.") - print(f" • You must select an output directory for the TTW install.\n") - - # If parameters provided, use them directly - if ttw_mpi_path and ttw_output_path: - print(f"{COLOR_INFO}Using provided parameters:{COLOR_RESET}") - print(f"- TTW .mpi file: {ttw_mpi_path}") - print(f"- Output directory: {ttw_output_path}") - print(f"{COLOR_WARNING}Proceed with these settings and start TTW installation? (This can take MANY HOURS){COLOR_RESET}") - confirm = input(f"{COLOR_PROMPT}[Y/n]: {COLOR_RESET}").strip().lower() - if confirm and not confirm.startswith('y'): - print(f"{COLOR_WARNING}Cancelled by user.{COLOR_RESET}") - return False - else: - # Interactive mode - collect user input - print(f"{COLOR_INFO}Please provide the path to your TTW .mpi installer file.{COLOR_RESET}") - print(f"You can download this from: {COLOR_INFO}https://mod.pub/ttw/133/files{COLOR_RESET}") - print(f"(Extract the .mpi file from the downloaded archive.)\n") - while not ttw_mpi_path: - candidate = menu.get_existing_file_path( - prompt_message="Enter the path to your TTW .mpi file (or 'q' to cancel):", - extension_filter=".mpi", - no_header=True - ) - if candidate is None: - print(f"{COLOR_WARNING}Cancelled by user.{COLOR_RESET}") - return False - if str(candidate).strip().lower() == 'q': - print(f"{COLOR_WARNING}Cancelled by user.{COLOR_RESET}") - return False - ttw_mpi_path = candidate - - # Prompt for output directory - print(f"\n{COLOR_INFO}Please select the output directory where TTW will be installed.{COLOR_RESET}") - print(f"(This should be an empty or new directory.)\n") - while not ttw_output_path: - ttw_output_path = menu.get_directory_path( - prompt_message="Select the TTW output directory:", - default_path=self.hoolamike_app_install_path / "TTW_Output", - create_if_missing=True, - no_header=False - ) - if not ttw_output_path: - print(f"{COLOR_WARNING}Cancelled by user.{COLOR_RESET}") - return False - if ttw_output_path.exists() and any(ttw_output_path.iterdir()): - print(f"{COLOR_WARNING}Warning: The selected directory '{ttw_output_path}' already exists and is not empty. Its contents may be overwritten!{COLOR_RESET}") - confirm = input(f"{COLOR_PROMPT}This directory is not empty and may be overwritten. Proceed? (y/N): {COLOR_RESET}").strip().lower() - if not confirm.startswith('y'): - print(f"{COLOR_INFO}Please select a different directory.\n{COLOR_RESET}") - ttw_output_path = None - continue - - # Summary & Confirmation - print(f"\n{'-'*60}") - print(f"{COLOR_INFO}Summary of configuration:{COLOR_RESET}") - print(f"- TTW .mpi file: {ttw_mpi_path}") - print(f"- Output directory: {ttw_output_path}") - print(f"{'-'*60}") - print(f"{COLOR_WARNING}Proceed with these settings and start TTW installation? (This can take MANY HOURS){COLOR_RESET}") - confirm = input(f"{COLOR_PROMPT}[Y/n]: {COLOR_RESET}").strip().lower() - if confirm and not confirm.startswith('y'): - print(f"{COLOR_WARNING}Cancelled by user.{COLOR_RESET}") - return False - - # Call the clean backend function - success, message = self.install_ttw_backend(ttw_mpi_path, ttw_output_path) - - if success: - print(f"\n{COLOR_SUCCESS}{message}{COLOR_RESET}") - - # Offer to create MO2 zip archive - print(f"\n{COLOR_INFO}Would you like to create a zipped mod archive for MO2?{COLOR_RESET}") - print(f"This will package the TTW files for easy installation into Mod Organizer 2.") - create_zip = input(f"{COLOR_PROMPT}Create zip archive? [Y/n]: {COLOR_RESET}").strip().lower() - - if not create_zip or create_zip.startswith('y'): - zip_success = self._create_ttw_mod_archive_cli(ttw_mpi_path, ttw_output_path) - if not zip_success: - print(f"\n{COLOR_WARNING}Archive creation failed, but TTW installation completed successfully.{COLOR_RESET}") - else: - print(f"\n{COLOR_INFO}Skipping archive creation. You can manually use the TTW files from the output directory.{COLOR_RESET}") - - input(f"\n{COLOR_PROMPT}Press Enter to return to the Hoolamike menu...{COLOR_RESET}") - return True - else: - print(f"\n{COLOR_ERROR}{message}{COLOR_RESET}") - input(f"{COLOR_PROMPT}Press Enter to return to the Hoolamike menu...{COLOR_RESET}") - return False - - def _update_hoolamike_config_for_ttw(self, ttw_mpi_path: Path, ttw_output_path: Path): - """Update the Hoolamike configuration with settings for TTW installation.""" - # Ensure extras and TTW sections exist - if "extras" not in self.hoolamike_config: - self.hoolamike_config["extras"] = {} - - if "tale_of_two_wastelands" not in self.hoolamike_config["extras"]: - self.hoolamike_config["extras"]["tale_of_two_wastelands"] = { - "variables": {} - } - - # Update TTW configuration - ttw_config = self.hoolamike_config["extras"]["tale_of_two_wastelands"] - ttw_config["path_to_ttw_mpi_file"] = str(ttw_mpi_path) - - # Ensure variables section exists - if "variables" not in ttw_config: - ttw_config["variables"] = {} - - # Set destination variable - ttw_config["variables"]["DESTINATION"] = str(ttw_output_path) - - # Set USERPROFILE to Fallout New Vegas Wine prefix Documents folder - userprofile_path = self._detect_fallout_nv_userprofile() - if "variables" not in self.hoolamike_config["extras"]["tale_of_two_wastelands"]: - self.hoolamike_config["extras"]["tale_of_two_wastelands"]["variables"] = {} - self.hoolamike_config["extras"]["tale_of_two_wastelands"]["variables"]["USERPROFILE"] = userprofile_path - - # Make sure game paths are set correctly using proper Hoolamike naming format - for game in ['Fallout 3', 'Fallout New Vegas']: - if game in self.game_install_paths: - # Use _format_game_name to ensure correct naming (removes spaces) - formatted_game_name = self._format_game_name(game) - - if "games" not in self.hoolamike_config: - self.hoolamike_config["games"] = {} - - if formatted_game_name not in self.hoolamike_config["games"]: - self.hoolamike_config["games"][formatted_game_name] = {} - - self.hoolamike_config["games"][formatted_game_name]["root_directory"] = str(self.game_install_paths[game]) - - self.logger.info("Updated Hoolamike configuration with TTW settings.") - - def _create_ttw_mod_archive_cli(self, ttw_mpi_path: Path, ttw_output_path: Path) -> bool: - """Create a zipped mod archive of TTW output for MO2 installation (CLI version). - - Args: - ttw_mpi_path: Path to the TTW .mpi file (used for version extraction) - ttw_output_path: Path to the TTW output directory to archive - - Returns: - bool: True if successful, False otherwise - """ - try: - import shutil - import re - - if not ttw_output_path.exists(): - print(f"{COLOR_ERROR}Output directory does not exist: {ttw_output_path}{COLOR_RESET}") - return False - - # Extract version from .mpi filename (e.g., "TTW v3.4.mpi" -> "3.4") - version_suffix = "" - if ttw_mpi_path: - mpi_filename = ttw_mpi_path.stem # Get filename without extension - # Look for version pattern like "3.4", "v3.4", etc. - version_match = re.search(r'v?(\d+\.\d+(?:\.\d+)?)', mpi_filename, re.IGNORECASE) - if version_match: - version_suffix = f" {version_match.group(1)}" - - # Create archive filename - [NoDelete] prefix is used by MO2 workflows - archive_name = f"[NoDelete] Tale of Two Wastelands{version_suffix}" - - # Place archive in parent directory of output - archive_path = ttw_output_path.parent / archive_name - - print(f"\n{COLOR_INFO}Creating mod archive: {archive_name}.zip{COLOR_RESET}") - print(f"{COLOR_INFO}This may take several minutes...{COLOR_RESET}") - - # Create the zip archive - # shutil.make_archive returns the path without .zip extension - final_archive = shutil.make_archive( - str(archive_path), # base name (without extension) - 'zip', # format - str(ttw_output_path) # directory to archive - ) - - print(f"\n{COLOR_SUCCESS}Archive created successfully: {Path(final_archive).name}{COLOR_RESET}") - print(f"{COLOR_INFO}Location: {final_archive}{COLOR_RESET}") - print(f"{COLOR_INFO}You can now install this archive as a mod in MO2.{COLOR_RESET}") - - self.logger.info(f"Created TTW mod archive: {final_archive}") - return True - - except Exception as e: - print(f"\n{COLOR_ERROR}Failed to create mod archive: {e}{COLOR_RESET}") - self.logger.error(f"Failed to create TTW mod archive: {e}", exc_info=True) - return False - - def _detect_fallout_nv_userprofile(self) -> str: - """ - Detect the Fallout New Vegas Wine prefix Documents folder for USERPROFILE. - - Returns: - str: Path to the Fallout New Vegas Wine prefix Documents folder, - or fallback to Jackify-managed directory if not found. - """ - try: - # Fallout New Vegas AppID - fnv_appid = "22380" - - # Find the compatdata directory for Fallout New Vegas - compatdata_path = self.path_handler.find_compat_data(fnv_appid) - if not compatdata_path: - self.logger.warning(f"Could not find compatdata directory for Fallout New Vegas (AppID: {fnv_appid})") - # Fallback to Jackify-managed directory - fallback_path = str(self.hoolamike_app_install_path / "USERPROFILE") - self.logger.info(f"Using fallback USERPROFILE path: {fallback_path}") - return fallback_path - - # Construct the Wine prefix Documents path - wine_documents_path = compatdata_path / "pfx" / "drive_c" / "users" / "steamuser" / "Documents" / "My Games" / "FalloutNV" - - if wine_documents_path.exists(): - self.logger.info(f"Found Fallout New Vegas Wine prefix Documents folder: {wine_documents_path}") - return str(wine_documents_path) - else: - self.logger.warning(f"Fallout New Vegas Wine prefix Documents folder not found at: {wine_documents_path}") - # Fallback to Jackify-managed directory - fallback_path = str(self.hoolamike_app_install_path / "USERPROFILE") - self.logger.info(f"Using fallback USERPROFILE path: {fallback_path}") - return fallback_path - - except Exception as e: - self.logger.error(f"Error detecting Fallout New Vegas USERPROFILE: {e}", exc_info=True) - # Fallback to Jackify-managed directory - fallback_path = str(self.hoolamike_app_install_path / "USERPROFILE") - self.logger.info(f"Using fallback USERPROFILE path: {fallback_path}") - return fallback_path - - def reset_config(self): - """Resets the hoolamike.yaml to default settings, backing up any existing file.""" - if self.hoolamike_config_path.is_file(): - # Create a backup with timestamp - import datetime - timestamp = datetime.datetime.now().strftime("%Y%m%d_%H%M%S") - backup_path = self.hoolamike_config_path.with_suffix(f".{timestamp}.bak") - try: - import shutil - shutil.copy2(self.hoolamike_config_path, backup_path) - self.logger.info(f"Created backup of existing config at {backup_path}") - print(f"{COLOR_INFO}Created backup of existing config at {backup_path}{COLOR_RESET}") - except Exception as e: - self.logger.error(f"Failed to create backup of config: {e}") - print(f"{COLOR_WARNING}Warning: Failed to create backup of config: {e}{COLOR_RESET}") - - # Generate and save a fresh default config - self.logger.info("Generating new default configuration") - self.hoolamike_config = self._generate_default_config() - if self.save_hoolamike_config(): - self.logger.info("Successfully reset config to defaults") - print(f"{COLOR_SUCCESS}Successfully reset configuration to defaults.{COLOR_RESET}") - return True - else: - self.logger.error("Failed to save new default config") - print(f"{COLOR_ERROR}Failed to save new default configuration.{COLOR_RESET}") - return False - - def edit_hoolamike_config(self): - """Opens the hoolamike.yaml file in a chosen editor, with a 0 option to return to menu.""" - self.logger.info("Task: Edit Hoolamike Config started...") - self._check_hoolamike_installation() - if not self.hoolamike_installed: - self.logger.warning("Cannot edit config - Hoolamike not installed") - print(f"\n{COLOR_WARNING}Hoolamike is not installed through Jackify yet.{COLOR_RESET}") - print(f"Please use option 1 from the Hoolamike menu to install Hoolamike first.") - print(f"This will ensure that Jackify can properly manage the Hoolamike configuration.") - return False - if self.hoolamike_config is None: - self.logger.warning("Config is not loaded properly. Will attempt to fix or create.") - print(f"\n{COLOR_WARNING}Configuration file may be corrupted or not accessible.{COLOR_RESET}") - print("Options:") - print("1. Reset to default configuration (backup will be created)") - print("2. Try to edit the file anyway (may be corrupted)") - print("0. Cancel and return to menu") - choice = input("\nEnter your choice (0-2): ").strip() - if choice == "1": - if not self.reset_config(): - self.logger.error("Failed to reset configuration") - print(f"{COLOR_ERROR}Failed to reset configuration. See logs for details.{COLOR_RESET}") - return - elif choice == "2": - self.logger.warning("User chose to edit potentially corrupted config") - # Continue to editing - elif choice == "0": - self.logger.info("User cancelled editing corrupted config") - print("Edit cancelled.") - return - else: - self.logger.info("User cancelled editing corrupted config") - print("Edit cancelled.") - return - if not self.hoolamike_config_path.exists(): - self.logger.warning(f"Hoolamike config file does not exist at {self.hoolamike_config_path}. Generating default before editing.") - self.hoolamike_config = self._generate_default_config() - self.save_hoolamike_config() - if not self.hoolamike_config_path.exists(): - self.logger.error("Failed to create config file for editing.") - print("Error: Could not create configuration file.") - return - available_editors = ["nano", "vim", "vi", "gedit", "kate", "micro"] - preferred_editor = os.environ.get("EDITOR") - found_editors = {} - import shutil - for editor_name in available_editors: - editor_path = shutil.which(editor_name) - if editor_path and editor_path not in found_editors.values(): - found_editors[editor_name] = editor_path - if preferred_editor: - preferred_editor_path = shutil.which(preferred_editor) - if preferred_editor_path and preferred_editor_path not in found_editors.values(): - display_name = os.path.basename(preferred_editor) if '/' in preferred_editor else preferred_editor - if display_name not in found_editors: - found_editors[display_name] = preferred_editor_path - if not found_editors: - self.logger.error("No suitable text editors found on the system.") - print(f"{COLOR_ERROR}Error: No common text editors (nano, vim, gedit, kate, micro) found.{COLOR_RESET}") - return - sorted_editor_names = sorted(found_editors.keys()) - print("\nSelect an editor to open the configuration file:") - print(f"(System default EDITOR is: {preferred_editor if preferred_editor else 'Not set'})") - for i, name in enumerate(sorted_editor_names): - print(f" {i + 1}. {name}") - print(f" 0. Return to Hoolamike Menu") - while True: - try: - choice = input(f"Enter choice (0-{len(sorted_editor_names)}): ").strip() - if choice == "0": - print("Edit cancelled.") - return - choice_index = int(choice) - 1 - if 0 <= choice_index < len(sorted_editor_names): - chosen_name = sorted_editor_names[choice_index] - editor_to_use_path = found_editors[chosen_name] - break - else: - print("Invalid choice.") - except ValueError: - print("Invalid input. Please enter a number.") - except KeyboardInterrupt: - print("\nEdit cancelled.") - return - if editor_to_use_path: - self.logger.info(f"Launching editor '{editor_to_use_path}' for {self.hoolamike_config_path}") - try: - process = subprocess.Popen([editor_to_use_path, str(self.hoolamike_config_path)]) - process.wait() - self.logger.info(f"Editor '{editor_to_use_path}' closed. Reloading config...") - if not self._load_hoolamike_config(): - self.logger.error("Failed to load config after editing. It may still be corrupted.") - print(f"{COLOR_ERROR}Warning: The configuration file could not be parsed after editing.{COLOR_RESET}") - print("You may need to fix it manually or reset it to defaults.") - return False - else: - self.logger.info("Successfully reloaded config after editing.") - print(f"{COLOR_SUCCESS}Configuration file successfully updated.{COLOR_RESET}") - return True - except FileNotFoundError: - self.logger.error(f"Editor '{editor_to_use_path}' not found unexpectedly.") - print(f"{COLOR_ERROR}Error: Editor command '{editor_to_use_path}' not found.{COLOR_RESET}") - except Exception as e: - self.logger.error(f"Error launching or waiting for editor: {e}") - print(f"{COLOR_ERROR}An error occurred while launching the editor: {e}{COLOR_RESET}") - - @staticmethod - def integrate_ttw_into_modlist(ttw_output_path: Path, modlist_install_dir: Path, ttw_version: str) -> bool: - """Integrate TTW output into a modlist's MO2 structure - - This method: - 1. Copies TTW output to the modlist's mods folder - 2. Updates modlist.txt for all profiles - 3. Updates plugins.txt with TTW ESMs in correct order - - Args: - ttw_output_path: Path to TTW output directory - modlist_install_dir: Path to modlist installation directory - ttw_version: TTW version string (e.g., "3.4") - - Returns: - bool: True if integration successful, False otherwise - """ - logging_handler = LoggingHandler() - logging_handler.rotate_log_for_logger('ttw-install', 'TTW_Install_workflow.log') - logger = logging_handler.setup_logger('ttw-install', 'TTW_Install_workflow.log') - - try: - import shutil - import re - - # Validate paths - if not ttw_output_path.exists(): - logger.error(f"TTW output path does not exist: {ttw_output_path}") - return False - - mods_dir = modlist_install_dir / "mods" - profiles_dir = modlist_install_dir / "profiles" - - if not mods_dir.exists() or not profiles_dir.exists(): - logger.error(f"Invalid modlist directory structure: {modlist_install_dir}") - return False - - # Create mod folder name with version - mod_folder_name = f"[NoDelete] Tale of Two Wastelands {ttw_version}" if ttw_version else "[NoDelete] Tale of Two Wastelands" - target_mod_dir = mods_dir / mod_folder_name - - # Copy TTW output to mods directory - logger.info(f"Copying TTW output to {target_mod_dir}") - if target_mod_dir.exists(): - logger.info(f"Removing existing TTW mod at {target_mod_dir}") - shutil.rmtree(target_mod_dir) - - shutil.copytree(ttw_output_path, target_mod_dir) - logger.info("TTW output copied successfully") - - # TTW ESMs in correct load order - ttw_esms = [ - "Fallout3.esm", - "Anchorage.esm", - "ThePitt.esm", - "BrokenSteel.esm", - "PointLookout.esm", - "Zeta.esm", - "TaleOfTwoWastelands.esm", - "YUPTTW.esm" - ] - - # Process each profile - for profile_dir in profiles_dir.iterdir(): - if not profile_dir.is_dir(): - continue - - profile_name = profile_dir.name - logger.info(f"Processing profile: {profile_name}") - - # Update modlist.txt - modlist_file = profile_dir / "modlist.txt" - if modlist_file.exists(): - # Read existing modlist - with open(modlist_file, 'r', encoding='utf-8') as f: - lines = f.readlines() - - # Find the TTW placeholder separator and insert BEFORE it - separator_found = False - ttw_mod_line = f"+{mod_folder_name}\n" - new_lines = [] - - for line in lines: - # Skip existing TTW mod entries (but keep separators and other TTW-related mods) - # Match patterns: "+[NoDelete] Tale of Two Wastelands", "+[NoDelete] TTW", etc. - stripped = line.strip() - if stripped.startswith('+') and '[nodelete]' in stripped.lower(): - # Check if it's the main TTW mod (not other TTW-related mods like "TTW Quick Start") - if ('tale of two wastelands' in stripped.lower() and 'quick start' not in stripped.lower() and - 'loading wheel' not in stripped.lower()) or stripped.lower().startswith('+[nodelete] ttw '): - logger.info(f"Removing existing TTW mod entry: {stripped}") - continue - - # Insert TTW mod BEFORE the placeholder separator (MO2 order is bottom-up) - # Check BEFORE appending so TTW mod appears before separator in file - if "put tale of two wastelands mod here" in line.lower() and "_separator" in line.lower(): - new_lines.append(ttw_mod_line) - separator_found = True - logger.info(f"Inserted TTW mod before separator: {line.strip()}") - - new_lines.append(line) - - # If no separator found, append at the end - if not separator_found: - new_lines.append(ttw_mod_line) - logger.warning(f"No TTW separator found in {profile_name}, appended to end") - - # Write back - with open(modlist_file, 'w', encoding='utf-8') as f: - f.writelines(new_lines) - - logger.info(f"Updated modlist.txt for {profile_name}") - else: - logger.warning(f"modlist.txt not found for profile {profile_name}") - - # Update plugins.txt - plugins_file = profile_dir / "plugins.txt" - if plugins_file.exists(): - # Read existing plugins - with open(plugins_file, 'r', encoding='utf-8') as f: - lines = f.readlines() - - # Remove any existing TTW ESMs - ttw_esm_set = set(esm.lower() for esm in ttw_esms) - lines = [line for line in lines if line.strip().lower() not in ttw_esm_set] - - # Find CaravanPack.esm and insert TTW ESMs after it - insert_index = None - for i, line in enumerate(lines): - if line.strip().lower() == "caravanpack.esm": - insert_index = i + 1 - break - - if insert_index is not None: - # Insert TTW ESMs in correct order - for esm in reversed(ttw_esms): - lines.insert(insert_index, f"{esm}\n") - else: - logger.warning(f"CaravanPack.esm not found in {profile_name}, appending TTW ESMs to end") - for esm in ttw_esms: - lines.append(f"{esm}\n") - - # Write back - with open(plugins_file, 'w', encoding='utf-8') as f: - f.writelines(lines) - - logger.info(f"Updated plugins.txt for {profile_name}") - else: - logger.warning(f"plugins.txt not found for profile {profile_name}") - - logger.info("TTW integration completed successfully") - return True - - except Exception as e: - logger.error(f"Failed to integrate TTW into modlist: {e}") - import traceback - logger.error(traceback.format_exc()) - return False - -# Example usage (for testing, remove later) -if __name__ == '__main__': - logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s') - print("Running HoolamikeHandler discovery...") - handler = HoolamikeHandler(steamdeck=False, verbose=True) - print("\n--- Discovery Results ---") - print(f"Game Paths: {handler.game_install_paths}") - print(f"Hoolamike App Install Path: {handler.hoolamike_app_install_path}") - print(f"Hoolamike Executable: {handler.hoolamike_executable_path}") - print(f"Hoolamike Installed: {handler.hoolamike_installed}") - print(f"Hoolamike Config Path: {handler.hoolamike_config_path}") - config_loaded = isinstance(handler.hoolamike_config, dict) - print(f"Hoolamike Config Loaded: {config_loaded}") - if config_loaded: - print(f" Downloads Dir: {handler.hoolamike_config.get('downloaders', {}).get('downloads_directory')}") - print(f" API Key Set: {'Yes' if handler.hoolamike_config.get('downloaders', {}).get('nexus', {}).get('api_key') != 'YOUR_API_KEY_HERE' else 'No'}") - print("-------------------------") - # Test edit config (example) - # handler.edit_hoolamike_config() \ No newline at end of file diff --git a/jackify/backend/handlers/menu_handler.py b/jackify/backend/handlers/menu_handler.py index 0039f8c..10c16fe 100644 --- a/jackify/backend/handlers/menu_handler.py +++ b/jackify/backend/handlers/menu_handler.py @@ -863,60 +863,6 @@ class MenuHandler: self.logger.debug("_clear_screen: Clearing screen for POSIX by printing 100 newlines.") print("\n" * 100, flush=True) - def show_hoolamike_menu(self, cli_instance): - """Show the Hoolamike Modlist Management menu""" - if not hasattr(cli_instance, 'hoolamike_handler') or cli_instance.hoolamike_handler is None: - try: - from .hoolamike_handler import HoolamikeHandler - cli_instance.hoolamike_handler = HoolamikeHandler( - steamdeck=getattr(cli_instance, 'steamdeck', False), - verbose=getattr(cli_instance, 'verbose', False), - filesystem_handler=getattr(cli_instance, 'filesystem_handler', None), - config_handler=getattr(cli_instance, 'config_handler', None), - menu_handler=self - ) - except Exception as e: - self.logger.error(f"Failed to initialize Hoolamike features: {e}", exc_info=True) - print(f"{COLOR_ERROR}Error: Failed to initialize Hoolamike features. Check logs.{COLOR_RESET}") - input("\nPress Enter to return to the main menu...") - return # Exit this menu if handler fails - - while True: - self._clear_screen() - # Banner display handled by frontend - # Use print_section_header for consistency if available, otherwise manual with COLOR_SELECTION - if hasattr(self, 'print_section_header'): # Check if method exists (it's from ui_utils) - print_section_header("Hoolamike Modlist Management") - else: # Fallback if not imported or available directly on self - print(f"{COLOR_SELECTION}Hoolamike Modlist Management{COLOR_RESET}") - print(f"{COLOR_SELECTION}{'-'*30}{COLOR_RESET}") - - print(f"{COLOR_SELECTION}1.{COLOR_RESET} Install or Update Hoolamike App") - print(f"{COLOR_SELECTION}2.{COLOR_RESET} Install Modlist (Nexus Premium)") - print(f"{COLOR_SELECTION}3.{COLOR_RESET} Install Modlist (Non-Premium) {COLOR_DISABLED}(Not Implemented){COLOR_RESET}") - print(f"{COLOR_SELECTION}4.{COLOR_RESET} Install Tale of Two Wastelands (TTW)") - print(f"{COLOR_SELECTION}5.{COLOR_RESET} Edit Hoolamike Configuration") - print(f"{COLOR_SELECTION}0.{COLOR_RESET} Return to Main Menu") - selection = input(f"\n{COLOR_PROMPT}Enter your selection (0-5): {COLOR_RESET}").strip() - - if selection.lower() == 'q': # Allow 'q' to re-display menu - continue - if selection == "1": - cli_instance.hoolamike_handler.install_update_hoolamike() - elif selection == "2": - cli_instance.hoolamike_handler.install_modlist(premium=True) - elif selection == "3": - print(f"{COLOR_INFO}Install Modlist (Non-Premium) is not yet implemented.{COLOR_RESET}") - input("\nPress Enter to return to the Hoolamike menu...") - elif selection == "4": - cli_instance.hoolamike_handler.install_ttw() - elif selection == "5": - cli_instance.hoolamike_handler.edit_hoolamike_config() - elif selection == "0": - break - else: - print("Invalid selection. Please try again.") - time.sleep(1) diff --git a/jackify/backend/handlers/modlist_handler.py b/jackify/backend/handlers/modlist_handler.py index e5bc448..7e6e7d9 100644 --- a/jackify/backend/handlers/modlist_handler.py +++ b/jackify/backend/handlers/modlist_handler.py @@ -571,15 +571,19 @@ class ModlistHandler: 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). """ - # 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).") - print("Error: Missing required information to start configuration.") + 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).") + print("Error: Missing required information to start configuration.") + return False + except Exception as e: + self.logger.error(f"Exception in _execute_configuration_steps initialization: {e}", exc_info=True) return False # Step 1: Set protontricks permissions @@ -706,15 +710,18 @@ class ModlistHandler: target_appid = self.appid # Use user's preferred component installation method (respects settings toggle) + self.logger.debug(f"Getting WINEPREFIX for AppID {target_appid}...") wineprefix = self.protontricks_handler.get_wine_prefix_path(target_appid) if not wineprefix: self.logger.error("Failed to get WINEPREFIX path for component installation.") print("Error: Could not determine wine prefix location.") return False + self.logger.debug(f"WINEPREFIX obtained: {wineprefix}") # Use the winetricks handler which respects the user's toggle setting try: self.logger.info("Installing Wine components using user's preferred method...") + self.logger.debug(f"Calling winetricks_handler.install_wine_components with wineprefix={wineprefix}, game_var={self.game_var_full}, components={components}") success = self.winetricks_handler.install_wine_components(wineprefix, self.game_var_full, specific_components=components) if success: self.logger.info("Wine component installation completed successfully") @@ -920,16 +927,25 @@ class ModlistHandler: if self.steam_library and self.game_var_full: vanilla_game_dir = str(Path(self.steam_library) / "steamapps" / "common" / self.game_var_full) - if not self.path_handler.create_dxvk_conf( + dxvk_created = self.path_handler.create_dxvk_conf( modlist_dir=self.modlist_dir, modlist_sdcard=self.modlist_sdcard, steam_library=str(self.steam_library) if self.steam_library else None, # Pass as string or None basegame_sdcard=self.basegame_sdcard, game_var_full=self.game_var_full, - vanilla_game_dir=vanilla_game_dir - ): - self.logger.warning("Failed to create dxvk.conf file.") - print("Warning: Failed to create dxvk.conf file.") + vanilla_game_dir=vanilla_game_dir, + stock_game_path=self.stock_game_path + ) + dxvk_verified = self.path_handler.verify_dxvk_conf_exists( + modlist_dir=self.modlist_dir, + steam_library=str(self.steam_library) if self.steam_library else None, + game_var_full=self.game_var_full, + vanilla_game_dir=vanilla_game_dir, + stock_game_path=self.stock_game_path + ) + if not dxvk_created or not dxvk_verified: + self.logger.warning("DXVK configuration file is missing or incomplete after post-install steps.") + print("Warning: Failed to verify dxvk.conf file (required for AMD GPUs).") self.logger.info("Step 10: Creating dxvk.conf... Done") # Step 11a: Small Tasks - Delete Incompatible Plugins diff --git a/jackify/backend/handlers/modlist_install_cli.py b/jackify/backend/handlers/modlist_install_cli.py index 5e947a2..753273f 100644 --- a/jackify/backend/handlers/modlist_install_cli.py +++ b/jackify/backend/handlers/modlist_install_cli.py @@ -49,7 +49,7 @@ logger = logging.getLogger(__name__) # Standard logger init # Helper function to get path to jackify-install-engine def get_jackify_engine_path(): if getattr(sys, 'frozen', False) and hasattr(sys, '_MEIPASS'): - # Running in a PyInstaller bundle + # Running inside the bundled AppImage (frozen) # Engine is expected at /jackify/engine/jackify-engine return os.path.join(sys._MEIPASS, 'jackify', 'engine', 'jackify-engine') else: @@ -408,51 +408,76 @@ class ModlistInstallCLI: self.context['download_dir'] = download_dir_path self.logger.debug(f"Download directory context set to: {self.context['download_dir']}") - # 5. Prompt for Nexus API key (skip if in context) + # 5. Get Nexus authentication (OAuth or API key) if 'nexus_api_key' not in self.context: - from jackify.backend.services.api_key_service import APIKeyService - api_key_service = APIKeyService() - saved_key = api_key_service.get_saved_api_key() - api_key = None - if saved_key: - print("\n" + "-" * 28) - print(f"{COLOR_INFO}A Nexus API Key is already saved.{COLOR_RESET}") - use_saved = input(f"{COLOR_PROMPT}Use the saved API key? [Y/n]: {COLOR_RESET}").strip().lower() - if use_saved in ('', 'y', 'yes'): - api_key = saved_key + from jackify.backend.services.nexus_auth_service import NexusAuthService + auth_service = NexusAuthService() + + # Get current auth status + authenticated, method, username = auth_service.get_auth_status() + + if authenticated: + # Already authenticated - use existing auth + if method == 'oauth': + print("\n" + "-" * 28) + print(f"{COLOR_SUCCESS}Nexus Authentication: Authorized via OAuth{COLOR_RESET}") + if username: + print(f"{COLOR_INFO}Logged in as: {username}{COLOR_RESET}") + elif method == 'api_key': + print("\n" + "-" * 28) + print(f"{COLOR_INFO}Nexus Authentication: Using API Key (Legacy){COLOR_RESET}") + + # Get valid token/key + api_key = auth_service.ensure_valid_auth() + if api_key: + self.context['nexus_api_key'] = api_key else: - new_key = input(f"{COLOR_PROMPT}Enter a new Nexus API Key (or press Enter to keep the saved one): {COLOR_RESET}").strip() - if new_key: - api_key = new_key - replace = input(f"{COLOR_PROMPT}Replace the saved key with this one? [y/N]: {COLOR_RESET}").strip().lower() - if replace == 'y': - if api_key_service.save_api_key(api_key): - print(f"{COLOR_SUCCESS}API key saved successfully.{COLOR_RESET}") - else: - print(f"{COLOR_WARNING}Failed to save API key. Using for this session only.{COLOR_RESET}") + # Auth expired or invalid - prompt to set up + print(f"\n{COLOR_WARNING}Your authentication has expired or is invalid.{COLOR_RESET}") + authenticated = False + + if not authenticated: + # Not authenticated - offer to set up OAuth + print("\n" + "-" * 28) + print(f"{COLOR_WARNING}Nexus Mods authentication is required for downloading mods.{COLOR_RESET}") + print(f"\n{COLOR_PROMPT}Would you like to authorize with Nexus now?{COLOR_RESET}") + print(f"{COLOR_INFO}This will open your browser for secure OAuth authorization.{COLOR_RESET}") + + authorize = input(f"{COLOR_PROMPT}Authorize now? [Y/n]: {COLOR_RESET}").strip().lower() + + if authorize in ('', 'y', 'yes'): + # Launch OAuth authorization + print(f"\n{COLOR_INFO}Starting OAuth authorization...{COLOR_RESET}") + print(f"{COLOR_WARNING}Your browser will open shortly.{COLOR_RESET}") + print(f"{COLOR_INFO}Note: Your browser may ask permission to open 'xdg-open' or{COLOR_RESET}") + print(f"{COLOR_INFO}Jackify's protocol handler - please click 'Open' or 'Allow'.{COLOR_RESET}") + + def show_message(msg): + print(f"\n{COLOR_INFO}{msg}{COLOR_RESET}") + + success = auth_service.authorize_oauth(show_browser_message_callback=show_message) + + if success: + print(f"\n{COLOR_SUCCESS}OAuth authorization successful!{COLOR_RESET}") + _, _, username = auth_service.get_auth_status() + if username: + print(f"{COLOR_INFO}Authorized as: {username}{COLOR_RESET}") + + api_key = auth_service.ensure_valid_auth() + if api_key: + self.context['nexus_api_key'] = api_key else: - print(f"{COLOR_INFO}Using new key for this session only. Saved key unchanged.{COLOR_RESET}") + print(f"{COLOR_ERROR}Failed to retrieve auth token after authorization.{COLOR_RESET}") + return None else: - api_key = saved_key - else: - print("\n" + "-" * 28) - print(f"{COLOR_INFO}A Nexus Mods API key is required for downloading mods.{COLOR_RESET}") - print(f"{COLOR_INFO}You can get your personal key at: {COLOR_SELECTION}https://www.nexusmods.com/users/myaccount?tab=api{COLOR_RESET}") - print(f"{COLOR_WARNING}Your API Key is NOT saved locally. It is used only for this session unless you choose to save it.{COLOR_RESET}") - api_key = input(f"{COLOR_PROMPT}Enter Nexus API Key (or 'q' to cancel): {COLOR_RESET}").strip() - if not api_key or api_key.lower() == 'q': - self.logger.info("User cancelled or provided no API key.") - return None - save = input(f"{COLOR_PROMPT}Would you like to save this API key for future use? [y/N]: {COLOR_RESET}").strip().lower() - if save == 'y': - if api_key_service.save_api_key(api_key): - print(f"{COLOR_SUCCESS}API key saved successfully.{COLOR_RESET}") - else: - print(f"{COLOR_WARNING}Failed to save API key. Using for this session only.{COLOR_RESET}") + print(f"\n{COLOR_ERROR}OAuth authorization failed.{COLOR_RESET}") + return None else: - print(f"{COLOR_INFO}Using API key for this session only. It will not be saved.{COLOR_RESET}") - self.context['nexus_api_key'] = api_key - self.logger.debug(f"NEXUS_API_KEY is set in environment for engine (presence check).") + # User declined OAuth - cancelled + print(f"\n{COLOR_INFO}Authorization required to proceed. Installation cancelled.{COLOR_RESET}") + self.logger.info("User declined Nexus authorization.") + return None + self.logger.debug(f"Nexus authentication configured for engine.") # Display summary and confirm self._display_summary() # Ensure this method exists or implement it @@ -501,11 +526,23 @@ class ModlistInstallCLI: if isinstance(download_dir_display, tuple): download_dir_display = download_dir_display[0] # Get the Path object from (Path, bool) print(f"Download Directory: {download_dir_display}") - - if self.context.get('nexus_api_key'): - print(f"Nexus API Key: [SET]") + + # Show authentication method + from jackify.backend.services.nexus_auth_service import NexusAuthService + auth_service = NexusAuthService() + authenticated, method, username = auth_service.get_auth_status() + + if method == 'oauth': + auth_display = f"Nexus Authentication: OAuth" + if username: + auth_display += f" ({username})" + elif method == 'api_key': + auth_display = "Nexus Authentication: API Key (Legacy)" else: - print(f"Nexus API Key: [NOT SET - WILL LIKELY FAIL]") + # Should never reach here since we validate auth before getting to summary + auth_display = "Nexus Authentication: Unknown" + + print(auth_display) print(f"{COLOR_INFO}----------------------------------------{COLOR_RESET}") def configuration_phase(self): @@ -597,8 +634,8 @@ class ModlistInstallCLI: # --- End Patch --- # Build command - cmd = [engine_path, 'install'] - + cmd = [engine_path, 'install', '--show-file-progress'] + # Check for debug mode and pass --debug to engine if needed from jackify.backend.handlers.config_handler import ConfigHandler config_handler = ConfigHandler() @@ -606,7 +643,13 @@ class ModlistInstallCLI: if debug_mode: cmd.append('--debug') self.logger.info("Debug mode enabled in config - passing --debug flag to jackify-engine") - + + # Check GPU setting and add --no-gpu flag if disabled + gpu_enabled = config_handler.get('enable_gpu_texture_conversion', True) + if not gpu_enabled: + cmd.append('--no-gpu') + self.logger.info("GPU texture conversion disabled - passing --no-gpu flag to jackify-engine") + # Determine if this is a local .wabbajack file or an online modlist modlist_value = self.context.get('modlist_value') machineid = self.context.get('machineid') @@ -667,8 +710,10 @@ class ModlistInstallCLI: else: self.logger.warning(f"File descriptor limit: {message}") - # Popen now inherits the modified os.environ because env=None - proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, text=False, env=None, cwd=engine_dir) + # Use cleaned environment to prevent AppImage variable inheritance + from jackify.backend.handlers.subprocess_utils import get_clean_subprocess_env + clean_env = get_clean_subprocess_env() + proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, text=False, env=clean_env, cwd=engine_dir) # Start performance monitoring for the engine process # Adjust monitoring based on debug mode @@ -1101,11 +1146,23 @@ class ModlistInstallCLI: if isinstance(download_dir_display, tuple): download_dir_display = download_dir_display[0] # Get the Path object from (Path, bool) print(f"Download Directory: {download_dir_display}") - - if self.context.get('nexus_api_key'): - print(f"Nexus API Key: [SET]") + + # Show authentication method + from jackify.backend.services.nexus_auth_service import NexusAuthService + auth_service = NexusAuthService() + authenticated, method, username = auth_service.get_auth_status() + + if method == 'oauth': + auth_display = f"Nexus Authentication: OAuth" + if username: + auth_display += f" ({username})" + elif method == 'api_key': + auth_display = "Nexus Authentication: API Key (Legacy)" else: - print(f"Nexus API Key: [NOT SET - WILL LIKELY FAIL]") + # Should never reach here since we validate auth before getting to summary + auth_display = "Nexus Authentication: Unknown" + + print(auth_display) print(f"{COLOR_INFO}----------------------------------------{COLOR_RESET}") def _enhance_nexus_error(self, line: str) -> str: @@ -1234,52 +1291,65 @@ class ModlistInstallCLI: print(f"\n{COLOR_INFO}Starting TTW installation workflow...{COLOR_RESET}") # Import TTW installation handler - from jackify.backend.handlers.hoolamike_handler import HoolamikeHandler + from jackify.backend.handlers.ttw_installer_handler import TTWInstallerHandler from jackify.backend.models.configuration import SystemInfo + from pathlib import Path system_info = SystemInfo() - hoolamike_handler = HoolamikeHandler(system_info) + ttw_installer_handler = TTWInstallerHandler( + steamdeck=system_info.is_steamdeck if hasattr(system_info, 'is_steamdeck') else False, + verbose=self.verbose if hasattr(self, 'verbose') else False, + filesystem_handler=self.filesystem_handler if hasattr(self, 'filesystem_handler') else None, + config_handler=self.config_handler if hasattr(self, 'config_handler') else None + ) - # Check if Hoolamike is installed - is_installed, installed_version = hoolamike_handler.check_installation_status() + # Check if TTW_Linux_Installer is installed + ttw_installer_handler._check_installation() - if not is_installed: - print(f"{COLOR_INFO}Hoolamike (TTW installer) is not installed.{COLOR_RESET}") - user_input = input(f"{COLOR_PROMPT}Install Hoolamike? (yes/no): {COLOR_RESET}").strip().lower() + if not ttw_installer_handler.ttw_installer_installed: + print(f"{COLOR_INFO}TTW_Linux_Installer is not installed.{COLOR_RESET}") + user_input = input(f"{COLOR_PROMPT}Install TTW_Linux_Installer? (yes/no): {COLOR_RESET}").strip().lower() if user_input not in ['yes', 'y']: print(f"{COLOR_INFO}TTW installation cancelled.{COLOR_RESET}") return - # Install Hoolamike - print(f"{COLOR_INFO}Installing Hoolamike...{COLOR_RESET}") - success, message = hoolamike_handler.install_hoolamike() + # Install TTW_Linux_Installer + print(f"{COLOR_INFO}Installing TTW_Linux_Installer...{COLOR_RESET}") + success, message = ttw_installer_handler.install_ttw_installer() if not success: - print(f"{COLOR_ERROR}Failed to install Hoolamike: {message}{COLOR_RESET}") + print(f"{COLOR_ERROR}Failed to install TTW_Linux_Installer: {message}{COLOR_RESET}") return - print(f"{COLOR_INFO}Hoolamike installed successfully.{COLOR_RESET}") + print(f"{COLOR_INFO}TTW_Linux_Installer installed successfully.{COLOR_RESET}") - # Get Hoolamike MPI path - mpi_path = hoolamike_handler.get_mpi_path() - if not mpi_path or not os.path.exists(mpi_path): - print(f"{COLOR_ERROR}Hoolamike MPI file not found at: {mpi_path}{COLOR_RESET}") + # Prompt for TTW .mpi file + print(f"\n{COLOR_PROMPT}TTW Installer File (.mpi){COLOR_RESET}") + mpi_path = input(f"{COLOR_PROMPT}Path to TTW .mpi file: {COLOR_RESET}").strip() + if not mpi_path: + print(f"{COLOR_WARNING}No .mpi file specified. Cancelling.{COLOR_RESET}") + return + + mpi_path = Path(mpi_path).expanduser() + if not mpi_path.exists() or not mpi_path.is_file(): + print(f"{COLOR_ERROR}TTW .mpi file not found: {mpi_path}{COLOR_RESET}") return # Prompt for TTW installation directory print(f"\n{COLOR_PROMPT}TTW Installation Directory{COLOR_RESET}") - print(f"Default: {os.path.join(install_dir, 'TTW')}") + default_ttw_dir = os.path.join(install_dir, 'TTW') + print(f"Default: {default_ttw_dir}") ttw_install_dir = input(f"{COLOR_PROMPT}TTW install directory (Enter for default): {COLOR_RESET}").strip() if not ttw_install_dir: - ttw_install_dir = os.path.join(install_dir, "TTW") + ttw_install_dir = default_ttw_dir - # Run Hoolamike installation - print(f"\n{COLOR_INFO}Installing TTW using Hoolamike...{COLOR_RESET}") + # Run TTW installation + print(f"\n{COLOR_INFO}Installing TTW using TTW_Linux_Installer...{COLOR_RESET}") print(f"{COLOR_INFO}This may take a while (15-30 minutes depending on your system).{COLOR_RESET}") - success = hoolamike_handler.run_hoolamike_install(mpi_path, ttw_install_dir) + success, message = ttw_installer_handler.install_ttw_backend(Path(mpi_path), Path(ttw_install_dir)) if success: print(f"\n{COLOR_INFO}═══════════════════════════════════════════════════════════════{COLOR_RESET}") @@ -1289,6 +1359,7 @@ class ModlistInstallCLI: print(f"The modlist '{modlist_name}' is now ready to use with TTW.") else: print(f"\n{COLOR_ERROR}TTW installation failed. Check the logs for details.{COLOR_RESET}") + print(f"{COLOR_ERROR}Error: {message}{COLOR_RESET}") except Exception as e: self.logger.error(f"Error during TTW installation: {e}", exc_info=True) diff --git a/jackify/backend/handlers/oauth_token_handler.py b/jackify/backend/handlers/oauth_token_handler.py new file mode 100644 index 0000000..9d27d31 --- /dev/null +++ b/jackify/backend/handlers/oauth_token_handler.py @@ -0,0 +1,434 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +OAuth Token Handler +Handles encrypted storage and retrieval of OAuth tokens +""" + +import os +import json +import base64 +import hashlib +import logging +import time +from typing import Optional, Dict +from pathlib import Path + +logger = logging.getLogger(__name__) + + +class OAuthTokenHandler: + """ + Handles OAuth token storage with simple encryption + Stores tokens in ~/.config/jackify/nexus-oauth.json + """ + + def __init__(self, config_dir: Optional[str] = None): + """ + Initialize token handler + + Args: + config_dir: Optional custom config directory (defaults to ~/.config/jackify) + """ + if config_dir: + self.config_dir = Path(config_dir) + else: + self.config_dir = Path.home() / ".config" / "jackify" + + self.token_file = self.config_dir / "nexus-oauth.json" + + # Ensure config directory exists + self.config_dir.mkdir(parents=True, exist_ok=True) + + # Generate encryption key based on machine-specific data + self._encryption_key = self._generate_encryption_key() + + def _generate_encryption_key(self) -> bytes: + """ + Generate encryption key based on machine-specific data using Fernet + + Uses hostname + username + machine ID as key material, similar to DPAPI approach. + This provides proper symmetric encryption while remaining machine-specific. + + Returns: + Fernet-compatible 32-byte encryption key + """ + import socket + import getpass + + try: + hostname = socket.gethostname() + username = getpass.getuser() + + # Try to get machine ID for additional entropy + machine_id = None + try: + # Linux machine-id + with open('/etc/machine-id', 'r') as f: + machine_id = f.read().strip() + except: + try: + # Alternative locations + with open('/var/lib/dbus/machine-id', 'r') as f: + machine_id = f.read().strip() + except: + pass + + # Combine multiple sources of machine-specific data + if machine_id: + key_material = f"{hostname}:{username}:{machine_id}:jackify" + else: + key_material = f"{hostname}:{username}:jackify" + + except Exception as e: + logger.warning(f"Failed to get machine info for encryption: {e}") + key_material = "jackify:default:key" + + # Generate 32-byte key using SHA256 for Fernet + # Fernet requires base64-encoded 32-byte key + key_bytes = hashlib.sha256(key_material.encode('utf-8')).digest() + return base64.urlsafe_b64encode(key_bytes) + + def _encrypt_data(self, data: str) -> str: + """ + Encrypt data using AES-GCM (authenticated encryption) + + Uses pycryptodome for cross-platform compatibility. + AES-GCM provides authenticated encryption similar to Fernet. + + Args: + data: Plain text data + + Returns: + Encrypted data as base64 string (nonce:ciphertext:tag format) + """ + try: + from Crypto.Cipher import AES + from Crypto.Random import get_random_bytes + + # Derive 32-byte AES key from encryption_key (which is base64-encoded) + key = base64.urlsafe_b64decode(self._encryption_key) + + # Generate random nonce (12 bytes for GCM) + nonce = get_random_bytes(12) + + # Create AES-GCM cipher + cipher = AES.new(key, AES.MODE_GCM, nonce=nonce) + + # Encrypt and get authentication tag + data_bytes = data.encode('utf-8') + ciphertext, tag = cipher.encrypt_and_digest(data_bytes) + + # Combine nonce:ciphertext:tag and base64 encode + combined = nonce + ciphertext + tag + return base64.b64encode(combined).decode('utf-8') + + except ImportError: + logger.error("pycryptodome package not available for token encryption") + return "" + except Exception as e: + logger.error(f"Failed to encrypt data: {e}") + return "" + + def _decrypt_data(self, encrypted_data: str) -> Optional[str]: + """ + Decrypt data using AES-GCM (authenticated encryption) + + Args: + encrypted_data: Encrypted data string (base64-encoded nonce:ciphertext:tag) + + Returns: + Decrypted plain text or None on failure + """ + try: + from Crypto.Cipher import AES + + # Derive 32-byte AES key from encryption_key + key = base64.urlsafe_b64decode(self._encryption_key) + + # Decode base64 and split nonce:ciphertext:tag + combined = base64.b64decode(encrypted_data.encode('utf-8')) + nonce = combined[:12] + tag = combined[-16:] + ciphertext = combined[12:-16] + + # Create AES-GCM cipher + cipher = AES.new(key, AES.MODE_GCM, nonce=nonce) + + # Decrypt and verify authentication tag + plaintext = cipher.decrypt_and_verify(ciphertext, tag) + + return plaintext.decode('utf-8') + + except ImportError: + logger.error("pycryptodome package not available for token decryption") + return None + except Exception as e: + logger.error(f"Failed to decrypt data: {e}") + return None + + def save_token(self, token_data: Dict) -> bool: + """ + Save OAuth token to encrypted file with proper permissions + + Args: + token_data: Token data dict from OAuth response + + Returns: + True if saved successfully + """ + try: + # Add timestamp for tracking + token_data['_saved_at'] = int(time.time()) + + # Convert to JSON + json_data = json.dumps(token_data, indent=2) + + # Encrypt using Fernet + encrypted = self._encrypt_data(json_data) + + if not encrypted: + logger.error("Encryption failed, cannot save token") + return False + + # Save to file with restricted permissions + # Write to temp file first, then move (atomic operation) + import tempfile + fd, temp_path = tempfile.mkstemp(dir=self.config_dir, prefix='.oauth_tmp_') + + try: + with os.fdopen(fd, 'w') as f: + json.dump({'encrypted_data': encrypted}, f, indent=2) + + # Set restrictive permissions (owner read/write only) + os.chmod(temp_path, 0o600) + + # Atomic move + os.replace(temp_path, self.token_file) + + logger.info(f"Saved encrypted OAuth token to {self.token_file}") + return True + + except Exception as e: + # Clean up temp file on error + try: + os.unlink(temp_path) + except: + pass + raise e + + except Exception as e: + logger.error(f"Failed to save OAuth token: {e}") + return False + + def load_token(self) -> Optional[Dict]: + """ + Load OAuth token from encrypted file + + Returns: + Token data dict or None if not found or invalid + """ + if not self.token_file.exists(): + logger.debug("No OAuth token file found") + return None + + try: + # Load encrypted data + with open(self.token_file, 'r') as f: + data = json.load(f) + + encrypted = data.get('encrypted_data') + if not encrypted: + logger.error("Token file missing encrypted_data field") + return None + + # Decrypt + decrypted = self._decrypt_data(encrypted) + if not decrypted: + logger.error("Failed to decrypt token data") + return None + + # Parse JSON + token_data = json.loads(decrypted) + + logger.debug("Successfully loaded OAuth token") + return token_data + + except json.JSONDecodeError as e: + logger.error(f"Token file contains invalid JSON: {e}") + return None + except Exception as e: + logger.error(f"Failed to load OAuth token: {e}") + return None + + def delete_token(self) -> bool: + """ + Delete OAuth token file + + Returns: + True if deleted successfully + """ + try: + if self.token_file.exists(): + self.token_file.unlink() + logger.info("Deleted OAuth token file") + return True + else: + logger.debug("No OAuth token file to delete") + return False + + except Exception as e: + logger.error(f"Failed to delete OAuth token: {e}") + return False + + def has_token(self) -> bool: + """ + Check if OAuth token file exists + + Returns: + True if token file exists + """ + return self.token_file.exists() + + def is_token_expired(self, token_data: Optional[Dict] = None, buffer_minutes: int = 5) -> bool: + """ + Check if token is expired or close to expiring + + Args: + token_data: Optional token data dict (loads from file if not provided) + buffer_minutes: Minutes before expiry to consider token expired (default 5) + + Returns: + True if token is expired or will expire within buffer_minutes + """ + if token_data is None: + token_data = self.load_token() + + if not token_data: + return True + + # Extract OAuth data if nested + oauth_data = token_data.get('oauth', token_data) + + # Get expiry information + expires_in = oauth_data.get('expires_in') + saved_at = token_data.get('_saved_at') + + if not expires_in or not saved_at: + logger.debug("Token missing expiry information, assuming valid") + return False # Assume token is valid if no expiry info + + # Calculate expiry time + expires_at = saved_at + expires_in + buffer_seconds = buffer_minutes * 60 + now = int(time.time()) + + # Check if expired or within buffer + is_expired = (expires_at - buffer_seconds) < now + + if is_expired: + remaining = expires_at - now + if remaining < 0: + logger.debug(f"Token expired {-remaining} seconds ago") + else: + logger.debug(f"Token expires in {remaining} seconds (within buffer)") + + return is_expired + + def get_access_token(self) -> Optional[str]: + """ + Get access token from storage + + Returns: + Access token string or None if not found or expired + """ + token_data = self.load_token() + + if not token_data: + return None + + # Check if expired + if self.is_token_expired(token_data): + logger.debug("Stored token is expired") + return None + + # Extract access token from OAuth structure + oauth_data = token_data.get('oauth', token_data) + access_token = oauth_data.get('access_token') + + if not access_token: + logger.error("Token data missing access_token field") + return None + + return access_token + + def get_refresh_token(self) -> Optional[str]: + """ + Get refresh token from storage + + Returns: + Refresh token string or None if not found + """ + token_data = self.load_token() + + if not token_data: + return None + + # Extract refresh token from OAuth structure + oauth_data = token_data.get('oauth', token_data) + refresh_token = oauth_data.get('refresh_token') + + return refresh_token + + def get_token_info(self) -> Dict: + """ + Get diagnostic information about current token + + Returns: + Dict with token status information + """ + token_data = self.load_token() + + if not token_data: + return { + 'has_token': False, + 'error': 'No token file found' + } + + oauth_data = token_data.get('oauth', token_data) + expires_in = oauth_data.get('expires_in') + saved_at = token_data.get('_saved_at') + + # Check if refresh token is likely expired (30 days since last auth) + # Nexus doesn't provide refresh token expiry, so we estimate conservatively + REFRESH_TOKEN_LIFETIME_DAYS = 30 + now = int(time.time()) + refresh_token_age_days = (now - saved_at) / 86400 if saved_at else 0 + refresh_token_likely_expired = refresh_token_age_days > REFRESH_TOKEN_LIFETIME_DAYS + + if expires_in and saved_at: + expires_at = saved_at + expires_in + remaining_seconds = expires_at - now + + return { + 'has_token': True, + 'has_refresh_token': bool(oauth_data.get('refresh_token')), + 'expires_in_seconds': remaining_seconds, + 'expires_in_minutes': remaining_seconds / 60, + 'expires_in_hours': remaining_seconds / 3600, + 'is_expired': remaining_seconds < 0, + 'expires_soon_5min': remaining_seconds < 300, + 'expires_soon_15min': remaining_seconds < 900, + 'saved_at': saved_at, + 'expires_at': expires_at, + 'refresh_token_age_days': refresh_token_age_days, + 'refresh_token_likely_expired': refresh_token_likely_expired, + } + else: + return { + 'has_token': True, + 'has_refresh_token': bool(oauth_data.get('refresh_token')), + 'refresh_token_age_days': refresh_token_age_days, + 'refresh_token_likely_expired': refresh_token_likely_expired, + 'error': 'Token missing expiry information' + } diff --git a/jackify/backend/handlers/path_handler.py b/jackify/backend/handlers/path_handler.py index 8d35b35..33aa3b1 100644 --- a/jackify/backend/handlers/path_handler.py +++ b/jackify/backend/handlers/path_handler.py @@ -12,6 +12,7 @@ import shutil from pathlib import Path from typing import Optional, Union, Dict, Any, List, Tuple from datetime import datetime +import vdf # Initialize logger logger = logging.getLogger(__name__) @@ -258,7 +259,7 @@ class PathHandler: return False @staticmethod - def create_dxvk_conf(modlist_dir, modlist_sdcard, steam_library, basegame_sdcard, game_var_full, vanilla_game_dir=None): + def create_dxvk_conf(modlist_dir, modlist_sdcard, steam_library, basegame_sdcard, game_var_full, vanilla_game_dir=None, stock_game_path=None): """ Create dxvk.conf file in the appropriate location @@ -269,6 +270,7 @@ class PathHandler: basegame_sdcard (bool): Whether the base game is on an SD card game_var_full (str): Full name of the game (e.g., "Skyrim Special Edition") vanilla_game_dir (str): Optional path to vanilla game directory for fallback + stock_game_path (str): Direct path to detected stock game directory (if available) Returns: bool: True on success, False on failure @@ -276,49 +278,45 @@ class PathHandler: try: logger.info("Creating dxvk.conf file...") - # Determine the location for dxvk.conf - dxvk_conf_path = None + candidate_dirs = PathHandler._build_dxvk_candidate_dirs( + modlist_dir=modlist_dir, + stock_game_path=stock_game_path, + steam_library=steam_library, + game_var_full=game_var_full, + vanilla_game_dir=vanilla_game_dir + ) - # Check for common stock game directories first, then vanilla as fallback - stock_game_paths = [ - os.path.join(modlist_dir, "Stock Game"), - os.path.join(modlist_dir, "Game Root"), - os.path.join(modlist_dir, "STOCK GAME"), - os.path.join(modlist_dir, "Stock Game Folder"), - os.path.join(modlist_dir, "Stock Folder"), - os.path.join(modlist_dir, "Skyrim Stock"), - os.path.join(modlist_dir, "root", "Skyrim Special Edition") - ] + if not candidate_dirs: + logger.error("Could not determine location for dxvk.conf (no candidate directories found)") + return False - # Add vanilla game directory as fallback if steam_library and game_var_full are provided - if steam_library and game_var_full: - stock_game_paths.append(os.path.join(steam_library, "steamapps", "common", game_var_full)) - - for path in stock_game_paths: - if os.path.exists(path): - dxvk_conf_path = os.path.join(path, "dxvk.conf") + target_dir = None + for directory in candidate_dirs: + if directory.is_dir(): + target_dir = directory break - if not dxvk_conf_path: - # Fallback: Try vanilla game directory if provided - if vanilla_game_dir and os.path.exists(vanilla_game_dir): - logger.info(f"Attempting fallback to vanilla game directory: {vanilla_game_dir}") - dxvk_conf_path = os.path.join(vanilla_game_dir, "dxvk.conf") - logger.info(f"Using vanilla game directory for dxvk.conf: {dxvk_conf_path}") + if target_dir is None: + fallback_dir = Path(modlist_dir) if modlist_dir and Path(modlist_dir).is_dir() else None + if fallback_dir: + logger.warning(f"No stock/vanilla directories found; falling back to modlist directory: {fallback_dir}") + target_dir = fallback_dir else: - logger.error("Could not determine location for dxvk.conf") + logger.error("All candidate directories for dxvk.conf are missing.") return False + dxvk_conf_path = target_dir / "dxvk.conf" + # The required line that Jackify needs required_line = "dxvk.enableGraphicsPipelineLibrary = False" # Check if dxvk.conf already exists - if os.path.exists(dxvk_conf_path): + if dxvk_conf_path.exists(): logger.info(f"Found existing dxvk.conf at {dxvk_conf_path}") # Read existing content try: - with open(dxvk_conf_path, 'r') as f: + with open(dxvk_conf_path, 'r', encoding='utf-8') as f: existing_content = f.read().strip() # Check if our required line is already present @@ -339,7 +337,7 @@ class PathHandler: updated_content = required_line + '\n' logger.info("Adding required DXVK setting to empty file") - with open(dxvk_conf_path, 'w') as f: + with open(dxvk_conf_path, 'w', encoding='utf-8') as f: f.write(updated_content) logger.info(f"dxvk.conf updated successfully at {dxvk_conf_path}") @@ -353,7 +351,8 @@ class PathHandler: # Create new dxvk.conf file (original behavior) dxvk_conf_content = required_line + '\n' - with open(dxvk_conf_path, 'w') as f: + dxvk_conf_path.parent.mkdir(parents=True, exist_ok=True) + with open(dxvk_conf_path, 'w', encoding='utf-8') as f: f.write(dxvk_conf_content) logger.info(f"dxvk.conf created successfully at {dxvk_conf_path}") @@ -362,6 +361,99 @@ class PathHandler: except Exception as e: logger.error(f"Error creating dxvk.conf: {e}") return False + + @staticmethod + def verify_dxvk_conf_exists(modlist_dir, steam_library, game_var_full, vanilla_game_dir=None, stock_game_path=None) -> bool: + """ + Verify that dxvk.conf exists in at least one of the candidate directories and contains the required setting. + """ + required_line = "dxvk.enableGraphicsPipelineLibrary = False" + candidate_dirs = PathHandler._build_dxvk_candidate_dirs( + modlist_dir=modlist_dir, + stock_game_path=stock_game_path, + steam_library=steam_library, + game_var_full=game_var_full, + vanilla_game_dir=vanilla_game_dir + ) + + for directory in candidate_dirs: + conf_path = directory / "dxvk.conf" + if conf_path.is_file(): + try: + with open(conf_path, 'r', encoding='utf-8') as f: + content = f.read() + if required_line not in content: + logger.warning(f"dxvk.conf found at {conf_path} but missing required setting. Appending now.") + with open(conf_path, 'a', encoding='utf-8') as f: + if not content.endswith('\n'): + f.write('\n') + f.write(required_line + '\n') + logger.info(f"Verified dxvk.conf at {conf_path}") + return True + except Exception as e: + logger.warning(f"Failed to verify dxvk.conf at {conf_path}: {e}") + + logger.warning("dxvk.conf verification failed - file not found in any candidate directory.") + return False + + @staticmethod + def _normalize_common_library_path(steam_library: Optional[str]) -> Optional[Path]: + if not steam_library: + return None + path = Path(steam_library) + parts_lower = [part.lower() for part in path.parts] + if len(parts_lower) >= 2 and parts_lower[-2:] == ['steamapps', 'common']: + return path + if parts_lower and parts_lower[-1] == 'common': + return path + if 'steamapps' in parts_lower: + idx = parts_lower.index('steamapps') + truncated = Path(*path.parts[:idx + 1]) + return truncated / 'common' + return path / 'steamapps' / 'common' + + @staticmethod + def _build_dxvk_candidate_dirs(modlist_dir, stock_game_path, steam_library, game_var_full, vanilla_game_dir) -> List[Path]: + candidates: List[Path] = [] + seen = set() + + def add_candidate(path_obj: Optional[Path]): + if not path_obj: + return + key = path_obj.resolve() if path_obj.exists() else path_obj + if key in seen: + return + seen.add(key) + candidates.append(path_obj) + + if stock_game_path: + add_candidate(Path(stock_game_path)) + + if modlist_dir: + base_path = Path(modlist_dir) + common_names = [ + "Stock Game", + "Game Root", + "STOCK GAME", + "Stock Game Folder", + "Stock Folder", + "Skyrim Stock", + os.path.join("root", "Skyrim Special Edition") + ] + for name in common_names: + add_candidate(base_path / name) + + steam_common = PathHandler._normalize_common_library_path(steam_library) + if steam_common and game_var_full: + add_candidate(steam_common / game_var_full) + + if vanilla_game_dir: + add_candidate(Path(vanilla_game_dir)) + + if modlist_dir: + add_candidate(Path(modlist_dir)) + + return candidates @staticmethod def find_steam_config_vdf() -> Optional[Path]: @@ -491,40 +583,53 @@ class PathHandler: logger.debug(f"Searching for compatdata directory for AppID: {appid}") - # Use libraryfolders.vdf to find all Steam library paths + # Use libraryfolders.vdf to find all Steam library paths, when available library_paths = PathHandler.get_all_steam_library_paths() - if not library_paths: - logger.error("Could not find any Steam library paths from libraryfolders.vdf") - return None + if library_paths: + logger.debug(f"Checking compatdata in {len(library_paths)} Steam libraries") + + # Check each Steam library's compatdata directory + for library_path in library_paths: + compatdata_base = library_path / "steamapps" / "compatdata" + if not compatdata_base.is_dir(): + logger.debug(f"Compatdata directory does not exist: {compatdata_base}") + continue + + potential_path = compatdata_base / appid + if potential_path.is_dir(): + logger.info(f"Found compatdata directory: {potential_path}") + return potential_path + else: + logger.debug(f"Compatdata for AppID {appid} not found in {compatdata_base}") - logger.debug(f"Checking compatdata in {len(library_paths)} Steam libraries") + # Check fallback locations only if we didn't find valid libraries + # If we have valid libraries from libraryfolders.vdf, we should NOT fall back to wrong locations + is_flatpak_steam = any('.var/app/com.valvesoftware.Steam' in str(lib) for lib in library_paths) if library_paths else False - # Check each Steam library's compatdata directory - for library_path in library_paths: - compatdata_base = library_path / "steamapps" / "compatdata" - if not compatdata_base.is_dir(): - logger.debug(f"Compatdata directory does not exist: {compatdata_base}") - continue - - potential_path = compatdata_base / appid - if potential_path.is_dir(): - logger.info(f"Found compatdata directory: {potential_path}") - return potential_path + if not library_paths or is_flatpak_steam: + # Only check Flatpak-specific fallbacks if we have Flatpak Steam + logger.debug("Checking fallback compatdata locations...") + if is_flatpak_steam: + # For Flatpak Steam, only check Flatpak-specific locations + fallback_locations = [ + Path.home() / ".var/app/com.valvesoftware.Steam/.local/share/Steam/steamapps/compatdata", + Path.home() / ".var/app/com.valvesoftware.Steam/data/Steam/steamapps/compatdata", + ] else: - logger.debug(f"Compatdata for AppID {appid} not found in {compatdata_base}") - - # Fallback: Broad search (can be slow, consider if needed) - # try: - # logger.debug(f"Compatdata not found in standard locations, attempting wider search...") - # # This can be very slow and resource-intensive - # # find_output = subprocess.check_output(['find', '/', '-type', 'd', '-name', appid, '-path', '*/compatdata/*', '-print', '-quit', '2>/dev/null'], text=True).strip() - # # if find_output: - # # logger.info(f"Found compatdata via find command: {find_output}") - # # return Path(find_output) - # except Exception as e: - # logger.warning(f"Error during 'find' command for compatdata: {e}") - - logger.warning(f"Compatdata directory for AppID {appid} not found.") + # For native Steam or unknown, check standard locations + fallback_locations = [ + Path.home() / ".local/share/Steam/steamapps/compatdata", + Path.home() / ".steam/steam/steamapps/compatdata", + ] + + for compatdata_base in fallback_locations: + if compatdata_base.is_dir(): + potential_path = compatdata_base / appid + if potential_path.is_dir(): + logger.warning(f"Found compatdata directory in fallback location (may be from old incorrect creation): {potential_path}") + return potential_path + + logger.warning(f"Compatdata directory for AppID {appid} not found in any Steam library or fallback location.") return None @staticmethod @@ -617,14 +722,22 @@ class PathHandler: if vdf_path.is_file(): logger.info(f"[DEBUG] Parsing libraryfolders.vdf: {vdf_path}") try: - with open(vdf_path) as f: - for line in f: - m = re.search(r'"path"\s*"([^"]+)"', line) - if m: - lib_path = Path(m.group(1)) + with open(vdf_path, 'r', encoding='utf-8') as f: + data = vdf.load(f) + # libraryfolders.vdf structure: libraryfolders -> "0", "1", etc. -> "path" + libraryfolders = data.get('libraryfolders', {}) + for key, lib_data in libraryfolders.items(): + if isinstance(lib_data, dict) and 'path' in lib_data: + lib_path = Path(lib_data['path']) # Resolve symlinks for consistency (mmcblk0p1 -> deck/UUID) - resolved_path = lib_path.resolve() - library_paths.add(resolved_path) + try: + resolved_path = lib_path.resolve() + library_paths.add(resolved_path) + logger.debug(f"[DEBUG] Found library path: {resolved_path}") + except (OSError, RuntimeError) as resolve_err: + # If resolve fails, use original path + logger.warning(f"[DEBUG] Could not resolve {lib_path}, using as-is: {resolve_err}") + library_paths.add(lib_path) except Exception as e: logger.error(f"[DEBUG] Failed to parse {vdf_path}: {e}") logger.info(f"[DEBUG] All detected Steam libraries: {library_paths}") diff --git a/jackify/backend/handlers/progress_parser.py b/jackify/backend/handlers/progress_parser.py new file mode 100644 index 0000000..f053409 --- /dev/null +++ b/jackify/backend/handlers/progress_parser.py @@ -0,0 +1,1167 @@ +""" +Progress Parser + +Parses jackify-engine text output to extract structured progress information. +This is an R&D implementation - experimental and subject to change. +""" + +import os +import re +import time +from typing import Optional, List, Tuple +from dataclasses import dataclass + +from jackify.shared.progress_models import ( + InstallationProgress, + InstallationPhase, + FileProgress, + OperationType +) + + +@dataclass +class ParsedLine: + """Result of parsing a single line of output.""" + has_progress: bool = False + phase: Optional[InstallationPhase] = None + phase_name: Optional[str] = None + file_progress: Optional[FileProgress] = None + completed_filename: Optional[str] = None # Filename that just completed + overall_percent: Optional[float] = None + step_info: Optional[Tuple[int, int]] = None # (current, total) + data_info: Optional[Tuple[int, int]] = None # (current_bytes, total_bytes) + speed_info: Optional[Tuple[str, float]] = None # (operation, speed_bytes_per_sec) + file_counter: Optional[Tuple[int, int]] = None # (current_file, total_files) for Extracting phase + message: str = "" + + +class ProgressParser: + """ + Parses jackify-engine output to extract progress information. + + This parser uses pattern matching to extract: + - Installation phases + - File-level progress + - Overall progress percentages + - Step counts + - Data sizes + - Operation speeds + """ + + def __init__(self): + """Initialize parser with pattern definitions.""" + # Phase detection patterns + self.phase_patterns = [ + (r'===?\s*(.+?)\s*===?', self._extract_phase_from_section), + (r'\[.*?\]\s*(?:Installing|Downloading|Extracting|Validating|Processing)', self._extract_phase_from_action), + (r'(?:Starting|Beginning)\s+(.+?)(?:\s+phase|\.|$)', re.IGNORECASE), + ] + + # File progress patterns + self.file_patterns = [ + # Pattern: "Installing: filename.7z (42%)" + (r'(?:Installing|Downloading|Extracting|Validating):\s*(.+?)\s*\((\d+(?:\.\d+)?)%\)', self._parse_file_with_percent), + # Pattern: "filename.7z: 42%" + (r'(.+?\.(?:7z|zip|rar|bsa|dds)):\s*(\d+(?:\.\d+)?)%', self._parse_file_with_percent), + # Pattern: "filename.7z [45.2MB/s]" + (r'(.+?\.(?:7z|zip|rar|bsa|dds))\s*\[([^\]]+)\]', self._parse_file_with_speed), + ] + + # Overall progress patterns (stored as regex patterns, not tuples with callbacks) + # Wabbajack format: "[12/14] Installing files (1.1GB/56.3GB)" + self.overall_patterns = [ + # Pattern: "Progress: 85%" or "85%" + (r'(?:Progress|Overall):\s*(\d+(?:\.\d+)?)%', re.IGNORECASE), + (r'^(\d+(?:\.\d+)?)%\s*(?:complete|done|progress)', re.IGNORECASE), + ] + + # Wabbajack status update format: "[12/14] StatusText (current/total)" + # This is the primary format we should match + self.wabbajack_status_pattern = re.compile( + r'\[(\d+)/(\d+)\]\s+(.+?)\s+\(([^)]+)\)', + re.IGNORECASE + ) + + # Alternative format: "[timestamp] StatusText (current/total) - speed" + # Example: "[00:00:10] Downloading Mod Archives (17/214) - 6.8MB/s" + self.timestamp_status_pattern = re.compile( + r'\[[^\]]+\]\s+(.+?)\s+\((\d+)/(\d+)\)\s*-\s*([^\s]+)', + re.IGNORECASE + ) + + # Data size patterns + self.data_patterns = [ + # Pattern: "1.1GB/56.3GB" or "(1.1GB/56.3GB)" + (r'\(?(\d+(?:\.\d+)?)\s*(B|KB|MB|GB|TB)\s*/\s*(\d+(?:\.\d+)?)\s*(B|KB|MB|GB|TB)\)?', re.IGNORECASE), + # Pattern: "Processing 1.1GB of 56.3GB" + (r'Processing\s+(\d+(?:\.\d+)?)\s*(B|KB|MB|GB|TB)\s+of\s+(\d+(?:\.\d+)?)\s*(B|KB|MB|GB|TB)', re.IGNORECASE), + ] + + # Speed patterns + self.speed_patterns = [ + # Pattern: "267.3MB/s" or "45.2 MB/s" + (r'(\d+(?:\.\d+)?)\s*(B|KB|MB|GB|TB)\s*/s', re.IGNORECASE), + # Pattern: "at 267.3MB/s" or "speed: 45.2 MB/s" + (r'(?:at|speed:?)\s+(\d+(?:\.\d+)?)\s*(B|KB|MB|GB|TB)\s*/s', re.IGNORECASE), + ] + + # File filter - only display meaningful artifacts in the UI + self.allowed_extensions = { + '.7z', '.zip', '.rar', '.bsa', '.ba2', '.dds', '.wabbajack', + '.exe', '.esp', '.esm', '.esl', '.bin', '.dll', '.pak', + '.tar', '.gz', '.xz', '.bz2', '.z01', '.z02', '.cab', '.msi' + } + + def should_display_file(self, filename: str) -> bool: + """Public helper so other components can reuse the filter.""" + return self._should_display_file(filename) + + def _should_display_file(self, filename: str) -> bool: + """Determine whether a filename is worth showing in the UI.""" + if not filename: + return False + base = os.path.basename(filename.strip()) + if not base: + return False + # Special case: allow ".wabbajack" and "Downloading .wabbajack file" + if base == ".wabbajack" or base == "Downloading .wabbajack file": + return True + # Skip temporary/generated files (e.g., #zcbe$123.txt) + if base.startswith('#'): + return False + name, ext = os.path.splitext(base) + if not ext: + return False + if ext.lower() not in self.allowed_extensions: + return False + # Also skip generic filenames that are clearly tooling artifacts + if name.lower() in {'empty', 'script', 'one', 'two', 'three'}: + return False + return True + + def parse_line(self, line: str) -> ParsedLine: + """ + Parse a single line of output and extract progress information. + + Args: + line: Raw line from jackify-engine output + + Returns: + ParsedLine with extracted information + """ + result = ParsedLine(message=line.strip()) + + if not line.strip(): + return result + + # Try to extract phase information + phase_info = self._extract_phase(line) + if phase_info: + result.phase, result.phase_name = phase_info + result.has_progress = True + + # Try to extract file progress + file_prog = self._extract_file_progress(line) + if file_prog: + result.file_progress = file_prog + result.has_progress = True + # Check if file counter was attached (for extraction or install phases) + if hasattr(file_prog, '_file_counter'): + result.file_counter = file_prog._file_counter + delattr(file_prog, '_file_counter') # Clean up temp attribute + + # Try to extract overall progress + overall = self._extract_overall_progress(line) + if overall is not None: + result.overall_percent = overall + result.has_progress = True + + # Try to extract Wabbajack status format first: "[12/14] StatusText (1.1GB/56.3GB)" + # BUT skip if this is a .wabbajack download line (handled by specific pattern below) + wabbajack_match = self.wabbajack_status_pattern.search(line) + if wabbajack_match: + status_text = wabbajack_match.group(3).strip().lower() + # Skip if this is a .wabbajack download - let the specific pattern handle it + if '.wabbajack' in status_text or 'downloading .wabbajack' in status_text: + # Don't process this as generic status - let .wabbajack pattern handle it + pass + else: + # Extract step info + current_step = int(wabbajack_match.group(1)) + max_steps = int(wabbajack_match.group(2)) + result.step_info = (current_step, max_steps) + + # Extract status text (phase name) + phase_info = self._extract_phase_from_text(status_text) + if phase_info: + result.phase, result.phase_name = phase_info + + # Extract data info from parentheses + data_str = wabbajack_match.group(4).strip() + data_info = self._parse_data_string(data_str) + if data_info: + result.data_info = data_info + + result.has_progress = True + + # Try alternative format: "[timestamp] StatusText (current/total) - speed" + # Example: "[00:00:10] Downloading Mod Archives (17/214) - 6.8MB/s" + timestamp_match = self.timestamp_status_pattern.search(line) + if timestamp_match: + # Extract status text (phase name) + status_text = timestamp_match.group(1).strip() + phase_info = self._extract_phase_from_text(status_text) + if phase_info: + result.phase, result.phase_name = phase_info + + # Extract step info (current/total in parentheses) + current_step = int(timestamp_match.group(2)) + max_steps = int(timestamp_match.group(3)) + result.step_info = (current_step, max_steps) + + # Extract speed + speed_str = timestamp_match.group(4).strip() + speed_info = self._parse_speed_from_string(speed_str) + if speed_info: + operation = self._detect_operation_from_line(status_text) + result.speed_info = (operation, speed_info) + + # Calculate overall percentage from step progress + if max_steps > 0: + result.overall_percent = (current_step / max_steps) * 100.0 + + result.has_progress = True + + # Try .wabbajack download format: "[timestamp] Downloading .wabbajack (size/size) - speed" + # Example: "[00:02:08] Downloading .wabbajack (739.2/1947.2MB) - 6.0MB/s" + # Also handles: "[00:02:08] Downloading modlist.wabbajack (739.2/1947.2MB) - 6.0MB/s" + wabbajack_download_pattern = re.compile( + r'\[[^\]]+\]\s+Downloading\s+([^\s]+\.wabbajack|\.wabbajack)\s+\(([^)]+)\)\s*-\s*([^\s]+)', + re.IGNORECASE + ) + wabbajack_match = wabbajack_download_pattern.search(line) + if wabbajack_match: + # Extract filename (group 1) + filename = wabbajack_match.group(1).strip() + if filename == ".wabbajack": + # Try to extract actual filename from message if available + filename_match = re.search(r'([A-Za-z0-9_\-\.]+\.wabbajack)', line, re.IGNORECASE) + if filename_match: + filename = filename_match.group(1) + else: + # Use display message as filename + filename = "Downloading .wabbajack file" + + # Extract data info from parentheses (e.g., "49.7/1947.2MB" or "739.2MB/1947.2MB") + # Format can be: "current/totalUnit" or "currentUnit/totalUnit" + data_str = wabbajack_match.group(2).strip() + data_info = None + + # Try standard format first (both have units) + data_info = self._extract_data_info(f"({data_str})") + + # If that fails, try format where only second number has unit: "49.7/1947.2MB" + if not data_info: + pattern = r'(\d+(?:\.\d+)?)\s*(B|KB|MB|GB|TB)?\s*/\s*(\d+(?:\.\d+)?)\s*(B|KB|MB|GB|TB)' + match = re.search(pattern, data_str, re.IGNORECASE) + if match: + current_val = float(match.group(1)) + current_unit = match.group(2) if match.group(2) else match.group(4) # Use second unit if first missing + total_val = float(match.group(3)) + total_unit = match.group(4) + + current_bytes = self._convert_to_bytes(current_val, current_unit) + total_bytes = self._convert_to_bytes(total_val, total_unit) + data_info = (current_bytes, total_bytes) + + if data_info: + result.data_info = data_info + # Calculate percent from data + current_bytes, total_bytes = data_info + if total_bytes > 0: + result.overall_percent = (current_bytes / total_bytes) * 100.0 + + # Extract speed (group 3) + speed_str = wabbajack_match.group(3).strip() + speed_info = self._parse_speed_from_string(speed_str) + if speed_info: + result.speed_info = ("download", speed_info) + + # Set phase + result.phase = InstallationPhase.DOWNLOAD + result.phase_name = f"Downloading {filename}" + + # Create FileProgress entry for .wabbajack file + if data_info: + current_bytes, total_bytes = data_info + percent = (current_bytes / total_bytes) * 100.0 if total_bytes > 0 else 0.0 + from jackify.shared.progress_models import FileProgress, OperationType + file_progress = FileProgress( + filename=filename, + operation=OperationType.DOWNLOAD, + percent=percent, + current_size=current_bytes, + total_size=total_bytes, + speed=speed_info if speed_info else -1.0 + ) + result.file_progress = file_progress + + result.has_progress = True + + # Try to extract step information (fallback) + if not result.step_info: + step_info = self._extract_step_info(line) + if step_info: + result.step_info = step_info + result.has_progress = True + + # Try to extract data size information (fallback) + if not result.data_info: + data_info = self._extract_data_info(line) + if data_info: + result.data_info = data_info + result.has_progress = True + + # Try to extract speed information + speed_info = self._extract_speed_info(line) + if speed_info: + result.speed_info = speed_info + result.has_progress = True + + # Try to detect file completion + completed_file = self._extract_completed_file(line) + if completed_file: + result.completed_filename = completed_file + result.has_progress = True + + return result + + def _extract_phase(self, line: str) -> Optional[Tuple[InstallationPhase, str]]: + """Extract phase information from line.""" + # Check for section headers like "=== Installing files ===" + section_match = re.search(r'===?\s*(.+?)\s*===?', line) + if section_match: + section_name = section_match.group(1).strip().lower() + phase = self._map_section_to_phase(section_name) + return (phase, section_match.group(1).strip()) + + # Check for action-based phase indicators + action_match = re.search(r'\[.*?\]\s*(Installing|Downloading|Extracting|Validating|Processing|Checking existing)', line, re.IGNORECASE) + if action_match: + action = action_match.group(1).lower() + phase = self._map_action_to_phase(action) + return (phase, action_match.group(1)) + + return None + + def _extract_phase_from_section(self, match: re.Match) -> Optional[Tuple[InstallationPhase, str]]: + """Extract phase from section header match.""" + section_name = match.group(1).strip().lower() + phase = self._map_section_to_phase(section_name) + return (phase, match.group(1).strip()) + + def _extract_phase_from_action(self, match: re.Match) -> Optional[Tuple[InstallationPhase, str]]: + """Extract phase from action match.""" + action = match.group(1).lower() + phase = self._map_action_to_phase(action) + return (phase, match.group(1)) + + def _map_section_to_phase(self, section_name: str) -> InstallationPhase: + """Map section name to InstallationPhase enum.""" + section_lower = section_name.lower() + if 'download' in section_lower: + return InstallationPhase.DOWNLOAD + elif 'extract' in section_lower: + return InstallationPhase.EXTRACT + elif 'validate' in section_lower or 'verif' in section_lower: + return InstallationPhase.VALIDATE + elif 'install' in section_lower: + return InstallationPhase.INSTALL + elif 'finaliz' in section_lower or 'complet' in section_lower: + return InstallationPhase.FINALIZE + elif 'configur' in section_lower or 'initializ' in section_lower: + return InstallationPhase.INITIALIZATION + else: + return InstallationPhase.UNKNOWN + + def _map_action_to_phase(self, action: str) -> InstallationPhase: + """Map action word to InstallationPhase enum.""" + action_lower = action.lower() + if 'download' in action_lower: + return InstallationPhase.DOWNLOAD + elif 'extract' in action_lower: + return InstallationPhase.EXTRACT + elif 'validat' in action_lower or 'checking' in action_lower: + return InstallationPhase.VALIDATE + elif 'install' in action_lower: + return InstallationPhase.INSTALL + else: + return InstallationPhase.UNKNOWN + + def _extract_file_progress(self, line: str) -> Optional[FileProgress]: + """Extract file-level progress information.""" + # PRIORITY: Check for [FILE_PROGRESS] prefix first (new engine format) + # Format: [FILE_PROGRESS] Downloading: filename.zip (20.0%) [3.7MB/s] + # Updated format: [FILE_PROGRESS] (Downloading|Extracting|Installing|Converting|Completed|etc): filename.zip (20.0%) [3.7MB/s] (current/total) + # Speed bracket is optional to handle cases where speed may not be present + # Counter (current/total) is optional and used for Extracting and Installing phases + file_progress_match = re.search( + r'\[FILE_PROGRESS\]\s+(Downloading|Extracting|Validating|Installing|Converting|Building|Writing|Verifying|Completed|Checking existing):\s+(.+?)\s+\((\d+(?:\.\d+)?)%\)\s*(?:\[(.+?)\])?\s*(?:\((\d+)/(\d+)\))?', + line, + re.IGNORECASE + ) + if file_progress_match: + operation_str = file_progress_match.group(1).strip() + filename = file_progress_match.group(2).strip() + percent = float(file_progress_match.group(3)) + speed_str = file_progress_match.group(4).strip() if file_progress_match.group(4) else None + # Extract counter if present (group 5 and 6) + counter_current = int(file_progress_match.group(5)) if file_progress_match.group(5) else None + counter_total = int(file_progress_match.group(6)) if file_progress_match.group(6) else None + + # Map operation string first (needed for hidden progress items) + operation_map = { + 'downloading': OperationType.DOWNLOAD, + 'extracting': OperationType.EXTRACT, + 'validating': OperationType.VALIDATE, + 'installing': OperationType.INSTALL, + 'building': OperationType.INSTALL, # BSA building + 'writing': OperationType.INSTALL, # BSA writing + 'verifying': OperationType.VALIDATE, # BSA verification + 'checking existing': OperationType.VALIDATE, # Resume verification + 'converting': OperationType.INSTALL, + 'compiling': OperationType.INSTALL, + 'hashing': OperationType.VALIDATE, + 'completed': OperationType.UNKNOWN, + } + operation = operation_map.get(operation_str.lower(), OperationType.UNKNOWN) + + # If we have counter info but file shouldn't be displayed, create a minimal FileProgress + # just to carry the counter information (for extraction/install summary display) + if counter_current and counter_total and not self._should_display_file(filename): + # Create minimal file progress that won't be shown in activity window + # but will carry counter info for summary widget + file_progress = FileProgress( + filename="__phase_progress__", # Dummy name + operation=operation, # Use detected operation + percent=percent, + speed=-1.0 # No speed for summary + ) + file_progress._file_counter = (counter_current, counter_total) + file_progress._hidden = True # Mark as hidden so it doesn't show in activity window + return file_progress + + if not self._should_display_file(filename): + return None + + # Operation already mapped above (line 352) + # If operation is "Completed", ensure percent is 100% + if operation_str.lower() == 'completed': + percent = 100.0 + + # Parse speed if available + # Use -1 as sentinel to indicate "no speed provided by engine" + speed = -1.0 + if speed_str: + speed = self._parse_speed_from_string(speed_str) + file_progress = FileProgress( + filename=filename, + operation=operation, + percent=percent, + speed=speed + ) + size_info = self._extract_data_info(line) + if size_info: + file_progress.current_size, file_progress.total_size = size_info + + # Store counter in a temporary attribute we can access later + # Distinguish between texture conversion, BSA building, and install counters + if counter_current is not None and counter_total is not None: + if operation_str.lower() == 'converting': + # This is a texture conversion counter + file_progress._texture_counter = (counter_current, counter_total) + elif operation_str.lower() == 'building': + # This is a BSA building counter + file_progress._bsa_counter = (counter_current, counter_total) + else: + # This is an install/extract counter + file_progress._file_counter = (counter_current, counter_total) + + return file_progress + + # Skip lines that are clearly status messages, not file progress + if re.search(r'\[.*?\]\s*(?:Downloading|Installing|Extracting)\s+(?:Mod|Files|Archives)', line, re.IGNORECASE): + return None + + # Pattern 1: "Installing: filename.7z (42%)" or "Downloading: filename.7z (42%)" + match = re.search(r'(?:Installing|Downloading|Extracting|Validating):\s*(.+?)\s*\((\d+(?:\.\d+)?)%\)', line, re.IGNORECASE) + if match: + filename = match.group(1).strip() + percent = float(match.group(2)) + operation = self._detect_operation_from_line(line) + file_progress = FileProgress( + filename=filename, + operation=operation, + percent=percent + ) + size_info = self._extract_data_info(line) + if size_info: + file_progress.current_size, file_progress.total_size = size_info + return file_progress + + # Pattern 2: "filename.7z: 42%" or "filename.7z - 42%" or "filename.wabbajack: 42%" + match = re.search(r'(.+?\.(?:7z|zip|rar|bsa|dds|exe|esp|esm|esl|wabbajack))\s*[:-]\s*(\d+(?:\.\d+)?)%', line, re.IGNORECASE) + if match: + filename = match.group(1).strip() + percent = float(match.group(2)) + operation = self._detect_operation_from_line(line) + file_progress = FileProgress( + filename=filename, + operation=operation, + percent=percent + ) + size_info = self._extract_data_info(line) + if size_info: + file_progress.current_size, file_progress.total_size = size_info + return file_progress + + # Pattern 3: "filename.7z [45.2MB/s]" or "filename.7z @ 45.2MB/s" or "filename.wabbajack [45.2MB/s]" + match = re.search(r'(.+?\.(?:7z|zip|rar|bsa|dds|exe|esp|esm|esl|wabbajack))\s*[\[@]\s*([^\]]+)\]?', line, re.IGNORECASE) + if match: + filename = match.group(1).strip() + speed_str = match.group(2).strip().rstrip(']') + speed = self._parse_speed(speed_str) + operation = self._detect_operation_from_line(line) + file_progress = FileProgress( + filename=filename, + operation=operation, + speed=speed + ) + size_info = self._extract_data_info(line) + if size_info: + file_progress.current_size, file_progress.total_size = size_info + return file_progress + + # Pattern 4: Lines that look like filenames with progress info + # Match lines that contain a filename-like pattern followed by percentage + # This catches formats like "Enderal Remastered Armory - Standard-490-1-2-0-1669565635.7z at 42%" + # or "modlist.wabbajack at 42%" + match = re.search(r'([A-Za-z0-9][^\s]*?[-_A-Za-z0-9]+\.(?:7z|zip|rar|bsa|dds|exe|esp|esm|esl|wabbajack))\s+(?:at|@|:|-)?\s*(\d+(?:\.\d+)?)%', line, re.IGNORECASE) + if match: + filename = match.group(1).strip() + percent = float(match.group(2)) + operation = self._detect_operation_from_line(line) + return FileProgress( + filename=filename, + operation=operation, + percent=percent + ) + + # Pattern 5: Filename with size info that might indicate progress + # "filename.7z (1.2MB/5.4MB)" or "filename.7z 1.2MB of 5.4MB" or "filename.wabbajack (1.2MB/5.4MB)" + match = re.search(r'([A-Za-z0-9][^\s]*?[-_A-Za-z0-9]+\.(?:7z|zip|rar|bsa|dds|exe|esp|esm|esl|wabbajack))\s*[\(]?\s*(\d+(?:\.\d+)?)\s*(B|KB|MB|GB|TB)\s*/?\s*of\s*(\d+(?:\.\d+)?)\s*(B|KB|MB|GB|TB)', line, re.IGNORECASE) + if match: + filename = match.group(1).strip() + current_val = float(match.group(2)) + current_unit = match.group(3).upper() + total_val = float(match.group(4)) + total_unit = match.group(5).upper() + current_bytes = self._convert_to_bytes(current_val, current_unit) + total_bytes = self._convert_to_bytes(total_val, total_unit) + percent = (current_bytes / total_bytes * 100.0) if total_bytes > 0 else 0.0 + operation = self._detect_operation_from_line(line) + return FileProgress( + filename=filename, + operation=operation, + percent=percent, + current_size=current_bytes, + total_size=total_bytes + ) + + # Pattern 6: Filename with speed info + # "filename.7z downloading at 45.2MB/s" or "filename.wabbajack downloading at 45.2MB/s" + match = re.search(r'([A-Za-z0-9][^\s]*?[-_A-Za-z0-9]+\.(?:7z|zip|rar|bsa|dds|exe|esp|esm|esl|wabbajack))\s+(?:downloading|extracting|validating|installing)\s+at\s+(\d+(?:\.\d+)?)\s*(B|KB|MB|GB|TB)\s*/s', line, re.IGNORECASE) + if match: + filename = match.group(1).strip() + speed_val = float(match.group(2)) + speed_unit = match.group(3).upper() + speed = self._convert_to_bytes(speed_val, speed_unit) + operation = self._detect_operation_from_line(line) + return FileProgress( + filename=filename, + operation=operation, + speed=speed + ) + + return None + + def _parse_file_with_percent(self, match: re.Match) -> Optional[FileProgress]: + """Parse file progress from percentage match.""" + filename = match.group(1).strip() + percent = float(match.group(2)) + operation = OperationType.UNKNOWN + # Try to detect operation from context + return FileProgress( + filename=filename, + operation=operation, + percent=percent + ) + + def _parse_file_with_speed(self, match: re.Match) -> Optional[FileProgress]: + """Parse file progress from speed match.""" + filename = match.group(1).strip() + speed_str = match.group(2).strip() + speed = self._parse_speed(speed_str) + operation = OperationType.UNKNOWN + return FileProgress( + filename=filename, + operation=operation, + speed=speed + ) + + def _detect_operation_from_line(self, line: str) -> OperationType: + """Detect operation type from line content.""" + line_lower = line.lower() + if 'download' in line_lower: + return OperationType.DOWNLOAD + elif 'extract' in line_lower: + return OperationType.EXTRACT + elif 'validat' in line_lower: + return OperationType.VALIDATE + elif 'install' in line_lower or 'build' in line_lower or 'convert' in line_lower: + return OperationType.INSTALL + else: + return OperationType.UNKNOWN + + def _extract_overall_progress(self, line: str) -> Optional[float]: + """Extract overall progress percentage.""" + # Pattern: "Progress: 85%" or "85%" + match = re.search(r'(?:Progress|Overall):\s*(\d+(?:\.\d+)?)%', line, re.IGNORECASE) + if match: + return float(match.group(1)) + + # Pattern: "85% complete" + match = re.search(r'^(\d+(?:\.\d+)?)%\s*(?:complete|done|progress)', line, re.IGNORECASE) + if match: + return float(match.group(1)) + + return None + + def _extract_step_info(self, line: str) -> Optional[Tuple[int, int]]: + """Extract step information like [12/14].""" + # Try Wabbajack status format first: "[12/14] StatusText (data)" + match = self.wabbajack_status_pattern.search(line) + if match: + current = int(match.group(1)) + total = int(match.group(2)) + return (current, total) + + # Fallback to simple [12/14] pattern + match = re.search(r'\[(\d+)/(\d+)\]', line) + if match: + current = int(match.group(1)) + total = int(match.group(2)) + return (current, total) + return None + + def _extract_data_info(self, line: str) -> Optional[Tuple[int, int]]: + """Extract data size information like 1.1GB/56.3GB.""" + # Pattern: "1.1GB/56.3GB" or "(1.1GB/56.3GB)" + match = re.search(r'\(?(\d+(?:\.\d+)?)\s*(B|KB|MB|GB|TB)\s*/\s*(\d+(?:\.\d+)?)\s*(B|KB|MB|GB|TB)\)?', line, re.IGNORECASE) + if match: + current_val = float(match.group(1)) + current_unit = match.group(2).upper() + total_val = float(match.group(3)) + total_unit = match.group(4).upper() + + current_bytes = self._convert_to_bytes(current_val, current_unit) + total_bytes = self._convert_to_bytes(total_val, total_unit) + + return (current_bytes, total_bytes) + + return None + + def _parse_data_string(self, data_str: str) -> Optional[Tuple[int, int]]: + """Parse data string like '1.1GB/56.3GB' or '1234/5678'.""" + # Try size format first: "1.1GB/56.3GB" + match = re.search(r'(\d+(?:\.\d+)?)\s*(B|KB|MB|GB|TB)\s*/\s*(\d+(?:\.\d+)?)\s*(B|KB|MB|GB|TB)', data_str, re.IGNORECASE) + if match: + current_val = float(match.group(1)) + current_unit = match.group(2).upper() + total_val = float(match.group(3)) + total_unit = match.group(4).upper() + + current_bytes = self._convert_to_bytes(current_val, current_unit) + total_bytes = self._convert_to_bytes(total_val, total_unit) + + return (current_bytes, total_bytes) + + # Try numeric format: "1234/5678" (might be file counts or bytes) + match = re.search(r'(\d+)\s*/\s*(\d+)', data_str) + if match: + current = int(match.group(1)) + total = int(match.group(2)) + # Assume bytes if values are large, otherwise might be file counts + # For now, return as-is and let caller decide + return (current, total) + + return None + + def _extract_phase_from_text(self, text: str) -> Optional[Tuple[InstallationPhase, str]]: + """Extract phase from status text like 'Installing files'.""" + text_lower = text.lower() + + # Map common Wabbajack status texts to phases + if 'download' in text_lower: + return (InstallationPhase.DOWNLOAD, text) + elif 'extract' in text_lower: + return (InstallationPhase.EXTRACT, text) + elif 'validat' in text_lower or 'hash' in text_lower: + return (InstallationPhase.VALIDATE, text) + elif 'install' in text_lower: + return (InstallationPhase.INSTALL, text) + elif 'prepar' in text_lower or 'configur' in text_lower: + return (InstallationPhase.INITIALIZATION, text) + elif 'finish' in text_lower or 'complet' in text_lower: + return (InstallationPhase.FINALIZE, text) + else: + return (InstallationPhase.UNKNOWN, text) + + def _extract_speed_info(self, line: str) -> Optional[Tuple[str, float]]: + """Extract speed information.""" + # Pattern: "267.3MB/s" or "at 45.2 MB/s" or "- 6.8MB/s" + # Try pattern with dash separator first (common in status lines) + match = re.search(r'-\s*(\d+(?:\.\d+)?)\s*(B|KB|MB|GB|TB)\s*/s', line, re.IGNORECASE) + if match: + speed_val = float(match.group(1)) + speed_unit = match.group(2).upper() + speed_bytes = self._convert_to_bytes(speed_val, speed_unit) + + # Try to detect operation type from context + operation = "unknown" + line_lower = line.lower() + if 'download' in line_lower: + operation = "download" + elif 'extract' in line_lower: + operation = "extract" + elif 'validat' in line_lower or 'hash' in line_lower: + operation = "validate" + + return (operation, speed_bytes) + + # Pattern: "at 267.3MB/s" or "speed: 45.2 MB/s" + match = re.search(r'(?:at|speed:?)\s*(\d+(?:\.\d+)?)\s*(B|KB|MB|GB|TB)\s*/s', line, re.IGNORECASE) + if match: + speed_val = float(match.group(1)) + speed_unit = match.group(2).upper() + speed_bytes = self._convert_to_bytes(speed_val, speed_unit) + + # Try to detect operation type from context + operation = "unknown" + line_lower = line.lower() + if 'download' in line_lower: + operation = "download" + elif 'extract' in line_lower: + operation = "extract" + elif 'validat' in line_lower: + operation = "validate" + + return (operation, speed_bytes) + + return None + + def _parse_speed(self, speed_str: str) -> float: + """Parse speed string to bytes per second.""" + match = re.search(r'(\d+(?:\.\d+)?)\s*(B|KB|MB|GB|TB)\s*/s', speed_str, re.IGNORECASE) + if match: + value = float(match.group(1)) + unit = match.group(2).upper() + return self._convert_to_bytes(value, unit) + return 0.0 + + def _parse_speed_from_string(self, speed_str: str) -> float: + """Parse speed string like '6.8MB/s' to bytes per second.""" + # Handle format: "6.8MB/s" or "6.8 MB/s" or "6.8MB/sec" + match = re.search(r'(\d+(?:\.\d+)?)\s*(B|KB|MB|GB|TB)\s*/s(?:ec)?', speed_str, re.IGNORECASE) + if match: + value = float(match.group(1)) + unit = match.group(2).upper() + return self._convert_to_bytes(value, unit) + return 0.0 + + def _extract_completed_file(self, line: str) -> Optional[str]: + """Extract filename from completion messages like 'Finished downloading filename.7z'.""" + # Pattern: "Finished downloading filename.7z. Hash: ..." + # or "Finished downloading filename.7z" + match = re.search( + r'Finished\s+(?:downloading|extracting|validating|installing)\s+(.+?)(?:\.\s|\.$|\s+Hash:)', + line, + re.IGNORECASE + ) + if match: + filename = match.group(1).strip() + # Remove any trailing dots or whitespace + filename = filename.rstrip('. ') + return filename + return None + + def _convert_to_bytes(self, value: float, unit: str) -> int: + """Convert value with unit to bytes.""" + multipliers = { + 'B': 1, + 'KB': 1024, + 'MB': 1024 * 1024, + 'GB': 1024 * 1024 * 1024, + 'TB': 1024 * 1024 * 1024 * 1024 + } + return int(value * multipliers.get(unit, 1)) + + +class ProgressStateManager: + """ + Manages installation progress state by accumulating parsed information. + + This class maintains the current state of installation progress and + updates it as new lines are parsed. + """ + + def __init__(self): + """Initialize state manager.""" + self.state = InstallationProgress() + self.parser = ProgressParser() + self._file_history = {} + self._wabbajack_entry_name = None + self._synthetic_flag = "_synthetic_wabbajack" + + def process_line(self, line: str) -> bool: + """ + Process a line of output and update state. + + Args: + line: Raw line from jackify-engine output + + Returns: + True if state was updated, False otherwise + """ + parsed = self.parser.parse_line(line) + + if not parsed.has_progress: + return False + + updated = False + + # Update phase + if parsed.phase: + self.state.phase = parsed.phase + updated = True + if parsed.phase_name: + self.state.phase_name = parsed.phase_name + updated = True + + # Update overall progress + if parsed.overall_percent is not None: + self.state.overall_percent = parsed.overall_percent + updated = True + + # Update step information + if parsed.step_info: + self.state.phase_step, self.state.phase_max_steps = parsed.step_info + updated = True + + # Update data information + if parsed.data_info: + self.state.data_processed, self.state.data_total = parsed.data_info + # Calculate overall percent from data if not already set + if self.state.data_total > 0 and self.state.overall_percent == 0.0: + self.state.overall_percent = (self.state.data_processed / self.state.data_total) * 100.0 + updated = True + + # Update file counter (for Extracting phase) + if parsed.file_counter: + self.state.phase_step, self.state.phase_max_steps = parsed.file_counter + updated = True + + # Update file progress + if parsed.file_progress: + # Skip hidden files (used only for carrying counter info) + if hasattr(parsed.file_progress, '_hidden') and parsed.file_progress._hidden: + # Counter already extracted above, don't add to active files + return updated + + # Update texture conversion counter at state level if this is a texture conversion + if hasattr(parsed.file_progress, '_texture_counter'): + tex_current, tex_total = parsed.file_progress._texture_counter + self.state.texture_conversion_current = tex_current + self.state.texture_conversion_total = tex_total + updated = True + + # Update BSA building counter at state level if this is a BSA building operation + if hasattr(parsed.file_progress, '_bsa_counter'): + bsa_current, bsa_total = parsed.file_progress._bsa_counter + self.state.bsa_building_current = bsa_current + self.state.bsa_building_total = bsa_total + updated = True + + if parsed.file_progress.filename.lower().endswith('.wabbajack'): + self._wabbajack_entry_name = parsed.file_progress.filename + self._remove_synthetic_wabbajack() + # Mark that we have a real .wabbajack entry to prevent synthetic ones + self._has_real_wabbajack = True + self._augment_file_metrics(parsed.file_progress) + # Don't add files that are already at 100% unless they're being updated + # This prevents re-adding completed files + existing_file = None + for f in self.state.active_files: + if f.filename == parsed.file_progress.filename: + existing_file = f + break + + # Don't add files that are already at 100% when first detected (downloads that already exist) + # This prevents showing 1600 files instantly at 100% in the activity window + if parsed.file_progress.percent >= 100.0 and not existing_file: + # File completed before we ever saw it (already existed on disk) + # Don't clutter the UI by showing it + # Just update the phase step counts if applicable + updated = True + elif parsed.file_progress.percent >= 100.0: + # File reached 100% that we were already tracking - show completion briefly + parsed.file_progress.percent = 100.0 + parsed.file_progress.last_update = time.time() # Set timestamp to NOW for minimum display + self.state.add_file(parsed.file_progress) + updated = True + else: + # File still in progress, add/update it normally + self.state.add_file(parsed.file_progress) + updated = True + elif parsed.data_info: + # Only create synthetic .wabbajack entry if we don't already have a real one + if not getattr(self, '_has_real_wabbajack', False): + if self._maybe_add_wabbajack_progress(parsed): + updated = True + + # Handle file completion messages + if parsed.completed_filename: + if not self.parser.should_display_file(parsed.completed_filename): + parsed.completed_filename = None + + if parsed.completed_filename: + # Try to find existing file in the list + found_existing = False + for file_prog in self.state.active_files: + # Match by exact filename or by filename without path + filename_match = ( + file_prog.filename == parsed.completed_filename or + file_prog.filename.endswith(parsed.completed_filename) or + parsed.completed_filename in file_prog.filename + ) + if filename_match: + file_prog.percent = 100.0 + file_prog.last_update = time.time() # Update timestamp for staleness check + updated = True + found_existing = True + break + + # If file wasn't in the list (completed too fast to get a progress line), + # create a FileProgress entry so it appears briefly + if not found_existing: + from jackify.shared.progress_models import FileProgress, OperationType + # Try to infer operation from context or default to DOWNLOAD + operation = OperationType.DOWNLOAD + if parsed.file_progress: + operation = parsed.file_progress.operation + + # Create a completed file entry so it appears for 0.5 seconds + completed_file = FileProgress( + filename=parsed.completed_filename, + operation=operation, + percent=100.0, + current_size=0, + total_size=0 + # speed defaults to -1.0 (not provided) + ) + completed_file.last_update = time.time() + self.state.add_file(completed_file) + updated = True + + # Update speed information + if parsed.speed_info: + operation, speed = parsed.speed_info + self.state.update_speed(operation, speed) + updated = True + + # Update message + if parsed.message: + self.state.message = parsed.message + + # Update timestamp + if updated: + self.state.timestamp = time.time() + + # Always clean up completed files (not just when > 10) + # This ensures completed files are removed promptly + if updated: + self.state.remove_completed_files() + + return updated + + def get_state(self) -> InstallationProgress: + """Get current progress state.""" + return self.state + + def reset(self): + """Reset progress state.""" + self.state = InstallationProgress() + self._file_history = {} + self._wabbajack_entry_name = None + self._synthetic_flag = "_synthetic_wabbajack" + self._has_real_wabbajack = False + + def _augment_file_metrics(self, file_progress: FileProgress): + """Populate size/speed info to improve UI accuracy.""" + now = time.time() + history = self._file_history.get(file_progress.filename) + + total_size = file_progress.total_size or (history.get('total') if history else None) + if total_size and file_progress.percent and not file_progress.current_size: + file_progress.current_size = int((file_progress.percent / 100.0) * total_size) + elif file_progress.current_size and not total_size and file_progress.total_size: + total_size = file_progress.total_size + + if total_size and not file_progress.total_size: + file_progress.total_size = total_size + + current_size = file_progress.current_size or 0 + + # Only compute speed if engine didn't provide one (sentinel value -1) + # Prefer engine-reported speeds (including 0B/s) as they are more accurate + computed_speed = 0.0 # Initialize default + if file_progress.speed < 0: # -1 means engine didn't provide speed + computed_speed = 0.0 + if history and current_size: + prev_bytes = history.get('bytes', 0) + prev_time = history.get('time', now) + delta_bytes = current_size - prev_bytes + delta_time = now - prev_time + + # Require at least 1 second between updates for speed calculation + # This prevents wildly inaccurate speeds from rapid progress bursts + if delta_bytes >= 0 and delta_time >= 1.0: + computed_speed = delta_bytes / delta_time + elif history.get('computed_speed'): + # Keep previous speed if time delta too small + computed_speed = history.get('computed_speed', 0.0) + + file_progress.speed = computed_speed # Set to 0 or computed value + else: + # Engine provided speed, use it for history + computed_speed = file_progress.speed + + if current_size or total_size: + self._file_history[file_progress.filename] = { + 'bytes': current_size, + 'time': now, + 'total': total_size or (history.get('total') if history else None), + 'computed_speed': computed_speed, + } + elif history: + # Preserve existing history even if new data missing + self._file_history[file_progress.filename] = history + + def _maybe_add_wabbajack_progress(self, parsed: ParsedLine) -> bool: + """Create a synthetic file entry for .wabbajack archive download.""" + if not parsed.data_info: + return False + if not parsed.data_info: + return False + + current_bytes, total_bytes = parsed.data_info + if total_bytes <= 0: + return False + + # Check if we already have ANY .wabbajack entry (real or synthetic) - don't create duplicates + for fp in self.state.active_files: + if fp.filename.lower().endswith('.wabbajack'): + # Update existing entry instead of creating new one + synthetic_entry = fp + if getattr(fp, self._synthetic_flag, False): + # It's synthetic - update it + percent = (current_bytes / total_bytes) * 100.0 + synthetic_entry.percent = percent + synthetic_entry.current_size = current_bytes + synthetic_entry.total_size = total_bytes + synthetic_entry.last_update = time.time() + self._augment_file_metrics(synthetic_entry) + return True + else: + # It's real - don't create synthetic + return False + + synthetic_entry = None + for fp in self.state.active_files: + if getattr(fp, self._synthetic_flag, False): + synthetic_entry = fp + break + + message = (parsed.message or "") + phase_name = (parsed.phase_name or "").lower() + should_force = 'wabbajack' in message.lower() or 'wabbajack' in phase_name + + if not synthetic_entry: + if self._has_real_download_activity() and not should_force: + return False + if self.state.phase not in (InstallationPhase.INITIALIZATION, InstallationPhase.DOWNLOAD) and not should_force: + return False + + percent = (current_bytes / total_bytes) * 100.0 + if not self._wabbajack_entry_name: + filename_match = re.search(r'([A-Za-z0-9_\-\.]+\.wabbajack)', message, re.IGNORECASE) + if filename_match: + self._wabbajack_entry_name = filename_match.group(1) + # Use a consistent name - don't create multiple entries with different names + if not self._wabbajack_entry_name: + # Use display message as filename + self._wabbajack_entry_name = "Downloading .wabbajack file" + entry_name = self._wabbajack_entry_name + + if synthetic_entry: + synthetic_entry.percent = percent + synthetic_entry.current_size = current_bytes + synthetic_entry.total_size = total_bytes + synthetic_entry.last_update = time.time() + self._augment_file_metrics(synthetic_entry) + else: + special_file = FileProgress( + filename=entry_name, + operation=OperationType.DOWNLOAD, + percent=percent, + current_size=current_bytes, + total_size=total_bytes + ) + special_file.last_update = time.time() + setattr(special_file, self._synthetic_flag, True) + self._augment_file_metrics(special_file) + self.state.add_file(special_file) + return True + + def _has_real_download_activity(self) -> bool: + """Check if there are real download entries already visible.""" + for fp in self.state.active_files: + if getattr(fp, self._synthetic_flag, False): + continue + if fp.operation == OperationType.DOWNLOAD: + return True + return False + + def _remove_synthetic_wabbajack(self): + """Remove any synthetic .wabbajack entries once real files appear.""" + remaining = [] + removed = False + for fp in self.state.active_files: + if getattr(fp, self._synthetic_flag, False): + removed = True + self._file_history.pop(fp.filename, None) + continue + remaining.append(fp) + if removed: + self.state.active_files = remaining + diff --git a/jackify/backend/handlers/progress_parser_example.py b/jackify/backend/handlers/progress_parser_example.py new file mode 100644 index 0000000..02b6e0b --- /dev/null +++ b/jackify/backend/handlers/progress_parser_example.py @@ -0,0 +1,51 @@ +""" +Example usage of ProgressParser + +This file demonstrates how to use the progress parser to extract +structured information from jackify-engine output. + +R&D NOTE: This is experimental code for investigation purposes. +""" + +from jackify.backend.handlers.progress_parser import ProgressStateManager + + +def example_usage(): + """Example of how to use the progress parser.""" + + # Create state manager + state_manager = ProgressStateManager() + + # Simulate processing lines from jackify-engine output + sample_lines = [ + "[00:00:00] === Installing files ===", + "[00:00:05] [12/14] Installing files (1.1GB/56.3GB)", + "[00:00:10] Installing: Enderal Remastered Armory.7z (42%)", + "[00:00:15] Extracting: Mandragora Sprouts.7z (96%)", + "[00:00:20] Downloading at 45.2MB/s", + "[00:00:25] Extracting at 267.3MB/s", + "[00:00:30] Progress: 85%", + ] + + print("Processing sample output lines...\n") + + for line in sample_lines: + updated = state_manager.process_line(line) + if updated: + state = state_manager.get_state() + print(f"Line: {line}") + print(f" Phase: {state.phase.value} - {state.phase_name}") + print(f" Progress: {state.overall_percent:.1f}%") + print(f" Step: {state.phase_progress_text}") + print(f" Data: {state.data_progress_text}") + print(f" Active Files: {len(state.active_files)}") + for file_prog in state.active_files: + print(f" - {file_prog.filename}: {file_prog.percent:.1f}%") + print(f" Speeds: {state.speeds}") + print(f" Display: {state.display_text}") + print() + + +if __name__ == "__main__": + example_usage() + diff --git a/jackify/backend/handlers/protontricks_handler.py b/jackify/backend/handlers/protontricks_handler.py index 8725ba5..4f03440 100644 --- a/jackify/backend/handlers/protontricks_handler.py +++ b/jackify/backend/handlers/protontricks_handler.py @@ -34,36 +34,134 @@ class ProtontricksHandler: self.steamdeck = steamdeck # Store steamdeck status self._native_steam_service = None self.use_native_operations = True # Enable native Steam operations by default + + def _get_steam_dir_from_libraryfolders(self) -> Optional[Path]: + """ + Determine the Steam installation directory from libraryfolders.vdf location. + This is the source of truth - we read libraryfolders.vdf to find where Steam is actually installed. + + Returns: + Path to Steam installation directory (the one with config/, steamapps/, etc.) or None + """ + from ..handlers.path_handler import PathHandler + + # Check all possible libraryfolders.vdf locations + vdf_paths = [ + Path.home() / ".steam/steam/config/libraryfolders.vdf", + Path.home() / ".local/share/Steam/config/libraryfolders.vdf", + Path.home() / ".steam/root/config/libraryfolders.vdf", + Path.home() / ".var/app/com.valvesoftware.Steam/.local/share/Steam/config/libraryfolders.vdf", # Flatpak + Path.home() / ".var/app/com.valvesoftware.Steam/data/Steam/config/libraryfolders.vdf", # Flatpak alternative + ] + + for vdf_path in vdf_paths: + if vdf_path.is_file(): + # The Steam installation directory is the parent of the config directory + steam_dir = vdf_path.parent.parent + # Verify it has steamapps directory (required by protontricks) + if (steam_dir / "steamapps").exists(): + logger.debug(f"Determined STEAM_DIR from libraryfolders.vdf: {steam_dir}") + return steam_dir + + # Fallback: try to get from library paths + library_paths = PathHandler.get_all_steam_library_paths() + if library_paths: + # For Flatpak Steam, library path is .local/share/Steam, but Steam installation might be data/Steam + first_lib = library_paths[0] + if '.var/app/com.valvesoftware.Steam' in str(first_lib): + # Check if data/Steam exists (main Flatpak Steam installation) + data_steam = Path.home() / ".var/app/com.valvesoftware.Steam/data/Steam" + if (data_steam / "steamapps").exists(): + logger.debug(f"Determined STEAM_DIR from Flatpak data path: {data_steam}") + return data_steam + # Otherwise use the library path itself + if (first_lib / "steamapps").exists(): + logger.debug(f"Determined STEAM_DIR from Flatpak library path: {first_lib}") + return first_lib + else: + # Native Steam - library path should be the Steam installation + if (first_lib / "steamapps").exists(): + logger.debug(f"Determined STEAM_DIR from native library path: {first_lib}") + return first_lib + + logger.warning("Could not determine STEAM_DIR from libraryfolders.vdf") + return None + def _get_bundled_winetricks_path(self) -> Optional[Path]: + """ + Get the path to the bundled winetricks script following AppImage best practices. + Same logic as WinetricksHandler._get_bundled_winetricks_path() + """ + possible_paths = [] + + # AppImage environment - use APPDIR (standard AppImage best practice) + if os.environ.get('APPDIR'): + appdir_path = Path(os.environ['APPDIR']) / 'opt' / 'jackify' / 'tools' / 'winetricks' + possible_paths.append(appdir_path) + + # Development environment - relative to module location + module_dir = Path(__file__).parent.parent.parent # Go from handlers/ up to jackify/ + dev_path = module_dir / 'tools' / 'winetricks' + possible_paths.append(dev_path) + + # Try each path until we find one that works + for path in possible_paths: + if path.exists() and os.access(path, os.X_OK): + logger.debug(f"Found bundled winetricks at: {path}") + return path + + logger.warning(f"Bundled winetricks not found. Tried paths: {possible_paths}") + return None + + def _get_bundled_cabextract_path(self) -> Optional[Path]: + """ + Get the path to the bundled cabextract binary following AppImage best practices. + Same logic as WinetricksHandler._get_bundled_cabextract() + """ + possible_paths = [] + + # AppImage environment - use APPDIR (standard AppImage best practice) + if os.environ.get('APPDIR'): + appdir_path = Path(os.environ['APPDIR']) / 'opt' / 'jackify' / 'tools' / 'cabextract' + possible_paths.append(appdir_path) + + # Development environment - relative to module location + module_dir = Path(__file__).parent.parent.parent # Go from handlers/ up to jackify/ + dev_path = module_dir / 'tools' / 'cabextract' + possible_paths.append(dev_path) + + # Try each path until we find one that works + for path in possible_paths: + if path.exists() and os.access(path, os.X_OK): + logger.debug(f"Found bundled cabextract at: {path}") + return path + + logger.warning(f"Bundled cabextract not found. Tried paths: {possible_paths}") + return None + def _get_clean_subprocess_env(self): """ - Create a clean environment for subprocess calls by removing PyInstaller-specific + Create a clean environment for subprocess calls by removing bundle-specific environment variables that can interfere with external program execution. + Uses the centralized get_clean_subprocess_env() to ensure AppImage variables + are removed to prevent subprocess spawning issues. + Returns: dict: Cleaned environment dictionary """ - env = os.environ.copy() - - # Remove PyInstaller-specific environment variables - env.pop('_MEIPASS', None) - env.pop('_MEIPASS2', None) - - # Clean library path variables that PyInstaller modifies (Linux/Unix) + # Use centralized function that removes AppImage variables + from .subprocess_utils import get_clean_subprocess_env + env = get_clean_subprocess_env() + + # Clean library path variables that frozen bundles modify (Linux/Unix) if 'LD_LIBRARY_PATH_ORIG' in env: - # Restore original LD_LIBRARY_PATH if it was backed up by PyInstaller + # Restore original LD_LIBRARY_PATH if it was backed up by the bundler env['LD_LIBRARY_PATH'] = env['LD_LIBRARY_PATH_ORIG'] else: - # Remove PyInstaller-modified LD_LIBRARY_PATH + # Remove bundle-modified LD_LIBRARY_PATH env.pop('LD_LIBRARY_PATH', None) - # Clean PATH of PyInstaller-specific entries - if 'PATH' in env and hasattr(sys, '_MEIPASS'): - path_entries = env['PATH'].split(os.pathsep) - # Remove any PATH entries that point to PyInstaller temp directory - cleaned_path = [p for p in path_entries if not p.startswith(sys._MEIPASS)] - env['PATH'] = os.pathsep.join(cleaned_path) - # Clean macOS library path (if present) if 'DYLD_LIBRARY_PATH' in env and hasattr(sys, '_MEIPASS'): dyld_entries = env['DYLD_LIBRARY_PATH'].split(os.pathsep) @@ -84,17 +182,17 @@ class ProtontricksHandler: def detect_protontricks(self): """ - Detect if protontricks is installed and whether it's flatpak or native. - If not found, prompts the user to install the Flatpak version. + Detect if protontricks is installed (silent detection for GUI/automated use). - Returns True if protontricks is found or successfully installed, False otherwise + Returns True if protontricks is found, False otherwise. + Does NOT prompt user or attempt installation - that's handled by the GUI. """ logger.debug("Detecting if protontricks is installed...") - + # Check if protontricks exists as a command protontricks_path_which = shutil.which("protontricks") - self.flatpak_path = shutil.which("flatpak") # Store for later use - + self.flatpak_path = shutil.which("flatpak") + if protontricks_path_which: # Check if it's a flatpak wrapper try: @@ -103,7 +201,6 @@ class ProtontricksHandler: if "flatpak run" in content: logger.debug(f"Detected Protontricks is a Flatpak wrapper at {protontricks_path_which}") self.which_protontricks = 'flatpak' - # Continue to check flatpak list just to be sure else: logger.info(f"Native Protontricks found at {protontricks_path_which}") self.which_protontricks = 'native' @@ -111,103 +208,27 @@ class ProtontricksHandler: return True except Exception as e: logger.error(f"Error reading protontricks executable: {e}") - - # Check if flatpak protontricks is installed (or if wrapper check indicated flatpak) - flatpak_installed = False - try: - # PyInstaller fix: Comprehensive environment cleaning for subprocess calls - env = self._get_clean_subprocess_env() + # Check if flatpak protontricks is installed + try: + env = self._get_clean_subprocess_env() result = subprocess.run( ["flatpak", "list"], - stdout=subprocess.PIPE, - stderr=subprocess.DEVNULL, # Suppress stderr to avoid error messages when flatpak not installed + capture_output=True, text=True, - env=env # Use comprehensively cleaned environment + env=env ) if result.returncode == 0 and "com.github.Matoking.protontricks" in result.stdout: logger.info("Flatpak Protontricks is installed") self.which_protontricks = 'flatpak' - flatpak_installed = True return True except FileNotFoundError: - logger.warning("'flatpak' command not found. Cannot check for Flatpak Protontricks.") + logger.warning("'flatpak' command not found. Cannot check for Flatpak Protontricks.") except Exception as e: logger.error(f"Unexpected error checking flatpak: {e}") - # If neither native nor flatpak found, prompt for installation - if not self.which_protontricks: - logger.warning("Protontricks not found (native or flatpak).") - - should_install = False - if self.steamdeck: - logger.info("Running on Steam Deck, attempting automatic Flatpak installation.") - # Maybe add a brief pause or message? - print("Protontricks not found. Attempting automatic installation via Flatpak...") - should_install = True - else: - try: - print("\nProtontricks not found. Choose installation method:") - print("1. Install via Flatpak (automatic)") - print("2. Install via native package manager (manual)") - print("3. Skip (Use bundled winetricks instead)") - choice = input("Enter choice (1/2/3): ").strip() - - if choice == '1' or choice == '': - should_install = True - elif choice == '2': - print("\nTo install protontricks via your system package manager:") - print("• Ubuntu/Debian: sudo apt install protontricks") - print("• Fedora: sudo dnf install protontricks") - print("• Arch Linux: sudo pacman -S protontricks") - print("• openSUSE: sudo zypper install protontricks") - print("\nAfter installation, please rerun Jackify.") - return False - elif choice == '3': - print("Skipping protontricks installation. Will use bundled winetricks for component installation.") - logger.info("User chose to skip protontricks and use winetricks fallback") - return False - else: - print("Invalid choice. Installation cancelled.") - return False - except KeyboardInterrupt: - print("\nInstallation cancelled.") - return False - - if should_install: - try: - logger.info("Attempting to install Flatpak Protontricks...") - # Use --noninteractive for automatic install where applicable - install_cmd = ["flatpak", "install", "-u", "-y", "--noninteractive", "flathub", "com.github.Matoking.protontricks"] - - # PyInstaller fix: Comprehensive environment cleaning for subprocess calls - env = self._get_clean_subprocess_env() - - # Run with output visible to user - process = subprocess.run(install_cmd, check=True, text=True, env=env) - logger.info("Flatpak Protontricks installation successful.") - print("Flatpak Protontricks installed successfully.") - self.which_protontricks = 'flatpak' - return True - except FileNotFoundError: - logger.error("'flatpak' command not found. Cannot install.") - print("Error: 'flatpak' command not found. Please install Flatpak first.") - return False - except subprocess.CalledProcessError as e: - logger.error(f"Flatpak installation failed: {e}") - print(f"Error: Flatpak installation failed (Command: {' '.join(e.cmd)}). Please try installing manually.") - return False - except Exception as e: - logger.error(f"Unexpected error during Flatpak installation: {e}") - print("An unexpected error occurred during installation.") - return False - else: - logger.error("User chose not to install Protontricks or installation skipped.") - print("Protontricks installation skipped. Cannot continue without Protontricks.") - return False - - # Should not reach here if logic is correct, but acts as a fallback - logger.error("Protontricks detection failed unexpectedly.") + # Not found + logger.warning("Protontricks not found (native or flatpak).") return False def check_protontricks_version(self): @@ -257,13 +278,30 @@ class ProtontricksHandler: logger.error("Could not detect protontricks installation") return None - if self.which_protontricks == 'flatpak': + # Build command based on detected protontricks type + if self.which_protontricks == 'bundled': + # CRITICAL: Use safe Python executable to prevent AppImage recursive spawning + from .subprocess_utils import get_safe_python_executable + python_exe = get_safe_python_executable() + + # Use bundled wrapper script for reliable invocation + # The wrapper script imports cli and calls it with sys.argv + wrapper_script = self._get_bundled_protontricks_wrapper_path() + if wrapper_script and Path(wrapper_script).exists(): + cmd = [python_exe, str(wrapper_script)] + cmd.extend([str(a) for a in args]) + else: + # Fallback: use python -m to run protontricks CLI directly + # This avoids importing protontricks.__init__ which imports gui.py which needs Pillow + cmd = [python_exe, "-m", "protontricks.cli.main"] + cmd.extend([str(a) for a in args]) + elif self.which_protontricks == 'flatpak': cmd = ["flatpak", "run", "com.github.Matoking.protontricks"] - else: + cmd.extend(args) + else: # native cmd = ["protontricks"] - - cmd.extend(args) - + cmd.extend(args) + # Default to capturing stdout/stderr unless specified otherwise in kwargs run_kwargs = { 'stdout': subprocess.PIPE, @@ -271,18 +309,73 @@ class ProtontricksHandler: 'text': True, **kwargs # Allow overriding defaults (like stderr=DEVNULL) } - # PyInstaller fix: Use cleaned environment for all protontricks calls - env = self._get_clean_subprocess_env() + + # Handle environment: if env was passed in kwargs, merge it with our clean env + # Otherwise create a clean env from scratch + if 'env' in kwargs and kwargs['env']: + # Merge passed env with our clean env (our values take precedence) + env = self._get_clean_subprocess_env() + env.update(kwargs['env']) # Merge passed env, but our clean env is base + # Re-apply our critical settings after merge to ensure they're set + else: + # Bundled-runtime fix: Use cleaned environment for all protontricks calls + env = self._get_clean_subprocess_env() + # Suppress Wine debug output env['WINEDEBUG'] = '-all' + + # CRITICAL: Set STEAM_DIR based on libraryfolders.vdf to prevent user prompts + steam_dir = self._get_steam_dir_from_libraryfolders() + if steam_dir: + env['STEAM_DIR'] = str(steam_dir) + logger.debug(f"Set STEAM_DIR for protontricks: {steam_dir}") + else: + logger.warning("Could not determine STEAM_DIR from libraryfolders.vdf - protontricks may prompt user") + + # CRITICAL: Only set bundled winetricks for NATIVE protontricks + # Flatpak protontricks runs in a sandbox and CANNOT access AppImage FUSE mounts (/tmp/.mount_*) + # Flatpak protontricks has its own winetricks bundled inside the flatpak + if self.which_protontricks == 'native': + winetricks_path = self._get_bundled_winetricks_path() + if winetricks_path: + env['WINETRICKS'] = str(winetricks_path) + logger.debug(f"Set WINETRICKS for native protontricks: {winetricks_path}") + else: + logger.warning("Bundled winetricks not found - native protontricks will use system winetricks") + + cabextract_path = self._get_bundled_cabextract_path() + if cabextract_path: + cabextract_dir = str(cabextract_path.parent) + current_path = env.get('PATH', '') + env['PATH'] = f"{cabextract_dir}{os.pathsep}{current_path}" if current_path else cabextract_dir + logger.debug(f"Added bundled cabextract to PATH for native protontricks: {cabextract_dir}") + else: + logger.warning("Bundled cabextract not found - native protontricks will use system cabextract") + else: + # Flatpak protontricks - DO NOT set bundled paths + logger.debug(f"Using {self.which_protontricks} protontricks - it has its own winetricks (cannot access AppImage mounts)") + + # CRITICAL: Suppress winetricks verbose output when not in debug mode + # WINETRICKS_SUPER_QUIET suppresses "Executing..." messages from winetricks + from ..handlers.config_handler import ConfigHandler + config_handler = ConfigHandler() + debug_mode = config_handler.get('debug_mode', False) + if not debug_mode: + env['WINETRICKS_SUPER_QUIET'] = '1' + logger.debug("Set WINETRICKS_SUPER_QUIET=1 to suppress winetricks verbose output") + else: + logger.debug("Debug mode enabled - winetricks verbose output will be shown") + + # Note: No need to modify LD_LIBRARY_PATH for Wine/Proton as it's a system dependency + # Wine/Proton finds its own libraries through the system's library search paths + run_kwargs['env'] = env try: return subprocess.run(cmd, **run_kwargs) except Exception as e: logger.error(f"Error running protontricks: {e}") - # Consider returning a mock CompletedProcess with an error code? return None - + def set_protontricks_permissions(self, modlist_dir, steamdeck=False): """ Set permissions for Steam operations to access the modlist directory. @@ -304,7 +397,7 @@ class ProtontricksHandler: logger.info("Setting Protontricks permissions...") try: - # PyInstaller fix: Use cleaned environment + # Bundled-runtime fix: Use cleaned environment env = self._get_clean_subprocess_env() subprocess.run(["flatpak", "override", "--user", "com.github.Matoking.protontricks", @@ -414,7 +507,7 @@ class ProtontricksHandler: logger.error("Protontricks path not determined, cannot list shortcuts.") return {} self.logger.debug(f"Running command: {' '.join(cmd)}") - # PyInstaller fix: Use cleaned environment + # Bundled-runtime fix: Use cleaned environment env = self._get_clean_subprocess_env() result = subprocess.run(cmd, capture_output=True, text=True, check=True, encoding='utf-8', errors='ignore', env=env) # Regex to capture name and AppID @@ -566,7 +659,7 @@ class ProtontricksHandler: Returns True on success, False on failure """ try: - # PyInstaller fix: Use cleaned environment + # Bundled-runtime fix: Use cleaned environment env = self._get_clean_subprocess_env() env["WINEDEBUG"] = "-all" @@ -652,16 +745,22 @@ class ProtontricksHandler: def run_protontricks_launch(self, appid, installer_path, *extra_args): """ - Run protontricks-launch (for WebView or similar installers) using the correct method for flatpak or native. + Run protontricks-launch (for WebView or similar installers) using the correct method for bundled, flatpak, or native. Returns subprocess.CompletedProcess object. """ if self.which_protontricks is None: if not self.detect_protontricks(): self.logger.error("Could not detect protontricks installation") return None - if self.which_protontricks == 'flatpak': + if self.which_protontricks == 'bundled': + # CRITICAL: Use safe Python executable to prevent AppImage recursive spawning + from .subprocess_utils import get_safe_python_executable + python_exe = get_safe_python_executable() + # Use bundled Python module + cmd = [python_exe, "-m", "protontricks.cli.launch", "--appid", appid, str(installer_path)] + elif self.which_protontricks == 'flatpak': cmd = ["flatpak", "run", "--command=protontricks-launch", "com.github.Matoking.protontricks", "--appid", appid, str(installer_path)] - else: + else: # native launch_path = shutil.which("protontricks-launch") if not launch_path: self.logger.error("protontricks-launch command not found in PATH.") @@ -671,7 +770,7 @@ class ProtontricksHandler: cmd.extend(extra_args) self.logger.debug(f"Running protontricks-launch: {' '.join(map(str, cmd))}") try: - # PyInstaller fix: Use cleaned environment + # Bundled-runtime fix: Use cleaned environment env = self._get_clean_subprocess_env() return subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True, env=env) except Exception as e: @@ -685,6 +784,44 @@ class ProtontricksHandler: """ env = self._get_clean_subprocess_env() env["WINEDEBUG"] = "-all" + + # CRITICAL: Only set bundled winetricks for NATIVE protontricks + # Flatpak protontricks runs in a sandbox and CANNOT access AppImage FUSE mounts (/tmp/.mount_*) + # Flatpak protontricks has its own winetricks bundled inside the flatpak + if self.which_protontricks == 'native': + winetricks_path = self._get_bundled_winetricks_path() + if winetricks_path: + env['WINETRICKS'] = str(winetricks_path) + self.logger.debug(f"Set WINETRICKS for native protontricks: {winetricks_path}") + else: + self.logger.warning("Bundled winetricks not found - native protontricks will use system winetricks") + + cabextract_path = self._get_bundled_cabextract_path() + if cabextract_path: + cabextract_dir = str(cabextract_path.parent) + current_path = env.get('PATH', '') + env['PATH'] = f"{cabextract_dir}{os.pathsep}{current_path}" if current_path else cabextract_dir + self.logger.debug(f"Added bundled cabextract to PATH for native protontricks: {cabextract_dir}") + else: + self.logger.warning("Bundled cabextract not found - native protontricks will use system cabextract") + else: + # Flatpak protontricks - DO NOT set bundled paths + self.logger.info(f"Using {self.which_protontricks} protontricks - it has its own winetricks (cannot access AppImage mounts)") + + # CRITICAL: Suppress winetricks verbose output when not in debug mode + from ..handlers.config_handler import ConfigHandler + config_handler = ConfigHandler() + debug_mode = config_handler.get('debug_mode', False) + if not debug_mode: + env['WINETRICKS_SUPER_QUIET'] = '1' + self.logger.debug("Set WINETRICKS_SUPER_QUIET=1 in install_wine_components to suppress winetricks verbose output") + + # Set up winetricks cache (shared with winetricks_handler for efficiency) + from jackify.shared.paths import get_jackify_data_dir + jackify_cache_dir = get_jackify_data_dir() / 'winetricks_cache' + jackify_cache_dir.mkdir(parents=True, exist_ok=True) + env['WINETRICKS_CACHE'] = str(jackify_cache_dir) + self.logger.info(f"Using winetricks cache: {jackify_cache_dir}") if specific_components is not None: components_to_install = specific_components self.logger.info(f"Installing specific components: {components_to_install}") @@ -716,8 +853,25 @@ class ProtontricksHandler: # Continue to retry else: self.logger.error(f"Protontricks command failed (Attempt {attempt}/{max_attempts}). Return Code: {result.returncode if result else 'N/A'}") - self.logger.error(f"Stdout: {result.stdout.strip() if result else ''}") - self.logger.error(f"Stderr: {result.stderr.strip() if result else ''}") + # Only show stdout/stderr in debug mode to avoid verbose output + from ..handlers.config_handler import ConfigHandler + config_handler = ConfigHandler() + debug_mode = config_handler.get('debug_mode', False) + if debug_mode: + self.logger.error(f"Stdout: {result.stdout.strip() if result else ''}") + self.logger.error(f"Stderr: {result.stderr.strip() if result else ''}") + else: + # In non-debug mode, only show stderr if it contains actual errors (not verbose winetricks output) + if result and result.stderr: + stderr_lower = result.stderr.lower() + # Filter out verbose winetricks messages + if any(keyword in stderr_lower for keyword in ['error', 'failed', 'cannot', 'warning: cannot find']): + # Only show actual errors, not "Executing..." messages + error_lines = [line for line in result.stderr.strip().split('\n') + if any(keyword in line.lower() for keyword in ['error', 'failed', 'cannot', 'warning: cannot find']) + and 'executing' not in line.lower()] + if error_lines: + self.logger.error(f"Stderr (errors only): {' '.join(error_lines)}") except Exception as e: self.logger.error(f"Error during protontricks run (Attempt {attempt}/{max_attempts}): {e}", exc_info=True) self.logger.error(f"Failed to install Wine components after {max_attempts} attempts.") diff --git a/jackify/backend/handlers/shortcut_handler.py b/jackify/backend/handlers/shortcut_handler.py index d0262fc..f3f3819 100644 --- a/jackify/backend/handlers/shortcut_handler.py +++ b/jackify/backend/handlers/shortcut_handler.py @@ -198,7 +198,10 @@ class ShortcutHandler: if steam_vdf_spec is None: # Try to install steam-vdf using pip print("Installing required dependency (steam-vdf)...") - subprocess.check_call([sys.executable, "-m", "pip", "install", "steam-vdf", "--user"]) + # CRITICAL: Use safe Python executable to prevent AppImage recursive spawning + from jackify.backend.handlers.subprocess_utils import get_safe_python_executable + python_exe = get_safe_python_executable() + subprocess.check_call([python_exe, "-m", "pip", "install", "steam-vdf", "--user"]) time.sleep(1) # Give some time for the install to complete # Now import it diff --git a/jackify/backend/handlers/subprocess_utils.py b/jackify/backend/handlers/subprocess_utils.py index 1253c60..99ea78a 100644 --- a/jackify/backend/handlers/subprocess_utils.py +++ b/jackify/backend/handlers/subprocess_utils.py @@ -3,17 +3,119 @@ import signal import subprocess import time import resource +import sys +import shutil + +def get_safe_python_executable(): + """ + Get a safe Python executable for subprocess calls. + When running as AppImage, returns system Python instead of AppImage path + to prevent recursive AppImage spawning. + + Returns: + str: Path to Python executable safe for subprocess calls + """ + # Check if we're running as AppImage + is_appimage = ( + 'APPIMAGE' in os.environ or + 'APPDIR' in os.environ or + (hasattr(sys, 'frozen') and sys.frozen) or + (sys.argv[0] and sys.argv[0].endswith('.AppImage')) + ) + + if is_appimage: + # Running as AppImage - use system Python to avoid recursive spawning + # Try to find system Python (same logic as AppRun) + for cmd in ['python3', 'python3.13', 'python3.12', 'python3.11', 'python3.10', 'python3.9', 'python3.8']: + python_path = shutil.which(cmd) + if python_path: + return python_path + # Fallback: if we can't find system Python, this is a problem + # But we'll still return sys.executable as last resort + return sys.executable + else: + # Not AppImage - sys.executable is safe + return sys.executable def get_clean_subprocess_env(extra_env=None): """ - Returns a copy of os.environ with PyInstaller and other problematic variables removed. + Returns a copy of os.environ with bundled-runtime variables and other problematic entries removed. Optionally merges in extra_env dict. + Also ensures bundled tools (lz4, unzip, etc.) are in PATH when running as AppImage. + CRITICAL: Preserves system PATH to ensure system tools (like lz4) are available. """ + from pathlib import Path + env = os.environ.copy() - # Remove PyInstaller-specific variables + + # Remove AppImage-specific variables that can confuse subprocess calls + # These variables cause subprocesses to be interpreted as new AppImage launches + for key in ['APPIMAGE', 'APPDIR', 'ARGV0', 'OWD']: + env.pop(key, None) + + # Remove bundle-specific variables for k in list(env): if k.startswith('_MEIPASS'): del env[k] + + # Get current PATH - ensure we preserve system paths + current_path = env.get('PATH', '') + + # Ensure common system directories are in PATH if not already present + # This is critical for tools like lz4 that might be in /usr/bin, /usr/local/bin, etc. + system_paths = ['/usr/bin', '/usr/local/bin', '/bin', '/sbin', '/usr/sbin'] + path_parts = current_path.split(':') if current_path else [] + for sys_path in system_paths: + if sys_path not in path_parts and os.path.isdir(sys_path): + path_parts.append(sys_path) + + # Add bundled tools directory to PATH if running as AppImage + # This ensures lz4, unzip, xz, etc. are available to subprocesses + appdir = env.get('APPDIR') + tools_dir = None + + if appdir: + # Running as AppImage - use APPDIR + tools_dir = os.path.join(appdir, 'opt', 'jackify', 'tools') + # Verify the tools directory exists and contains lz4 + if not os.path.isdir(tools_dir): + tools_dir = None + elif not os.path.exists(os.path.join(tools_dir, 'lz4')): + # Tools dir exists but lz4 not there - might be a different layout + tools_dir = None + elif getattr(sys, 'frozen', False): + # PyInstaller frozen - try to find tools relative to executable + exe_path = Path(sys.executable) + # In PyInstaller, sys.executable is the bundled executable + # Tools should be in the same directory or a tools subdirectory + possible_tools_dirs = [ + exe_path.parent / 'tools', + exe_path.parent / 'opt' / 'jackify' / 'tools', + ] + for possible_dir in possible_tools_dirs: + if possible_dir.is_dir() and (possible_dir / 'lz4').exists(): + tools_dir = str(possible_dir) + break + + # Build final PATH: bundled tools first (if any), then original PATH with system paths + final_path_parts = [] + if tools_dir and os.path.isdir(tools_dir): + # Prepend tools directory so bundled tools take precedence + # This is critical - bundled lz4 must come before system lz4 + final_path_parts.append(tools_dir) + + # Add all other paths (preserving order, removing duplicates) + # Note: AppRun already sets PATH with tools directory, but we ensure it's first + seen = set() + if tools_dir: + seen.add(tools_dir) # Already added, don't add again + for path_part in path_parts: + if path_part and path_part not in seen: + final_path_parts.append(path_part) + seen.add(path_part) + + env['PATH'] = ':'.join(final_path_parts) + # Optionally restore LD_LIBRARY_PATH to system default if needed # (You can add more logic here if you know your system's default) if extra_env: @@ -59,7 +161,11 @@ class ProcessManager: """ def __init__(self, cmd, env=None, cwd=None, text=False, bufsize=0): self.cmd = cmd - self.env = env + # Default to cleaned environment if None to prevent AppImage variable inheritance + if env is None: + self.env = get_clean_subprocess_env() + else: + self.env = env self.cwd = cwd self.text = text self.bufsize = bufsize diff --git a/jackify/backend/handlers/ttw_installer_handler.py b/jackify/backend/handlers/ttw_installer_handler.py new file mode 100644 index 0000000..fe2fefe --- /dev/null +++ b/jackify/backend/handlers/ttw_installer_handler.py @@ -0,0 +1,742 @@ +""" +TTW_Linux_Installer Handler + +Handles downloading, installation, and execution of TTW_Linux_Installer for TTW installations. +Replaces hoolamike for TTW-specific functionality. +""" + +import logging +import os +import subprocess +import tarfile +import zipfile +from pathlib import Path +from typing import Optional, Tuple +import requests + +from .path_handler import PathHandler +from .filesystem_handler import FileSystemHandler +from .config_handler import ConfigHandler +from .logging_handler import LoggingHandler +from .subprocess_utils import get_clean_subprocess_env + +logger = logging.getLogger(__name__) + +# Define default TTW_Linux_Installer paths +JACKIFY_BASE_DIR = Path.home() / "Jackify" +DEFAULT_TTW_INSTALLER_DIR = JACKIFY_BASE_DIR / "TTW_Linux_Installer" +TTW_INSTALLER_EXECUTABLE_NAME = "ttw_linux_gui" # Same executable, runs in CLI mode with args + +# GitHub release info +TTW_INSTALLER_REPO = "SulfurNitride/TTW_Linux_Installer" +TTW_INSTALLER_RELEASE_URL = f"https://api.github.com/repos/{TTW_INSTALLER_REPO}/releases/latest" + + +class TTWInstallerHandler: + """Handles TTW installation using TTW_Linux_Installer (replaces hoolamike for TTW).""" + + def __init__(self, steamdeck: bool, verbose: bool, filesystem_handler: FileSystemHandler, + config_handler: ConfigHandler, menu_handler=None): + """Initialize the handler.""" + self.steamdeck = steamdeck + self.verbose = verbose + self.path_handler = PathHandler() + self.filesystem_handler = filesystem_handler + self.config_handler = config_handler + self.menu_handler = menu_handler + + # Set up logging + logging_handler = LoggingHandler() + logging_handler.rotate_log_for_logger('ttw-install', 'TTW_Install_workflow.log') + self.logger = logging_handler.setup_logger('ttw-install', 'TTW_Install_workflow.log') + + # Installation paths + self.ttw_installer_dir: Path = DEFAULT_TTW_INSTALLER_DIR + self.ttw_installer_executable_path: Optional[Path] = None + self.ttw_installer_installed: bool = False + + # Load saved install path from config + saved_path_str = self.config_handler.get('ttw_installer_install_path') + if saved_path_str and Path(saved_path_str).is_dir(): + self.ttw_installer_dir = Path(saved_path_str) + self.logger.info(f"Loaded TTW_Linux_Installer path from config: {self.ttw_installer_dir}") + + # Check if already installed + self._check_installation() + + def _ensure_dirs_exist(self): + """Ensure base directories exist.""" + self.ttw_installer_dir.mkdir(parents=True, exist_ok=True) + + def _check_installation(self): + """Check if TTW_Linux_Installer is installed at expected location.""" + self._ensure_dirs_exist() + + potential_exe_path = self.ttw_installer_dir / TTW_INSTALLER_EXECUTABLE_NAME + if potential_exe_path.is_file() and os.access(potential_exe_path, os.X_OK): + self.ttw_installer_executable_path = potential_exe_path + self.ttw_installer_installed = True + self.logger.info(f"Found TTW_Linux_Installer at: {self.ttw_installer_executable_path}") + else: + self.ttw_installer_installed = False + self.ttw_installer_executable_path = None + self.logger.info(f"TTW_Linux_Installer not found at {potential_exe_path}") + + def install_ttw_installer(self, install_dir: Optional[Path] = None) -> Tuple[bool, str]: + """Download and install TTW_Linux_Installer from GitHub releases. + + Args: + install_dir: Optional directory to install to (defaults to ~/Jackify/TTW_Linux_Installer) + + Returns: + (success: bool, message: str) + """ + try: + self._ensure_dirs_exist() + target_dir = Path(install_dir) if install_dir else self.ttw_installer_dir + target_dir.mkdir(parents=True, exist_ok=True) + + # Fetch latest release info + self.logger.info(f"Fetching latest TTW_Linux_Installer release from {TTW_INSTALLER_RELEASE_URL}") + resp = requests.get(TTW_INSTALLER_RELEASE_URL, timeout=15, verify=True) + resp.raise_for_status() + data = resp.json() + release_tag = data.get("tag_name") or data.get("name") + + # Find Linux asset - universal-mpi-installer pattern (can be .zip or .tar.gz) + linux_asset = None + asset_names = [asset.get("name", "") for asset in data.get("assets", [])] + self.logger.info(f"Available release assets: {asset_names}") + + for asset in data.get("assets", []): + name = asset.get("name", "").lower() + # Look for universal-mpi-installer pattern + if "universal-mpi-installer" in name and name.endswith((".zip", ".tar.gz")): + linux_asset = asset + self.logger.info(f"Found Linux asset: {asset.get('name')}") + break + + if not linux_asset: + # Log all available assets for debugging + all_assets = [asset.get("name", "") for asset in data.get("assets", [])] + self.logger.error(f"No suitable Linux asset found. Available assets: {all_assets}") + return False, f"No suitable Linux TTW_Linux_Installer asset found in latest release. Available assets: {', '.join(all_assets)}" + + download_url = linux_asset.get("browser_download_url") + asset_name = linux_asset.get("name") + if not download_url or not asset_name: + return False, "Latest release is missing required asset metadata" + + # Download to target directory + temp_path = target_dir / asset_name + self.logger.info(f"Downloading {asset_name} from {download_url}") + if not self.filesystem_handler.download_file(download_url, temp_path, overwrite=True, quiet=True): + return False, "Failed to download TTW_Linux_Installer asset" + + # Extract archive (zip or tar.gz) + try: + self.logger.info(f"Extracting {asset_name} to {target_dir}") + if asset_name.lower().endswith('.tar.gz'): + with tarfile.open(temp_path, "r:gz") as tf: + tf.extractall(path=target_dir) + elif asset_name.lower().endswith('.zip'): + with zipfile.ZipFile(temp_path, "r") as zf: + zf.extractall(path=target_dir) + else: + return False, f"Unsupported archive format: {asset_name}" + finally: + try: + temp_path.unlink(missing_ok=True) # cleanup + except Exception: + pass + + # Find executable (may be in subdirectory or root) + exe_path = target_dir / TTW_INSTALLER_EXECUTABLE_NAME + if not exe_path.is_file(): + # Search for it + for p in target_dir.rglob(TTW_INSTALLER_EXECUTABLE_NAME): + if p.is_file(): + exe_path = p + break + + if not exe_path.is_file(): + return False, "TTW_Linux_Installer executable not found after extraction" + + # Set executable permissions + try: + os.chmod(exe_path, 0o755) + except Exception as e: + self.logger.warning(f"Failed to chmod +x on {exe_path}: {e}") + + # Update state + self.ttw_installer_dir = target_dir + self.ttw_installer_executable_path = exe_path + self.ttw_installer_installed = True + self.config_handler.set('ttw_installer_install_path', str(target_dir)) + if release_tag: + self.config_handler.set('ttw_installer_version', release_tag) + + self.logger.info(f"TTW_Linux_Installer installed successfully at {exe_path}") + return True, f"TTW_Linux_Installer installed at {target_dir}" + + except Exception as e: + self.logger.error(f"Error installing TTW_Linux_Installer: {e}", exc_info=True) + return False, f"Error installing TTW_Linux_Installer: {e}" + + def get_installed_ttw_installer_version(self) -> Optional[str]: + """Return the installed TTW_Linux_Installer version stored in Jackify config, if any.""" + try: + v = self.config_handler.get('ttw_installer_version') + return str(v) if v else None + except Exception: + return None + + def is_ttw_installer_update_available(self) -> Tuple[bool, Optional[str], Optional[str]]: + """ + Check GitHub for the latest TTW_Linux_Installer release and compare with installed version. + Returns (update_available, installed_version, latest_version). + """ + installed = self.get_installed_ttw_installer_version() + + # If executable exists but no version is recorded, don't show as "out of date" + # This can happen if the executable was installed before version tracking was added + if not installed and self.ttw_installer_installed: + self.logger.info("TTW_Linux_Installer executable found but no version recorded in config") + # Don't treat as update available - just show as "Ready" (unknown version) + return (False, None, None) + + try: + resp = requests.get(TTW_INSTALLER_RELEASE_URL, timeout=10, verify=True) + resp.raise_for_status() + latest = resp.json().get('tag_name') or resp.json().get('name') + if not latest: + return (False, installed, None) + if not installed: + # No version recorded and executable doesn't exist; treat as not installed + return (False, None, str(latest)) + return (installed != str(latest), installed, str(latest)) + except Exception as e: + self.logger.warning(f"Error checking for TTW_Linux_Installer updates: {e}") + return (False, installed, None) + + def install_ttw_backend(self, ttw_mpi_path: Path, ttw_output_path: Path) -> Tuple[bool, str]: + """Install TTW using TTW_Linux_Installer. + + Args: + ttw_mpi_path: Path to TTW .mpi file + ttw_output_path: Target installation directory + + Returns: + (success: bool, message: str) + """ + self.logger.info("Starting Tale of Two Wastelands installation via TTW_Linux_Installer") + + # Validate parameters + if not ttw_mpi_path or not ttw_output_path: + return False, "Missing required parameters: ttw_mpi_path and ttw_output_path are required" + + ttw_mpi_path = Path(ttw_mpi_path) + ttw_output_path = Path(ttw_output_path) + + # Validate paths + if not ttw_mpi_path.exists(): + return False, f"TTW .mpi file not found: {ttw_mpi_path}" + + if not ttw_mpi_path.is_file(): + return False, f"TTW .mpi path is not a file: {ttw_mpi_path}" + + if ttw_mpi_path.suffix.lower() != '.mpi': + return False, f"TTW path does not have .mpi extension: {ttw_mpi_path}" + + if not ttw_output_path.exists(): + try: + ttw_output_path.mkdir(parents=True, exist_ok=True) + except Exception as e: + return False, f"Failed to create output directory: {e}" + + # Check installation + if not self.ttw_installer_installed: + # Try to install automatically + self.logger.info("TTW_Linux_Installer not found, attempting to install...") + success, message = self.install_ttw_installer() + if not success: + return False, f"TTW_Linux_Installer not installed and auto-install failed: {message}" + + if not self.ttw_installer_executable_path or not self.ttw_installer_executable_path.is_file(): + return False, "TTW_Linux_Installer executable not found" + + # Detect game paths + required_games = ['Fallout 3', 'Fallout New Vegas'] + detected_games = self.path_handler.find_vanilla_game_paths() + missing_games = [game for game in required_games if game not in detected_games] + if missing_games: + return False, f"Missing required games: {', '.join(missing_games)}. TTW requires both Fallout 3 and Fallout New Vegas." + + fallout3_path = detected_games.get('Fallout 3') + falloutnv_path = detected_games.get('Fallout New Vegas') + + if not fallout3_path or not falloutnv_path: + return False, "Could not detect Fallout 3 or Fallout New Vegas installation paths" + + # Construct command - run in CLI mode with arguments + cmd = [ + str(self.ttw_installer_executable_path), + "--fo3", str(fallout3_path), + "--fnv", str(falloutnv_path), + "--mpi", str(ttw_mpi_path), + "--output", str(ttw_output_path), + "--start" + ] + + self.logger.info(f"Executing TTW_Linux_Installer: {' '.join(cmd)}") + + try: + env = get_clean_subprocess_env() + process = subprocess.Popen( + cmd, + cwd=str(self.ttw_installer_dir), + env=env, + stdout=subprocess.PIPE, + stderr=subprocess.STDOUT, + text=True, + bufsize=1, + universal_newlines=True + ) + + # Stream output to logger + if process.stdout: + for line in process.stdout: + line = line.rstrip() + if line: + self.logger.info(f"TTW_Linux_Installer: {line}") + + process.wait() + ret = process.returncode + + if ret == 0: + self.logger.info("TTW installation completed successfully.") + return True, "TTW installation completed successfully!" + else: + self.logger.error(f"TTW installation process returned non-zero exit code: {ret}") + return False, f"TTW installation failed with exit code {ret}" + + except Exception as e: + self.logger.error(f"Error executing TTW_Linux_Installer: {e}", exc_info=True) + return False, f"Error executing TTW_Linux_Installer: {e}" + + def start_ttw_installation(self, ttw_mpi_path: Path, ttw_output_path: Path, output_file: Path): + """Start TTW installation process (non-blocking). + + Starts the TTW_Linux_Installer subprocess with output redirected to a file. + Returns immediately with process handle. Caller should poll process and read output file. + + Args: + ttw_mpi_path: Path to TTW .mpi file + ttw_output_path: Target installation directory + output_file: Path to file where stdout/stderr will be written + + Returns: + (process: subprocess.Popen, error_message: str) - process is None if failed + """ + self.logger.info("Starting TTW installation (non-blocking mode)") + + # Validate parameters + if not ttw_mpi_path or not ttw_output_path: + return None, "Missing required parameters: ttw_mpi_path and ttw_output_path are required" + + ttw_mpi_path = Path(ttw_mpi_path) + ttw_output_path = Path(ttw_output_path) + + # Validate paths + if not ttw_mpi_path.exists(): + return None, f"TTW .mpi file not found: {ttw_mpi_path}" + + if not ttw_mpi_path.is_file(): + return None, f"TTW .mpi path is not a file: {ttw_mpi_path}" + + if ttw_mpi_path.suffix.lower() != '.mpi': + return None, f"TTW path does not have .mpi extension: {ttw_mpi_path}" + + if not ttw_output_path.exists(): + try: + ttw_output_path.mkdir(parents=True, exist_ok=True) + except Exception as e: + return None, f"Failed to create output directory: {e}" + + # Check installation + if not self.ttw_installer_installed: + self.logger.info("TTW_Linux_Installer not found, attempting to install...") + success, message = self.install_ttw_installer() + if not success: + return None, f"TTW_Linux_Installer not installed and auto-install failed: {message}" + + if not self.ttw_installer_executable_path or not self.ttw_installer_executable_path.is_file(): + return None, "TTW_Linux_Installer executable not found" + + # Detect game paths + required_games = ['Fallout 3', 'Fallout New Vegas'] + detected_games = self.path_handler.find_vanilla_game_paths() + missing_games = [game for game in required_games if game not in detected_games] + if missing_games: + return None, f"Missing required games: {', '.join(missing_games)}. TTW requires both Fallout 3 and Fallout New Vegas." + + fallout3_path = detected_games.get('Fallout 3') + falloutnv_path = detected_games.get('Fallout New Vegas') + + if not fallout3_path or not falloutnv_path: + return None, "Could not detect Fallout 3 or Fallout New Vegas installation paths" + + # Construct command + cmd = [ + str(self.ttw_installer_executable_path), + "--fo3", str(fallout3_path), + "--fnv", str(falloutnv_path), + "--mpi", str(ttw_mpi_path), + "--output", str(ttw_output_path), + "--start" + ] + + self.logger.info(f"Executing TTW_Linux_Installer: {' '.join(cmd)}") + + try: + env = get_clean_subprocess_env() + + # Ensure lz4 is in PATH (critical for TTW_Linux_Installer) + import shutil + appdir = env.get('APPDIR') + if appdir: + tools_dir = os.path.join(appdir, 'opt', 'jackify', 'tools') + bundled_lz4 = os.path.join(tools_dir, 'lz4') + if os.path.exists(bundled_lz4) and os.access(bundled_lz4, os.X_OK): + current_path = env.get('PATH', '') + path_parts = [p for p in current_path.split(':') if p and p != tools_dir] + env['PATH'] = f"{tools_dir}:{':'.join(path_parts)}" + self.logger.info(f"Added bundled lz4 to PATH: {tools_dir}") + + # Verify lz4 is available + lz4_path = shutil.which('lz4', path=env.get('PATH', '')) + if not lz4_path: + system_lz4 = shutil.which('lz4') + if system_lz4: + lz4_dir = os.path.dirname(system_lz4) + env['PATH'] = f"{lz4_dir}:{env.get('PATH', '')}" + self.logger.info(f"Added system lz4 to PATH: {lz4_dir}") + else: + return None, "lz4 is required but not found in PATH" + + # Open output file for writing + output_fh = open(output_file, 'w', encoding='utf-8', buffering=1) + + # Start process with output redirected to file + process = subprocess.Popen( + cmd, + cwd=str(self.ttw_installer_dir), + env=env, + stdout=output_fh, + stderr=subprocess.STDOUT, + bufsize=1 + ) + + self.logger.info(f"TTW_Linux_Installer process started (PID: {process.pid}), output to {output_file}") + + # Store file handle so it can be closed later + process._output_fh = output_fh + + return process, None + + except Exception as e: + self.logger.error(f"Error starting TTW_Linux_Installer: {e}", exc_info=True) + return None, f"Error starting TTW_Linux_Installer: {e}" + + @staticmethod + def cleanup_ttw_process(process): + """Clean up after TTW installation process. + + Closes file handles and ensures process is terminated properly. + + Args: + process: subprocess.Popen object from start_ttw_installation() + """ + if process: + # Close output file handle if attached + if hasattr(process, '_output_fh'): + try: + process._output_fh.close() + except Exception: + pass + + # Terminate if still running + if process.poll() is None: + try: + process.terminate() + process.wait(timeout=5) + except Exception: + try: + process.kill() + except Exception: + pass + + def install_ttw_backend_with_output_stream(self, ttw_mpi_path: Path, ttw_output_path: Path, output_callback=None): + """Install TTW with streaming output for GUI (DEPRECATED - use start_ttw_installation instead). + + Args: + ttw_mpi_path: Path to TTW .mpi file + ttw_output_path: Target installation directory + output_callback: Optional callback function(line: str) for real-time output + + Returns: + (success: bool, message: str) + """ + self.logger.info("Starting Tale of Two Wastelands installation via TTW_Linux_Installer (with output stream)") + + # Validate parameters (same as install_ttw_backend) + if not ttw_mpi_path or not ttw_output_path: + return False, "Missing required parameters: ttw_mpi_path and ttw_output_path are required" + + ttw_mpi_path = Path(ttw_mpi_path) + ttw_output_path = Path(ttw_output_path) + + # Validate paths + if not ttw_mpi_path.exists(): + return False, f"TTW .mpi file not found: {ttw_mpi_path}" + + if not ttw_mpi_path.is_file(): + return False, f"TTW .mpi path is not a file: {ttw_mpi_path}" + + if ttw_mpi_path.suffix.lower() != '.mpi': + return False, f"TTW path does not have .mpi extension: {ttw_mpi_path}" + + if not ttw_output_path.exists(): + try: + ttw_output_path.mkdir(parents=True, exist_ok=True) + except Exception as e: + return False, f"Failed to create output directory: {e}" + + # Check installation + if not self.ttw_installer_installed: + if output_callback: + output_callback("TTW_Linux_Installer not found, installing...") + self.logger.info("TTW_Linux_Installer not found, attempting to install...") + success, message = self.install_ttw_installer() + if not success: + return False, f"TTW_Linux_Installer not installed and auto-install failed: {message}" + + if not self.ttw_installer_executable_path or not self.ttw_installer_executable_path.is_file(): + return False, "TTW_Linux_Installer executable not found" + + # Detect game paths + required_games = ['Fallout 3', 'Fallout New Vegas'] + detected_games = self.path_handler.find_vanilla_game_paths() + missing_games = [game for game in required_games if game not in detected_games] + if missing_games: + return False, f"Missing required games: {', '.join(missing_games)}. TTW requires both Fallout 3 and Fallout New Vegas." + + fallout3_path = detected_games.get('Fallout 3') + falloutnv_path = detected_games.get('Fallout New Vegas') + + if not fallout3_path or not falloutnv_path: + return False, "Could not detect Fallout 3 or Fallout New Vegas installation paths" + + # Construct command + cmd = [ + str(self.ttw_installer_executable_path), + "--fo3", str(fallout3_path), + "--fnv", str(falloutnv_path), + "--mpi", str(ttw_mpi_path), + "--output", str(ttw_output_path), + "--start" + ] + + self.logger.info(f"Executing TTW_Linux_Installer: {' '.join(cmd)}") + + try: + env = get_clean_subprocess_env() + process = subprocess.Popen( + cmd, + cwd=str(self.ttw_installer_dir), + env=env, + stdout=subprocess.PIPE, + stderr=subprocess.STDOUT, + text=True, + bufsize=1, + universal_newlines=True + ) + + # Stream output to both logger and callback + if process.stdout: + for line in process.stdout: + line = line.rstrip() + if line: + self.logger.info(f"TTW_Linux_Installer: {line}") + if output_callback: + output_callback(line) + + process.wait() + ret = process.returncode + + if ret == 0: + self.logger.info("TTW installation completed successfully.") + return True, "TTW installation completed successfully!" + else: + self.logger.error(f"TTW installation process returned non-zero exit code: {ret}") + return False, f"TTW installation failed with exit code {ret}" + + except Exception as e: + self.logger.error(f"Error executing TTW_Linux_Installer: {e}", exc_info=True) + return False, f"Error executing TTW_Linux_Installer: {e}" + + @staticmethod + def integrate_ttw_into_modlist(ttw_output_path: Path, modlist_install_dir: Path, ttw_version: str) -> bool: + """Integrate TTW output into a modlist's MO2 structure + + This method: + 1. Copies TTW output to the modlist's mods folder + 2. Updates modlist.txt for all profiles + 3. Updates plugins.txt with TTW ESMs in correct order + + Args: + ttw_output_path: Path to TTW output directory + modlist_install_dir: Path to modlist installation directory + ttw_version: TTW version string (e.g., "3.4") + + Returns: + bool: True if integration successful, False otherwise + """ + logging_handler = LoggingHandler() + logging_handler.rotate_log_for_logger('ttw-install', 'TTW_Install_workflow.log') + logger = logging_handler.setup_logger('ttw-install', 'TTW_Install_workflow.log') + + try: + import shutil + + # Validate paths + if not ttw_output_path.exists(): + logger.error(f"TTW output path does not exist: {ttw_output_path}") + return False + + mods_dir = modlist_install_dir / "mods" + profiles_dir = modlist_install_dir / "profiles" + + if not mods_dir.exists() or not profiles_dir.exists(): + logger.error(f"Invalid modlist directory structure: {modlist_install_dir}") + return False + + # Create mod folder name with version + mod_folder_name = f"[NoDelete] Tale of Two Wastelands {ttw_version}" if ttw_version else "[NoDelete] Tale of Two Wastelands" + target_mod_dir = mods_dir / mod_folder_name + + # Copy TTW output to mods directory + logger.info(f"Copying TTW output to {target_mod_dir}") + if target_mod_dir.exists(): + logger.info(f"Removing existing TTW mod at {target_mod_dir}") + shutil.rmtree(target_mod_dir) + + shutil.copytree(ttw_output_path, target_mod_dir) + logger.info("TTW output copied successfully") + + # TTW ESMs in correct load order + ttw_esms = [ + "Fallout3.esm", + "Anchorage.esm", + "ThePitt.esm", + "BrokenSteel.esm", + "PointLookout.esm", + "Zeta.esm", + "TaleOfTwoWastelands.esm", + "YUPTTW.esm" + ] + + # Process each profile + for profile_dir in profiles_dir.iterdir(): + if not profile_dir.is_dir(): + continue + + profile_name = profile_dir.name + logger.info(f"Processing profile: {profile_name}") + + # Update modlist.txt + modlist_file = profile_dir / "modlist.txt" + if modlist_file.exists(): + # Read existing modlist + with open(modlist_file, 'r', encoding='utf-8') as f: + lines = f.readlines() + + # Find the TTW placeholder separator and insert BEFORE it + separator_found = False + ttw_mod_line = f"+{mod_folder_name}\n" + new_lines = [] + + for line in lines: + # Skip existing TTW mod entries (but keep separators and other TTW-related mods) + # Match patterns: "+[NoDelete] Tale of Two Wastelands", "+[NoDelete] TTW", etc. + stripped = line.strip() + if stripped.startswith('+') and '[nodelete]' in stripped.lower(): + # Check if it's the main TTW mod (not other TTW-related mods like "TTW Quick Start") + if ('tale of two wastelands' in stripped.lower() and 'quick start' not in stripped.lower() and + 'loading wheel' not in stripped.lower()) or stripped.lower().startswith('+[nodelete] ttw '): + logger.info(f"Removing existing TTW mod entry: {stripped}") + continue + + # Insert TTW mod BEFORE the placeholder separator (MO2 order is bottom-up) + # Check BEFORE appending so TTW mod appears before separator in file + if "put tale of two wastelands mod here" in line.lower() and "_separator" in line.lower(): + new_lines.append(ttw_mod_line) + separator_found = True + logger.info(f"Inserted TTW mod before separator: {line.strip()}") + + new_lines.append(line) + + # If no separator found, append at the end + if not separator_found: + new_lines.append(ttw_mod_line) + logger.warning(f"No TTW separator found in {profile_name}, appended to end") + + # Write back + with open(modlist_file, 'w', encoding='utf-8') as f: + f.writelines(new_lines) + + logger.info(f"Updated modlist.txt for {profile_name}") + else: + logger.warning(f"modlist.txt not found for profile {profile_name}") + + # Update plugins.txt + plugins_file = profile_dir / "plugins.txt" + if plugins_file.exists(): + # Read existing plugins + with open(plugins_file, 'r', encoding='utf-8') as f: + lines = f.readlines() + + # Remove any existing TTW ESMs + ttw_esm_set = set(esm.lower() for esm in ttw_esms) + lines = [line for line in lines if line.strip().lower() not in ttw_esm_set] + + # Find CaravanPack.esm and insert TTW ESMs after it + insert_index = None + for i, line in enumerate(lines): + if line.strip().lower() == "caravanpack.esm": + insert_index = i + 1 + break + + if insert_index is not None: + # Insert TTW ESMs in correct order + for esm in reversed(ttw_esms): + lines.insert(insert_index, f"{esm}\n") + else: + logger.warning(f"CaravanPack.esm not found in {profile_name}, appending TTW ESMs to end") + for esm in ttw_esms: + lines.append(f"{esm}\n") + + # Write back + with open(plugins_file, 'w', encoding='utf-8') as f: + f.writelines(lines) + + logger.info(f"Updated plugins.txt for {profile_name}") + else: + logger.warning(f"plugins.txt not found for profile {profile_name}") + + logger.info("TTW integration completed successfully") + return True + + except Exception as e: + logger.error(f"Error integrating TTW into modlist: {e}", exc_info=True) + return False diff --git a/jackify/backend/handlers/wine_utils.py b/jackify/backend/handlers/wine_utils.py index 3cd883c..44ffde1 100644 --- a/jackify/backend/handlers/wine_utils.py +++ b/jackify/backend/handlers/wine_utils.py @@ -1016,8 +1016,8 @@ class WineUtils: seen_names.add(version['name']) if unique_versions: - logger.info(f"Found {len(unique_versions)} total Proton version(s)") - logger.info(f"Best available: {unique_versions[0]['name']} ({unique_versions[0]['type']})") + logger.debug(f"Found {len(unique_versions)} total Proton version(s)") + logger.debug(f"Best available: {unique_versions[0]['name']} ({unique_versions[0]['type']})") else: logger.warning("No Proton versions found") diff --git a/jackify/backend/handlers/winetricks_handler.py b/jackify/backend/handlers/winetricks_handler.py index d0500bd..2c35c89 100644 --- a/jackify/backend/handlers/winetricks_handler.py +++ b/jackify/backend/handlers/winetricks_handler.py @@ -137,6 +137,8 @@ class WinetricksHandler: from ..handlers.wine_utils import WineUtils config = ConfigHandler() + # Use Install Proton for component installation/texture processing + # get_proton_path() returns the Install Proton path user_proton_path = config.get_proton_path() # If user selected a specific Proton, try that first @@ -162,21 +164,27 @@ class WinetricksHandler: else: self.logger.warning(f"User-selected Proton no longer exists: {user_proton_path}") - # Fall back to auto-detection if user selection failed or is 'auto' + # Only auto-detect if user explicitly chose 'auto' if not wine_binary: - self.logger.info("Falling back to automatic Proton detection") - best_proton = WineUtils.select_best_proton() - if best_proton: - wine_binary = WineUtils.find_proton_binary(best_proton['name']) - self.logger.info(f"Auto-selected Proton: {best_proton['name']} at {best_proton['path']}") - else: - # Enhanced debugging for Proton detection failure - self.logger.error("Auto-detection failed - no Proton versions found") - available_versions = WineUtils.scan_all_proton_versions() - if available_versions: - self.logger.error(f"Available Proton versions: {[v['name'] for v in available_versions]}") + if user_proton_path == 'auto': + self.logger.info("Auto-detecting Proton (user selected 'auto')") + best_proton = WineUtils.select_best_proton() + if best_proton: + wine_binary = WineUtils.find_proton_binary(best_proton['name']) + self.logger.info(f"Auto-selected Proton: {best_proton['name']} at {best_proton['path']}") else: - self.logger.error("No Proton versions detected in standard Steam locations") + # Enhanced debugging for Proton detection failure + self.logger.error("Auto-detection failed - no Proton versions found") + available_versions = WineUtils.scan_all_proton_versions() + if available_versions: + self.logger.error(f"Available Proton versions: {[v['name'] for v in available_versions]}") + else: + self.logger.error("No Proton versions detected in standard Steam locations") + else: + # User selected a specific Proton but validation failed - this is an ERROR + self.logger.error(f"Cannot use configured Proton: {user_proton_path}") + self.logger.error("Please check Settings and ensure the Proton version still exists") + return False if not wine_binary: self.logger.error("Cannot run winetricks: No compatible Proton version found") @@ -269,27 +277,23 @@ class WinetricksHandler: # Check user preference for component installation method from ..handlers.config_handler import ConfigHandler config_handler = ConfigHandler() - use_winetricks = config_handler.get('use_winetricks_for_components', True) + + # Get component installation method with migration + method = config_handler.get('component_installation_method', 'winetricks') - # Legacy .NET Framework versions that are problematic in Wine/Proton - # DISABLED in v0.1.6.2: Universal registry fixes replace dotnet4.x installation - # legacy_dotnet_versions = ['dotnet40', 'dotnet472', 'dotnet48'] - legacy_dotnet_versions = [] # ALL dotnet4.x versions disabled - universal registry fixes handle compatibility + # Migrate bundled_protontricks to system_protontricks (no longer supported) + if method == 'bundled_protontricks': + self.logger.warning("Bundled protontricks no longer supported, migrating to system_protontricks") + method = 'system_protontricks' + config_handler.set('component_installation_method', 'system_protontricks') - # Check if any legacy .NET Framework versions are present - has_legacy_dotnet = any(comp in components_to_install for comp in legacy_dotnet_versions) - - # Choose installation method based on user preference and components - # HYBRID APPROACH MOSTLY DISABLED: dotnet40/dotnet472 replaced with universal registry fixes - if has_legacy_dotnet: - legacy_found = [comp for comp in legacy_dotnet_versions if comp in components_to_install] - self.logger.info(f"Using hybrid approach: protontricks for legacy .NET versions {legacy_found} (reliable), {'winetricks' if use_winetricks else 'protontricks'} for other components") - return self._install_components_hybrid_approach(components_to_install, wineprefix, game_var, use_winetricks) - elif not use_winetricks: - self.logger.info("Using legacy approach: protontricks for all components") + # Choose installation method based on user preference + if method == 'system_protontricks': + self.logger.info("Using system protontricks for all components") return self._install_components_protontricks_only(components_to_install, wineprefix, game_var) + # else: method == 'winetricks' (default behavior continues below) - # For non-dotnet40 installations, install all components together (faster) + # Install all components together with winetricks (faster) max_attempts = 3 winetricks_failed = False last_error_details = None @@ -361,23 +365,6 @@ class WinetricksHandler: self.logger.error(f"Component verification failed (Attempt {attempt}/{max_attempts})") # Continue to retry else: - # Special handling for dotnet40 verification issue (mimics protontricks behavior) - if "dotnet40" in components_to_install and "ngen.exe not found" in result.stderr: - self.logger.warning("dotnet40 verification warning (common in Steam Proton prefixes)") - self.logger.info("Checking if dotnet40 was actually installed...") - - # Check if dotnet40 appears in winetricks.log (indicates successful installation) - log_path = os.path.join(wineprefix, 'winetricks.log') - if os.path.exists(log_path): - try: - with open(log_path, 'r') as f: - log_content = f.read() - if 'dotnet40' in log_content: - self.logger.info("dotnet40 found in winetricks.log - installation succeeded despite verification warning") - return True - except Exception as e: - self.logger.warning(f"Could not read winetricks.log: {e}") - # Store detailed error information for fallback diagnostics last_error_details = { 'returncode': result.returncode, @@ -463,7 +450,8 @@ class WinetricksHandler: # Check if protontricks is available for fallback using centralized handler try: from .protontricks_handler import ProtontricksHandler - protontricks_handler = ProtontricksHandler() + steamdeck = os.path.exists('/home/deck') + protontricks_handler = ProtontricksHandler(steamdeck) protontricks_available = protontricks_handler.is_available() if protontricks_available: @@ -493,103 +481,24 @@ class WinetricksHandler: def _reorder_components_for_installation(self, components: list) -> list: """ - Reorder components for proper installation sequence. - Critical: dotnet40 must be installed before dotnet6/dotnet7 to avoid conflicts. + Reorder components for proper installation sequence if needed. + Currently returns components in original order. """ - # Simple reordering: dotnet40 first, then everything else - reordered = [] - - # Add dotnet40 first if it exists - if "dotnet40" in components: - reordered.append("dotnet40") - - # Add all other components in original order - for component in components: - if component != "dotnet40": - reordered.append(component) - - if reordered != components: - self.logger.info(f"Reordered for dotnet40 compatibility: {reordered}") - - return reordered - - def _prepare_prefix_for_dotnet(self, wineprefix: str, wine_binary: str) -> bool: - """ - Prepare the Wine prefix for .NET installation by mimicking protontricks preprocessing. - This removes mono components and specific symlinks that interfere with .NET installation. - """ - try: - env = os.environ.copy() - env['WINEDEBUG'] = '-all' - env['WINEPREFIX'] = wineprefix - - # Step 1: Remove mono components (mimics protontricks behavior) - self.logger.info("Preparing prefix for .NET installation: removing mono") - mono_result = subprocess.run([ - self.winetricks_path, - '-q', - 'remove_mono' - ], env=env, capture_output=True, text=True, timeout=300) - - if mono_result.returncode != 0: - self.logger.warning(f"Mono removal warning (non-critical): {mono_result.stderr}") - - # Step 2: Set Windows version to XP (protontricks uses winxp for dotnet40) - self.logger.info("Setting Windows version to XP for .NET compatibility") - winxp_result = subprocess.run([ - self.winetricks_path, - '-q', - 'winxp' - ], env=env, capture_output=True, text=True, timeout=300) - - if winxp_result.returncode != 0: - self.logger.warning(f"Windows XP setting warning: {winxp_result.stderr}") - - # Step 3: Remove mscoree.dll symlinks (critical for .NET installation) - self.logger.info("Removing problematic mscoree.dll symlinks") - dosdevices_path = os.path.join(wineprefix, 'dosdevices', 'c:') - mscoree_paths = [ - os.path.join(dosdevices_path, 'windows', 'syswow64', 'mscoree.dll'), - os.path.join(dosdevices_path, 'windows', 'system32', 'mscoree.dll') - ] - - for dll_path in mscoree_paths: - if os.path.exists(dll_path) or os.path.islink(dll_path): - try: - os.remove(dll_path) - self.logger.debug(f"Removed symlink: {dll_path}") - except Exception as e: - self.logger.warning(f"Could not remove {dll_path}: {e}") - - self.logger.info("Prefix preparation complete for .NET installation") - return True - - except Exception as e: - self.logger.error(f"Error preparing prefix for .NET: {e}") - return False + return components def _install_components_separately(self, components: list, wineprefix: str, wine_binary: str, base_env: dict) -> bool: """ - Install components separately like protontricks does. - This is necessary when dotnet40 is present to avoid component conflicts. + Install components separately for maximum compatibility. """ - self.logger.info(f"Installing {len(components)} components separately (protontricks style)") + self.logger.info(f"Installing {len(components)} components separately") for i, component in enumerate(components, 1): self.logger.info(f"Installing component {i}/{len(components)}: {component}") # Prepare environment for this component env = base_env.copy() - - # Special preprocessing for dotnet40 only - if component == "dotnet40": - self.logger.info("Applying dotnet40 preprocessing") - if not self._prepare_prefix_for_dotnet(wineprefix, wine_binary): - self.logger.error("Failed to prepare prefix for dotnet40") - return False - else: - # For non-dotnet40 components, install in standard mode (Windows 10 will be set after all components) - self.logger.debug(f"Installing {component} in standard mode") + env['WINEPREFIX'] = wineprefix + env['WINE'] = wine_binary # Install this component max_attempts = 3 @@ -602,9 +511,6 @@ class WinetricksHandler: try: cmd = [self.winetricks_path, '--unattended', component] - env['WINEPREFIX'] = wineprefix - env['WINE'] = wine_binary - self.logger.debug(f"Running: {' '.join(cmd)}") result = subprocess.run( @@ -620,22 +526,6 @@ class WinetricksHandler: component_success = True break else: - # Special handling for dotnet40 verification issue - if component == "dotnet40" and "ngen.exe not found" in result.stderr: - self.logger.warning("dotnet40 verification warning (expected in Steam Proton)") - - # Check winetricks.log for actual success - log_path = os.path.join(wineprefix, 'winetricks.log') - if os.path.exists(log_path): - try: - with open(log_path, 'r') as f: - if 'dotnet40' in f.read(): - self.logger.info("dotnet40 confirmed in winetricks.log") - component_success = True - break - except Exception as e: - self.logger.warning(f"Could not read winetricks.log: {e}") - self.logger.error(f"{component} failed (attempt {attempt}): {result.stderr.strip()}") self.logger.debug(f"Full stdout for {component}: {result.stdout.strip()}") @@ -647,121 +537,10 @@ class WinetricksHandler: return False self.logger.info("All components installed successfully using separate sessions") - # Set Windows 10 mode after all component installation (matches legacy script timing) + # Set Windows 10 mode after all component installation self._set_windows_10_mode(wineprefix, env.get('WINE', '')) return True - def _install_components_hybrid_approach(self, components: list, wineprefix: str, game_var: str, use_winetricks: bool = True) -> bool: - """ - Hybrid approach: Install legacy .NET Framework versions with protontricks (reliable), - then install remaining components with winetricks OR protontricks based on user preference. - - Args: - components: List of all components to install - wineprefix: Wine prefix path - game_var: Game variable for AppID detection - use_winetricks: Whether to use winetricks for non-legacy components - - Returns: - bool: True if all installations succeeded, False otherwise - """ - self.logger.info("Starting hybrid installation approach") - - # Legacy .NET Framework versions that need protontricks - legacy_dotnet_versions = ['dotnet40', 'dotnet472', 'dotnet48'] - - # Separate legacy .NET (protontricks) from other components (winetricks) - protontricks_components = [comp for comp in components if comp in legacy_dotnet_versions] - other_components = [comp for comp in components if comp not in legacy_dotnet_versions] - - self.logger.info(f"Protontricks components: {protontricks_components}") - self.logger.info(f"Other components: {other_components}") - - # Step 1: Install legacy .NET Framework versions with protontricks if present - if protontricks_components: - self.logger.info(f"Installing legacy .NET versions {protontricks_components} using protontricks...") - if not self._install_legacy_dotnet_with_protontricks(protontricks_components, wineprefix, game_var): - self.logger.error(f"Failed to install {protontricks_components} with protontricks") - return False - self.logger.info(f"{protontricks_components} installation completed successfully with protontricks") - - # Step 2: Install remaining components if any - if other_components: - if use_winetricks: - self.logger.info(f"Installing remaining components with winetricks: {other_components}") - # Use existing winetricks logic for other components - env = self._prepare_winetricks_environment(wineprefix) - if not env: - return False - return self._install_components_with_winetricks(other_components, wineprefix, env) - else: - self.logger.info(f"Installing remaining components with protontricks: {other_components}") - return self._install_components_protontricks_only(other_components, wineprefix, game_var) - - self.logger.info("Hybrid component installation completed successfully") - # Set Windows 10 mode after all component installation (matches legacy script timing) - wine_binary = self._get_wine_binary_for_prefix(wineprefix) - self._set_windows_10_mode(wineprefix, wine_binary) - return True - - def _install_legacy_dotnet_with_protontricks(self, legacy_components: list, wineprefix: str, game_var: str) -> bool: - """ - Install legacy .NET Framework versions using protontricks (known to work more reliably). - - Args: - legacy_components: List of legacy .NET components to install (dotnet40, dotnet472, dotnet48) - wineprefix: Wine prefix path - game_var: Game variable for AppID detection - - Returns: - bool: True if installation succeeded, False otherwise - """ - try: - # Extract AppID from wineprefix path (e.g., /path/to/compatdata/123456789/pfx -> 123456789) - appid = None - if 'compatdata' in wineprefix: - # Standard Steam compatdata structure - path_parts = Path(wineprefix).parts - for i, part in enumerate(path_parts): - if part == 'compatdata' and i + 1 < len(path_parts): - potential_appid = path_parts[i + 1] - if potential_appid.isdigit(): - appid = potential_appid - break - - if not appid: - self.logger.error(f"Could not extract AppID from wineprefix path: {wineprefix}") - return False - - self.logger.info(f"Using AppID {appid} for protontricks dotnet40 installation") - - # Import and use protontricks handler - from .protontricks_handler import ProtontricksHandler - - # Determine if we're on Steam Deck (for protontricks handler) - steamdeck = os.path.exists('/home/deck') - - protontricks_handler = ProtontricksHandler(steamdeck, logger=self.logger) - - # Detect protontricks availability - if not protontricks_handler.detect_protontricks(): - self.logger.error(f"Protontricks not available for legacy .NET installation: {legacy_components}") - return False - - # Install legacy .NET components using protontricks - success = protontricks_handler.install_wine_components(appid, game_var, legacy_components) - - if success: - self.logger.info(f"Legacy .NET components {legacy_components} installed successfully with protontricks") - return True - else: - self.logger.error(f"Legacy .NET components {legacy_components} installation failed with protontricks") - return False - - except Exception as e: - self.logger.error(f"Error installing legacy .NET components {legacy_components} with protontricks: {e}", exc_info=True) - return False - def _prepare_winetricks_environment(self, wineprefix: str) -> Optional[dict]: """ Prepare the environment for winetricks installation. @@ -799,9 +578,15 @@ class WinetricksHandler: wine_binary = ge_proton_wine if not wine_binary: - best_proton = WineUtils.select_best_proton() - if best_proton: - wine_binary = WineUtils.find_proton_binary(best_proton['name']) + if user_proton_path == 'auto': + self.logger.info("Auto-detecting Proton (user selected 'auto')") + best_proton = WineUtils.select_best_proton() + if best_proton: + wine_binary = WineUtils.find_proton_binary(best_proton['name']) + else: + # User selected a specific Proton but validation failed + self.logger.error(f"Cannot prepare winetricks environment: configured Proton not found: {user_proton_path}") + return None if not wine_binary or not (os.path.exists(wine_binary) and os.access(wine_binary, os.X_OK)): self.logger.error(f"Cannot prepare winetricks environment: No compatible Proton found") @@ -915,11 +700,16 @@ class WinetricksHandler: def _install_components_protontricks_only(self, components: list, wineprefix: str, game_var: str) -> bool: """ - Legacy approach: Install all components using protontricks only. + Install all components using protontricks only. This matches the behavior of the original bash script. + + Args: + components: List of components to install + wineprefix: Path to wine prefix + game_var: Game variable name """ try: - self.logger.info(f"Installing all components with protontricks (legacy method): {components}") + self.logger.info(f"Installing all components with system protontricks: {components}") # Import protontricks handler from ..handlers.protontricks_handler import ProtontricksHandler @@ -1013,11 +803,17 @@ class WinetricksHandler: elif os.path.exists(ge_proton_wine): wine_binary = ge_proton_wine - # Fall back to auto-detection if user selection failed or is 'auto' + # Only auto-detect if user explicitly chose 'auto' if not wine_binary: - best_proton = WineUtils.select_best_proton() - if best_proton: - wine_binary = WineUtils.find_proton_binary(best_proton['name']) + if user_proton_path == 'auto': + self.logger.info("Auto-detecting Proton (user selected 'auto')") + best_proton = WineUtils.select_best_proton() + if best_proton: + wine_binary = WineUtils.find_proton_binary(best_proton['name']) + else: + # User selected a specific Proton but validation failed + self.logger.error(f"Configured Proton not found: {user_proton_path}") + return "" return wine_binary if wine_binary else "" except Exception as e: diff --git a/jackify/backend/models/configuration.py b/jackify/backend/models/configuration.py index fcacb0b..405f10c 100644 --- a/jackify/backend/models/configuration.py +++ b/jackify/backend/models/configuration.py @@ -68,7 +68,9 @@ class SystemInfo: steam_root: Optional[Path] = None steam_user_id: Optional[str] = None proton_version: Optional[str] = None - + is_flatpak_steam: bool = False + is_native_steam: bool = False + def to_dict(self) -> Dict[str, Any]: """Convert to dictionary.""" return { @@ -76,4 +78,6 @@ class SystemInfo: 'steam_root': str(self.steam_root) if self.steam_root else None, 'steam_user_id': self.steam_user_id, 'proton_version': self.proton_version, + 'is_flatpak_steam': self.is_flatpak_steam, + 'is_native_steam': self.is_native_steam, } \ No newline at end of file diff --git a/jackify/backend/models/modlist_metadata.py b/jackify/backend/models/modlist_metadata.py new file mode 100644 index 0000000..5204782 --- /dev/null +++ b/jackify/backend/models/modlist_metadata.py @@ -0,0 +1,216 @@ +""" +Data models for modlist metadata from jackify-engine JSON output. + +These models match the JSON schema documented in MODLIST_METADATA_IMPLEMENTATION.md +""" +from dataclasses import dataclass, field +from typing import List, Optional +from datetime import datetime + + +@dataclass +class ModlistImages: + """Image URLs for modlist (small thumbnail and large banner)""" + small: str + large: str + + +@dataclass +class ModlistLinks: + """External links associated with the modlist""" + image: Optional[str] = None + readme: Optional[str] = None + download: Optional[str] = None + discordURL: Optional[str] = None + websiteURL: Optional[str] = None + + +@dataclass +class ModlistSizes: + """Size information for modlist downloads and installation""" + downloadSize: int + downloadSizeFormatted: str + installSize: int + installSizeFormatted: str + totalSize: int + totalSizeFormatted: str + numberOfArchives: int + numberOfInstalledFiles: int + + +@dataclass +class ModlistValidation: + """Validation status from Wabbajack build server (optional)""" + failed: int = 0 + passed: int = 0 + updating: int = 0 + mirrored: int = 0 + modListIsMissing: bool = False + hasFailures: bool = False + + +@dataclass +class ModlistMetadata: + """Complete modlist metadata from jackify-engine""" + # Basic information + title: str + description: str + author: str + maintainers: List[str] + namespacedName: str + repositoryName: str + machineURL: str + + # Game information + game: str + gameHumanFriendly: str + + # Status flags + official: bool + nsfw: bool + utilityList: bool + forceDown: bool + imageContainsTitle: bool + + # Version information + version: Optional[str] = None + displayVersionOnlyInInstallerView: bool = False + + # Dates + dateCreated: Optional[str] = None # ISO8601 format + dateUpdated: Optional[str] = None # ISO8601 format + + # Categorization + tags: List[str] = field(default_factory=list) + + # Nested objects + links: Optional[ModlistLinks] = None + sizes: Optional[ModlistSizes] = None + images: Optional[ModlistImages] = None + + # Optional data (only if flags specified) + validation: Optional[ModlistValidation] = None + mods: List[str] = field(default_factory=list) + + def is_available(self) -> bool: + """Check if modlist is available for installation""" + if self.forceDown: + return False + if self.validation and self.validation.hasFailures: + return False + return True + + def is_broken(self) -> bool: + """Check if modlist has validation failures""" + return self.validation.hasFailures if self.validation else False + + def get_date_updated_datetime(self) -> Optional[datetime]: + """Parse dateUpdated string to datetime object""" + if not self.dateUpdated: + return None + try: + return datetime.fromisoformat(self.dateUpdated.replace('Z', '+00:00')) + except (ValueError, AttributeError): + return None + + def get_date_created_datetime(self) -> Optional[datetime]: + """Parse dateCreated string to datetime object""" + if not self.dateCreated: + return None + try: + return datetime.fromisoformat(self.dateCreated.replace('Z', '+00:00')) + except (ValueError, AttributeError): + return None + + +@dataclass +class ModlistMetadataResponse: + """Root response object from jackify-engine list-modlists --json""" + metadataVersion: str + timestamp: str # ISO8601 format + count: int + modlists: List[ModlistMetadata] + + def get_timestamp_datetime(self) -> Optional[datetime]: + """Parse timestamp string to datetime object""" + try: + return datetime.fromisoformat(self.timestamp.replace('Z', '+00:00')) + except (ValueError, AttributeError): + return None + + def filter_by_game(self, game: str) -> List[ModlistMetadata]: + """Filter modlists by game name""" + return [m for m in self.modlists if m.game.lower() == game.lower()] + + def filter_available_only(self) -> List[ModlistMetadata]: + """Filter to only available (non-broken, non-forced-down) modlists""" + return [m for m in self.modlists if m.is_available()] + + def filter_by_tag(self, tag: str) -> List[ModlistMetadata]: + """Filter modlists by tag""" + return [m for m in self.modlists if tag.lower() in [t.lower() for t in m.tags]] + + def filter_official_only(self) -> List[ModlistMetadata]: + """Filter to only official modlists""" + return [m for m in self.modlists if m.official] + + def search(self, query: str) -> List[ModlistMetadata]: + """Search modlists by title, description, or author""" + query_lower = query.lower() + return [ + m for m in self.modlists + if query_lower in m.title.lower() + or query_lower in m.description.lower() + or query_lower in m.author.lower() + ] + + +def parse_modlist_metadata_from_dict(data: dict) -> ModlistMetadata: + """Parse a modlist metadata dictionary into ModlistMetadata object""" + # Parse nested objects + images = ModlistImages(**data['images']) if 'images' in data and data['images'] else None + links = ModlistLinks(**data['links']) if 'links' in data and data['links'] else None + sizes = ModlistSizes(**data['sizes']) if 'sizes' in data and data['sizes'] else None + validation = ModlistValidation(**data['validation']) if 'validation' in data and data['validation'] else None + + # Create ModlistMetadata with nested objects + metadata = ModlistMetadata( + title=data['title'], + description=data['description'], + author=data['author'], + maintainers=data.get('maintainers', []), + namespacedName=data['namespacedName'], + repositoryName=data['repositoryName'], + machineURL=data['machineURL'], + game=data['game'], + gameHumanFriendly=data['gameHumanFriendly'], + official=data['official'], + nsfw=data['nsfw'], + utilityList=data['utilityList'], + forceDown=data['forceDown'], + imageContainsTitle=data['imageContainsTitle'], + version=data.get('version'), + displayVersionOnlyInInstallerView=data.get('displayVersionOnlyInInstallerView', False), + dateCreated=data.get('dateCreated'), + dateUpdated=data.get('dateUpdated'), + tags=data.get('tags', []), + links=links, + sizes=sizes, + images=images, + validation=validation, + mods=data.get('mods', []) + ) + + return metadata + + +def parse_modlist_metadata_response(data: dict) -> ModlistMetadataResponse: + """Parse the full JSON response from jackify-engine into ModlistMetadataResponse""" + modlists = [parse_modlist_metadata_from_dict(m) for m in data.get('modlists', [])] + + return ModlistMetadataResponse( + metadataVersion=data['metadataVersion'], + timestamp=data['timestamp'], + count=data['count'], + modlists=modlists + ) diff --git a/jackify/backend/services/automated_prefix_service.py b/jackify/backend/services/automated_prefix_service.py index 13c79de..d2b0071 100644 --- a/jackify/backend/services/automated_prefix_service.py +++ b/jackify/backend/services/automated_prefix_service.py @@ -29,9 +29,10 @@ class AutomatedPrefixService: and direct Proton wrapper integration. """ - def __init__(self): + def __init__(self, system_info=None): self.scripts_dir = Path.home() / "Jackify/scripts" self.scripts_dir.mkdir(parents=True, exist_ok=True) + self.system_info = system_info # Use shared timing for consistency across services def _get_progress_timestamp(self): @@ -546,13 +547,15 @@ exit""" def restart_steam(self) -> bool: """ Restart Steam using the robust service method. - + Returns: True if successful, False otherwise """ try: from .steam_restart_service import robust_steam_restart - return robust_steam_restart(progress_callback=None, timeout=60) + # Use system_info if available (backward compatibility) + system_info = getattr(self, 'system_info', None) + return robust_steam_restart(progress_callback=None, timeout=60, system_info=system_info) except Exception as e: logger.error(f"Error restarting Steam: {e}") return False @@ -929,22 +932,35 @@ echo Prefix creation complete. # Get or create CompatToolMapping if 'CompatToolMapping' not in config_data['Software']['Valve']['Steam']: config_data['Software']['Valve']['Steam']['CompatToolMapping'] = {} - - # Set the Proton version for this AppID - config_data['Software']['Valve']['Steam']['CompatToolMapping'][str(appid)] = proton_version + + # Set the Proton version for this AppID using Steam's expected format + # Steam requires a dict with 'name', 'config', and 'priority' keys + config_data['Software']['Valve']['Steam']['CompatToolMapping'][str(appid)] = { + 'name': proton_version, + 'config': '', + 'priority': '250' + } # Write back to file (text format) with open(config_path, 'w') as f: vdf.dump(config_data, f) - + + # Ensure file is fully written to disk before Steam restart + import os + os.fsync(f.fileno()) if hasattr(f, 'fileno') else None + logger.info(f"Set Proton version {proton_version} for AppID {appid}") debug_print(f"[DEBUG] Set Proton version {proton_version} for AppID {appid} in config.vdf") - + + # Small delay to ensure filesystem write completes + import time + time.sleep(0.5) + # Verify it was set correctly with open(config_path, 'r') as f: verify_data = vdf.load(f) - actual_value = verify_data.get('Software', {}).get('Valve', {}).get('Steam', {}).get('CompatToolMapping', {}).get(str(appid)) - debug_print(f"[DEBUG] Verification: AppID {appid} -> {actual_value}") + compat_mapping = verify_data.get('Software', {}).get('Valve', {}).get('Steam', {}).get('CompatToolMapping', {}).get(str(appid)) + debug_print(f"[DEBUG] Verification: AppID {appid} -> {compat_mapping}") return True @@ -1045,7 +1061,18 @@ echo Prefix creation complete. env = os.environ.copy() env['STEAM_COMPAT_DATA_PATH'] = str(prefix_path) env['STEAM_COMPAT_APP_ID'] = str(positive_appid) # Use positive AppID for environment - env['STEAM_COMPAT_CLIENT_INSTALL_PATH'] = str(Path.home() / ".local/share/Steam") + + # Determine correct Steam root based on installation type + from ..handlers.path_handler import PathHandler + path_handler = PathHandler() + steam_library = path_handler.find_steam_library() + if steam_library and steam_library.name == "common": + # Extract Steam root from library path: .../Steam/steamapps/common -> .../Steam + steam_root = steam_library.parent.parent + env['STEAM_COMPAT_CLIENT_INSTALL_PATH'] = str(steam_root) + else: + # Fallback to legacy path if detection fails + env['STEAM_COMPAT_CLIENT_INSTALL_PATH'] = str(Path.home() / ".local/share/Steam") # Build the command cmd = [ @@ -1109,7 +1136,10 @@ echo Prefix creation complete. def _get_compatdata_path_for_appid(self, appid: int) -> Optional[Path]: """ - Get the compatdata path for a given AppID using existing Jackify functions. + Get the compatdata path for a given AppID. + + First tries to find existing compatdata, then constructs path from libraryfolders.vdf + for creating new prefixes. Args: appid: The AppID to get the path for @@ -1117,22 +1147,32 @@ echo Prefix creation complete. Returns: Path to the compatdata directory, or None if not found """ - # Use existing Jackify path detection from ..handlers.path_handler import PathHandler + # First, try to find existing compatdata compatdata_path = PathHandler.find_compat_data(str(appid)) if compatdata_path: return compatdata_path - # Fallback: construct the path manually - possible_bases = [ + # Prefix doesn't exist yet - determine where to create it from libraryfolders.vdf + library_paths = PathHandler.get_all_steam_library_paths() + if library_paths: + # Use the first library (typically the default library) + # Construct compatdata path: library_path/steamapps/compatdata/appid + first_library = library_paths[0] + compatdata_base = first_library / "steamapps" / "compatdata" + return compatdata_base / str(appid) + + # Only fallback if VDF parsing completely fails + logger.warning("Could not get library paths from libraryfolders.vdf, using fallback locations") + fallback_bases = [ + Path.home() / ".var/app/com.valvesoftware.Steam/data/Steam/steamapps/compatdata", + Path.home() / ".var/app/com.valvesoftware.Steam/.local/share/Steam/steamapps/compatdata", Path.home() / ".steam/steam/steamapps/compatdata", Path.home() / ".local/share/Steam/steamapps/compatdata", - Path.home() / ".var/app/com.valvesoftware.Steam/home/.steam/steam/steamapps/compatdata", - Path.home() / ".var/app/com.valvesoftware.Steam/home/.local/share/Steam/steamapps/compatdata", ] - for base_path in possible_bases: + for base_path in fallback_bases: if base_path.is_dir(): return base_path / str(appid) @@ -2666,9 +2706,40 @@ echo Prefix creation complete. True if successful, False otherwise """ try: - steam_root = Path.home() / ".steam/steam" - compatdata_dir = steam_root / "steamapps/compatdata" - proton_common_dir = steam_root / "steamapps/common" + # Determine Steam locations based on installation type + from ..handlers.path_handler import PathHandler + path_handler = PathHandler() + all_libraries = path_handler.get_all_steam_library_paths() + + # Check if we have Flatpak Steam by looking for .var/app/com.valvesoftware.Steam in library paths + is_flatpak_steam = any('.var/app/com.valvesoftware.Steam' in str(lib) for lib in all_libraries) + + if is_flatpak_steam and all_libraries: + # Flatpak Steam: Use the actual library root from libraryfolders.vdf + # Compatdata should be in the library root, not the client root + flatpak_library_root = all_libraries[0] # Use first library (typically the default) + flatpak_client_root = flatpak_library_root.parent.parent / ".steam/steam" + + if not flatpak_library_root.is_dir(): + logger.error( + f"Flatpak Steam library root does not exist: {flatpak_library_root}" + ) + return False + + steam_root = flatpak_client_root if flatpak_client_root.is_dir() else flatpak_library_root + # CRITICAL: compatdata must be in the library root, not client root + compatdata_dir = flatpak_library_root / "steamapps/compatdata" + proton_common_dir = flatpak_library_root / "steamapps/common" + else: + # Native Steam (or unknown): fall back to legacy ~/.steam/steam layout + steam_root = Path.home() / ".steam/steam" + compatdata_dir = steam_root / "steamapps/compatdata" + proton_common_dir = steam_root / "steamapps/common" + + # Ensure compatdata root exists and is a directory we actually want to use + if not compatdata_dir.is_dir(): + logger.error(f"Compatdata root does not exist: {compatdata_dir}. Aborting prefix creation.") + return False # Find a Proton wrapper to use proton_path = self._find_proton_binary(proton_common_dir) @@ -2686,9 +2757,9 @@ echo Prefix creation complete. env['WINEDEBUG'] = '-all' env['WINEDLLOVERRIDES'] = 'msdia80.dll=n;conhost.exe=d;cmd.exe=d' - # Create the compatdata directory + # Create the compatdata directory for this AppID (but never the whole tree) compat_dir = compatdata_dir / str(abs(appid)) - compat_dir.mkdir(parents=True, exist_ok=True) + compat_dir.mkdir(exist_ok=True) logger.info(f"Creating Proton prefix for AppID {appid}") logger.info(f"STEAM_COMPAT_CLIENT_INSTALL_PATH={env['STEAM_COMPAT_CLIENT_INSTALL_PATH']}") diff --git a/jackify/backend/services/modlist_gallery_service.py b/jackify/backend/services/modlist_gallery_service.py new file mode 100644 index 0000000..8e5336f --- /dev/null +++ b/jackify/backend/services/modlist_gallery_service.py @@ -0,0 +1,474 @@ +""" +Service for fetching and managing modlist metadata for the gallery view. + +Handles jackify-engine integration, caching, and image management. +""" +import json +import subprocess +import time +import threading +from pathlib import Path +from typing import Optional, List, Dict +from datetime import datetime, timedelta +import urllib.request + +from jackify.backend.models.modlist_metadata import ( + ModlistMetadataResponse, + ModlistMetadata, + parse_modlist_metadata_response +) +from jackify.backend.core.modlist_operations import get_jackify_engine_path +from jackify.backend.handlers.config_handler import ConfigHandler +from jackify.shared.paths import get_jackify_data_dir + + +class ModlistGalleryService: + """Service for fetching and caching modlist metadata from jackify-engine""" + + CACHE_VALIDITY_DAYS = 7 # Refresh cache after 7 days + # CRITICAL: Thread lock to prevent concurrent engine calls that could cause recursive spawning + _engine_call_lock = threading.Lock() + + def __init__(self): + """Initialize the gallery service""" + self.config_handler = ConfigHandler() + # Cache directories in Jackify Data Directory + jackify_data_dir = get_jackify_data_dir() + self.CACHE_DIR = jackify_data_dir / "modlist-cache" / "metadata" + self.IMAGE_CACHE_DIR = jackify_data_dir / "modlist-cache" / "images" + self.METADATA_CACHE_FILE = self.CACHE_DIR / "modlist_metadata.json" + self._ensure_cache_dirs() + # Tag metadata caches (avoid refetching per render) + self._tag_mappings_cache: Optional[Dict[str, str]] = None + self._tag_mapping_lookup: Optional[Dict[str, str]] = None + self._allowed_tags_cache: Optional[set] = None + self._allowed_tags_lookup: Optional[Dict[str, str]] = None + + def _ensure_cache_dirs(self): + """Create cache directories if they don't exist""" + self.CACHE_DIR.mkdir(parents=True, exist_ok=True) + self.IMAGE_CACHE_DIR.mkdir(parents=True, exist_ok=True) + + def fetch_modlist_metadata( + self, + include_validation: bool = True, + include_search_index: bool = False, + sort_by: str = "title", + force_refresh: bool = False + ) -> Optional[ModlistMetadataResponse]: + """ + Fetch modlist metadata from jackify-engine. + + Args: + include_validation: Include validation status (slower) + include_search_index: Include mod search index (slower) + sort_by: Sort order (title, size, date) + force_refresh: Force refresh even if cache is valid + + Returns: + ModlistMetadataResponse or None if fetch fails + """ + # Check cache first unless force refresh + # If include_search_index is True, check if cache has mods before using it + if not force_refresh: + cached = self._load_from_cache() + if cached and self._is_cache_valid(): + # If we need search index, check if cached data has mods + if include_search_index: + # Check if at least one modlist has mods (indicates cache was built with search index) + has_mods = any(hasattr(m, 'mods') and m.mods for m in cached.modlists) + if has_mods: + return cached # Cache has mods, use it + # Cache doesn't have mods, need to fetch fresh + else: + return cached # Don't need search index, use cache + + # Fetch fresh data from jackify-engine + try: + metadata = self._fetch_from_engine( + include_validation=include_validation, + include_search_index=include_search_index, + sort_by=sort_by + ) + + if metadata: + self._save_to_cache(metadata) + + return metadata + + except Exception as e: + print(f"Error fetching modlist metadata: {e}") + # Fall back to cache if available + return self._load_from_cache() + + def _fetch_from_engine( + self, + include_validation: bool, + include_search_index: bool, + sort_by: str + ) -> Optional[ModlistMetadataResponse]: + """Call jackify-engine to fetch modlist metadata""" + # CRITICAL: Use thread lock to prevent concurrent engine calls + # Multiple simultaneous calls could cause recursive spawning issues + with self._engine_call_lock: + # CRITICAL: Get engine path BEFORE cleaning environment + # get_jackify_engine_path() may need APPDIR to locate the engine + engine_path = get_jackify_engine_path() + if not engine_path: + raise FileNotFoundError("jackify-engine not found") + + # Build command + cmd = [str(engine_path), "list-modlists", "--json", "--sort-by", sort_by] + + if include_validation: + cmd.append("--include-validation-status") + + if include_search_index: + cmd.append("--include-search-index") + + # Execute command + # CRITICAL: Use centralized clean environment to prevent AppImage recursive spawning + # This must happen AFTER engine path resolution + from jackify.backend.handlers.subprocess_utils import get_clean_subprocess_env + clean_env = get_clean_subprocess_env() + + result = subprocess.run( + cmd, + capture_output=True, + text=True, + timeout=300, # 5 minute timeout for large data + env=clean_env + ) + + if result.returncode != 0: + raise RuntimeError(f"jackify-engine failed: {result.stderr}") + + # Parse JSON response - skip progress messages and extract JSON + # jackify-engine prints progress to stdout before the JSON + stdout = result.stdout.strip() + + # Find the start of JSON (first '{' on its own line) + lines = stdout.split('\n') + json_start = 0 + for i, line in enumerate(lines): + if line.strip().startswith('{'): + json_start = i + break + + json_text = '\n'.join(lines[json_start:]) + data = json.loads(json_text) + return parse_modlist_metadata_response(data) + + def _load_from_cache(self) -> Optional[ModlistMetadataResponse]: + """Load metadata from cache file""" + if not self.METADATA_CACHE_FILE.exists(): + return None + + try: + with open(self.METADATA_CACHE_FILE, 'r', encoding='utf-8') as f: + data = json.load(f) + return parse_modlist_metadata_response(data) + except Exception as e: + print(f"Error loading cache: {e}") + return None + + def _save_to_cache(self, metadata: ModlistMetadataResponse): + """Save metadata to cache file""" + try: + # Convert to dict for JSON serialization + data = { + 'metadataVersion': metadata.metadataVersion, + 'timestamp': metadata.timestamp, + 'count': metadata.count, + 'modlists': [self._metadata_to_dict(m) for m in metadata.modlists] + } + + with open(self.METADATA_CACHE_FILE, 'w', encoding='utf-8') as f: + json.dump(data, f, indent=2) + + except Exception as e: + print(f"Error saving cache: {e}") + + def _metadata_to_dict(self, metadata: ModlistMetadata) -> dict: + """Convert ModlistMetadata to dict for JSON serialization""" + result = { + 'title': metadata.title, + 'description': metadata.description, + 'author': metadata.author, + 'maintainers': metadata.maintainers, + 'namespacedName': metadata.namespacedName, + 'repositoryName': metadata.repositoryName, + 'machineURL': metadata.machineURL, + 'game': metadata.game, + 'gameHumanFriendly': metadata.gameHumanFriendly, + 'official': metadata.official, + 'nsfw': metadata.nsfw, + 'utilityList': metadata.utilityList, + 'forceDown': metadata.forceDown, + 'imageContainsTitle': metadata.imageContainsTitle, + 'version': metadata.version, + 'displayVersionOnlyInInstallerView': metadata.displayVersionOnlyInInstallerView, + 'dateCreated': metadata.dateCreated, + 'dateUpdated': metadata.dateUpdated, + 'tags': metadata.tags, + 'mods': metadata.mods + } + + if metadata.images: + result['images'] = { + 'small': metadata.images.small, + 'large': metadata.images.large + } + + if metadata.links: + result['links'] = { + 'image': metadata.links.image, + 'readme': metadata.links.readme, + 'download': metadata.links.download, + 'discordURL': metadata.links.discordURL, + 'websiteURL': metadata.links.websiteURL + } + + if metadata.sizes: + result['sizes'] = { + 'downloadSize': metadata.sizes.downloadSize, + 'downloadSizeFormatted': metadata.sizes.downloadSizeFormatted, + 'installSize': metadata.sizes.installSize, + 'installSizeFormatted': metadata.sizes.installSizeFormatted, + 'totalSize': metadata.sizes.totalSize, + 'totalSizeFormatted': metadata.sizes.totalSizeFormatted, + 'numberOfArchives': metadata.sizes.numberOfArchives, + 'numberOfInstalledFiles': metadata.sizes.numberOfInstalledFiles + } + + if metadata.validation: + result['validation'] = { + 'failed': metadata.validation.failed, + 'passed': metadata.validation.passed, + 'updating': metadata.validation.updating, + 'mirrored': metadata.validation.mirrored, + 'modListIsMissing': metadata.validation.modListIsMissing, + 'hasFailures': metadata.validation.hasFailures + } + + return result + + def _is_cache_valid(self) -> bool: + """Check if cache is still valid based on age""" + if not self.METADATA_CACHE_FILE.exists(): + return False + + # Check file modification time + mtime = datetime.fromtimestamp(self.METADATA_CACHE_FILE.stat().st_mtime) + age = datetime.now() - mtime + + return age < timedelta(days=self.CACHE_VALIDITY_DAYS) + + def download_images( + self, + game_filter: Optional[str] = None, + size: str = "both", + overwrite: bool = False + ) -> bool: + """ + Download modlist images to cache using jackify-engine. + + Args: + game_filter: Filter by game name (None = all games) + size: Image size to download (small, large, both) + overwrite: Overwrite existing images + + Returns: + True if successful, False otherwise + """ + # Build command (engine path will be resolved inside lock) + cmd = [ + "placeholder", # Will be replaced with actual engine path + "download-modlist-images", + "--output", str(self.IMAGE_CACHE_DIR), + "--size", size + ] + + if game_filter: + cmd.extend(["--game", game_filter]) + + if overwrite: + cmd.append("--overwrite") + + # Execute command + try: + # CRITICAL: Use thread lock to prevent concurrent engine calls + with self._engine_call_lock: + # CRITICAL: Get engine path BEFORE cleaning environment + # get_jackify_engine_path() may need APPDIR to locate the engine + engine_path = get_jackify_engine_path() + if not engine_path: + return False + + # Update cmd with resolved engine path + cmd[0] = str(engine_path) + + # CRITICAL: Use centralized clean environment to prevent AppImage recursive spawning + # This must happen AFTER engine path resolution + from jackify.backend.handlers.subprocess_utils import get_clean_subprocess_env + clean_env = get_clean_subprocess_env() + + result = subprocess.run( + cmd, + capture_output=True, + text=True, + timeout=3600, # 1 hour timeout for downloads + env=clean_env + ) + return result.returncode == 0 + except Exception as e: + print(f"Error downloading images: {e}") + return False + + def get_cached_image_path(self, metadata: ModlistMetadata, size: str = "large") -> Optional[Path]: + """ + Get path to cached image for a modlist (only if it exists). + + Args: + metadata: Modlist metadata + size: Image size (small or large) + + Returns: + Path to cached image or None if not cached + """ + filename = f"{metadata.machineURL}_{size}.webp" + image_path = self.IMAGE_CACHE_DIR / metadata.repositoryName / filename + + if image_path.exists(): + return image_path + return None + + def get_image_cache_path(self, metadata: ModlistMetadata, size: str = "large") -> Path: + """ + Get path where image should be cached (always returns path, even if file doesn't exist). + + Args: + metadata: Modlist metadata + size: Image size (small or large) + + Returns: + Path where image should be cached + """ + filename = f"{metadata.machineURL}_{size}.webp" + return self.IMAGE_CACHE_DIR / metadata.repositoryName / filename + + def get_image_url(self, metadata: ModlistMetadata, size: str = "large") -> Optional[str]: + """ + Get image URL for a modlist. + + Args: + metadata: Modlist metadata + size: Image size (small or large) + + Returns: + Image URL or None if images not available + """ + if not metadata.images: + return None + + return metadata.images.large if size == "large" else metadata.images.small + + def clear_cache(self): + """Clear all cached metadata and images""" + if self.METADATA_CACHE_FILE.exists(): + self.METADATA_CACHE_FILE.unlink() + + # Clear image cache + if self.IMAGE_CACHE_DIR.exists(): + import shutil + shutil.rmtree(self.IMAGE_CACHE_DIR) + self.IMAGE_CACHE_DIR.mkdir(parents=True, exist_ok=True) + + def get_installed_modlists(self) -> List[str]: + """ + Get list of installed modlist machine URLs. + + Returns: + List of machine URLs for installed modlists + """ + # TODO: Integrate with existing modlist database/config + # For now, return empty list - will be implemented when integrated with existing modlist tracking + return [] + + def is_modlist_installed(self, machine_url: str) -> bool: + """Check if a modlist is installed""" + return machine_url in self.get_installed_modlists() + + def load_tag_mappings(self) -> Dict[str, str]: + """ + Load tag mappings from Wabbajack GitHub repository. + Maps variant tag names to canonical tag names. + + Returns: + Dictionary mapping variant tags to canonical tags + """ + url = "https://raw.githubusercontent.com/wabbajack-tools/mod-lists/master/tag_mappings.json" + try: + with urllib.request.urlopen(url, timeout=10) as response: + data = json.loads(response.read().decode('utf-8')) + return data + except Exception as e: + print(f"Warning: Could not load tag mappings: {e}") + return {} + + def load_allowed_tags(self) -> set: + """ + Load allowed tags from Wabbajack GitHub repository. + + Returns: + Set of allowed tag names (preserving original case) + """ + url = "https://raw.githubusercontent.com/wabbajack-tools/mod-lists/master/allowed_tags.json" + try: + with urllib.request.urlopen(url, timeout=10) as response: + data = json.loads(response.read().decode('utf-8')) + return set(data) # Return as set preserving original case + except Exception as e: + print(f"Warning: Could not load allowed tags: {e}") + return set() + + def _ensure_tag_metadata(self): + """Ensure tag mappings/allowed tags (and lookups) are cached.""" + if self._tag_mappings_cache is None: + self._tag_mappings_cache = self.load_tag_mappings() + if self._tag_mapping_lookup is None: + self._tag_mapping_lookup = {k.lower(): v for k, v in self._tag_mappings_cache.items()} + if self._allowed_tags_cache is None: + self._allowed_tags_cache = self.load_allowed_tags() + if self._allowed_tags_lookup is None: + self._allowed_tags_lookup = {tag.lower(): tag for tag in self._allowed_tags_cache} + + def normalize_tag_value(self, tag: str) -> str: + """ + Normalize a tag to its canonical display form using Wabbajack mappings. + Returns the normalized tag (original casing preserved when possible). + """ + if not tag: + return "" + self._ensure_tag_metadata() + tag_key = tag.strip().lower() + if not tag_key: + return "" + canonical = self._tag_mapping_lookup.get(tag_key, tag.strip()) + # Prefer allowed tag casing if available + return self._allowed_tags_lookup.get(canonical.lower(), canonical) + + def normalize_tags_for_display(self, tags: Optional[List[str]]) -> List[str]: + """Normalize a list of tags for UI display (deduped, canonical casing).""" + if not tags: + return [] + self._ensure_tag_metadata() + normalized = [] + seen = set() + for tag in tags: + normalized_tag = self.normalize_tag_value(tag) + key = normalized_tag.lower() + if key and key not in seen: + normalized.append(normalized_tag) + seen.add(key) + return normalized diff --git a/jackify/backend/services/modlist_service.py b/jackify/backend/services/modlist_service.py index cf038b5..7c2035c 100644 --- a/jackify/backend/services/modlist_service.py +++ b/jackify/backend/services/modlist_service.py @@ -285,8 +285,18 @@ class ModlistService: output_callback(f"Jackify Install Engine not found or not executable at: {engine_path}") return False - # Build command (copied from working code) - cmd = [engine_path, 'install'] + # Build command (copied from working code) + cmd = [engine_path, 'install', '--show-file-progress'] + + # Check GPU setting + from jackify.backend.handlers.config_handler import ConfigHandler + config_handler = ConfigHandler() + gpu_enabled = config_handler.get('enable_gpu_texture_conversion', True) + logger.info(f"GPU texture conversion setting: {gpu_enabled}") + if not gpu_enabled: + cmd.append('--no-gpu') + logger.info("Added --no-gpu flag to jackify-engine command") + modlist_value = context.get('modlist_value') if modlist_value and modlist_value.endswith('.wabbajack') and os.path.isfile(modlist_value): cmd += ['-w', modlist_value] @@ -326,8 +336,10 @@ class ModlistService: else: output_callback(f"File descriptor limit warning: {message}") - # Subprocess call (copied from working code) - proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, text=False, env=None, cwd=engine_dir) + # Subprocess call with cleaned environment to prevent AppImage variable inheritance + from jackify.backend.handlers.subprocess_utils import get_clean_subprocess_env + clean_env = get_clean_subprocess_env() + proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, text=False, env=clean_env, cwd=engine_dir) # Output processing (copied from working code) buffer = b'' diff --git a/jackify/backend/services/native_steam_service.py b/jackify/backend/services/native_steam_service.py index 65cd084..bc3d51d 100644 --- a/jackify/backend/services/native_steam_service.py +++ b/jackify/backend/services/native_steam_service.py @@ -481,14 +481,34 @@ class NativeSteamService: Returns: (success, app_id) - Success status and the AppID """ - # Auto-detect best Proton version if none provided + # Use Game Proton from settings for shortcut creation (not Install Proton) if proton_version is None: try: - from jackify.backend.core.modlist_operations import _get_user_proton_version - proton_version = _get_user_proton_version() - logger.info(f"Auto-detected Proton version: {proton_version}") + from jackify.backend.handlers.config_handler import ConfigHandler + config_handler = ConfigHandler() + game_proton_path = config_handler.get_game_proton_path() + + if game_proton_path and game_proton_path != 'auto': + # User has selected Game Proton - use it + proton_version = os.path.basename(game_proton_path) + # Convert to Steam format + if not proton_version.startswith('GE-Proton'): + proton_version = proton_version.lower().replace(' - ', '_').replace(' ', '_').replace('-', '_') + if not proton_version.startswith('proton'): + proton_version = f"proton_{proton_version}" + logger.info(f"Using Game Proton from settings: {proton_version}") + else: + # Fallback to auto-detect if Game Proton not set + from jackify.backend.handlers.wine_utils import WineUtils + best_proton = WineUtils.select_best_proton() + if best_proton: + proton_version = best_proton['name'] + logger.info(f"Auto-detected Game Proton: {proton_version}") + else: + proton_version = "proton_experimental" + logger.warning("Failed to auto-detect Game Proton, falling back to experimental") except Exception as e: - logger.warning(f"Failed to auto-detect Proton, falling back to experimental: {e}") + logger.warning(f"Failed to get Game Proton, falling back to experimental: {e}") proton_version = "proton_experimental" logger.info(f"Creating shortcut with Proton: '{app_name}' -> '{proton_version}'") diff --git a/jackify/backend/services/nexus_auth_service.py b/jackify/backend/services/nexus_auth_service.py new file mode 100644 index 0000000..b53529d --- /dev/null +++ b/jackify/backend/services/nexus_auth_service.py @@ -0,0 +1,258 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +Nexus Authentication Service +Unified service for Nexus authentication using OAuth or API key fallback +""" + +import logging +from typing import Optional, Tuple +from .nexus_oauth_service import NexusOAuthService +from ..handlers.oauth_token_handler import OAuthTokenHandler +from .api_key_service import APIKeyService + +logger = logging.getLogger(__name__) + + +class NexusAuthService: + """ + Unified authentication service for Nexus Mods + Handles OAuth 2.0 (preferred) with API key fallback (legacy) + """ + + def __init__(self): + """Initialize authentication service""" + self.oauth_service = NexusOAuthService() + self.token_handler = OAuthTokenHandler() + self.api_key_service = APIKeyService() + logger.debug("NexusAuthService initialized") + + def get_auth_token(self) -> Optional[str]: + """ + Get authentication token, preferring OAuth over API key + + Returns: + Access token or API key, or None if no authentication available + """ + # Try OAuth first + oauth_token = self._get_oauth_token() + if oauth_token: + logger.debug("Using OAuth token for authentication") + return oauth_token + + # Fall back to API key + api_key = self.api_key_service.get_saved_api_key() + if api_key: + logger.debug("Using API key for authentication (OAuth not available)") + return api_key + + logger.warning("No authentication available (neither OAuth nor API key)") + return None + + def _get_oauth_token(self) -> Optional[str]: + """ + Get OAuth access token, refreshing if needed + + Returns: + Valid access token or None + """ + # Check if we have a stored token + if not self.token_handler.has_token(): + logger.debug("No OAuth token stored") + return None + + # Check if token is expired (15 minute buffer for long installs) + if self.token_handler.is_token_expired(buffer_minutes=15): + logger.info("OAuth token expiring soon, attempting refresh") + + # Try to refresh + refresh_token = self.token_handler.get_refresh_token() + if refresh_token: + new_token_data = self.oauth_service.refresh_token(refresh_token) + + if new_token_data: + # Save refreshed token + self.token_handler.save_token({'oauth': new_token_data}) + logger.info("OAuth token refreshed successfully") + return new_token_data.get('access_token') + else: + logger.warning("Token refresh failed, OAuth token invalid") + # Delete invalid token + self.token_handler.delete_token() + return None + else: + logger.warning("No refresh token available") + return None + + # Token is valid, return it + return self.token_handler.get_access_token() + + def is_authenticated(self) -> bool: + """ + Check if user is authenticated via OAuth or API key + + Returns: + True if authenticated + """ + return self.get_auth_token() is not None + + def get_auth_method(self) -> Optional[str]: + """ + Get current authentication method + + Returns: + 'oauth', 'api_key', or None + """ + # Check OAuth first + oauth_token = self._get_oauth_token() + if oauth_token: + return 'oauth' + + # Check API key + api_key = self.api_key_service.get_saved_api_key() + if api_key: + return 'api_key' + + return None + + def get_auth_status(self) -> Tuple[bool, str, Optional[str]]: + """ + Get detailed authentication status + + Returns: + Tuple of (authenticated, method, username) + - authenticated: True if authenticated + - method: 'oauth', 'oauth_expired', 'api_key', or 'none' + - username: Username if available (OAuth only), or None + """ + # Check if OAuth token exists + if self.token_handler.has_token(): + # Check if refresh token is likely expired (hasn't been refreshed in 30+ days) + token_info = self.token_handler.get_token_info() + if token_info.get('refresh_token_likely_expired'): + logger.warning("Refresh token likely expired (30+ days old), user should re-authorize") + return False, 'oauth_expired', None + + # Try OAuth + oauth_token = self._get_oauth_token() + if oauth_token: + # Try to get username from userinfo + user_info = self.oauth_service.get_user_info(oauth_token) + username = user_info.get('name') if user_info else None + return True, 'oauth', username + elif self.token_handler.has_token(): + # Had token but couldn't get valid access token (refresh failed) + logger.warning("OAuth token refresh failed, token may be invalid") + return False, 'oauth_expired', None + + # Try API key + api_key = self.api_key_service.get_saved_api_key() + if api_key: + return True, 'api_key', None + + return False, 'none', None + + def authorize_oauth(self, show_browser_message_callback=None) -> bool: + """ + Perform OAuth authorization flow + + Args: + show_browser_message_callback: Optional callback for browser messages + + Returns: + True if authorization successful + """ + logger.info("Starting OAuth authorization") + + token_data = self.oauth_service.authorize(show_browser_message_callback) + + if token_data: + # Save token + success = self.token_handler.save_token({'oauth': token_data}) + if success: + logger.info("OAuth authorization completed successfully") + return True + else: + logger.error("Failed to save OAuth token") + return False + else: + logger.error("OAuth authorization failed") + return False + + def revoke_oauth(self) -> bool: + """ + Revoke OAuth authorization by deleting stored token + + Returns: + True if revoked successfully + """ + logger.info("Revoking OAuth authorization") + return self.token_handler.delete_token() + + def save_api_key(self, api_key: str) -> bool: + """ + Save API key (legacy fallback) + + Args: + api_key: Nexus API key + + Returns: + True if saved successfully + """ + return self.api_key_service.save_api_key(api_key) + + def validate_api_key(self, api_key: Optional[str] = None) -> Tuple[bool, Optional[str]]: + """ + Validate API key against Nexus API + + Args: + api_key: Optional API key to validate (uses stored if not provided) + + Returns: + Tuple of (valid, username_or_error) + """ + return self.api_key_service.validate_api_key(api_key) + + def ensure_valid_auth(self) -> Optional[str]: + """ + Ensure we have valid authentication, refreshing if needed + This should be called before any Nexus operation + + Returns: + Valid auth token (OAuth access token or API key), or None + """ + auth_token = self.get_auth_token() + + if not auth_token: + logger.warning("No authentication available for Nexus operation") + + return auth_token + + def get_auth_for_engine(self) -> Optional[str]: + """ + Get authentication token for jackify-engine + Same as ensure_valid_auth() - engine uses NEXUS_API_KEY env var for both OAuth and API keys + (This matches upstream Wabbajack behavior) + + Returns: + Valid auth token to pass via NEXUS_API_KEY environment variable, or None + """ + return self.ensure_valid_auth() + + def clear_all_auth(self) -> bool: + """ + Clear all authentication (both OAuth and API key) + Useful for testing or switching accounts + + Returns: + True if any auth was cleared + """ + oauth_cleared = self.token_handler.delete_token() + api_key_cleared = self.api_key_service.clear_api_key() + + if oauth_cleared or api_key_cleared: + logger.info("Cleared all Nexus authentication") + return True + else: + logger.debug("No authentication to clear") + return False diff --git a/jackify/backend/services/nexus_oauth_service.py b/jackify/backend/services/nexus_oauth_service.py new file mode 100644 index 0000000..9932d99 --- /dev/null +++ b/jackify/backend/services/nexus_oauth_service.py @@ -0,0 +1,759 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +Nexus OAuth Service +Handles OAuth 2.0 authentication flow with Nexus Mods using PKCE +""" + +import os +import base64 +import hashlib +import secrets +import webbrowser +import urllib.parse +from http.server import HTTPServer, BaseHTTPRequestHandler +import requests +import json +import threading +import ssl +import tempfile +import logging +import time +import subprocess +from typing import Optional, Tuple, Dict + +logger = logging.getLogger(__name__) + + +class NexusOAuthService: + """ + Handles OAuth 2.0 authentication with Nexus Mods + Uses PKCE flow with system browser and localhost callback + """ + + # OAuth Configuration + CLIENT_ID = "jackify" + AUTH_URL = "https://users.nexusmods.com/oauth/authorize" + TOKEN_URL = "https://users.nexusmods.com/oauth/token" + USERINFO_URL = "https://users.nexusmods.com/oauth/userinfo" + SCOPES = "public openid profile" + + # Redirect configuration (custom protocol scheme - no SSL cert needed!) + # Requires jackify:// protocol handler to be registered with OS + REDIRECT_URI = "jackify://oauth/callback" + + # Callback timeout (5 minutes) + CALLBACK_TIMEOUT = 300 + + def __init__(self): + """Initialize OAuth service""" + self._auth_code = None + self._auth_state = None + self._auth_error = None + self._server_done = threading.Event() + + # Ensure jackify:// protocol is registered on first use + self._ensure_protocol_registered() + + def _generate_pkce_params(self) -> Tuple[str, str, str]: + """ + Generate PKCE code verifier, challenge, and state + + Returns: + Tuple of (code_verifier, code_challenge, state) + """ + # Generate code verifier (43-128 characters, base64url encoded) + code_verifier = base64.urlsafe_b64encode( + os.urandom(32) + ).decode('utf-8').rstrip('=') + + # Generate code challenge (SHA256 hash of verifier, base64url encoded) + code_challenge = base64.urlsafe_b64encode( + hashlib.sha256(code_verifier.encode('utf-8')).digest() + ).decode('utf-8').rstrip('=') + + # Generate state for CSRF protection + state = secrets.token_urlsafe(32) + + return code_verifier, code_challenge, state + + def _ensure_protocol_registered(self) -> bool: + """ + Ensure jackify:// protocol is registered with the OS + + Returns: + True if registration successful or already registered + """ + import subprocess + import sys + from pathlib import Path + + if not sys.platform.startswith('linux'): + logger.debug("Protocol registration only needed on Linux") + return True + + try: + # Ensure desktop file exists and has correct Exec path + desktop_file = Path.home() / ".local" / "share" / "applications" / "com.jackify.app.desktop" + + # Get environment for AppImage detection + env = os.environ + + # Determine executable path (DEV mode vs AppImage) + # Check multiple indicators for AppImage execution + is_appimage = ( + getattr(sys, 'frozen', False) or # PyInstaller frozen + 'APPIMAGE' in env or # AppImage environment variable + 'APPDIR' in env or # AppImage directory variable + (sys.argv[0] and sys.argv[0].endswith('.AppImage')) # Executable name + ) + + if is_appimage: + # Running from AppImage - use the AppImage path directly + # CRITICAL: Never use -m flag in AppImage mode - it causes __main__.py windows + if 'APPIMAGE' in env: + # APPIMAGE env var gives us the exact path to the AppImage + exec_path = env['APPIMAGE'] + logger.info(f"Using APPIMAGE env var: {exec_path}") + elif sys.argv[0] and Path(sys.argv[0]).exists(): + # Use sys.argv[0] if it's a valid path + exec_path = str(Path(sys.argv[0]).resolve()) + logger.info(f"Using resolved sys.argv[0]: {exec_path}") + else: + # Fallback to sys.argv[0] as-is + exec_path = sys.argv[0] + logger.warning(f"Using sys.argv[0] as fallback: {exec_path}") + else: + # Running from source (DEV mode) + # Need to ensure we run from the correct directory + src_dir = Path(__file__).parent.parent.parent.parent # Go up to src/ + exec_path = f"cd {src_dir} && {sys.executable} -m jackify.frontends.gui" + logger.info(f"DEV mode exec path: {exec_path}") + logger.info(f"Source directory: {src_dir}") + + # Check if desktop file needs creation or update + needs_update = False + if not desktop_file.exists(): + needs_update = True + logger.info("Creating desktop file for protocol handler") + else: + # Check if Exec path matches current mode + current_content = desktop_file.read_text() + if f"Exec={exec_path} %u" not in current_content: + needs_update = True + logger.info(f"Updating desktop file with new Exec path: {exec_path}") + + if needs_update: + desktop_file.parent.mkdir(parents=True, exist_ok=True) + + # Build desktop file content with proper working directory + if is_appimage: + # AppImage doesn't need working directory + desktop_content = f"""[Desktop Entry] +Type=Application +Name=Jackify +Comment=Wabbajack modlist manager for Linux +Exec={exec_path} %u +Icon=com.jackify.app +Terminal=false +Categories=Game;Utility; +MimeType=x-scheme-handler/jackify; +""" + else: + # DEV mode needs working directory set to src/ + # exec_path already contains the correct format: "cd {src_dir} && {sys.executable} -m jackify.frontends.gui" + src_dir = Path(__file__).parent.parent.parent.parent # Go up to src/ + desktop_content = f"""[Desktop Entry] +Type=Application +Name=Jackify +Comment=Wabbajack modlist manager for Linux +Exec={exec_path} %u +Icon=com.jackify.app +Terminal=false +Categories=Game;Utility; +MimeType=x-scheme-handler/jackify; +Path={src_dir} +""" + + desktop_file.write_text(desktop_content) + logger.info(f"Desktop file written: {desktop_file}") + logger.info(f"Exec path: {exec_path}") + logger.info(f"AppImage mode: {is_appimage}") + + # Always ensure full registration (don't trust xdg-settings alone) + # PopOS/Ubuntu need mimeapps.list even if xdg-settings says registered + logger.info("Registering jackify:// protocol handler") + + # Update MIME cache (required for Firefox dialog) + apps_dir = Path.home() / ".local" / "share" / "applications" + subprocess.run( + ['update-desktop-database', str(apps_dir)], + capture_output=True, + timeout=10 + ) + + # Set as default handler using xdg-mime (Firefox compatibility) + subprocess.run( + ['xdg-mime', 'default', 'com.jackify.app.desktop', 'x-scheme-handler/jackify'], + capture_output=True, + timeout=10 + ) + + # Also use xdg-settings as backup (some systems need both) + subprocess.run( + ['xdg-settings', 'set', 'default-url-scheme-handler', 'jackify', 'com.jackify.app.desktop'], + capture_output=True, + timeout=10 + ) + + # Manually ensure entry in mimeapps.list (PopOS/Ubuntu require this for GIO) + mimeapps_path = Path.home() / ".config" / "mimeapps.list" + try: + # Read existing content + if mimeapps_path.exists(): + content = mimeapps_path.read_text() + else: + mimeapps_path.parent.mkdir(parents=True, exist_ok=True) + content = "[Default Applications]\n" + + # Add jackify handler if not present + if 'x-scheme-handler/jackify=' not in content: + if '[Default Applications]' not in content: + content = "[Default Applications]\n" + content + + # Insert after [Default Applications] line + lines = content.split('\n') + for i, line in enumerate(lines): + if line.strip() == '[Default Applications]': + lines.insert(i + 1, 'x-scheme-handler/jackify=com.jackify.app.desktop') + break + + content = '\n'.join(lines) + mimeapps_path.write_text(content) + logger.info("Added jackify handler to mimeapps.list") + except Exception as e: + logger.warning(f"Failed to update mimeapps.list: {e}") + + logger.info("jackify:// protocol registered successfully") + return True + + except Exception as e: + logger.warning(f"Failed to register jackify:// protocol: {e}") + return False + + def _generate_self_signed_cert(self) -> Tuple[Optional[str], Optional[str]]: + """ + Generate self-signed certificate for HTTPS localhost + + Returns: + Tuple of (cert_file_path, key_file_path) or (None, None) on failure + """ + try: + from cryptography import x509 + from cryptography.x509.oid import NameOID + from cryptography.hazmat.primitives import hashes + from cryptography.hazmat.primitives.asymmetric import rsa + from cryptography.hazmat.primitives import serialization + import datetime + import ipaddress + + logger.info("Generating self-signed certificate for OAuth callback") + + # Generate private key + private_key = rsa.generate_private_key( + public_exponent=65537, + key_size=2048, + ) + + # Create certificate + subject = issuer = x509.Name([ + x509.NameAttribute(NameOID.COUNTRY_NAME, "US"), + x509.NameAttribute(NameOID.ORGANIZATION_NAME, "Jackify"), + x509.NameAttribute(NameOID.COMMON_NAME, self.REDIRECT_HOST), + ]) + + cert = x509.CertificateBuilder().subject_name( + subject + ).issuer_name( + issuer + ).public_key( + private_key.public_key() + ).serial_number( + x509.random_serial_number() + ).not_valid_before( + datetime.datetime.now(datetime.UTC) + ).not_valid_after( + datetime.datetime.now(datetime.UTC) + datetime.timedelta(days=365) + ).add_extension( + x509.SubjectAlternativeName([ + x509.IPAddress(ipaddress.IPv4Address(self.REDIRECT_HOST)), + ]), + critical=False, + ).sign(private_key, hashes.SHA256()) + + # Save to temp files + temp_dir = tempfile.mkdtemp() + cert_file = os.path.join(temp_dir, "oauth_cert.pem") + key_file = os.path.join(temp_dir, "oauth_key.pem") + + with open(cert_file, "wb") as f: + f.write(cert.public_bytes(serialization.Encoding.PEM)) + + with open(key_file, "wb") as f: + f.write(private_key.private_bytes( + encoding=serialization.Encoding.PEM, + format=serialization.PrivateFormat.TraditionalOpenSSL, + encryption_algorithm=serialization.NoEncryption() + )) + + return cert_file, key_file + + except ImportError: + logger.error("cryptography package not installed - required for OAuth") + return None, None + except Exception as e: + logger.error(f"Failed to generate SSL certificate: {e}") + return None, None + + def _build_authorization_url(self, code_challenge: str, state: str) -> str: + """ + Build OAuth authorization URL + + Args: + code_challenge: PKCE code challenge + state: CSRF protection state + + Returns: + Authorization URL + """ + params = { + 'response_type': 'code', + 'client_id': self.CLIENT_ID, + 'redirect_uri': self.REDIRECT_URI, + 'scope': self.SCOPES, + 'code_challenge': code_challenge, + 'code_challenge_method': 'S256', + 'state': state + } + + return f"{self.AUTH_URL}?{urllib.parse.urlencode(params)}" + + def _create_callback_handler(self): + """Create HTTP request handler class for OAuth callback""" + service = self + + class OAuthCallbackHandler(BaseHTTPRequestHandler): + """HTTP request handler for OAuth callback""" + + def log_message(self, format, *args): + """Log OAuth callback requests""" + logger.debug(f"OAuth callback: {format % args}") + + def do_GET(self): + """Handle GET request from OAuth redirect""" + logger.info(f"OAuth callback received: {self.path}") + + # Parse query parameters + parsed = urllib.parse.urlparse(self.path) + params = urllib.parse.parse_qs(parsed.query) + + # Ignore favicon and other non-OAuth requests + if parsed.path == '/favicon.ico': + self.send_response(404) + self.end_headers() + return + + if 'code' in params: + service._auth_code = params['code'][0] + service._auth_state = params.get('state', [None])[0] + logger.info(f"OAuth authorization code received: {service._auth_code[:10]}...") + + # Send success response + self.send_response(200) + self.send_header('Content-type', 'text/html') + self.end_headers() + + html = """ + + Authorization Successful + +

Authorization Successful!

+

You can close this window and return to Jackify.

+ + + + """ + self.wfile.write(html.encode()) + + elif 'error' in params: + service._auth_error = params['error'][0] + error_desc = params.get('error_description', ['Unknown error'])[0] + + # Send error response + self.send_response(200) + self.send_header('Content-type', 'text/html') + self.end_headers() + + html = f""" + + Authorization Failed + +

Authorization Failed

+

Error: {service._auth_error}

+

{error_desc}

+

You can close this window and try again in Jackify.

+ + + """ + self.wfile.write(html.encode()) + else: + # Unexpected callback format + logger.warning(f"OAuth callback with no code or error: {params}") + self.send_response(400) + self.send_header('Content-type', 'text/html') + self.end_headers() + html = """ + + Invalid Request + +

Invalid OAuth Callback

+

You can close this window.

+ + + """ + self.wfile.write(html.encode()) + + # Signal server to shut down + service._server_done.set() + logger.debug("OAuth callback handler signaled server to shut down") + + return OAuthCallbackHandler + + def _wait_for_callback(self) -> bool: + """ + Wait for OAuth callback via jackify:// protocol handler + + Returns: + True if callback received, False on timeout + """ + from pathlib import Path + import time + + callback_file = Path.home() / ".config" / "jackify" / "oauth_callback.tmp" + + # Delete any old callback file + if callback_file.exists(): + callback_file.unlink() + + logger.info("Waiting for OAuth callback via jackify:// protocol") + + # Poll for callback file with periodic user feedback + start_time = time.time() + last_reminder = 0 + while (time.time() - start_time) < self.CALLBACK_TIMEOUT: + if callback_file.exists(): + try: + # Read callback data + lines = callback_file.read_text().strip().split('\n') + if len(lines) >= 2: + self._auth_code = lines[0] + self._auth_state = lines[1] + logger.info(f"OAuth callback received: code={self._auth_code[:10]}...") + + # Clean up + callback_file.unlink() + return True + except Exception as e: + logger.error(f"Failed to read callback file: {e}") + return False + + # Show periodic reminder about protocol handler + elapsed = time.time() - start_time + if elapsed - last_reminder > 30: # Every 30 seconds + logger.info(f"Still waiting for OAuth callback... ({int(elapsed)}s elapsed)") + if elapsed > 60: + logger.warning( + "If you see a blank browser tab or popup blocker, " + "check for browser notifications asking to 'Open Jackify'" + ) + last_reminder = elapsed + + time.sleep(0.5) # Poll every 500ms + + logger.error(f"OAuth callback timeout after {self.CALLBACK_TIMEOUT} seconds") + logger.error( + "Protocol handler may not be working. Check:\n" + " 1. Browser asked 'Open Jackify?' and you clicked Allow\n" + " 2. No popup blocker notifications\n" + " 3. Desktop file exists: ~/.local/share/applications/com.jackify.app.desktop" + ) + return False + + def _send_desktop_notification(self, title: str, message: str): + """ + Send desktop notification if available + + Args: + title: Notification title + message: Notification message + """ + try: + # Try notify-send (Linux) + subprocess.run( + ['notify-send', title, message], + check=False, + stdout=subprocess.DEVNULL, + stderr=subprocess.DEVNULL, + timeout=2 + ) + except (FileNotFoundError, subprocess.TimeoutExpired): + pass + + def _exchange_code_for_token( + self, + auth_code: str, + code_verifier: str + ) -> Optional[Dict]: + """ + Exchange authorization code for access token + + Args: + auth_code: Authorization code from callback + code_verifier: PKCE code verifier + + Returns: + Token response dict or None on failure + """ + data = { + 'grant_type': 'authorization_code', + 'client_id': self.CLIENT_ID, + 'redirect_uri': self.REDIRECT_URI, + 'code': auth_code, + 'code_verifier': code_verifier + } + + try: + response = requests.post(self.TOKEN_URL, data=data, timeout=10) + + if response.status_code == 200: + token_data = response.json() + logger.info("Successfully exchanged authorization code for token") + return token_data + else: + logger.error(f"Token exchange failed: {response.status_code} - {response.text}") + return None + + except requests.RequestException as e: + logger.error(f"Token exchange request failed: {e}") + return None + + def refresh_token(self, refresh_token: str) -> Optional[Dict]: + """ + Refresh an access token using refresh token + + Args: + refresh_token: Refresh token from previous authentication + + Returns: + New token response dict or None on failure + """ + data = { + 'grant_type': 'refresh_token', + 'client_id': self.CLIENT_ID, + 'refresh_token': refresh_token + } + + try: + response = requests.post(self.TOKEN_URL, data=data, timeout=10) + + if response.status_code == 200: + token_data = response.json() + logger.info("Successfully refreshed access token") + return token_data + else: + logger.error(f"Token refresh failed: {response.status_code} - {response.text}") + return None + + except requests.RequestException as e: + logger.error(f"Token refresh request failed: {e}") + return None + + def get_user_info(self, access_token: str) -> Optional[Dict]: + """ + Get user information using access token + + Args: + access_token: OAuth access token + + Returns: + User info dict or None on failure + """ + headers = { + 'Authorization': f'Bearer {access_token}' + } + + try: + response = requests.get(self.USERINFO_URL, headers=headers, timeout=10) + + if response.status_code == 200: + user_info = response.json() + logger.info(f"Retrieved user info for: {user_info.get('name', 'unknown')}") + return user_info + else: + logger.error(f"User info request failed: {response.status_code}") + return None + + except requests.RequestException as e: + logger.error(f"User info request failed: {e}") + return None + + def authorize(self, show_browser_message_callback=None) -> Optional[Dict]: + """ + Perform full OAuth authorization flow + + Args: + show_browser_message_callback: Optional callback to display message about browser opening + + Returns: + Token response dict or None on failure + """ + logger.info("Starting Nexus OAuth authorization flow") + + # Reset state + self._auth_code = None + self._auth_state = None + self._auth_error = None + self._server_done.clear() + + # Generate PKCE parameters + code_verifier, code_challenge, state = self._generate_pkce_params() + logger.debug(f"Generated PKCE parameters (state: {state[:10]}...)") + + # Build authorization URL + auth_url = self._build_authorization_url(code_challenge, state) + + # Open browser + logger.info("Opening browser for authorisation") + + try: + # When running from AppImage, we need to clean the environment to avoid + # library conflicts with system tools (xdg-open, kde-open, etc.) + import os + import subprocess + + env = os.environ.copy() + + # Remove AppImage-specific environment variables that can cause conflicts + # These variables inject AppImage's bundled libraries into child processes + appimage_vars = [ + 'LD_LIBRARY_PATH', + 'PYTHONPATH', + 'PYTHONHOME', + 'QT_PLUGIN_PATH', + 'QML2_IMPORT_PATH', + ] + + # Check if we're running from AppImage + if 'APPIMAGE' in env or 'APPDIR' in env: + logger.debug("Running from AppImage - cleaning environment for browser launch") + for var in appimage_vars: + if var in env: + del env[var] + logger.debug(f"Removed {var} from browser environment") + + # Use Popen instead of run to avoid waiting for browser to close + # xdg-open may not return until the browser closes, which could be never + try: + process = subprocess.Popen( + ['xdg-open', auth_url], + env=env, + stdout=subprocess.DEVNULL, + stderr=subprocess.DEVNULL, + start_new_session=True # Detach from parent process + ) + # Give it a moment to fail if it's going to fail + import time + time.sleep(0.5) + + # Check if process is still running or has exited successfully + poll_result = process.poll() + if poll_result is None: + # Process still running - browser is opening/open + logger.info("Browser opened successfully via xdg-open (process running)") + browser_opened = True + elif poll_result == 0: + # Process exited successfully + logger.info("Browser opened successfully via xdg-open (exit code 0)") + browser_opened = True + else: + # Process exited with error + logger.warning(f"xdg-open exited with code {poll_result}, trying webbrowser module") + if webbrowser.open(auth_url): + logger.info("Browser opened successfully via webbrowser module") + browser_opened = True + else: + logger.warning("webbrowser.open returned False") + browser_opened = False + except FileNotFoundError: + # xdg-open not found - try webbrowser module + logger.warning("xdg-open not found, trying webbrowser module") + if webbrowser.open(auth_url): + logger.info("Browser opened successfully via webbrowser module") + browser_opened = True + else: + logger.warning("webbrowser.open returned False") + browser_opened = False + except Exception as e: + logger.error(f"Error opening browser: {e}") + browser_opened = False + + # Send desktop notification + self._send_desktop_notification( + "Jackify - Nexus Authorisation", + "Please check your browser to authorise Jackify" + ) + + # Show message via callback if provided (AFTER browser opens) + if show_browser_message_callback: + if browser_opened: + show_browser_message_callback( + "Browser opened for Nexus authorisation.\n\n" + "After clicking 'Authorize', your browser may ask to\n" + "open Jackify or show a popup blocker notification.\n\n" + "Please click 'Open' or 'Allow' to complete authorization." + ) + else: + show_browser_message_callback( + f"Could not open browser automatically.\n\n" + f"Please open this URL manually:\n{auth_url}" + ) + + # Wait for callback via jackify:// protocol + if not self._wait_for_callback(): + return None + + # Check for errors + if self._auth_error: + logger.error(f"Authorization failed: {self._auth_error}") + return None + + if not self._auth_code: + logger.error("No authorization code received") + return None + + # Verify state matches + if self._auth_state != state: + logger.error("State mismatch - possible CSRF attack") + return None + + logger.info("Authorization code received, exchanging for token") + + # Exchange code for token + token_data = self._exchange_code_for_token(self._auth_code, code_verifier) + + if token_data: + logger.info("OAuth authorization flow completed successfully") + else: + logger.error("Failed to exchange authorization code for token") + + return token_data diff --git a/jackify/backend/services/protontricks_detection_service.py b/jackify/backend/services/protontricks_detection_service.py index c659630..95e6471 100644 --- a/jackify/backend/services/protontricks_detection_service.py +++ b/jackify/backend/services/protontricks_detection_service.py @@ -6,8 +6,11 @@ Centralized service for detecting and managing protontricks installation across """ import logging +import os import shutil import subprocess +import sys +import importlib.util from typing import Optional, Tuple from ..handlers.protontricks_handler import ProtontricksHandler from ..handlers.config_handler import ConfigHandler @@ -44,11 +47,11 @@ class ProtontricksDetectionService: def detect_protontricks(self, use_cache: bool = True) -> Tuple[bool, str, str]: """ - Detect if protontricks is installed and get installation details - + Detect if system protontricks is installed and get installation details + Args: use_cache (bool): Whether to use cached detection result - + Returns: Tuple[bool, str, str]: (is_installed, installation_type, details_message) - is_installed: True if protontricks is available @@ -82,7 +85,7 @@ class ProtontricksDetectionService: details_message = "Protontricks is installed (unknown type)" else: installation_type = 'none' - details_message = "Protontricks not found - required for Jackify functionality" + details_message = "Protontricks not found - install via flatpak or package manager" # Cache the result self._last_detection_result = (is_installed, installation_type, details_message) @@ -93,55 +96,22 @@ class ProtontricksDetectionService: def _detect_without_prompts(self, handler: ProtontricksHandler) -> bool: """ - Detect protontricks without user prompts or installation attempts - + Detect system protontricks (flatpak or native) without user prompts. + Args: handler (ProtontricksHandler): Handler instance to use - + Returns: - bool: True if protontricks is found + bool: True if system protontricks is found + """ + # Use the handler's silent detection method + return handler.detect_protontricks() + + def is_bundled_mode(self) -> bool: + """ + DEPRECATED: Bundled protontricks no longer supported. + Always returns False for backwards compatibility. """ - import shutil - - # Check if protontricks exists as a command - protontricks_path_which = shutil.which("protontricks") - - if protontricks_path_which: - # Check if it's a flatpak wrapper - try: - with open(protontricks_path_which, 'r') as f: - content = f.read() - if "flatpak run" in content: - logger.debug(f"Detected Protontricks is a Flatpak wrapper at {protontricks_path_which}") - handler.which_protontricks = 'flatpak' - # Continue to check flatpak list just to be sure - else: - logger.info(f"Native Protontricks found at {protontricks_path_which}") - handler.which_protontricks = 'native' - handler.protontricks_path = protontricks_path_which - return True - except Exception as e: - logger.error(f"Error reading protontricks executable: {e}") - - # Check if flatpak protontricks is installed - try: - env = handler._get_clean_subprocess_env() - result = subprocess.run( - ["flatpak", "list"], - stdout=subprocess.PIPE, - stderr=subprocess.DEVNULL, # Suppress stderr to avoid error messages - text=True, - env=env - ) - if result.returncode == 0 and "com.github.Matoking.protontricks" in result.stdout: - logger.info("Flatpak Protontricks is installed") - handler.which_protontricks = 'flatpak' - return True - except FileNotFoundError: - logger.warning("'flatpak' command not found. Cannot check for Flatpak Protontricks.") - except Exception as e: - logger.error(f"Unexpected error checking flatpak: {e}") - return False def install_flatpak_protontricks(self) -> Tuple[bool, str]: diff --git a/jackify/backend/services/steam_restart_service.py b/jackify/backend/services/steam_restart_service.py index 2815cc8..1a83692 100644 --- a/jackify/backend/services/steam_restart_service.py +++ b/jackify/backend/services/steam_restart_service.py @@ -10,42 +10,82 @@ from typing import Callable, Optional logger = logging.getLogger(__name__) +STRATEGY_JACKIFY = "jackify" +STRATEGY_NAK_SIMPLE = "nak_simple" + + +def _get_restart_strategy() -> str: + """Read restart strategy from config with safe fallback.""" + try: + from jackify.backend.handlers.config_handler import ConfigHandler + + strategy = ConfigHandler().get("steam_restart_strategy", STRATEGY_JACKIFY) + if strategy not in (STRATEGY_JACKIFY, STRATEGY_NAK_SIMPLE): + return STRATEGY_JACKIFY + return strategy + except Exception as exc: # pragma: no cover - defensive logging only + logger.debug(f"Steam restart: Unable to read strategy from config: {exc}") + return STRATEGY_JACKIFY + + +def _strategy_label(strategy: str) -> str: + if strategy == STRATEGY_NAK_SIMPLE: + return "NaK simple restart" + return "Jackify hardened restart" + def _get_clean_subprocess_env(): """ - Create a clean environment for subprocess calls by removing PyInstaller-specific - environment variables that can interfere with Steam execution. + Create a clean environment for subprocess calls by stripping bundle-specific + environment variables (e.g., frozen AppImage remnants) that can interfere with Steam. + + CRITICAL: Preserves all display/session variables that Steam needs for GUI: + - DISPLAY, WAYLAND_DISPLAY, XDG_SESSION_TYPE, DBUS_SESSION_BUS_ADDRESS, + XDG_RUNTIME_DIR, XAUTHORITY, etc. Returns: - dict: Cleaned environment dictionary + dict: Cleaned environment dictionary with GUI variables preserved """ env = os.environ.copy() - pyinstaller_vars_removed = [] + bundle_vars_removed = [] - # Remove PyInstaller-specific environment variables + # CRITICAL: Preserve display/session variables that Steam GUI needs + # These MUST be kept for Steam to open its GUI window + gui_vars_to_preserve = [ + 'DISPLAY', 'WAYLAND_DISPLAY', 'XDG_SESSION_TYPE', 'DBUS_SESSION_BUS_ADDRESS', + 'XDG_RUNTIME_DIR', 'XAUTHORITY', 'XDG_CURRENT_DESKTOP', 'XDG_SESSION_DESKTOP', + 'QT_QPA_PLATFORM', 'GDK_BACKEND', 'XDG_DATA_DIRS', 'XDG_CONFIG_DIRS' + ] + preserved_gui_vars = {} + for var in gui_vars_to_preserve: + if var in env: + preserved_gui_vars[var] = env[var] + logger.debug(f"Steam restart: Preserving GUI variable {var}={env[var][:50] if len(str(env[var])) > 50 else env[var]}") + + # Remove bundle-specific environment variables if env.pop('_MEIPASS', None): - pyinstaller_vars_removed.append('_MEIPASS') + bundle_vars_removed.append('_MEIPASS') if env.pop('_MEIPASS2', None): - pyinstaller_vars_removed.append('_MEIPASS2') + bundle_vars_removed.append('_MEIPASS2') - # Clean library path variables that PyInstaller modifies (Linux/Unix) + # Clean library path variables that frozen bundles modify (Linux/Unix) if 'LD_LIBRARY_PATH_ORIG' in env: - # Restore original LD_LIBRARY_PATH if it was backed up by PyInstaller + # Restore original LD_LIBRARY_PATH if it was backed up by the bundler env['LD_LIBRARY_PATH'] = env['LD_LIBRARY_PATH_ORIG'] - pyinstaller_vars_removed.append('LD_LIBRARY_PATH (restored from _ORIG)') + bundle_vars_removed.append('LD_LIBRARY_PATH (restored from _ORIG)') else: - # Remove PyInstaller-modified LD_LIBRARY_PATH + # Remove modified LD_LIBRARY_PATH entries if env.pop('LD_LIBRARY_PATH', None): - pyinstaller_vars_removed.append('LD_LIBRARY_PATH (removed)') + bundle_vars_removed.append('LD_LIBRARY_PATH (removed)') - # Clean PATH of PyInstaller-specific entries + # Clean PATH of bundle-specific entries if 'PATH' in env and hasattr(sys, '_MEIPASS'): path_entries = env['PATH'].split(os.pathsep) original_count = len(path_entries) - # Remove any PATH entries that point to PyInstaller temp directory + # Remove any PATH entries that point to the bundle's temp directory cleaned_path = [p for p in path_entries if not p.startswith(sys._MEIPASS)] env['PATH'] = os.pathsep.join(cleaned_path) if len(cleaned_path) < original_count: - pyinstaller_vars_removed.append(f'PATH (removed {original_count - len(cleaned_path)} PyInstaller entries)') + bundle_vars_removed.append(f'PATH (removed {original_count - len(cleaned_path)} bundle entries)') # Clean macOS library path (if present) if 'DYLD_LIBRARY_PATH' in env and hasattr(sys, '_MEIPASS'): @@ -53,16 +93,26 @@ def _get_clean_subprocess_env(): cleaned_dyld = [p for p in dyld_entries if not p.startswith(sys._MEIPASS)] if cleaned_dyld: env['DYLD_LIBRARY_PATH'] = os.pathsep.join(cleaned_dyld) - pyinstaller_vars_removed.append('DYLD_LIBRARY_PATH (cleaned)') + bundle_vars_removed.append('DYLD_LIBRARY_PATH (cleaned)') else: env.pop('DYLD_LIBRARY_PATH', None) - pyinstaller_vars_removed.append('DYLD_LIBRARY_PATH (removed)') + bundle_vars_removed.append('DYLD_LIBRARY_PATH (removed)') + + # Ensure GUI variables are still present (they should be, but double-check) + for var, value in preserved_gui_vars.items(): + if var not in env: + env[var] = value + logger.warning(f"Steam restart: Restored GUI variable {var} that was accidentally removed") # Log what was cleaned for debugging - if pyinstaller_vars_removed: - logger.debug(f"Steam restart: Cleaned PyInstaller environment variables: {', '.join(pyinstaller_vars_removed)}") + if bundle_vars_removed: + logger.debug(f"Steam restart: Cleaned bundled environment variables: {', '.join(bundle_vars_removed)}") else: - logger.debug("Steam restart: No PyInstaller environment variables detected (likely DEV mode)") + logger.debug("Steam restart: No bundled environment variables detected (likely DEV mode)") + + # Log preserved GUI variables for debugging + if preserved_gui_vars: + logger.debug(f"Steam restart: Preserved {len(preserved_gui_vars)} GUI environment variables") return env @@ -138,22 +188,99 @@ def wait_for_steam_exit(timeout: int = 60, check_interval: float = 0.5) -> bool: time.sleep(check_interval) return False -def start_steam() -> bool: - """Attempt to start Steam using the exact methods from existing working logic.""" - env = _get_clean_subprocess_env() +def _start_steam_nak_style(is_steamdeck_flag=False, is_flatpak_flag=False, env_override=None) -> bool: + """ + Start Steam using a simplified NaK-style restart (single command, no env cleanup). + + CRITICAL: Do NOT use start_new_session - Steam needs to inherit the session + to connect to display/tray. Ensure all GUI environment variables are preserved. + """ + env = env_override if env_override is not None else os.environ.copy() + + # Log critical GUI variables for debugging + gui_vars = ['DISPLAY', 'WAYLAND_DISPLAY', 'XDG_SESSION_TYPE', 'DBUS_SESSION_BUS_ADDRESS', 'XDG_RUNTIME_DIR'] + for var in gui_vars: + if var in env: + logger.debug(f"NaK-style restart: {var}={env[var][:50] if len(str(env[var])) > 50 else env[var]}") + else: + logger.warning(f"NaK-style restart: {var} is NOT SET - Steam GUI may fail!") + + try: + if is_steamdeck_flag: + logger.info("NaK-style restart: Steam Deck detected, restarting via systemctl.") + subprocess.Popen(["systemctl", "--user", "restart", "app-steam@autostart.service"], env=env) + elif is_flatpak_flag: + logger.info("NaK-style restart: Flatpak Steam detected, running flatpak command.") + subprocess.Popen(["flatpak", "run", "com.valvesoftware.Steam"], + env=env, stderr=subprocess.DEVNULL) + else: + logger.info("NaK-style restart: launching Steam directly (inheriting session for GUI).") + # NaK uses simple "steam" command without -foreground flag + # Do NOT use start_new_session - Steam needs session access for GUI + # Use shell=True to ensure proper environment inheritance + # This helps with GUI display access on some systems + subprocess.Popen("steam", shell=True, env=env) + + time.sleep(5) + check_result = subprocess.run(['pgrep', '-f', 'steam'], capture_output=True, timeout=10, env=env) + if check_result.returncode == 0: + logger.info("NaK-style restart detected running Steam process.") + return True + + logger.warning("NaK-style restart did not detect Steam process after launch.") + return False + except FileNotFoundError as exc: + logger.error(f"NaK-style restart command not found: {exc}") + return False + except Exception as exc: + logger.error(f"NaK-style restart encountered an error: {exc}") + return False + + +def start_steam(is_steamdeck_flag=None, is_flatpak_flag=None, env_override=None, strategy: str = STRATEGY_JACKIFY) -> bool: + """ + Attempt to start Steam using the exact methods from existing working logic. + + Args: + is_steamdeck_flag: Optional pre-detected Steam Deck status + is_flatpak_flag: Optional pre-detected Flatpak Steam status + env_override: Optional environment dictionary for subprocess calls + strategy: Restart strategy identifier + """ + if strategy == STRATEGY_NAK_SIMPLE: + return _start_steam_nak_style( + is_steamdeck_flag=is_steamdeck_flag, + is_flatpak_flag=is_flatpak_flag, + env_override=env_override or os.environ.copy(), + ) + + env = env_override if env_override is not None else _get_clean_subprocess_env() + + # Use provided flags or detect + _is_steam_deck = is_steamdeck_flag if is_steamdeck_flag is not None else is_steam_deck() + _is_flatpak = is_flatpak_flag if is_flatpak_flag is not None else is_flatpak_steam() + logger.info( + "Starting Steam (strategy=%s, steam_deck=%s, flatpak=%s)", + strategy, + _is_steam_deck, + _is_flatpak, + ) + try: # Try systemd user service (Steam Deck) - HIGHEST PRIORITY - if is_steam_deck(): + if _is_steam_deck: + logger.debug("Using systemctl restart for Steam Deck.") subprocess.Popen(["systemctl", "--user", "restart", "app-steam@autostart.service"], env=env) return True # Check if Flatpak Steam (only if not Steam Deck) - if is_flatpak_steam(): + if _is_flatpak: logger.info("Flatpak Steam detected - using flatpak run command") try: - # Redirect flatpak's stderr to suppress "app not installed" errors on systems without flatpak Steam - # Steam's own stdout/stderr will still go through (flatpak forwards them) - subprocess.Popen(["flatpak", "run", "com.valvesoftware.Steam", "-silent"], + # Use -foreground to ensure GUI opens (not -silent) + # CRITICAL: Do NOT use start_new_session - Steam needs to inherit the session + logger.debug("Executing: flatpak run com.valvesoftware.Steam -foreground (inheriting session for GUI)") + subprocess.Popen(["flatpak", "run", "com.valvesoftware.Steam", "-foreground"], env=env, stderr=subprocess.DEVNULL) time.sleep(5) check_result = subprocess.run(['pgrep', '-f', 'steam'], capture_output=True, timeout=10, env=env) @@ -161,18 +288,15 @@ def start_steam() -> bool: logger.info("Flatpak Steam process detected after start.") return True else: - logger.warning("Flatpak Steam process not detected after start attempt.") - return False + logger.warning("Flatpak Steam start failed, falling back to normal Steam start methods") except Exception as e: - logger.error(f"Error starting Flatpak Steam: {e}") - return False + logger.warning(f"Flatpak Steam start failed ({e}), falling back to normal Steam start methods") - # Use startup methods with only -silent flag (no -minimized or -no-browser) - # Don't redirect stdout/stderr or use start_new_session to allow Steam to connect to display/tray + # Use startup methods with -foreground flag to ensure GUI opens start_methods = [ - {"name": "Popen", "cmd": ["steam", "-silent"], "kwargs": {"env": env}}, - {"name": "setsid", "cmd": ["setsid", "steam", "-silent"], "kwargs": {"env": env}}, - {"name": "nohup", "cmd": ["nohup", "steam", "-silent"], "kwargs": {"preexec_fn": os.setpgrp, "env": env}} + {"name": "Popen", "cmd": ["steam", "-foreground"], "kwargs": {"stdout": subprocess.DEVNULL, "stderr": subprocess.DEVNULL, "stdin": subprocess.DEVNULL, "start_new_session": True, "env": env}}, + {"name": "setsid", "cmd": ["setsid", "steam", "-foreground"], "kwargs": {"stdout": subprocess.DEVNULL, "stderr": subprocess.DEVNULL, "stdin": subprocess.DEVNULL, "env": env}}, + {"name": "nohup", "cmd": ["nohup", "steam", "-foreground"], "kwargs": {"stdout": subprocess.DEVNULL, "stderr": subprocess.DEVNULL, "stdin": subprocess.DEVNULL, "start_new_session": True, "preexec_fn": os.setpgrp, "env": env}} ] for method in start_methods: @@ -201,36 +325,48 @@ def start_steam() -> bool: logger.error(f"Error starting Steam: {e}") return False -def robust_steam_restart(progress_callback: Optional[Callable[[str], None]] = None, timeout: int = 60) -> bool: +def robust_steam_restart(progress_callback: Optional[Callable[[str], None]] = None, timeout: int = 60, system_info=None) -> bool: """ Robustly restart Steam across all distros. Returns True on success, False on failure. Optionally accepts a progress_callback(message: str) for UI feedback. Uses aggressive pkill approach for maximum reliability. + + Args: + progress_callback: Optional callback for progress updates + timeout: Timeout in seconds for restart operation + system_info: Optional SystemInfo object with pre-detected Steam installation types """ - env = _get_clean_subprocess_env() - + shutdown_env = _get_clean_subprocess_env() + strategy = _get_restart_strategy() + start_env = shutdown_env if strategy == STRATEGY_JACKIFY else os.environ.copy() + + # Use cached detection from system_info if available, otherwise detect + _is_steam_deck = system_info.is_steamdeck if system_info else is_steam_deck() + _is_flatpak = system_info.is_flatpak_steam if system_info else is_flatpak_steam() + def report(msg): logger.info(msg) if progress_callback: progress_callback(msg) report("Shutting down Steam...") + report(f"Steam restart strategy: {_strategy_label(strategy)}") # Steam Deck: Use systemctl for shutdown (special handling) - HIGHEST PRIORITY - if is_steam_deck(): + if _is_steam_deck: try: report("Steam Deck detected - using systemctl shutdown...") subprocess.run(['systemctl', '--user', 'stop', 'app-steam@autostart.service'], - timeout=15, check=False, capture_output=True, env=env) + timeout=15, check=False, capture_output=True, env=shutdown_env) time.sleep(2) except Exception as e: logger.debug(f"systemctl stop failed on Steam Deck: {e}") # Flatpak Steam: Use flatpak kill command (only if not Steam Deck) - elif is_flatpak_steam(): + elif _is_flatpak: try: report("Flatpak Steam detected - stopping via flatpak...") subprocess.run(['flatpak', 'kill', 'com.valvesoftware.Steam'], - timeout=15, check=False, capture_output=True, stderr=subprocess.DEVNULL, env=env) + timeout=15, check=False, capture_output=True, stderr=subprocess.DEVNULL, env=shutdown_env) time.sleep(2) except Exception as e: logger.debug(f"flatpak kill failed: {e}") @@ -238,21 +374,21 @@ def robust_steam_restart(progress_callback: Optional[Callable[[str], None]] = No # All systems: Use pkill approach (proven 15/16 test success rate) try: # Skip unreliable steam -shutdown, go straight to pkill - pkill_result = subprocess.run(['pkill', 'steam'], timeout=15, check=False, capture_output=True, env=env) + pkill_result = subprocess.run(['pkill', 'steam'], timeout=15, check=False, capture_output=True, env=shutdown_env) logger.debug(f"pkill steam result: {pkill_result.returncode}") time.sleep(2) # Check if Steam is still running - check_result = subprocess.run(['pgrep', '-f', 'steamwebhelper'], capture_output=True, timeout=10, env=env) + check_result = subprocess.run(['pgrep', '-f', 'steamwebhelper'], capture_output=True, timeout=10, env=shutdown_env) if check_result.returncode == 0: # Force kill if still running report("Steam still running - force terminating...") - force_result = subprocess.run(['pkill', '-9', 'steam'], timeout=15, check=False, capture_output=True, env=env) + force_result = subprocess.run(['pkill', '-9', 'steam'], timeout=15, check=False, capture_output=True, env=shutdown_env) logger.debug(f"pkill -9 steam result: {force_result.returncode}") time.sleep(2) # Final check - final_check = subprocess.run(['pgrep', '-f', 'steamwebhelper'], capture_output=True, timeout=10, env=env) + final_check = subprocess.run(['pgrep', '-f', 'steamwebhelper'], capture_output=True, timeout=10, env=shutdown_env) if final_check.returncode != 0: logger.info("Steam processes successfully force terminated.") else: @@ -269,19 +405,24 @@ def robust_steam_restart(progress_callback: Optional[Callable[[str], None]] = No # Start Steam using platform-specific logic report("Starting Steam...") - + # Steam Deck: Use systemctl restart (keep existing working approach) - if is_steam_deck(): + if _is_steam_deck: try: - subprocess.Popen(["systemctl", "--user", "restart", "app-steam@autostart.service"], env=env) + subprocess.Popen(["systemctl", "--user", "restart", "app-steam@autostart.service"], env=start_env) logger.info("Steam Deck: Initiated systemctl restart") except Exception as e: logger.error(f"Steam Deck systemctl restart failed: {e}") report("Failed to restart Steam on Steam Deck.") return False else: - # All other distros: Use proven steam -silent method - if not start_steam(): + # All other distros: Use start_steam() which now uses -foreground to ensure GUI opens + if not start_steam( + is_steamdeck_flag=_is_steam_deck, + is_flatpak_flag=_is_flatpak, + env_override=start_env, + strategy=strategy, + ): report("Failed to start Steam.") return False @@ -294,7 +435,7 @@ def robust_steam_restart(progress_callback: Optional[Callable[[str], None]] = No while elapsed_wait < max_startup_wait: try: - result = subprocess.run(['pgrep', '-f', 'steam'], capture_output=True, timeout=10, env=env) + result = subprocess.run(['pgrep', '-f', 'steam'], capture_output=True, timeout=10, env=start_env) if result.returncode == 0: if not initial_wait_done: logger.info("Steam process detected. Waiting additional time for full initialization...") @@ -302,7 +443,7 @@ def robust_steam_restart(progress_callback: Optional[Callable[[str], None]] = No time.sleep(5) elapsed_wait += 5 if initial_wait_done and elapsed_wait >= 15: - final_check = subprocess.run(['pgrep', '-f', 'steam'], capture_output=True, timeout=10, env=env) + final_check = subprocess.run(['pgrep', '-f', 'steam'], capture_output=True, timeout=10, env=start_env) if final_check.returncode == 0: report("Steam started successfully.") logger.info("Steam confirmed running after wait.") diff --git a/jackify/backend/utils/__init__.py b/jackify/backend/utils/__init__.py new file mode 100644 index 0000000..a5b51f9 --- /dev/null +++ b/jackify/backend/utils/__init__.py @@ -0,0 +1,3 @@ +"""Helper utilities for backend services.""" + + diff --git a/jackify/backend/utils/nexus_premium_detector.py b/jackify/backend/utils/nexus_premium_detector.py new file mode 100644 index 0000000..f9501c9 --- /dev/null +++ b/jackify/backend/utils/nexus_premium_detector.py @@ -0,0 +1,46 @@ +""" +Utilities for detecting Nexus Premium requirement messages in engine output. +""" + +from __future__ import annotations + +_KEYWORD_PHRASES = ( + "buy nexus premium", + "requires nexus premium", + "requires a nexus premium", + "nexus premium is required", + "nexus premium required", + "nexus mods premium is required", + "manual download", # Evaluated with additional context +) + + +def is_non_premium_indicator(line: str) -> bool: + """ + Return True if the engine output line indicates a Nexus non-premium scenario. + + Args: + line: Raw line emitted from the jackify-engine process. + """ + if not line: + return False + + normalized = line.strip().lower() + if not normalized: + return False + + # Direct phrase detection + for phrase in _KEYWORD_PHRASES[:6]: + if phrase in normalized: + return True + + if "nexus" in normalized and "premium" in normalized: + return True + + # Manual download + Nexus URL implies premium requirement in current workflows. + if "manual download" in normalized and ("nexusmods.com" in normalized or "nexus mods" in normalized): + return True + + return False + + diff --git a/jackify/engine/Microsoft.CSharp.dll b/jackify/engine/Microsoft.CSharp.dll old mode 100644 new mode 100755 index 24d16df03c34ae079bcad86301f5b065deada6e6..366b42b063608739e77d199b1b9c09ae323a8b1c GIT binary patch delta 3341 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 X8;Sbc4aY`Ybt~sh-wkm;-vIDWIUK*= diff --git a/jackify/engine/Microsoft.VisualBasic.Core.dll b/jackify/engine/Microsoft.VisualBasic.Core.dll index cac4ffedca36ebf7adb9cece7860b397f3e07ed3..43a70bde1f779fe9ef50599c1d9816e2594756d8 100755 GIT binary patch delta 3374 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 diff --git a/jackify/engine/Microsoft.VisualBasic.dll b/jackify/engine/Microsoft.VisualBasic.dll index 0e606c554d55fdd3307bb2ed2ead9aabf9f6f4ba..e06e0ad1cdc3dd6eafd1efd0ce81231423898ab3 100755 GIT binary patch delta 3364 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 NCa>&8|MYqJ{9i?y#mN8w delta 3374 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 M%&&_6I|qP&0N{+;O#lD@ diff --git a/jackify/engine/Microsoft.Win32.Registry.dll b/jackify/engine/Microsoft.Win32.Registry.dll index f306d2daa7379e47ff4a4e1fe8ee8b683531c5bb..6eb5cc1a36eee237b5e4227c36cb276cf37046d4 100755 GIT binary patch delta 3512 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 delta 3496 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 diff --git a/jackify/engine/System.AppContext.dll b/jackify/engine/System.AppContext.dll index 1d44a7b0ef6282747d29fd841e90b78212759969..70bd59f7ea0c396c92aae48be5141b151a32e9a5 100755 GIT binary patch delta 4699 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 diff --git a/jackify/engine/System.Collections.Immutable.dll b/jackify/engine/System.Collections.Immutable.dll old mode 100644 new mode 100755 index e5959af8c485ac0294681d225462b003a6707170..3f6a57e7abe6ca1472703557b46aff8608c9a9c6 GIT binary patch delta 3579 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 UaQo?XS7r$I+?HqGEq*`$1!m?BcmMzZ delta 3564 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 ObakKE-8lF{0{;XNsZXo` delta 3123 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 RzJ(~n1!TbBr^@C^{{fla52pYC delta 3553 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 diff --git a/jackify/engine/System.Collections.dll b/jackify/engine/System.Collections.dll old mode 100644 new mode 100755 index 8f98b9487014f873a9baf94fd49913ece8b28a55..1d1d055fdaa5486ee35f0af340882db588c5f17a GIT binary patch delta 4662 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 delta 4663 zcmbtYXH*njw(UfN1j#`Ok_3@d9mzBxNl~I?L2{A|0xd{Og9OPSG@vBOl9M0`B1i@$ z8UQ7OfCLF5dD`!NZ)V=SpR;b&t#kH1Rky0vs=e>6#uxMn>_HCX zBZf>`gQUnbK#q|hEC@~Bt;s!-+}n_A5MZxv%FSFJg`6F3}k`ML=to5Y? zRG4oVB&&Koc_vcWFS&pXHLC)HKqN+A2up3>)pj;&gftQ(fkGeYwztLF$yj4$un4rZolJvvFQjJa0)q(otwJCmfOzQ?e&%wxX80Z* zm=cmhytGM%evmHIK=suZK>hThdS;ZBBs^a~1h0JM{KUS!h3L)h`GJZ`!HLxzBHaQ& zgxdl{m{txH0){}CQ6LaZiRFmqyW&s5+vFk08L6QL`jiy`0A}oTNDTQokq8;gpA@hq zO}~U1lA3Fwl7zM_i$`G(^XadIt7Pshd^BtV?dns9Z@^5?1(#B_e5@bNU zn`*9hC1(AHgim1`Vt@HyU9hYMTJ5!siR2wgqs*nwMODje{Im&VDW(wenP%*+rEciw z6iIYHv{aEoQjO(&=smU%Efe23ou50yhDm`Ms}?MaJs{9Nj_Mh*@iz*QGog*Qik8@4 z#?`Dc;~4!ir-(=Gp!IHT9%Y-t8`v*_iR<%EvvE8_#8{22%W~}BIgiK6sU9y_-1(s5 zA&XXgNANKUY8<|#IOx9+gh=t59MOW_Kr|Xk5!x~oq7GKKOwSB&vLbGe7Q{KE?wEM;7Gc4+igK74cBLtm$RmjE+45x z$1QVP#*7N-2OAB$-*}jB*Dk$(&$h26Ywwr`nQZZwX_uf*D=Q)4UI~eCA91c<(4_6m zD%od+a*l<*-8+m#y+HH~ak#2Xe1IPiUCk4Y0}vj&|^YoDxNx?#2BmH-`pMHeu0n|$u=$)8jl;`PydloMK!vi zeZQ||Ok>I7+zp!hTnAKAo>w-d^4t3)WL_ctGamD`)@=A_lOrpEnC-f9L#)rR)(toesD?R<#^TONMNklO#CE4|w z)=2h^x#%dIZV;h(v1Yuyv&g0ppJ`}M;~zA&Y;-<>`e5^xtn-$Z0WKQ9*O6zQr?B;EWnv(R{kZ+%FePi%6Pz~=BpG_o~sDV6pP zGeoP`GscpWQvbN35ji6)4k)eXdZtcDS=d^)ru!y`Dbu}hPk8p2-zW(mSAG(9&)Bi% z%~v%m*LD65!==O(|4O=QKTeT&`tjU&gP)aR)ZrJ$D&E{K>`IqCUhEcwBdAMaoKr^4 z)NLX(1yD>YNU;cInB6PyZw)jrp&^tMu>kRW6e+P48bkk|av}B>dW+XJD^Yn{axLD8 z=8>Xs>AmduLW@MRL)VpfwfRChVLc5}@mr`df#X*;h$%lztjvJpZP_Q~)iYl2zCdhP zM5jebN-iqC;}e^v!m5Q)x;|U$kaJh>X1EN9*U0zWpNHw+UR9|1S^!!{2ud0knbQkaT zRufjZ`cvj9ZIGeYYRTkC(osOOro9H&owlPkb;`N$7!t|xvN_=Ua*e>i=nv%fFQYcb zNc6SLYDZtDGYWCTQ=8cNj-A#{d%`J!P3AHeRi-noG{$Gh`F!Jn#rU;0N}9##RFKit z#uaW3sz9mGJ5|h}p%mda3MNi%ijTuRjE z*+~GAJsD0d3J1f$L@6i~j3Bayk}<;nF&1`DGUQ6CXos?&*N4;mZ8>Kcz_1)5SQ$nH zE0ASJhBVa<<-guD_f+9l4ws%}vtT9!Wvlqm%MOSyp%xRVgRn%#ke z83`aU02YA+WROw_jD!>lZ3e&|K)^dWAw&5g?}3oMzdT0hA|UXWNHKHWaJKdK@bPf) zGwF&f*6Z@xZ>4uEybD@vJ|+o=O=ygx@padC2R2NvE^2Ld z&_^dyY>eydy$SN%X7bBmU4L75Qfn9|snZ-fc$NV~yKJ3DgT#qvG@ML!Rc1ZQ{uO)> z|Ene>x7+C&AkRi31`s6m9Jl=4at8F_LLdA}s?v6sDM!VfPLrvo>tDmem6lvfeC5Gk zt}UDA?_F$ekQg3T)%kdLo~*-+LUoK(-{_h| zYsCDFvXP4#>Oq#x)F*Yd+S{JMH|TFsH`eN!om^P5WNmHxVGvGuGS1qq|~+3vsk( z`<%^>M)kUE=|0V)ll7n7D}tV!UiEUBG>feZuW@VIkWIn%)#``%v7`F;A5ygml!VZ1 z#1g>?7akeFZ;$T~G!>k4LDxUpfs^wt?6fHI@X&fPUbtN#eXII~x)zu3)0Th>xag^8 zQQc}bc`Ij(b`einOc+!%w7K=3HbYZC+^yo0&DbiHvu!~Ojn*Fpdr^GWQn_VH%HFmB zn-4l3&r0Ue_4;sg8?A%}JmPUK6Lot)r)Kw!xLh?mzx8CY(CwQFOPD0MQOYqH%RC!KC%({lws}|W* z8WX}L*^GkIp2*lt1{e$*(p-FFqUy%0nWeomL?mo-#GlYc==m`jA9)Sagi1FD%BJCu zEUFlejKutx1R(QuOLW(ehUNu&OQE1t`NKl6`&f5_gh*Hve>gv7?ZuQ1w=@p-2g_<% zSwA>daZa!~4*>5{r*P=VzckEkM}1XfQG<$~S-c3rrKquzs@`rCNt^5XdW5r}^IIb> zo=|TUGq29+KY(h9sf~SQ<^Z31&8QhjXDohtf9<9F4H+@~3TALjO50c0Ii%w?&z4Pe zpU{aex{^0s3#o;9fUE z>kUfUzDDq;8a}B7eva+Yvn9h>7YixnE>H$Bf>OEVnmSoY*b*ISEiUk)@8LIkuE0 z@OazWl~J7%AAAVdl^?-O&xPF8yZ=FXe_K(NRaVv?E{lOJV(M0#s9gPqAct4gWQ2le zrws>!N<}hp)tMOWavG*ow!sHOt^@714s{p%iISUM?KpM|pTMe}(S z%8*4B{dI>)jJv=yt?0vJO%a}upD^)Q2&+7a{}VKk;s04z`zNT9WuC$%FMVx_GlrK8 zjk7(JB<^TNj=V|#G!{@VAi^aj>j8uu{F_@tBoQGiK*$mhG7p3_!+5`H_@@Y6#=l~9 z|B1uTp6}`s`i9WxSpVH`W#Ny0RPvi-{TUif_|K66ei(11kC!HEn0O<*`g>~36Tk1= z=VU5NW8cL=K0hy7P#lK>bpM<_fN3Z|Fd_t$4dsHbibw2T2T0ZE1KTC!P48Ssvv9_8 zYGEWsieZ-O_m$_n!hYb{QYF(&m9N4_ULGBnG7OCfqAGspQtP3Hn!0O>&Dn_7!zo9G z;{?z~ceb}dFE3s)bWrtRa;NA;FsIlElcat`Fhw>~kX4{R7OnW0(gpeLbE=7UdE0vQ zk`+m^l)B$2J1+~hwQZm)noCDNG_o<^T#DiP>O|MMn*=xD?C+)u1X~AcI4FlPq^q+k zEXfj%N%c-eU)rwYjg#H-Xsbh2j*WZ2)cU_K6dYZ2OY_5*MDcw8I{(&mVl{)ILLt-Q z=(do+!NSLt4+6hdr?qo_HmA5J1!_J&`;G1y?QNTo8MA~uCf2$aN133l5kKy(+1vst zzA#~j+njng zCISkQ9g-WFAb=pnfRq3t9i&PZ6huUk zCQW)35tS-MBqHs`_ucp1@$Ptg@3GffbFQ)W8Ry5GNs9~_iwsGzu-q`uqvQk=pi?t> z+8oMTFAu#4WypMPN(+Hd4uq>d2AG0!AR!0{5`u;(Ku{26N<=`E>iuEEP|H7rEJO){ zq0mkcEG7QgDi9Y+6PkkjY5tQVDEkkCgMgF_OF>j9mGl4H%9N-~nSp}1Qg{@^IVBVR zh;>tA?jWI|i0T~C1Pq-##gL*;b6e!UK>@lxCefcT2bLGr?Gug@H7OryL}7oxdKhhz z6vtH+Yx$Rg6Z_2ZW zCN#0mpBxRI^eJlRnw}$`a&r%AQs)Fh1hxLt3W1=Y5XHX~Km{a1RtbZ2!eTHO6&Ezx zNg3^eMj$X49EiZ8RWQyf7-eT=C6p@;<=nK302tGSd8H}86#yV0L7D+hCv)%IJu(xN z2FN3vIRpu3evyQ`0rRuGv`%}zL7p8(-{j135s7d8$6K}fPB94G514=*?Z0ozBQWiP z1h^kafZ66z0Z;(oP=Y{UT3jQA9yy!$-&3BTRHUYEAe#$B|7FX=grs~H0*O#T|0zLd z((oW)NqX4>DB{a|k5gvze~xM0ys9%=u70s7D=+2Ro~}(yzea^l1g^@e5;M%#4WYMY z%;?kR2Bhn2v5(|xPNd721T*8Tp2w=w=>NVLLiWj;GT?BJXQt;9KrgHIM+T<*Uw>pH zou~fPv$YK?x=h-%53NeWI@FhHcOll|uJ;J)+?9E1v4h9+8?+8w3i|l;p!=H2r7zLn z$A_XVrlNeU8~PTMtr+;ijrp5%Icc7<=XkTsEt;VtVTx*rxOFz!FXYQt)moy>lv)CR zkmXWpm>{PIe(ZNNYMKtT3+BHNG^1w^J(%2XQ(JI;sWU>I=pU-?xct_$AxyJz!y*79 zw?v8yx2(q7m-2d~Di`Z{BZx{*xKs`AvsGtyNApuGN3DCQwkUl`p zLvA~#K=$+D1e;HD;APcf`$cr%5qKF+Whux8GX>8V8G(ifc~F)Dz!*3rOg)_aZusB8 z1&A2=xq3PIxQJZ5>FVbc;BmvpU&O@2+ati$1;Gt+{%NP?U_xO~NTiZ18dOqJA)WLA zNBGj1J=nU;*`Knl2XJ7Ak@oUxmUPp&rY`Puw{oZi@Jlu)g=PP4Zd@x$w0 zp?-PQ0bjHZ2B{{X=H?p+;7yHCM8QkbB{eoGWg6Io-oYJy|tgw zSG)UH&oibx@s>JY+NJyR^S^o`=3hwF_LMhdXo?lGJvJ5|aNA-ocqzn?-f{SyzM?wO z6t5vvqU;wwZ<`+MzVcX}c0-FBQ-)3%PtvvQ((AlyDxl~v^d%+S|C5;{F@2yUPeFj!L>` ziG6g%i&sexjYNxIw!fRZGN< zC7?nl!#(3Le1kEq2C+W3!sC#N9zSZBh2&H*#pP5yG;D^=Was*8Z1PxIE`)2X`@yQ} zyZo9C2Y?6~hB%OL>K*`vf)Qz?!9gIL>;Kml!3n@##FnLp)-qIsfxDOM^q}bU&Zki| zzYk)3hqR)R<7x>FNK)nmV2v;Nb(~u`zgx677$;n;$o_6pgK)l>eJ_Wo$M>$h)2%1$ zrScsnvK`B8W!9D4L0cz?7wh@fdI?$msuQY=fS$fd<$?mfUBv@g=I@u2tPScLC+#&u z2OiYh`PnG549(kihm7yQwhGHTkg2CT#lB7Cwph!p=^4KZ9id|1KYoQDO>qrYxfA_x zw|kxc%l@g_>PGfmxaac`)RfZYO6+p+Kww0yr|O~lgKR~)D+#DG=rn01_>+XRA=ESJ z*47RwLt>-tyS%gmp)q*+d*nWk$zSS&`QqUCx(nY^FD}cWW>HiU@V=^jyK-3U!{j z{AWoVt(a7wz+ZY&WWVU;q3RDYJLu<@Elgi}zn19VT_~)_mKDY-ItC5>sPT~g&hITV z!(yAnU#&6p(<}2}ENS|3Ws5haGgp;sV&2I8u}-PDnUuc&?{O(dWVGmXK7l6{B=97` z>1E+i7?hw)MFm9=c)}^zo&V!PJl+(@gOoc3Sg3zi{Tcejm7ey+ROzzK9D&hHU${AU zd(70rKlMIuz$zO6cP}isR$Ic$fdr9gPz8xbQWio*K}i`+QkVuxV9IAfkQ6ctAWr8I z*j7OTjR;7fru~m&0q}`dv%fOL*X1A-ZwBBb#Tg)*6a3>>7?7e-2o)4%uq_zT_qSo8 zW&xdlhMMD7^rIh%^be=MJlg2)@<_Pz)va~s@noJ-h)n2Atm)tz~p(s3pc?>mxPN=7+irMwgv;l0hI;*yC(oYseL zZ_M@Z%tg@$_W`?dfvQD<{wvk>TYE)=zZ*3*XcC*X?meq1Ewal#i+iGbcup)|6lJkqIjnPDEP-AnPJ>8&JD1p?lGgM1-S_^n^4kA`~df1Zz9hFs!)8;Ebcv(Mxz%Bjc zcf+-Bwl4jyIR93$DPY#JR#~u#I;tEf2J zTW8DEmZXjAP7Tye{Se$+{K74ePIxQYH#Xjy{9l)2D$n zK>XynyQN3&m9V-6XxgDx!r*C>-tC*8?Bj=RWXSnS+LcwIl8)5H`b0b@ec??34c%d$ zXr;lAEYm{?UxGT_0?rUe`XWOYxI%aHl11+dR+SllG9d+iTy8!h7m?8ge(|Ct>ILo% z)Kpr8HOS6tSI(-bULjlTc2vllWZzgF9b{UZcN8}tRk*OrdfP&&-|E7*YdmU+2|_lw zInm{hyH0wGXevFwgBg5yC?BhE!P-0HG0fiCPe&|}LjE#C9{yJU?1F$UoyqF-IvZS< zbgI2dqvpw7zM@yARsK1FmnJf$f_lv#k`6ZGFN3Ho(&?+m;hC&#Yn~Z5Il1Vl8&?Xp zI(f9cYmQjE9PV%f2+h*)DS4Kq&l;ICj#XERLiLd`r%Z(C!#7~MvrB?ah(+KQ4Yesq z0MMkTD?sr-vVtJRt^#bFu7ewqdqMAS#|yq)SNld4vM4CnQ5bQLJZ%kq!t zAy7yVZTk;^LH-SZ0if!?^)~7XJq(JF17$#ZfEw~=004!6G?WVf=;;2PaN7ROM#RXI zD%OCD_?qA?Lt}yUj$kPNvComQ^nRF*yjf0clw{iQwJm;oTf)_z;Nh~=l1rBF8Bf&Z zDrU-e-mG=nd9;{3P0W7F-rRr817sRY3(P(89z6&4y3OzKyED>M>J!7B_6)M^u+~*y z>dC*)bWO=~w@0YNTrEMm!cT1ESbu-(^V)Xl3f`DQ9Gc2l-%@-wOvYN5%_j2Yk`&)= z;tT`od4QJ=-xH156a)DKp}0LOxayeqNul2%il=A^jOUqqP$t`*?g+7odmu`@bqqV> zHwkN!x|FL)^(gHmLY?*TGva2f%rnajyR?ciJeJeiJ|!3@_s&y|i==}M zKuCOH`Dbcua?WF`4=KMces>d0r&8#>@2_HLeomFc2!H+q7?DA$Sp_0Vuf79t{C_k_4d{Rnf|d)C<8SFMgSldhMMO) zvT)h>S%^Y(Rw1jmd*&~ zX8f$FwZspm{d-Hb-fvA;Hyu0U4IC4K;-^ytU*usr6ziHjbngcdIJV?_6#HW4(rpFI zJ6$arb|S=gIW8St({Q!D8k%BMv|2UsTg43XyPxA?l*E0+Rn|ye1tU+Btmpi!j0H$y zrJ}?}+&ej$V-seg-#rDJ_#Yh%u`3d#n?LcRPJyq32k+!ou}osKIln9WI$5LkrVYcG z<5f$6ghs~HJg+7xf#}Tcf^QO+W@y+O8Z(&KFlM=9hX&GfA$6;Uv?FY_!RsOI*IN0k zvS!uDOu?TMKee=OWWp16}EC&4+61BIPQSf|lU?Vl6l35HW8UOW*OtX!=` zhLuFbmG$Y$T05}Z@U>#dy~_5hOFrOym8w?_nWmV(a(o1P1rnB5F-ITAjTvS?8ODr#$yOo}LiQ~oqU=nDBH6bgOJr}uP_oOGHIXF} zS+iuxlAYi5Jn#Gb-uL<3=X}ridtKjipU=7fxUTz7pP@-0T~RQp2V+%w=8G(f zgjtl^M(diX)k8XsE(&hHc11uT5W@W@P*OHkC~qexFNc)1bCj>%Mgp{He2k)`Wd#5Th!;7fpcZ?m`*4>I zN(toRMK(y#PXb>jV5FVWd!yvw=9|2L=R!@T&!i2%h7?88@9>p?FSD23z4xng@pSVb zp27jd!}M~=04M;k$Uq=4HN+9kqROvxHl$CGDnfN9kj07wK?`;|6q@vpD5O04PYF5@ zzV`zrgoZ9a8rPCz6&>-QfZ@VJjqL6D5tCZTjuHIfI?S9i^aWMpNLBH+ksH0X|A`3? z)okT*%-T;WpQ0Az{?ftPxtBz;iaT5ADE`mslzH$xnF{&!U-m(W5^^D*?@XPQ@akS} z(Zt(_)*2WT)o^Zq_pwv>OUd=qxmjv9bSjydX5o^=eH?AdqpksaKhrS9>$LHbO5E6U&)G-5Q}1 zAGgkH95yXt`1H=Cv&qwPtMbRkk8JyT3QjKhz(k{;e5({Z{beaZwN6Ns=ZJfaPnWhM zr*xl{jC(lz{qA9u%v)sFz?oZ$yKQ}TrIh#lEL`x6-nRJw859D|$3uNUJk*mA&;v+F z#2bcavA0T^F_}?io9mV$Tv)#zgIW}1COk|q6;P=_0mLGC!80TPMnkBW0XW#$K*XPl zoP|zSP8Nld5l4eEGFSqAFK~>@P78p?6PRKRdK)?;Z}Z{uqu9nJ!sAu@1Tua;DW@7* zHwfuz9M<_^#i>sda^`>v<8@&JlkbtxsP?>Ij>+L0&Z9X#)7V;d?q!+gn+Kgm>~gHI zcWf4~y9?LS^gV$&MMXOzF!BXwPK<*VHwV93DLg>X2;MSWpD(ckrrzV=#^mGW3fLXm z#`dd9i7wL^p)f=J4dNb7NzG-LS$t>fgn|5u+2LMs#@xnd0FMXS5q#BD0H*~$#&7K}|-5M*TZttM+ns*Stz8&IBo`mSComykM zB6Y^`c$b$p?=~JdW#z^i&y?jtb_V+%sOJ11X|!%E zfL^y(j5Rl<(edkdsA*wIP;D*GEA1=B%E7KV<8E?OIuL-o9{778(E2FFMvTH` z<1g?zndyCTTrlNOa^LyxR;cNR-XN5W0%kaaxm9k4M4pnnmqa!FHmAl*5;xh1y!en$ zF*#NR;|iZIC|@4*`uT+ZLU7PJ_O2u6o`b!(KUv`y3b>&*D_cby;!|0q5>kpoFObjr zu+iM|;3KgD);Q{%Ae5d`93(FpsFobv6|Gmh4mSIJPK|lGYMm!3h{P;c9ns8q#&_dV zwM1Tz)tN7{*!q8NJ%9e{lt#8_?XzFWDb6!P^QbxLrrshA?b8S){xDTxqEkYu2`}9- z=b4}CLWaT*Q@>tcB4o-Tb9rx_;}bhhx4CxT$)mY@rHD>QTEFVPRNggCg|N7jObSEF zh~pyL$*U~w23L2y^lsctU#zwCH?&<5$8B773a!oJcvd@95YFRElc$qkJDN5mp$<8c zXhRoT4EC5wX1m<9CHHA1gI;lW<}C>@X%Q=#G@U)KOw7Zv`+Cz1xS6a_F{Zn!zVaQS z6UkE(Hp2IuXPs$|)4z7?xj#R{^tKhUib6=gxA6+Tf$?-4FV6aE!M}CVbSHX=2E|+h z=Hb~1Af7#$0xnJgg+cKcGBPL<&mK;~aR1L(*u6-QJK^;hV63F<{Z!wQjy&QOZ@nJp z1FaV=JR44{&#q}&3FnU5aPEHxC~gW}Y_zrGU_pT>G$@Bef$}J{EJlhXHw5Kzpa>>| z0c8kL697^u7tgc`;wkw-JUP{WO$dPN5D{Z*#7YJT$!-BSLFFrug~0r=AUTkvOGtTH z6dGdzhV}gIK^G` zyw!$in&{(k!Dx*6(h`eE`Jv0v|)b}=~-U8P(I`2z%621TqNwC+aNsXuXv>iD?h?+zd|Mj5WMPuu}L{%^LX>^6R4pL%|4UbGL5R`>?WpPjRyBdDxXW zSWm5uax&+Te_i*+9%fay6AkKABT5mKJt+5qMgxX$K}_5D%0q5KGkIyI3imj z7YO!$QdL3bNaScu@Zr>!2{~7VkC_z1zq^XqK0Ay`4w*f+Aw(RgJnA|;U=zx7x-}vN zzWD9Z^Q@?*-HTSEV1?|gp~3bmPoD3zk6?(@_sUc%ev7f!r2=qq<9Xxvw-&6~4Y(?X zvd&9B%YGARS-{J?|Kh}lZ?+h{B)ag!HI~dAzLyRq=#p!`NU5pp0D|7Jnb5{9DQL;6*vj)SIkx z)f7{J0u)!C>@)I7B47SFfvWX&1;%=H*_VdwwB73BWc(#SAj!9kYfLjh^X!+0-tGZQ z<^JuI;}@($Gnyl9T{c2W3Y1o9GXyslnEW;qy5FO}OmI1P$2F7JYctT_3)&CS)-9jU zEvf<3`dD+XezOWgCM5f@fR={m!6~7=`_L=mImx)gVupfv+H*t=^*eni8v8K{JDb6R z5JtXWQ(D$;clY>`kNhnnY$U+ zpX{&U7E}<@kBOO`*bsxF$nhMWE)E3=bTh1OA_Zyxl95IDzDlY&EWs{^ux%sTE5_>r zTOO2FtCj!KuM}YE(iTR@*ItVrvb}%FeO1nsIt7wnT0Ej1`T4nqo!O>u)8y!6U3kO6 zZG|}zqhYo8fvx2pu~_ah({6du;hGsnqe@lW-rk)0%(EXa;ydI<@(lyUMVTWx7RmFQ zyIt=z8h)Z{VTx_@?UWR%**?;2>jYvDSEl;vJMCXSpNr^6^;rb(yPle7Oz&-7v1xwn zAsBlxX)%2#G%vmDvHdB%L#TB9Ok=-@I-G^pB0!!|Q<-i}be z45Z^$b|_Xs0S<D@pr@T>mGj^Z3o2QC*r3VB@lRxu1ikWh;XUwCW^DOFVdo{MxvRxWz zOnTdUDU~O*I;_}N^mB6LBpIoXIIo?+Ee6BOsBT#9_dW;-Q_=8SEDTP;Zc*knB(l1V zY_lI?PG-A5=)<|26A&?2*yMEPs^;Q~b4@8d(LgAARvw_EB#;&{iQ(S{QoIVN@i)f~ zscC$5RZ5p-JlB=?q0;S~3o^w?;R0&WZ>Cufvp}F+19%1XpY$A61tvAw_}-l;m`IC` z*j(4O;54?D^&Pn;U`Gid@Ito~L9&TKOZN@uZr?65GKM||-REQwt>uvM`KRwnC zA-^zyyI&By3@D-+O-)#|?Vd4@NYXn*DxQZT8vmqe&Oy`JH8a>7pjeznIETPpeURTb_! zZ2eMJ6Vo_XRK%tvTRbPP919)994{}q+$4G%itoujUDc+lFUpjding{qz52>X#kz{q zPEW>Og}rja@fdlyeTPiowBTk)>^v7DOw9x`?)BiQZ&|U@hPM32%s#`Tponb0l=E7l zJR`SV{ascECS#^J3Qhbc=z2Jaf;u?q%x}F_?(Y_&*7Ar;?jzUD>1<=%J4Q3osQ62e zF(18`7^y3(Fw``cVg|d)HP+%naZ|(c18U4Md^}@;rPTvEou3Zh5xA}!DVX2Twb-C0 zn4O_LyA(N{(IQEmsyqfSqBp*wLA#tpwxv3$+t}Sg7JRtTK!0+-{%BL%M8rmm-GQQm^_^vDiZ_q*mU5#+6vSDZjy&fxW_t-XOvKC9 hi{?;4%5}@8KK~fuN2fKv=Gx{e@JTu6{~Wj>{{a*QuYUjl diff --git a/jackify/engine/System.ComponentModel.DataAnnotations.dll b/jackify/engine/System.ComponentModel.DataAnnotations.dll index d5b63a4445b810e8eda4978ac4b1267315693dae..7331c7d4ed29bb5c7b621f86ec30b61fc735712b 100755 GIT binary patch delta 3241 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 W3~F*pT6gS(PB~+X?XTZD-Tnij^|vMf diff --git a/jackify/engine/System.ComponentModel.EventBasedAsync.dll b/jackify/engine/System.ComponentModel.EventBasedAsync.dll old mode 100644 new mode 100755 index cf9bb8956e3ff46a1c5549433a10f002b2df464c..f7ab97b107fa02ae33077cd0d9c7005f33baf760 GIT binary patch delta 3138 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 delta 3138 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 Yaw)cXDs4acK0knU5eHRs@K2ck0{c9VqyPW_ diff --git a/jackify/engine/System.ComponentModel.Primitives.dll b/jackify/engine/System.ComponentModel.Primitives.dll old mode 100644 new mode 100755 index da2b9e272e3ceedf87334ae92ba2e2a1855575fd..09af95020be78594705ca75351a150270002efb7 GIT binary patch delta 4627 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 AcmMzZ delta 4507 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 I-!uHb0Q=6xS^xk5 diff --git a/jackify/engine/System.ComponentModel.TypeConverter.dll b/jackify/engine/System.ComponentModel.TypeConverter.dll old mode 100644 new mode 100755 index 2145f550153116aefc9579df084193b3197f6e34..0293fb6651bd8e3c01c0f51c9af73e7330689ff9 GIT binary patch delta 2058 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 a(-~aqh;8(5Wajr0%9LB|4`ZJU0Q?*8XJ+mI diff --git a/jackify/engine/System.ComponentModel.dll b/jackify/engine/System.ComponentModel.dll old mode 100644 new mode 100755 index 70b3fe6c2735949ed2578c1f2b6a46620e8852c3..fd9a2ef11b14468990ca7b34460ad4ff2489844e GIT binary patch delta 3493 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 E4dG(tGynhq delta 3489 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 N=2qM8-1OwG{{pBe&nEx? diff --git a/jackify/engine/System.Configuration.dll b/jackify/engine/System.Configuration.dll index 64ad31ed757d47a6419f13e8a325cef254f5f756..40a83876f3d8cda04979527169a25f45f48c250b 100755 GIT binary patch delta 3577 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 Ak^lez diff --git a/jackify/engine/System.Console.dll b/jackify/engine/System.Console.dll old mode 100644 new mode 100755 index 31143dfa71a7f1a6a7f1808be66000ccb66b9b29..e0179cdba540620dc1f24ec71a516bbf7fb9d21f GIT binary patch delta 3529 zcmb`KcT^M4_P}>HAwWX!MWjhHlubwi0Yr)-MT%0TccnK)g)anx(orcAiqe#hh#&+D zDyXO+0@6`L5RmGl7eRgDz4v>+^DBS8ojr5!{oK2A=FGV>cQ&zrt)hVKMj~>y*8fI& z>PhIVLHg)vP`*J4GzT%ck4#wrfbjzS4GB;>$cqPX03IL$$^ZdSV@MpJ+JHqSf!6yD zET9UI7;ZPfogw!d8SrET5gBAZcwfgc+P=pdfEk)QgOC}P$3J>ChE!vWK>)lMegfc; z$%@M7@=ASarjtAOTT?^!l|wV^miZ9nAo0JUiMQkX?o3jw%-f6U>-tR1nJUbZ$bHyg z#rzh_Wzu%!#qP(ei@S0Mr4|l*9%)ci%@af8ad@IKL5+x0jq9Q`c>$`a!?17=^s(_ql!?g*wO#~3;+lqprWn}E8}rkRTAFKokSv$J&8m& zHKHdGha-`^VVpaWO!6R;)I8Kw30~d=5BgDKs5M_)UV*Wy5Cp(f1%4Fk;dsONEq0I@ zDxxZ&7zmryT3-NcgB_=I#-5S)aS43|N3&Q!ildio5s$d0)K zQ$-3P5QJlI(z=(R7#hn46e3YpRUTB+evavY=5kTIlB?D9SHZFdFDOe8r(dXRv6D>8 z-GFQ<=Eu5EgcQJRt48;(%MDG?4;(SZk;6NaHd-P$u1%XQbRL?TpK^@#+L=qRLu&&~ zJ0xG8;GaPP&eCy?Ik@n^NsxCzDDB&MfvhJE~99TVlsGW6<>C zlVz3#7g}y7mJ7W6;=02FzMt)qTX9V>orK?3{)&4Saw+_PrOWZ{$nJ0yi=tBN6*oDG z*=91276G!fP&u~zvClRO5ZKM(U%;x^_^fuvvK8s40C7~oTn4-O zKT<<5o`I;e!YxQp#2$tDSJJR@fyg2%XoRGK$6+d{OY7N!q)w`hXy5JoBS}cyoWuLK z_KoD>%<5Ey*MDqfMdr2A{nPkyZjTv$re$$cVQ~CJWOTcDndXY1o5f@0Jtt_aP>v!QSvkZ z?prjK9Vp`<0an8kaq6ltk!&x>&QM{-)c$GyM`m-HQqE$=Th0PpwHE6l$iKMAkrt6q(WOuK+h-t)DZsH&ZSLI}3 zTi8VC+aab26psRY_Qhwuz3)czzWyH*wM}MjMcWLurRcMoDy6VFnfurT(`3#_+6^4I zFQ4ExOcCwhoVDxSTGg6SKK4eq_~5ORBZXO4Xt{`zwQsk}{w(?-QvEK(*G#{A!fzP* zDY;we)NetR+)nUC`OuMK&xIznw}(sKwxqbqd?4z-eh`q^yC@bIJq`+Vu8s6%D4#TE zqYFAHMF5|leEB7HS5c=`7upn6Owk)-el?Le^ye$gnSQntLVy5xhp}-Oo8~wy#>j0k z4x|8*4}0FL7~QL=Eq6ij)}m=ip8{$;pT4yRX@Hcm){mS##ul0qK5gR1qaQv-#2Jf% z)tFCQ}wy~1SwhZz_M0#QyXW6t2050k#^$&7a9#~W5G7U>4k>rq+d@1~6r%jc6 zS?m*``337$$R1c?lk|!fJ9*ulP1kUg&Uvm8-<`p~n7Jh*;u`mt|LN-22d(1gzp>bB zG52_~NTb_65kh}jo~fHGuU)J^@QU|n^XfFxJiJ1;5r??M%x?ozA?^K=O9jE=|KK@E zOJqTC^F5y&`DI6Fa2|>QWa^SZKhtPZ#VcBehI#D*Wf(l}GULQ`OUtJ5 z;h~&I6W`+0h1T@~oue=oSn3;>6s55=2{nTc*OttKUEvR*8s_XaS_75I(^oyHI}7Gd zf5jUYU%sn*pE7niw%LtGny=}TnuJWaygQJ=9zG}5q0vT(F_J&je6zVuIlw%<<#VD# zlt>1XRg>g)FM+TVzLJSORqyQeS%l`hygMSd%)5(fR5eMB7c z%89*BwKzT(X*I)Or&N5kiTfOo4V@jJZJ`nAT>qyUgsu{!a_gFcyx}Pk1cREs2=V;p)#6jt!c5QzJ%4W`A`dfxk>k7w& z5hS&S)p!~cOCcqWgYI>iv3qZwqsuRpxm#&gDI~Sy zEz|Jl1RAJId_WD%{_o2Gh+zVdR0uHmkrY!XV>2#4Zw9BvrrAwBixRTUNP%+OGo)f7 z%16$3-HhU74j9eB>^g@zzWUpi(Hg}UU0JV_puExQNK0ks=CLQb>Q5g1F(0b4nlK3X zm&!l%9PQi1k|dC!#H(BikFY40w89eAuiCGNn8gKhLM3N~OdTEIEt8%@8`ZG}INN(n&@FK$ISIS)fG(WyJ6rnv< z8spRXv@x<-I5^~xC3>oD_I48WZoN!!bj(MRvMMuf@X5Rzez0F}_m?c~cb5Uv?1p1@ zbb54x$(oaFZ2pHYCiD1IO-l-b6@c`|9UOrM355yj+mN^6NKK@zheEszLF1#|kdv>dyDi)J=@7-aFL!^796m zqn?HJ{36eHc|Ug=)H1wTieWhY7h$)sDkYp}&?@!ooDcBAzM ed-ck6RvnpZAmsI5Yqr>v0Vvk$4#sc9{_}Tq{OiF0 delta 3526 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 nVC8Gsp*2ct-MlqZ^xu<3M=72{ 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 delta 4801 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 diff --git a/jackify/engine/System.Data.DataSetExtensions.dll b/jackify/engine/System.Data.DataSetExtensions.dll index de65dfa46b14483d5f77e6985d1c4f6a9eae7b30..44e206d4611a5ddd4095c196c3e6a4e1d145cec3 100755 GIT binary patch delta 3396 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 delta 3388 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 diff --git a/jackify/engine/System.Data.dll b/jackify/engine/System.Data.dll index afdea171aa425a8bf436466b4e7b785cafb0cc2c..15fd8f539585d9088f87bc5805c473eff32e6c87 100755 GIT binary patch delta 3363 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 F{0sZTz=Qw* delta 3373 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 delta 3216 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 G0QeWwin7N5 diff --git a/jackify/engine/System.Diagnostics.Debug.dll b/jackify/engine/System.Diagnostics.Debug.dll index 0c1cd28fc93d2456b473dd9a1c61f95f167a2eed..3812f8ec8d02003c636e184727de8d09fb596e0a 100755 GIT binary patch delta 3438 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 n2e)C9$x!+{rZ8rFlt?7yrP}u$TkpTV$?rh$h diff --git a/jackify/engine/System.Diagnostics.FileVersionInfo.dll b/jackify/engine/System.Diagnostics.FileVersionInfo.dll old mode 100644 new mode 100755 index 53db88945424e9e2387e6417985092286ce88b1c..e92b1d3f42ebfe7e5309cd2f1d2ea1aa29d5273a GIT binary patch delta 3282 zcmZ9N2{_c-8^>qH7_tw;Ap5?A-;9}&X=Le!lN{&-0w;Jny+R2uT`*+)9F`$<(c7 z-o&##W`Z(5*nv428em&6cV43nCkVv)LBfng$P`!z4MKs?AS_4|gaPTWEDEH}h=jfe zpFI@RLE0c3OZEhLvFzc{1rbc|l%^KU3R5stXUL;7~&k)T|q? z!r_Pj$_uND^VY@bcZ@oyDi-JAc&+h$z)n*6~=jNs3`)#w_x3rvMc31PB-m z#NMX9PK=>)W(3Ow2Zb%^`tBB!PQR2$OLZk%(=R}I(>*_!B0qYzE)F|T^D>;sb$g*V z^82B&6>agWj}rg5-_Y~>4NqCpl@R3=pW#O06RUK`EM~1^YJwf(%K%IoT|v?lSHL&o=7Gc1X;o%k}n!KQ?Dnh3#>eg~`C@ zI&OIoLMsGw=-ad=z)Na1$#jxT)BmpNICEjnM+?M1yeUY8Zf(71s z3F*BA{MJ}*yz!qaej?Np3sx63`;CYAMWFJ{mGZS6ML_}Qm;tBaw;Fbui8z~Oi?|}c z4TsOnsoi=-E%qtbfcOU6#n8zBt7$&3#uq$!jq4xeRa7C{@Za1U&nut7zbP21jL}fc zeY1dHOeHDJFKkDBiVhna7)3$Guvpap-3sJyEaXQm z%yckN-6lMb*w(PWH7bGtl2Vl@>lrH8l1Y%!N2NKUxG1(?R3p$cl$Cbt+mhLW;e>qR+aYuHQ zJr+2MK%TzVFcsn0GWNo1f~onYfn$6>17>!ydck~hJNix+&csbTS6`sbexoeKYky~8 z`m^h7PrI}6V_<7|a(7V{cG8uLa_sBXBV z{Tk2TIi z?rPQa_TDc&j@_2E%j~3pYO&2iJ1MO~;QQc@BMp$`jv0As#;g_BhqLCd=_=*v3qh$J zr9SCDhPZys^54jvr6BbN?+E8f^S;SjdVU<>Q{x|ouz^8fIt6?Rpn%N)Nf_H%Nj|6u z6d`_vWNjSee{Qd|sVwkGa~xKz_#$H~M-NPP5BaOYf;SP*K%db#r%)Jg@$n>aV$mIIXYfyAvy#cuk)+I7UZZY7U#UK5cQ-;9QV^vAanglt*u-4bI6y zp4vD2GGCM$&lh_O^!yjM;q}Ls@?c8K8$B94lk}qt}RF^5= z?Y;8i4MBY^%q}%|0$zK^w$=F$?vMNv_gu4e7^B}eZqJ{uhkmlRJ$Zh=A~N}&?(NS8 zSw+>0aNA(Cf~$dFdg~*uk@95qHG_>4S>zek|!y$Dhdl8k(%k#N{ z%_g|LrG(R+krfJi2w(0z={h2CgnP8gp*q)@aTJs_?)$I@Q&OI+O1Vhx(-<3bz1`p2 zQF}rhjzw;}JRGQjgZV!bGwQ^ zY;DqyUyA68_wf5}x#d4#kv>=RWlzk)V=DCV<;asa&%7l+4&JZ=E>F%RC#Wk)+*#{Q`Yq^DY7LVQx*T^qQnfDL{K)S zm1VwP9Bv{rx3Yz^eaDo-Rs!r!dh4~uNYLXe@7IQO3Z)xNXi%vFJkStt`q(qa<}*y9F4J&Hd44*apYGCiIZic>1K`XczO3KS?wnD?1a9BE0-I)T z`uy44kOKxrRW{xc-DZY1QkbIRwBeo<6PXu+ceo*s0;oF=viSe~EEGI6mhsQz`r_(1 zD%#odQUq5!sF#+>t{^13WLMU^w&Ymr!KyjnVL7Ie`RlKuHe)n1l5mg!70rQ z-nyaj_mhyVl-7H0yMtV;;$s0{o)Anj|3;diFJ5Qfkvw@UH+(Fd)=&8s zbyLIIB3m@FQEj>lCM(~TKWi-;6|F1M)T(q{-aTkM@9pK5>Nce4c3eWWro@T+=to6s zi)5qT7+Q)f;exQ@?&Y;JydBkG`oL-tieA>$FAf>bQ9yfZtQV!Ig1+iJ^R-e)kURRR z?kn=6zw8&TZ8tZ*50Ty_(n6#MQo@2_LXkb|(ND`ocISTS1AVPfA|gV0BSxIodh+HF WrnGmxsiJMRxDxx*5k%P#)Bga6@2AHA delta 3292 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 delta 4663 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 delta 3031 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 B7D@mB delta 3570 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 delta 3562 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 JOWu-a{{WFw?qmP} diff --git a/jackify/engine/System.Diagnostics.Tracing.dll b/jackify/engine/System.Diagnostics.Tracing.dll index 143ca11bc2fc2c65229fa5c97c5f6f73e5e43bcd..a029b1222220666d7798dff20b5cfe8bf3f4451c 100755 GIT binary patch delta 4533 zcmaJ^2T+q;v(6hr3tf=jn;;QV2!Vh!r6^U9t{_e6ASw_kflw6`Fm#B74uZ5ODk{=D zNLNurx)cGaQvKui-T%LHzdQHNdFSjt&+hEbocGK=bI1gslmH~fLF%3{G$tn)g73^F zk81-m6d?cw;PVDQ6y!DA4u!(5td5zaUA8|=H?)-ZJ*#hLQAr9ITz!Rlps+Z5xsUX; z4bA`ggy%weIu2dg{iu0UdgldV6sxD` zKgmDY9X*+hwC3pv#1Acn?YmNAU1qqVdC)vmjmp|jr(mv9TIpNgI65iN7rg?q$vy}6+889mDEWQ&k!xhdnYG`u zGmPBmR2r-EMT@X-Jafvuu0f|j%Lr9#=EQ69@_UOKwac6u908>TFJ~hVUTaf!^cOsyyEXjz*s{q|9CQe6Q_`Ra9@q-?9vOIV7V#5I7ftNDcTR zFhjF`7+=UQ(=|eB_p#|YT_sSmi?Z^qo@+?pm&2|5ZtKEY@f0>C_0Q!~Z$9)U#Wi2D zUv3^>tWdebQZXbsoaxx?AnB&(m0xxG@g&k?j6rVPKCfZavY2h)rA6mEU%O4pLVrK^ zo&nbNMgjOsL!e5FJT#-CEM4QZw5-sfz^aHobNl16y^}NoqmfO!2XUx6MAx98hw5%? zpJN&Qoj}_g1a|*x1z;Kg1QZZ}TW|v4OT-DlV2P%oIy^0BtT?O~NH+RqTsKaBK7#Ae z(O3v^K-A%Cg;=;ULKrScB_K@18YC|_H=OGapygyyR8mADQF3TF3Z+bB6+FU|(s0nk zbdCqcy>B~XeMImDaoppu$V81k@ywO1YKDOXwz4jMgP4mX+3Aydf zV>Vh7tAk%9nZK6rmj52>s`IyUlU0A5O7yyDFq~^N6Ms*`Gz4EdUpxM^y~L>)N3w8b z3JjTCwB%2M?yq0Lx-%B+d@O0_JzwlgMt1`=o%f`E(T-v^~^! z+nM`OO7klcdc&JzMIgw=Cvx`X0edG6j;Sl6Cfa)$Tpsr zX#TSb291##t$gQD+>wbrn(u_sA)sXm?x`cTx=ykB5~vePNLZ{E#O1aBR|=Cz1U+pr zoWP$?OqNby`{$T|ow_3W^A1>n{C)CMOPC(pnMAJO&7_5!+a6o_jF~>B!?dzy#L`n% z_%kUFsS6AtW^ibmM(EwWW;!X;V7sk1Sqd>vwnXkWi%DsZGVi!WTBfet zbepRU5FKEpkBo%IS3U=QIP{S-kmSl4=xYpq&|&DYokaU9j|jf6@pjkhm^uCRDBhP8 zZ~0{oXC|EAJTpOIJ+k?2BeR?#9ckT#OJD_fLkjMbAV;Fntw3R4KHNgr-Du6^z<%BM z(sPgL7Q%bA0yhwZ7@mFXiu*DXJy6x#W3-#Pah2wkmujZ|~!&m-_u!wEbUbWk}u00Iy&G&BH$z>`DeGX95} z@Z6(P(Zotw9)4RorvH)|Ms@%~CIA;81VD#6ZnTJ#vf_r^y4l{AiH1q+lD!w*kb!4p zT^}1ig+1)vSP8ho@g|NFOy@SVV=Yq7%ZY>|(Qp+c8i_=V34;Vj0Nf)6-jDsPh$pnsLIDuXUPM~G~Z@B^vdC671?zXX55C8%J zheUO`N5YD53{|U?QPlc>%NCs4>u>mflsChdm^RA1ardTYvxw|SN#3w~{wjsrS;{ps zp<`~&EAJ(9k;X<#wwv9IY)U4q*h-65hh7@h=wHGxW&N9WO;}v@z0kp6=2ok;lF*Dk zRxJ9?H+*-$q9!s#Vl*SCcTLW#zAm&qR^X-f!LQ@iqy!o43~eeRK;Uq-T9 zYf`#zx4!=BI~O86DQ<)kJ#T{nX1dl|;wLIJ(4So1j=D}*1Nz&)&=qGU^ttj55_5ND zcMhR4g7RW6kdwKX71s}9s$zl8B9te*_>--5ZaexMQL!hz);Ks`Ic5(w*SjCSCgm4; zKT>*Uahf8K`Qocw?r!a8*|mDy%|T)OJKwUtq%)o>a1mQuFR;cyx>~~0Jf{ISAJcX2 z-n!4aSEY1ECg@qUyCHE0OQDlzqK@EGgr9U$MF(^E`SR8Ja#bl`QnjOa0b(&!UF6 zIs2TtUUx&L2bK--DcYWHnk>=R%-N3#)o)H@JJ`%=+R}mD0mqPB*6;D0|68|1uTF!c?~;C;v0N6&fUEdmnQUkW8nL}`@Taq`lZP&U%WO1CFc?k z`ejb-08g7{wWH1yooY%wA0)@Ec@reF`f}gXKx4!)Y+=Fso@@_^AP zifzb2Yw7xn+b9)185}ONc=3E!j+^4c33r~O%JnVM`@nNO)om-}F87HiBHYHhn;7C~ zh*M~nL>iO&^h$vfjuN=&AetH>GF9GBUQnLces-xxhOi;tnY|f0Um0s-2M(5eTvwl4 zt(IXU=cn*BucsQ{*;%`HUxb&d<2LZA%7`DCc8%s`1>}<=*m!f{q5tgK=?iwg-XH3a zp3z~_SN5hGZ=5xr6`SX)-R9gQkh{-qYl@WZ&k3Cmd%QMk8?TWcOj|CR7W5oPgLK*% z3%Z@S8p3In1B9=ckb^p@12aVPcV5wUu&U$>aW!%95(f#NCKE-MlY!H^ozJb4OS!1M zrYJ^|2qfLHX2~wE2z9^suJ=mrx;}jGbBWp6i`2hVTsitOE32rBx7Kq$Gvd<~neGvT ziXT_?_ljmJxaG?w&T6MeyBc#1The{VPHWQ4N;Jq!EybUA$v{jh_Y5?bE;$6{Vbv&- zt0xv>c3HI{uYPKjQ8bZ3^e1iL1h5tu0H{|7$oqdM88IEp!DXx^D|IWY^g(qP*{dbe zzzUl2@g>y{vwCoEo@TZfIS7!paz5Hh;I*>o{t!PnZFk}B_js|S<#FBudP~$woM*5q8zQbKWGdxx#Hspd!y(uq`|dI`tBoSae|3UVDw{sK(iSG;_pH4lpj=`~ z*IL*_;`_qOx~|MumBt>`E@11{hub=s;`o|tqfJ@xCdaXL%LvP6P`ZT<^kblzOKa51 z6gnq*7^70wVC-T!+X^-^fg*iiNFE zC+D=)3#H}9L?TpOSRz%sD(Usw)FEf8MgkmXC?NbTB}Rm}%Ksve2zDDh;{=b$Ail#! z;{SR>{j&{R93q;_V5*+fv^#eso0-C}QTR$&%fzf~Nb4?(zYV198*L(-`Fwue_ z1TZLm;Th}3b!WJED$u?0L5=aF23tnNl}&aeoIQ8@qd!t444Rb6aa;A=C0s50-6ux+ zSQ6foUpz||*vR9_3K#tT!}Vfxcbm!rq1p5;;CykeQN^&P90%** zh6!k+-=axDLD(d63jZeU8Jr>u3QBB%@hg~v{rAtwd%wGUDKr8Rf~XjFl8dLom}vdD zkCE%V^4VtcN(XLY0%e4zvkUY4Icxlg9*1uj?%{!W|KwADKBxwvWi_9)NaFA{G1@4k zTmg~kBrYX0nPRxJ}>!j__yEn_)c#9M2=LUaO3EZuyHaAB4OAvA~i+a*y%H-a#I6H1n^eo)?|Qhf=>+ zxPR+kI_zD#l>hVBPKEyuTLs55=eI-8+M{lE7Ok|?%zZY~l~R-M!8EhHsBO*Ov}4?k zs-G?#&kSo#DaK^WwQ>1jdM|i|IxresF5eceBEDEBKf{R`$L4-+y+Es`;tE*W`-LGa z60zoK3p~SIGGoUU=Ap8TqeGs?;G#Bl>*X^WLlsSZ^l>9k?aQW}J)xs{Q&-K`J1}3V I4{{LbUmNV_cK`qY delta 4708 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 diff --git a/jackify/engine/System.Drawing.Primitives.dll b/jackify/engine/System.Drawing.Primitives.dll old mode 100644 new mode 100755 index e7e88e1bdd8a6609f737f896ede1e2e2f1ced25d..e47e8e14c385bdab9644ac00fa9aa848953beaf3 GIT binary patch delta 4486 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 delta 4658 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 delta 4528 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 diff --git a/jackify/engine/System.Formats.Asn1.dll b/jackify/engine/System.Formats.Asn1.dll old mode 100644 new mode 100755 index 35d9e4075d46a108ad693be4f05b5078404a7cab..3b64434eed80d7b7f5c6420bf8b21bb5b986d098 GIT binary patch delta 3302 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 diff --git a/jackify/engine/System.Formats.Tar.dll b/jackify/engine/System.Formats.Tar.dll index 051253bce5b7d5a7379e69dc85c623111b1d46fa..406f6e93ab77b3d2fd6f2fb15914d8f069790b33 100755 GIT binary patch delta 4471 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 k|pL&o$(K02HCH)c^nh diff --git a/jackify/engine/System.Globalization.Calendars.dll b/jackify/engine/System.Globalization.Calendars.dll index bdab2aa779006a63f30ec11398a14ab20b73a58c..d2f78c2cf0142535bbec6304de6ad7d03a1f4c24 100755 GIT binary patch delta 4703 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 PN=vZ}W){Z3|G@tXdZ_jo diff --git a/jackify/engine/System.Globalization.Extensions.dll b/jackify/engine/System.Globalization.Extensions.dll index fc51823670377b500ae1e3c10feb9e85e1c52e70..b72515b9b41a172578eb924f662f76a7979eebe6 100755 GIT binary patch delta 4699 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 g@)sJjzoPK2u71RZff|P>$q82=+V;tl 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 diff --git a/jackify/engine/System.Globalization.dll b/jackify/engine/System.Globalization.dll index e6292db00fd03acae91fac8a0df5ecfdbc6f6ab6..58f80b20d4b469338dac42ef1174855630f64086 100755 GIT binary patch delta 4349 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 FzW~|TxhDVs delta 4384 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 X)8N}dhw~1|Pv*ah)sL|zcrE_}6WqH; delta 3353 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 OFTqOxNC)e80r&^ynDs>f delta 3545 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 Fe*ljh@)!UB diff --git a/jackify/engine/System.IO.Compression.dll b/jackify/engine/System.IO.Compression.dll old mode 100644 new mode 100755 index 965d05b020bd9715e07d887d7a44869e023668b9..e5e6eb4680bd51ee446dd72643aaa0a1d7232801 GIT binary patch delta 4313 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 diff --git a/jackify/engine/System.IO.FileSystem.AccessControl.dll b/jackify/engine/System.IO.FileSystem.AccessControl.dll index d4dfcf8d9e3c7570473dc82fcb2ac53a35c9c76c..53c38d4b6f13c4fc738df50a7b9bc6557a2e758e 100755 GIT binary patch delta 3179 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 CfS-Z@ delta 3179 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 Cii%JG diff --git a/jackify/engine/System.IO.FileSystem.DriveInfo.dll b/jackify/engine/System.IO.FileSystem.DriveInfo.dll old mode 100644 new mode 100755 index 51f189e9fbc09d569f2f5419c27d203827858337..0258a03c25dfcad8f36aebb86b403335821913ab GIT binary patch delta 4297 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 f`BL0YF}a=VYmIHC5#nh}lx_W+)YqelQojEI8 delta 4331 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 diff --git a/jackify/engine/System.IO.FileSystem.Primitives.dll b/jackify/engine/System.IO.FileSystem.Primitives.dll index af57f82d71ee9c1579cef8f33eeea20009334495..9bf2dc9073ef3ce24c394186171a4ad8db8ffba4 100755 GIT binary patch delta 3574 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 z

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 diff --git a/jackify/engine/System.IO.FileSystem.Watcher.dll b/jackify/engine/System.IO.FileSystem.Watcher.dll old mode 100644 new mode 100755 index 78178325c1305d15da4ddf566f2204c78b9f05de..5c3e375d7a62e4e76926dcf5951b67b7f8e2761e GIT binary patch delta 3534 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 S8B>2y(2e*Ym-o*B0RIDzE(wcJs+m6TrErfQg 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 delta 4507 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 O#kfjs@~@7+#{U2jal91( diff --git a/jackify/engine/System.IO.IsolatedStorage.dll b/jackify/engine/System.IO.IsolatedStorage.dll index 607c44884e1e49d75d36742174fb0220dc2dcdb5..6bcf19e532f02403c68ea143439813b0a39ae1b3 100755 GIT binary patch delta 3539 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 delta 3524 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 diff --git a/jackify/engine/System.IO.MemoryMappedFiles.dll b/jackify/engine/System.IO.MemoryMappedFiles.dll old mode 100644 new mode 100755 index 4273291be03921cef89b5d058d7e1ef33d914b9c..6b6510327420d3603546b8b55dfc20c64993ded9 GIT binary patch delta 3314 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 R=`w^T( z7ZmHweMYKZ$XeyO8>g(U$39n|LQJ3I&v|0xrBYl{=rgK5piIBk<9b?)yVq~eonc%j zA?m>!_5JjfjS;cKqfz9G4%6X&@3#dGRRKZb8flb#+D#=|A!)5spQ9q~dQZ9k#8t!k z*FgxIsS0+l17QQ#;-Jd@v`U7tqVvlojq2(0sIsEExgSD delta 3348 zcmZuzc{tQv`~QB&Sfa5DJ!Ht1W#&68L$++Cu|CqJZrkKJeK9%SsDzB^A| z^g{I;P6iB(Z7n6pwg*k(e{|#CgnN~=C(Q|ZHxNbjDt8JZK&M6K51v2|M z{SiXRw!RNfsx<8|RJ8g6#RNk@0LWf@D9Jo0a!`aDqmCt@a2O0mjhUsizmWfS%p0Xl zS6*_tr_K6a1K(9grw|L{E|%kwnDc-8@N5nbAo#DdZ8>t-@dcL_NaGu}>-Sc;W^ES@nY8(q?g8_9*#XTMqj(Y(KXz$lUe{3f7EAAY6OydW)5$snW z>cJE`?GU(ujOn)3vl#({aB)jy!;-L=LWeUAQ`>Lc&HP21a_HDZdW95dODQ_l*g-BG zYlFMSnKUgUZ4dj{70tWHC`DSH&fV@3nOtdhsr>?;I-VReTA~%3SC{YPHY4>uEtLLS$#W ztVPz5(V6)Icha{e%pYYF-L}t;PWnv;C&NvPcVla!ycdlhuyIe1n3n52`Kqfmp4Gjc ze6X~Kv4GFBwoEYXt+&}bNnM`T^w4L1v~v!BSg$Cy$oY|H|980-_GwCQxS?8Dn(8b` zKG?gP`KPZaQoGinNG71S`Y3g95S!^^DZTMb@Ljpl_l#tpip?j^g9r;YT;o7YdR&db zYhnL)TNfM`++wuHm(Us&jjlbo>lt2=7dqEYz8Daa;4aItY?_G#7#N=vj>uJ4J?W?7 zu1hJAx;Gz1mBz2UZ*?xKn~L~NndGU5^xG#?y6lh?!u`NG@w`)-)~rXs zPO`)FO2p0ROV>w^j0Je~^$cMs^=?6BTybpEBsbNK>$6I}kD66`?1r(M}z66*LGe>zPgLH5aa7&+)u6X9C)AsGH*p9 zhafSDqHo)V`!%KvWdEq}9nu|sTYl?jr4};0ra_c0NSeI^U%DUj+f*P7pp=Sr&K=r{ z_OCEJE%Y+`g?O%KP6I3?$Lvx?c1m&Ute!nWUu8Ohc0<%WY7_anGAwgr=P^ZQl$qKa zXql^$@6tY<=LFQPMy2CgqRgJ{A_lJ!{}(0WBAOB_5n`S_ePISF}UFj2cZyz^XK~J0t|eu1ZdjB2C0jB$;)x4`IE;Ub0~lsASLA8(`@w24k>W$ zhG#zgOxTe3i>uJzqtqPb9TKiH z$qMGg0oiA;0~1%oJ?`2!>IL_Hs^(uz@pj*x8JeaQ8bu9^s!6!}dgAx)`|^u6U*63x zY*K=0es_NB?Y(wu_ zp!+nM!WAox?l1BvF@k!T*ZBl5l`$Mv;;!gwHKWy!Jx|Lh?cxsD^xrAonhH0%*1URI zAz_J-EEnB&xz1Qf!GX84R@)hM%ox=-jNFJmeMEor)T*s%S2U%zBig)v{)h3;8Jbsr zpJjnhJi|kWXG4h^cj8%niu2WTvVj3{bCn6PRbksEpIevwy5Hzm4_N2FGHrVB%Juez zmY~5(#Y~t>!8_mkF)N9j7Zdd|A3ka7MRv2NE?qi+;15)fYELexS1FR7P^Z!OmGgpq zhiv*Ob}>pbJL|V7+(HwfE#%4%1(E4}9_(f-#ZAg?R*FjG>8(~-s)>p*Ug>(_} zhJ`~5u|DhFORLkki*t9KJ1cFa6zUIECXk!%RJwK`{H71Pu?hHy{)R~*ITSbl5F0l) zt|sLa<~l8$7ewv-NP1qmw%Z(W<4$qub3QjhSy25nr%N0b-dKLP{jshRc!`tU0;0my z=}$3W**_}_icZIZ0>UN>p*mjfA4nbWV?A^Gxxt-W8!q}2ESN|6^mT&{$%yg&UHpgy zETrb}H-Llw0-!KR>;LL*ygfG@#GqM4ksHPi{5k*z0<0Kh^=8>aFmMmz{C6zm_m|-N z3DI8y;y<>-Fp7{ow4Z~UK8OQ}6c<(1L9_i2KQL!;mBWM+6D3`|g| zCtZzK>RhWAd%5J|s>h3X7~mK5HYV(tl^DB?#+g(c9JK4w)KNd#Kv#)vNVwCGuDAX`1|4&CF z(RUWkoyf5TRr=3>4_r;Oc}_&kD{A#4MLQcQ6irQB`sJ!@twh|Jx#m_K$-Gf926|`> z)!<83c6_oW-ra%O3NNuz6&-~UkJC8_;8ni=ZX@LcP#1Zy4zE`-Lg0$Kyo3zs@o{H5 zQk5p*PpV^;na%lxYAHG=5j=Dl43-R%`@9&NRo%F9?##K{x02Wjb&PWe!TVoiubT@d zLa}-D7AzP?`JW97l7S;rZyX_=kU5m^fh**+xlt6iZvJG;U8=u#NRy@ zz{tZF9hGeu+2zrTd--mV#UkbI>vaNdC{c56u+KTRZ>Gh3VHCPshkKzuApl! zncb^s=nQ-jAu*zRty)Cf%^Iym8Htpt_eeSV=ZqnGu-bA5W<}=4T)tlK*q~q$nTApS zkXc5VTo~V3?t4zo)h_V%dF}FTPQx2uFy8MeRx6F3J*zV}VYa!p7CPR|2qg=}xS%&X z)||&Of7fvwAl|u`)r61oZ?;gB_lr2iW{{lNTrjP&t diff --git a/jackify/engine/System.IO.Pipes.AccessControl.dll b/jackify/engine/System.IO.Pipes.AccessControl.dll index f85837976ed469c434f9d3f625eafc1624e89503..1f64b25147e43ae805c9e3d909b660cb577ff4c3 100755 GIT binary patch delta 3274 zcmZ9N2UJr{7RO&gLP-n~L5c;CE}^7{Cej3?x6nZ_f`Ec_5Wz^4E)oa`e1dev2AF^b zkfMkmMXD&$RC*PWswlW|*WEq4GjrzN`Tg&?@0@pL?xoj(66-+pL`eAf^@{ZCW?Z*4 zKIvqh`=GggMa%N&it)-189zSnnTn%C(1u}633D_Iq-lNN5=yc#zpR1 z0s}=YhYqeUnBLu!anRBKNgG3k=bYppxH$U)ybd_;m3z?%qxVKG>O3Z6v3;FyTa0|J#^mG_uU zBNjz+=a|zFkxo{rd>iEWe}e!34+2!xRM09|3<^iYdY&c{iRxzv1Wyv-3;}~761~xw z(*$)QMV&~ZkZ^b}Z#;$dK#9yF!F!bRBf($*O;h;E&8HY|9KVGC@qi0y3ZFS>o*{v^ zktF#7&SH8^jr@ZJY6l={h^#RAmhk$^mZ#RcUoY+19$=;8mk{t|H0?k<7z9GcW-)p+ zuP}J^gCw&aByXNucDXQ90DBsz0@a&etw+>HN`+Vzwee_blYt` zV!9S8P>GA{%fN{!Q9~NaOU-aG?*p$Q!aEur;o2u)W(noPhnuP<*h?U(g$}oQ`LPH2 z*KA&cNkS8aVRKedp)O%>H-d?c$-&AtIWoal7VM;OWfNW=IB(p;wpHzxvNzd$`gbcY zAGou0qC(3kE+FKZYIGm<*|Jw3OrUEsn(t;XdBvo2t<5Y+R^L~HJe4sS4ze5`Gu{xc zYgycHQHK;pcL|48hs?{C`st~yxRzRG?v@SjoB8y5Pub_1e!mEh*;fuGJ*MOJ^%V*C zT^oB-=e|--w3@S$FvcA-)DHd5r&V`fXTo`1TQqr2G}i81IX^H$J>|6?wERd|YqPn_ zcV9f+pRdi7(%M^+m*z{k@hPxO8oGIj|8`)ifgGVA=cQg4`^^uZ!{v?ilgQneJpRKt zT=SPxhy|^FzuPb9Uq!-1^<`zQu*o0t7dy>2!wyZh6xl-a-z8;_UN(6Ap?TkJ#ZMtu z^Sv@_Jq{WfmNj=T$6;+A#TU^;GSM^kT0X) zgsoOe@4BF`hs-f^?Es4ot#kbklHJcU?2g4)ujqz0G~qvjxqaH>U@P6Cf><<`fL6y6 zu$+Oxs*tei3>CvWU;}+dgfUL8kcM19(|9D&G$?N&7Z?Nv3*tCelB-_a6;L}L+5vE0 z2AGSXYLq8LbQVEiiD*10jXEBSCpx2JI~jeNWCq??_h0Gks72ZOJhOnjri4(!OaG+4 zP(}HqfSpFlpJGR?w|mHiu-~Yyxr^?JQjprr7(OdD2SwQc+TRE6={>l|e3cTE;bZaNe;9Nt7&FOc?&yu&99^okT zTC7_~ucyCsP65zGZC!wlw@AS0JE#RD7J6 z&b|4?Oc?9p`5|xWM?S5?Y+1S`Q*r(^>Fns6qtd-|+Fl)UN29u}jVOn)t2W~+d0Of2 zzP6RMo;LblxofO!;>A*Umfc%0A>r8@HWS`x_LQI{myXd37Q`Y<;a`7l33 z7$U?x>ZEfSIZGcI5x#W7t!F=7G$V$!WugJ1(gj|9sM2P@Es_24;4n${tcSqEv%fTZ z4E1k=pMaDu99j`2*aiCx?r$HKmFc?JYeK#VihYPI4%txIV>JG3&HmVJ$03&Jb^ZY- z&#d0PYJoT+=*;A;dk^`@waT(!Wzye!la{mQ=(`1TBqpW(5oNBB|#{ZHQjKoFR+B#ihZu(tUjT*KK#@)f~O< zU-PxjvNE1ozLAC)YL(MdL3}Y#fl(CCBs_OJ;s;A+PlW20xwlx9Oz+)^tyL7cl{{<9 zgS;KIs#iCyRGMHNhcW`erJJ^N?s=HrJb-#Yq51r(5=N37zsVPf`(AdLuG2WA4W}YT z(i+417PCWYgzRs*v{&2c{B2xV^cAvVVaWgDOH87fF4@<`Gc#nkB#|5Ys|0hTS~Apc zq9_L288vALHH__95IZ})V+8^iww*z$jm#%>`J~z|Z|L};in!ybGSYO*DMxQMmLWag zom++O)7|Sb=Caf9U}(zR4-)sBAEK$ZLtl>i8A`Iu z1tVKe9UjBb8#+qr4-ws4sB(wM(UPixh$iTL@<*gjhB|9C<;j^O6ot*^{ZQ7hiBzo~ zt#c`&t<#0NzI3NFHyWDkQ-nd+S$?9#TPs8OI-JK+%dUdmj~T?$e1qTTzn=(HC%o5sdZ}zpo{zuo{1U&oB zg1V_xL&B)`wxBXPHiuDVf0fbX%uW5jkD#R>lKloyb-^3Xr)WCg@`-dTQPBRJ#V|$1 zCoPJRKw7=Lghu?QOM>7~073%;wi~>U{J%I!D>TfwKbM2&rPDq>E3AXI*~QS{D+UJ> zJ@2wHqDscbP>C&d=eSC)Wt>FuZK`$KDz#+xKtN`(Rif5k&PMtB*=AuINj4ZvVP4x~ zQQec1Yt7lIjV90m@$4-dRgnq%-r>n<n|aMg zBum#LCrtv>BttN}t0#Y%3fU|cze~;^cq{xQ#9O9NbtuBiW3!quRpqa7u`aTEmPp;H z?9N<-m$bLuacFL(=%bouog=q}i&>72J4}fof*bw`-&(fC&vE9lNUiBt3IuicZz8d6 zbVDlYSV8Zqg}Z|AT)x^BJ0Zt!vL;0XDK{=~Xr-2{);s%A>}50*KQ_<4Sr$Ml1CRia<+MBOchJ%+1VldZtX zls$n~WZTc9Uw(7t({nPvP>jXHWrXy`PkF!ii)DT3UU}5V;iiEQch&mmn_nMGRqB>y XAg<2cyYZOsrrP{4;@%O#n)rVJ*9ezy delta 3284 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 diff --git a/jackify/engine/System.IO.Pipes.dll b/jackify/engine/System.IO.Pipes.dll old mode 100644 new mode 100755 index dbf65836a3bfb22d53684a533934b0be1a27ad29..614652f2ae805be21ca580b7031bd44bdf05a560 GIT binary patch delta 3340 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 Ol}?%io0pu4*FOM`7TFB| delta 3349 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 aY5^T$y#bXD%qkLW4IXXn8H`^z0Q?Jxps$z! diff --git a/jackify/engine/System.IO.UnmanagedMemoryStream.dll b/jackify/engine/System.IO.UnmanagedMemoryStream.dll index d76f4814e7e6e726ad7a68027b5a47b75eb2c30c..7a8d31cbf05c484e1bcfb40303163ef419c60e78 100755 GIT binary patch delta 3598 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 KJ$AoC?Dik|s1gbQ delta 3582 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 LxySl4Kp_7GhY%5k diff --git a/jackify/engine/System.IO.dll b/jackify/engine/System.IO.dll index 3fdb611779c1101d463d09fd96f0d824e433135a..24c7f111aa5f6a0e92964aee4eca7fbe85bae686 100755 GIT binary patch delta 3397 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 delta 3441 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

    ylpnfC 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 diff --git a/jackify/engine/System.Linq.Parallel.dll b/jackify/engine/System.Linq.Parallel.dll old mode 100644 new mode 100755 index ec227a0116bc25d5451d6727a659456585fdc72c..f251ca472955c300d5587daa8ec87021a384c1ff GIT binary patch delta 3582 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 R!3Hlj-{$T)*4^UI^Ir}+3043A delta 3567 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 eX@gCMzM6oVZQM6=iT*nQ0RIP1+Yc%L diff --git a/jackify/engine/System.Linq.Queryable.dll b/jackify/engine/System.Linq.Queryable.dll index f7b71e7d4c60994e315d3afe9220ff76dfa70cb3..8444b39d3cf827e011edb58011ec645edb249021 100755 GIT binary patch delta 3538 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 delta 3523 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 diff --git a/jackify/engine/System.Linq.dll b/jackify/engine/System.Linq.dll old mode 100644 new mode 100755 index fc17c857e116da6884be79e494fe803e7f259cfb..30802b2f5108e59e14d1fb75fea86ced402826f6 GIT binary patch delta 3538 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 delta 3530 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 diff --git a/jackify/engine/System.Memory.dll b/jackify/engine/System.Memory.dll old mode 100644 new mode 100755 index b771144cf4b2573d98bd753ec0f62802abb3b3d7..6b34986648f01fcb744b285eb3657fc802da2c78 GIT binary patch delta 3299 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 delta 3308 zcmZuzc{r49+rQ@?jIoOv`=0FX88ggSnvjQNmnE`ikhRb#%Ve@Y_Q4R!E_z60&C{af z)ljy|E<|K4ik>X*^uF)+e8=}5-*H~od7anqcOK^-*Kr=_?@FQ~Gnp%iB|@*HD=XCu zRE13@v`Uv0 z0&S#duP;S^39}p~agatI9qOcB>wIn(X*XYB3R*|G z+{2R^Up-clf1@LyGubHH*6F&=0&jN7=7~gVl!q$mhN$Bt#Cu^nLOOF)&ZmNVIiz?1N?g^Ebu86Crh z(}N-f{DRwO0s+?A#IA!|&lq!}*QKvqMn^B*EQ3BM3EI)IDxm&k9Xb+-xilm|8n#^gXn~x>7(9&QLnI;rv@?#?%|W11>)~Fj0~y)~@(7 z649kj=r0thOeSa1CuXa`5grD?GIwg8)a)^}^Ic@hiyBgDxUB?Pk6CNqwN{ zbe0ZVt)Ua(?*F2A@PPa3rT2?HjhvIZ1I6YticSdwNjXof%I1vCQ?N?0A2P07Lfe|2 z?~^jr*c)x1dBrAMuNcqhuQYD?t189uY7{x{n-Y8QZx^#s39KI}8mEtUIw8$e80{l! z{;b8C>1noi&Fu1`y*JqAQ!-I}iXJJC+hukhm(NSKM?$Oj}HkBq2VOJn*t-iyDqAt#>)Q*-s*psuM4sn9^ZR_+GXW$ZF}@X zu)o18>~iQPMNfWM(DKhW&9`olM!y#cmTz6o^bELON;Nz*9kUhONZ4FhKiG`TiR*vR zm~B}bc3W)MvEXUg`Cg0eZj%_|SUcxtS<{4>z7V%nlgZT2P%~=Wme8tAjF^W$wkU*L zU@G(YrN>{L{w6$0s+FmvoyKHluqvDM(1j@ckt9~~&J^P^$_qEn)`^Aj2d7!)X#8nxF z=}s0h@meeeC)C22E0ViiRaR|feWxO=Am6nptYIZFhos1(RlZ8*R$(f`zWwd;`zbSq;{zrwAu`&0@gZDYB zg70GL_rHvjW`#W%YXA&lb`=T1=imT?UVpiryhx(SER5Y7mQjyMByWt#o_)<1i zbJX3amn6?hjMCvHa>PaC;V)FC5R|j4Z>YG|9C`ob$GNV$oZ8mhf!ep63+Q|tSK#CK z`93990^FR)Otc2CL+9N4SZ$t}wFQ+M78L*Ts)zdOqb;mPna>Y{&$&GEbA7$#0VbuZ zKa;C>xMr0(yDRuC*(EtFhH7t`HQkeh>5zGaaXGfm(7rcU+OJ0oAD%9LJkiPFjv11=HJdi=_oiwcE{LI&pRO4VNZB^-u&gba6dZ2`C z#$kFeQoJs2WFvBe5xwht)rUq>x)*rTBJ<~nb(K#I6q`?P&<1Z({$DwQWLTthZu%$c zAB^zr6FZKT`Az^S^T*DwD{`d9ZSJ0@pT$-~+<&VljFS~$p@Kj?u{Hmxr(^n@<)F-B z_kQ2`TXlYCWe+6-5+!8~p5yZ}m)I;asop;|h_=3+r=$}n*S#qBmoBOV$j+wA3P!xl zmt77la&7G{)Eb9vT^fLwf9yh9qe2`c3DK-k8w(1@x1O7H&wpMe*JP_aE5HoFYvoux zi8duq9qKAuS%O!(zFE;ijFkq+LAQGvf7i8N@JsEmQgYdLxqsm)I(>buOnWz4LO9d` z-`6;^q(6##>F7w2ZIPe8BmyYk=rS~T$7Y(7hK}HCC;rkw4r}sdM zj~dtS>ZJC2q_pw@l~esJZpwbhf*b^I=*}aLjZxG7&4;PB&q+vSdvi+tw_gomvuY{Upb)EKAw*q_=F;diFG zhP)TNA>sB?OHNXISY)edCcW__KtG{@0*X$kjd_qD`JbC zJmIO0%FEY74dDmAzT%G(WyI{Jt|^=-d%;lHo!&>75U43nDDp^+Z*=qI^}+zu&zH(o zchZxzi7(QJ>`=cIi~Dy_Cc}N^CR+CA?FalUS!Q2$({ji8OgIi|itQN!^pOjy<(cz; vAt%RqN&=;?++KWLixPO?=24POa}#Nc5sEA7|9Guk>#jv`j~w&g4FLZHv3rkf diff --git a/jackify/engine/System.Net.Http.Json.dll b/jackify/engine/System.Net.Http.Json.dll old mode 100644 new mode 100755 index bf9845a25b3df3407f3a9b68ba6523e051965589..c5bff82077d2dc58f7f095b1c888196e56c641d7 GIT binary patch delta 4602 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 otVf(LuoOHmkdehvR692dg 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 delta 4662 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 diff --git a/jackify/engine/System.Net.Mail.dll b/jackify/engine/System.Net.Mail.dll old mode 100644 new mode 100755 index a603ef9ae4ccffb67cb559ead9d2ae2d7959a515..01d55dabac4138319b30ee1fc229f3467f0234c4 GIT binary patch delta 66404 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�d1@ad?;b#rDVU7O$d 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 R8W;1fKK0wV-t4*I{|A5RWat0@ delta 66059 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 diff --git a/jackify/engine/System.Net.NameResolution.dll b/jackify/engine/System.Net.NameResolution.dll old mode 100644 new mode 100755 index a4441e6abf3e482b9fac0808a4b095d6297b6a0e..144c8cd352e68d7eef4c3728a6cf7fdc7ad1c92a GIT binary patch delta 4671 zcmb`LXH-+$w#TzWsG&+nx`HAt2_&KSE=UJyQbLuERP`7LAmsqkLy;my=^X?qBE7c= zsGxv=1?eb7+70Kn@$P$H-WYeRJ=UD_H|N-E?GJnY*WQWgq|NE1iP4bLr!NYU;&j38 zT1g*_0I7OWKp%i+w&+oSK*S5gTptB)0T>Y=I0ykkg2X_QAT-g!K@#=GkXpd>A|VWt z0HKI!dyoUsUJPlFBe4icBp1aOKAbo%GR`0v(Q_aYX<~%=Yeo|-ns^UMkP|U43BsgU zkY&?z1{RpxlhilQ`Dd~oF1jbCK*;a${wEB(^f~Ix<-B9Ao+tU4S>s3wo}3SI0qfhy z2k4o2V_tPVlsRkf*Z3f2P92dA5T7W8p@qG^mW`C03IRtT#U#;4xI|$mPbs|s+&uF> z@4R+4SD}k~UDkH}#K0by^sjvVz;F?x;=k)bAV~luE+qyNL%@Y4PzZYm6bdEnh(y|> zk&Z|>9EEa*!5xs&D2y};jX_IDIyp;X>dO~QRd}R?hc7c_?5Ob{TlYxK$I<+R;mG`8 zIEZCF2^au_86`jW`wu|F~Yy(2c9y+kW!YcGzj9Z;0U-h@*;#`@RLG- zDZc#*AdW2?I!l><_G?yRx{b1qa$!<89p))Fm8uJ&6$Uh9T+F&(ub7msa z_Abs&lzHkBPkMQm!Z6$IphyaEQ2Uyz@GP@alnyt!!(gp+sxI-hoI; z4GltI_mAK0bjU7Z+LZ~U@%Qe_-TBsYx8Vc)={A`8W@=b?y=pdOJC$|EKn_r3(4OtFkBq!rITY0mY4a zveS5QYl4Df>W%UKY3Rbw<59aX_IiyMZN-eto=Za;SK@IdcC8Lc=e(*-l#3OkrheRm z7X8=g$Q%vXIJd;9xRN4Pe}=46_hNFbo|g5^&?DD!z$5?&D8vCc7!G)Z4-o)F+(dSA z3xtZQhd%U`Co^Jk5j&K$j(?vNcBaI|V5`mBqM#3Z{r19qhz$vyQ zY9F$GL*tjqn_Cto$*fjPMR^~*BE~i|k3wEdx&0`8zMx~aZ|T%@s~|AN>e}S~E$UOu zoBFGkd=S+(Ehlm#6<@x$5BztSXQ&5g*hOm7S~Q;d=MF`GkmRoQRBra?T3VtA>8(uUOo6rP78fN`P|!3#S- zcd1(D57<@RrAuVj(!cmO+#b!?A-};>xop!Gv~xq#yG}N#%B$n`u=3o` z(SD(yEYpKrzvqZjY$&pzN|7lui7KZ3s=bf&IK^!yR-;mKc-0j98Ukkp9;LzyliU&U ztNTVI`2;}K7wa!?+-H4GqOfm82tU}pf6wyeP?tv{G#E_s(dLhP`D=7anJPNYKQ9No z;e3{HvwPO_TQ_R<$(@jj-%7FW`qvpyH-U_&8@h>=G zuT%<65F)SWGt1(A!Y!#&!hGW!D@(uJ>iT%@tJD1@#3*}*lMZdAlSEckx$>lI1zfJ2 z;hJ$0x*17H96oz*54Idj@D56Z2iiOnrf)@+8%JQ?9;erF!yiYmgyQh{iW4{SjKHc<=j%%&*IUP{r zOOeX8I9_z@HN$7Z0duSgO8PK6QEj}*#RrnFvApe;1zs7Fe?9n%SIj($Nn1_uu%qO* z-FaN3|5d$Hy1_RYbJ3Jg*w6PVr*zf5*9(|Nz4lI_GgH|iK>A|$_fjQB?Ja@5gmkVe z(A|z*uo#6WCv9g{of?+~_1>@BoKvb4wnrRmXHsjQJU#c#`e(41Jcd4+=w;5mw>&=E zYjYJ+14>1mVKs%p8Ay(!I?DoG-LMzGs944gBa#0<>?9oVriP-;_<5a(DN>Z*f4dT?_1>gSsq#c#Y#3jg5+(y6 z01iz;0>E*sPl+t!f2a^^3=u`*^CSRP4ofoVKlF)`9)RTI0Br~kP$%{%W&DH$z^_|I zt}il9HSjyG*4pdF9+M0GLiYpX{uO<1F7%mHjHm^e%(bwpP$q(n5dlLWVbTaB0ztG0 zF$4^434?@!fuH$d?~B4_U}1#61WD}w*U|8nDBvq3W3`c$) zh9jl_w=e>y_l{gGN2%>MK*SROaEcd40?FKxFf>sWr6h=Q{da+cArSuv|63c<$3Ana zI8;n%#bF%$HPyd*P4x6)B(xcfzw)-t6C8s|TQ(C8EpS?Hzw=gyoS|cCh|3<|d!x8- zAxPJQ6D?ZrGkbPwD7iOXG8w;R@wCjE^$(|F<;%OItkLqd{8@5#Yt9gz~hba@ru zY@7_{yt(u~v$5C3wZZKKx?V=tavd8_)m_vrm|UaV;&1AyIQM`mRx_POs9$;Id&PzX zzxP~Y$t4HR>GP4M}a7qqlgGa>)sUSIh4-MnoiKvEkIv`6Rzf(};i_pBMT` zF-y}?zbiQL!LQ^ipUm)BE4lyYwS+hOb2E+|L5>r#wGfmY;;{n5*}_8;{SPTC6*lTW zqkyEilZe-e@z|LUGJM8@o!9|1J zQ1t$5p*T0K)82<>!_HsNN@91hOzph%a+PQyns&q)m7idmb&PEJbaBA_wZ(ov{D)zzs|LhVb!#m5gFKQ_b1o+4GSn9jQXd% zYZG4`br{!$h|@w?AWYw>dpnoX+K&16j~{e?XHVS>qbhoNAO*+(Sj@ZIwkt%>xEfYy`Br!os^8NcPNgGE*ovQvqLuWu(*eIZY1A7Q~%Xj zXM8jcMc<{-F@J7)2MaKCZOWXE>}^M2ovW*5a|7oyZPtdFTV>^2!NP*9^LA`UQ%*B# ztkhAcLNR1`*ub+1*}B97;CaMw>gN-&v~LBaKaRlf7(?9**MhEHjkDj|`@lLT9xVCZ zo~LHrZJWf(_g$I9A2!(!rXrWFX2Cn>WaEycu6U(R4TY1m=#B2ZU9a`o zF9W`0Jd>poTUaPB-xYdOp*?Kmu@prt>D}U(sn;i3Tq+zRb$s0mmq@Pf^q0-jS`@0- z=J7dvb1ylTAC|MgK49X|_|j9=$)tA@hRHih7pab;K+weWkPr9EzLaI5sbv3T&p{?~ zNK#_O)qE6$=u5i_lypDVZKt(u6G&Zd8VmDP^stvscm{c|r~`fpmji;ynJr*Au=0f- z;{f2JZ;7*gkaD1g2ka2Atn^_FwXQTUP`-a1a z-#T#1e*x6r0p3F$;1IYd1_K}%6>$QC!Kq;297g_^e@UDONkQwOKLqgQ>VQ7>fr;Ob z`4_c4xa=~PDYiEeK_zwwcXU9|#+IDc?QU%r`o7>VGg;hL>WWGOK?|SlPe{T%4?}Cm zCT_e!^@8bYDlkdKm)wL z^>oIP&TQR;e#&n$V6uMV_9A*yF{h^MW=u<9cmP$*TetDqb?<7q%AoCC>ZLA|E&Qe z(f==9%GLywc%^bSZ=3ms=j;ae-cnYk_WZg*A^&FB^;NW7ZpDPxdNlr66X3oQdR>cV zPzTl)wR5_-U@u(CtrEVtV z`!Txz-CU2C?pIJx)iuxJnksDV451_0Dt$eorBD1-s@*wdV4LU<)!M|fzDJq{H!D8| zL`s-0&%Y4%${fTz?V;2GWy;VkZr|9(Q4$0V&1lb{D?->OiQ$l6!64UMk~wv2BMN5O z)iS6qgN~q%t8PT$*AG3kAvvfnp0ckwpQ7vx65DaP)5>2nXMZ*KIo!dLp?uMbIaaE_ zedBDl5Z3gr!_^raSag@+B=xe0(aR-U;qs9|pl$1v&sibUR>Sjc47Ef2R>Ma&G^|0s zRd%|)`uOOFaedT{+tpp9RioSkt~o#Y#*9iPm$Xe^=LXsUY$>F^N|>aW@|?G1E05-! zb_C~21rGbn+S6Kx*FG8)a`1hrs1i=P{4K2MzNFN4l_2HG&4x76$`F?4Xx*hnLhcM1 vLDS+K?UaCF7P+m)#%ugRLM5^BGa()pst_mR|9PC#v8-N$u?2GRZvpf-zI76MV*(<*OGE`iks{KS`q32- z5$RP#q)3yZAWh&#&$-_@_uQZNK6_@(TJO7N_TE2cy=$g6jXIHXM8a0HHsX?E&qImY zNfTxOYn2>u5nzZ55~YPe=pYaXd({JI9l(KvU?C`oGDIGt2tocCm@0Ev1z_=;kbyWt zoG4di3WSx5MN?QMicdjO ztZAOGs?mP88w!>=LN*2m+u;qnQed<`BL4~can95G)i#$Dk7X%X_42T!kZ46=zrm`% zXuDWB+ffb?TtB#mK9wQPJP&>G4xsEPg{_Xas^SDSEgXqODa$J&kw{E#i*OO^dTm^j zb6tnd6MbPj3C*XeRefDQpwxf(s;+l=9Gd^ihd`77hyqp~lt*G^9G$SriZ~1sR7Rnd z&^RR&&dv#mal~S=j`nB=6&zXxja0%ps8khCTj&V0N>SDTg+f50=T7lQT`o*_N32J zfCZ`XB%pwA%e09Ozn{mV8=;f2H9ule57{<@N36rFdG8j}HI2M1*fP7xtRHw}AxJk{ zwH&*)D({ouhTL1)UlV&#NmX(ChjOII;3L{>c(!7N%KD~VFlQmPxX)*{t}1v<55H8> ztpi&f42o`;{Gt2MG3J-6~hDyuWkmSpeY8B?R)_S*$m5>8)cOt=vvzqh1W zxx%5z=ASW5{M8Ow>$)JMZI^G19uH1hn|qq2Db!DlGsu)a&9lgVI9x)PI&X9HgN~=F zlE!Pik7Y>hfTTuWz7};iOyV5qX^g_jt>BWH9U^=etx|oZBdrp~j<}}J}gidC{ zHoIxqGM}Zd)}pJ~^XiYPuf4t8dq%2`&biQ!O#v$H^6*D5ib$Fb;!=XY_}7FD89OqI z_PD6{hr?QT4k8t+k#GA2+)nSjevd1n^$WP-Ol0-Gkqe~)AV4k=@BxW{Cn@L@AS;_- z5~|13E@#DNMVDc1Sj6efHF*f?(NI|kvcWV!wLDc2ixdI{C;*Is)T#!Y;N}K7e@E0D zOiE}a6iQJ>8B|onl9}FF zzEax#Y%R^$6FPVLG_DdlGKROVj0Xx@LP}Pi?Q=4mbTe6>FT_EoTk&vn>WOky>^5W5 z8&kC;=NXJR!Nho@au=_r2rUM6?B|9lkZ7Jjd70E zk^I|_6tG5*wgg9Nu=p?&SGR7ShYzO8=_}sYV#T%X>~%_o28iohp-$AvoNw!=*Vrz~ z3pgC^2r*{gB0`V3__5|+%E*xIf%m@l+{qPb^-ig~OzH>Zq4L9Jg}tjYdh=C?#w`xn z8upo`Wke`iAjqV>jqlO0l>6-lH^<1_QM^rCD1`l7NQSMc0U<1&#gxnI*5Z*oA5 zy1im;`Dx7#OKVXx5^|u{TDDi(B*w-b*OKm=60XfueJe316=9hi6kl=_e#gqWvUy7H zhWi@gjm6ib<$yA#3V(j71eS^H1oO=@S$M>$;nL>o`JL&ihYMY@G)Q<+tn0&}EBba1 z3{NVuFQa51Xu}*Dyg$`2NC5;|>Nt?d7ez_}fmoLREElp!;F<^`TQQ0Yy>X^2;-htq z^-C%mAXp?@l~u0sM`g&(wsKceAri2{D}Su$!|D_@n1{UnvcN33cTp)N(-gW1f4(@v z`Rlsi-jXdE&Nz+VOBh+IN1=W?H4fS2u!7_zXVajLk&stm%tomzEe9DxM1$#0iAnKy zEqMlFWZn@rGRQ!`?d$B)mJuEvcrjRnMM5S2Gk2DB8B_viNVcgnQewn#KH0&$Hl%xB z%~Buq`evvK+0%a8(M@|Oh;uq}p*skR&vpt{?^S4u@|K!9!|s;D8oVk&-}+g1&mB31 zDtKCd!%!^$=#J}-v@d$AuT5H)K6XKzyyiJZQhNs()Y{9a7_*OEx-M~tG{npi8xRbOdL8U7o>>d=@A`|-a2)!WT-5-q+KLwurQ=~Wqj9u-$J$*c#d_}Z9 z9KBubaUvJJ9KCVAuAaAiNPS8GKdrWkqOu&QNP2<>Ct81r&m*fK)l3K(fei((84JJO2Q7?7|^Nf`aM=p)cJOEF{Y|tWGa`aM0o0t z0#ct<4#btF@vqF3E{ESwV(fS(RJTW^>#w_8_ap1`&)%?r$uBbru?aA>BG;B4z8GuP zxA-hV7c~3&+5H4Y+`V+um4Fm1u2o?9K~7H~cH&yq!Qds5E&kNU@uVNM$VsCE-j^Bs zlQmpFn?xdUGh~ayH0{^YmbLWDU0ppbFr}!Tnu=b$RO%4Jc$C;#)i&lU>hT z*}Fz-su^{;!|lUlwp^mi^~8j@fv67Mbm3P_d_;K^Oi1r zMs_}aHBlsOIjlGS({aDYI~m*aRh4G)Q5ni&rd4)0inQ}2hl)F#H#ZS5_FR!I|<-W8_b!^4x6i@c{&(N_6n#nsb z(JCK4a29|c+_4yhqan={x`}3Z$BihY$~WU5YVKO@a1)CV z{rr87($g-dpjE%uGR`(0S#H3jrY~CzISn!5m-tOb@Am3gO5LS?g2}{WgtPsXm+eeH zfBpPt#SY9cI_uc)rjmJOo9@ZPaLwFUfC_co`JbHu zw@mO3!D?k+0i&*53ej09q|G68bLBw|63}fy#*M9)Y*~)wmB2KXU zU9u^SArf=tZ-7!Y{{UbBsQyni3AcvB0Hgva2g0G$klzo00uYK1P(EEiS}1V*+faP= z_yqAP^2U%4l>ffNvnDQ8h?(NqbEZ);pe?(S&Yj9@8R1HI*9Dg4RyH; zJD&y`A(?2Mp}i-VgVC!B@gatTeL0uMUl< zyw#|8+cC%V<`R4^Jze8l^XoLGj?ITUeBQTvsgp&a~-fo*H(M@?el~Pocb7`Q|;5a zN@u-5cn??de!3XfxXUC?jD$s;Z-R#Skq`zz66^mGuyzAL%eFZG;_kXBw~slj-9K)) z=9SlCflK)!bM$mJ(z0RC=oLuV|2O4^Dj*5VAmJ-Wm;(uoFp*)&(Hd%GO5kFfit=|z z*f4Uwz3%k~yUd!pQki(?HaQZ`5QxG5=gc4iCbIOtOq)64g^!$tr}oX-)-B*rqm`Js z=)RJ^=~G^<)(tZK-AVuq)DRdE3VCeyc&fUME5Adi(seRhPyLf~_ywv^!xF7jd}FXt zc1E79t;T%uji){?QR#<=y{38C>DZA6FBQ*?p1r5g6c<9HuJZ~ph60{fI zIJX3j9=kYgHg^vj*^$dG2*lqJHW!~Gm|2COZ%urcaC*P4M)!^o) z_vqi4^AwSkq*H&Gu*Vwg?o?JLNp6s>2`0Gtk zjGksFzVze3$@v!1)rrVoFOA6wr>nwz?ptq69Fy2v#9y<_`q?L@#zV9t@Hgm zk-XOF{T`tH?Gu`*R7<8clUI#w=$$%!hhiC3E3RdGC3Vc-q)8UP(8bX8<=aT%unA5t zJSec9aX7K6cV@mi7+wogt6P41yK#F^vpZ{{aFmx#CrDeGMXbdzPPEmWJ=7m6!GJj8 e=WV3l(uhS?KU({?f_{0lyLioJ?f3r$$bSKo8wdIT diff --git a/jackify/engine/System.Net.NetworkInformation.dll b/jackify/engine/System.Net.NetworkInformation.dll old mode 100644 new mode 100755 index 60c82378c05fc7f2ec945d32857ac9040b6d8a0e..a6b91a95f28f99870129392776c4bdc2aeff4e8e GIT binary patch delta 3324 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 diff --git a/jackify/engine/System.Net.Ping.dll b/jackify/engine/System.Net.Ping.dll index a6f5592c78f9cde0ed2ba8652d4320d99a7411a7..c1bdb25d41cf161e0f475dbab33b7600e72ae7c0 100755 GIT binary patch delta 3543 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 jn;J4g>2b8Q7)qb3Mo4l!b&R{60Dyl1GMU}` diff --git a/jackify/engine/System.Net.Primitives.dll b/jackify/engine/System.Net.Primitives.dll old mode 100644 new mode 100755 index a149b839f0fd70863e2876bb3354a965a03d1402..659165f95dc4ae83d24514a8c3682e8b817be4bd GIT binary patch delta 3168 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 delta 3168 zcmZWqc{tQtAOFn^W8Xp}O!jSP%x0D>St5~?C7LXaeUK$%$u^8EiR^bQku6-Rd!@3A zF42fYLKGsAB|^67o$m8K_kG^?eZJ56oX`1uKIi;(p6@q_A(+GvOi$u4IWJq2k#Yu1 z8LWL*3gSz>CdUN;+yDR^s!Ig_4iZHJL;wS50Z0G~p#LsHoe@U~$o7|^4!8pz>|Kj( zQUC(mMzJ{tzymn;qOcLeMi+Jl&34_{$zSCTxUyY0fW-FjY{au&9GkP1EE2Rpcwn2N zlX%N_PcmY=_{w9dYSt{&NA`b3x-n8XVAJC|&e2j%HO?|4%b!b*M%{7k`)zyiC zWi$Rt%qhK;dThdu2m%0R%qcLeu0p3+fEP`~Xd$s^G@1~1&Mfhq8L0l888};Am@Zln z<`?T={zTm3ljaeqMCC>>n49zOVEs-M_>%02|J(!s90<@PB2h>*QQh5xsD-5v&?qeo z9*3vkFccRLG{K!nB)Yre-AEKX36I86+(`9VMc@yOvamD~vIoOqx2bvjp3#NS zRA!zh#E$N0-X*CEs#DAI8g${@jqJ-RjeA|X^$z#RlEV!?h=*?~k7>Z8FcIWk+6fiq ziKnXzLhe^s+aJrOK8J)P_ZqArK3Ieut&}#6cG#p?dMYiioD9v)4DvEpRD-3v{`N*G zv8nsP2TIZV4jxqND_Rmx*JnW8frZ>ql8U*wh58@Z!1{`F_%Fx>{v zNeiY1f9K0wD&jSJ;;diN;1s6XK5mR;mU)?2M-!qxcST1^!EX5Yxr{^$E3R)X8a>8r zD^)AN#yAx6A50euZepLFOJ@o{SOz#{N1wdz&yN7l_f$A8zpRoOt$XHtxzfL9!E7ms zlt;&H_<~=6(+6ifw&@jJ#H2WWZy{j&v|HfC^#gcz23+ykAyuHkSSiG2qE`}=}9nVLS30&yIP3=_cMQ8)|+O~PT=M^tPt^R+X? zmWlI)82s~w6+JWa+hk}1=iAmlk4&`8%Go;vgV!}Udi3~CHg8;vg=a18M_lS7Q;eR z`5zt>bPql(LmnuL)kw2uoenJ}khB(JxZ0y3G}#U-`9;PJxvgaPQ>FIBS@dMM6=Vy< zefRlMofG%=KziJeQ)dnhmRzp&o%Uzpuo^CHth*4FjS6_y63HKG7Qt80OQ_7yxjMbI zNeI(n(IrWGng-E0nw`2&rngblmq^7Q(*7|P#Q6R)vNJ6t^3cxfrHqT>+|}jJjk8w_ z!Ly?>y=6gJZ;oC_0qzKh{9!GY-ES({v9xhHTxJ(nSlc{Nt0yySGie~%t2@!&WOdxD zYlhg}D%H^z74jX{R1`F_X(R za#bAKVM|}#emX2Y_LHOI-soClk&UbNxAN6NHNs7~bQ=W3?&VPT;yqldNSdvxHnrAF zA697p_WJQhxfif@p@mb-#EPHulgzN73_hOG^{Z{=*8B-V^0hRn`EvKgJlVAnP$(k+ zmGQ9377PIapfU#NG>QQ-M!}&FTeu*{VGc1`IJp_W+}74pI4*L>Yj(tZ_~B~(mLKFe zh%VTCgt*-5@--)NSSS2>Dy?%+eFh&$v73cuchyi;Xlqk_4mXQ>Q9rJhi)0(d=1|j1 zcouFcwD?_Vg2?Z9Ew704n<3nGBn{?3=i1wMVyfy3;|no{IEB*Y`HME`NN z2O@LMaZO>e{w8koVieY^s57rf{?V7CpMB>94sDgqJ z*jFE<|FWQNy1<&1yx4Lwcz{aJYs^UsFKHP7N9nvus-F?$|D$qTd%t$&hw@#7XQ`6m z^II~X+PQZoov92ysB*=$O6(=^S5?-xC!-pl-m4n+e1XR4ek^blu1xiOH~EF5Qeju5 z9(@%e&;3s?K{J!WAtGYKf6}RM2R(PqR=In>92fU@dh+2B^L{uaS7mV{$HxVsB@q#&l#mycWW>o~llAa)P zY{YB%F^`6Y#Gp;#3S;@E6GfX~@#Pn#e~YjH8Ws!?GAhtD>9#>g6VWZQ~2=Pb>fylpzF}V#_tDkq{;x@3MByLK_r+aYzcrse4GFW0}KE)FFw3) z^e_>ApxmCp=_)XCZQ!6HT5vK8kYJ1TJ-2x-)VY|6l+0= z+S(j<_czNw_>Nq@oYHS1lfwG)le?lfH>z9B-ZC$z$1#1y$vs8&crz=;9$^lfsjMT} zB|~4kl$6?6zw+0Sj7X@G2@+lCZxZ?mF|dfFm@HS^UTUp$;oleV*FG8Ko_rg~Tt&yOA5;S^MQMc_;<1 z8*;3JE~sfY!fZR}YgpNsQgSV}I!nLQ*vk6ko*43;lctJv>hN)C1~v3m{7jo9WToU8 zA0}G4=P2+YFHoZ*)PrCPTe;MycsFAJv3Bjupg{^E<8+;tm}tQl&?5a*mS)>`>WxG0 zg;-s4xwFo~XOg^6WB0gbM`bVg&9_id<{?dc0dhHUx2rh&! zC<~fP3%Hw24qX4{*Tdws`TP-v=!>?l?p)GRowIaw>@3E6HyaNa#y!8D#X<_)XhYx+ zTNRBVM`^MdC v&vJH!&13MQKuOJygHKwEZg?!-v~55OrFZJ;U=ap!IX@ diff --git a/jackify/engine/System.Net.Quic.dll b/jackify/engine/System.Net.Quic.dll old mode 100644 new mode 100755 index 385db03f549ccb814316e7199858edf5bbe05c37..f1b80a11537b0c87fd94dec052b7935d66aebe9d GIT binary patch delta 4666 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 diff --git a/jackify/engine/System.Net.Requests.dll b/jackify/engine/System.Net.Requests.dll old mode 100644 new mode 100755 index c09c4724f778b48f06c09583319bdd6ffe6c3424..4490b9d4c290bf685042a0228d4a9375ad8b375d GIT binary patch delta 4498 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 Gr~d=9%)vka delta 4670 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 C+nFH% delta 3251 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 C=A7^V diff --git a/jackify/engine/System.Net.ServicePoint.dll b/jackify/engine/System.Net.ServicePoint.dll old mode 100644 new mode 100755 index b385f866ed256d11108c45f9afa8d027b4cd676c..c1f34d58ead4837845f8c98c228577469c4ea229 GIT binary patch delta 3514 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 P)wp~&>PxBr5WwF6Ebs^k delta 3530 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 diff --git a/jackify/engine/System.Net.Sockets.dll b/jackify/engine/System.Net.Sockets.dll old mode 100644 new mode 100755 index fb10e47b89e747da1c65151acdbc6d571f7be62b..56c5686ca6d3ec6a6ea594265542bd8792fc6e19 GIT binary patch delta 4516 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 M3)miI-Z+5204-zvB>(^b delta 3527 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 diff --git a/jackify/engine/System.Net.WebProxy.dll b/jackify/engine/System.Net.WebProxy.dll old mode 100644 new mode 100755 index 2c9a2e3b085a2ea5246bc74bfffd71cb34579d53..233d34c900d5cc9a19a9b9643dd91055f5d6af0e GIT binary patch delta 4556 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 delta 4615 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 ZSZ{ZC^LhMT@I=qz=-REn_h1m{zW^a?q&WZp diff --git a/jackify/engine/System.Net.dll b/jackify/engine/System.Net.dll index 0fc21067284c87b574183f065a7baaa42185d4a4..686d5d4cbdc9e055464eb2bd3423f2c784359002 100755 GIT binary patch delta 4703 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 delta 4528 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 OKhk+bg5Ui4f&UlCR_H4L diff --git a/jackify/engine/System.Numerics.Vectors.dll b/jackify/engine/System.Numerics.Vectors.dll index 212325d10af3295f783f8d2c9c11a4c8c732b2b8..53856fcd6d9b85cbb75c3a701aee013afbe1fb8a 100755 GIT binary patch delta 3397 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 delta 3407 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 RDZi^T*ysQH{O=e5_#bZf$oBvM delta 4476 zcmZu!2T)U6yG=sxozSbG^mGVCs)9&I6hiMrr1v6$AoYrrfFiwDK_S2uX^JRK5CkdG zq+WUe5kx63-nsA2y!ZcS&sqE1Ykg;*nKOIVnv)h@6rPqyDXb%3oBq&%;)Da3KBEZ~ zAqoNs)T}hFmed?>I~t8sGMxugc3+9FX>5V&P$d{r9u9><6#)PQ5TKwW50Qr|$+)^H zA>odSPzVx+LZBQGFh?ghsG_Tql9H=4$_4F+LZhGvM;A1~hRy_sswb_`7M%R-{mB0C z@XqHSwE9bF=ij$2lpgxX-sbQ+SRcADB#*K;a2W!Refg67^j)vM}^ zwmNpnU>o?)2;S-8P+tV`x?KtHg;aekWJb$msQZf9@UQr&G*?GHfD?ZLS7Cth()&2= z4~NKRRm4cerg$Zt8i0H`o1Tvo5cDRjB3d^azBdw$Y99ePtV}WOgiLx1k$=c}&wt3@ z-5n9qL8;Zd91WQCAR-+@ERZ23Oq2!ype66dPJF_c4&;CWlmIXQ5+DzN1E7BoMWPCG z642teAOmm(xRGZhS#$&_l4S_Fh5=9j1o?I(BaDnr zQDhZCuE`9Mm-R0SVG$|v`#~T81TV!*O(z|%7k|tIqyZJ-uUtUzSAG$MInA!?TN*v8 zP@a&>`p7=RA*>_zx$+VPqN)LWR8j0BH|2MyXEtlQWMCf>gqQnP5or5r9F_$lptdGhvk9g3!UGfU6leC(IUq|E%t7 zuQ^_$YFw66L~uCLvP>9KtJREgtGoRSHOkuupufYIJ*dGAk|H)Z<;uRekg8@9e42c_ zHBpsD=cjSlv3Jh&H4cwInCW>1kn74ru|bamJaa9jid5_Gws$&-u0J8!gx6&`*%GTX zdZAm%p8bNFQPTD12RI!6wf13?;D!2MeGX`o)wtb>kvQ||2Yz>&2EQuaX5fw1=YLtq zNmI{W;KeexWQvTXR8UEA+h&tlJ-%hH(iUe5ZwvZ%EK7L71dts5cGBH^)o}Q=VDT$K zQ+oFBUsL;?Dqo#DG{>k?0>V}8)_d+Y-M`wrV;+c-U3romZSfpuQ^kYLR4mu_f~LYN zxs-L|3!O<9?qSiE8A-i|HwH0UG?AB7P$pxWhgp5*L#lME+WRhuKtdJSRd~I z5d*9jHqg}t$_?TC-A={9gg_x+Ft`j70*9js7vM8oRl*VFw)FMyT5pW3sxrXVoMnYy zydMnjK0OJm{Dj@Au2|5&eS~psF)9frSYIAJGGaV)enY&35v9~_*K?&Y)AAD?j|kl7 znqcf>;+1X4YQ0_@STKFjygB08cCQ) z)3WH*eivmZpkO<)nn1`G(NTZj6g(*rl?g3P_k^Xa9+^=TjRCd&aDi&(?`COkU!{+KymiXx07D$Z&8z}c45zcY9xCa z4K*9MZY*o#y3P%3zh1g%JkS#zm+;6DTX4mR*GY|x#fckpsXXzG#V`_L{8F0h zs@IIV=Pvy8->!w3YBjSxvQMLT7_(kLx92v%wwcI@v!+=< zK^;?aL2ZWaOUjwN!T>cA*uvs#wEDI`WgW5CpLog_L&J~)!Sf}7fIvu07U3g*G}nJO z6+v+u5&Y(OBbO@V*_W9oB2_|r7GF0K{nQI0EU|CLJ=I8%YlNrbcW^=1S5D6PjT4zO zmsmS4(@|QGQZt2SD^~dSsYsCExJIBsHo9p3os>2k@ z%<-o^A*W91(tUi_8zYO~9O@1N&PQuFJ^I0Wa z(x;!HKKP5Bj-&{2Y5guq(=YZ@+g_JF>k-@V+f)}U&;4OD1UF&7CNJRBk!{xQP1c8- z9s7z#v60En11Ho98W+m9;u!y}bdgIl++0yqC zjUqlB(tY1byQpPYC~bE!9{dD?2NS62WvGFaK)fOa1rUk{$C5eR|H&S(FPXYWD3k#6 znNc(R6H0WfK*}OKP?Hi5R3n=cnlK_Ers`6jaQber!!j?YI5Z<;p&(?Ff}#;H@)8m=_;*~vuW0@K>@8gLpfBy38GJT5D6d`< zdX1l#UtHgpcxL)+A(G^*ZP&=p5_4j^a1?S8Vz%!TBX6==(*NYrnk(0p6kFYJCYT?^ zRN2|%?jWa#y~fgeb35GEjsnU|%Q>Vd2BpuVt*^JI&V6J(XT)9tB?zkvv`YPopy^gX z59RWeC!rO!GkS5gYN;t}^eo5LS6-V>LjaZxySWc91pVnYM{W6HEf!tb+&+Nx=hIcF zYqT){2hX1T(Q~HYyOV3ZjSRD@Bl(76QkeLW#LO;}k|kZkWQ26g*Hr(zP;-5&4|W411=hcxbrl6M@lSXv&V_fIQ4hgY;w+c+h~cSuO!XU#=^HxeR&Q`@X z-d6AGr&+ph0+x&Mz;IcMYbyNns^IdDt(2EIS6!CwWA2C1;tRFQs)?F6Y7%vbtyBe= z%&~{JA@m+#59fM4WTfv{mWEKGI{dG&Yzre*DC8csEB1d=^9K1~UV{k!4o7B6Zc5Hl z=+g0U^*fH3*esgK@83>}!-0mxBWYzI&XfpCk^u-4>GQD^?~*EjX9NvLhc9C(V8b3+ zx}ti|r`!ByvRUyNWl?KMu&s?1%IXlfTXF&V`F=b41K;KM$cZM};F0bx?qdA%Esc-9 zC^@qgzsSsHhE)eoboLR-|Dr)PMTBZ9?{ZRWOPn@(3e{NC#B`Cd%sgQ14T4C9)>0)ZcvPhSUG z^&7o=rx&F@-O8|6LYy(sdpNMFu*_f#>%gAB94&Zx&_(djXl zD{ZMf+af&W!V6gE!o`gy0ojr+juO23DAHm6G_vK9-L(&WyAASfBko&xeL2S-FB0T@E1>W05i;CWZo3PI@QH`v{ z#UTdOKa4Fgx)BjcyjQ6&>7@`;TlSyt3Eqr5DZ}XMGOe6XW^Qv%Ml~gABsJ6cNKvOy z0260EJ$fTI!uK-$(6&^`d7Ki2vEv{@t#d&&g;z{?x1gD{&_ z4g}#DD*N)*;e``KjECi44^xC8VKB_U1RU}=LGV=Mlla{W0sor0&E?bED>rHjd6iCJ#Q-y2vg@to_82r)6lcLA0l5YSDD+3sa4M_g&jiP_goU?)eBC;D6d%c=aHslCn*Py<PjrI zGL9AEN0ij%EaVRAAtvs0EN`7CkqnoGrjpe-XQ=HTP92!|)L8Ts(xYIKN^%1OGpsPt zcD(3L?I+bRy=O}soAd)|dF+dCx_nD(&n-i(m~h;!XMddPA1a8}l%tT$+N0OLGHYS{ z4n@M?!jN?o>+FnqxCTUKmUPwj6F9kWx~M<0XXbo;5Q*`V7geV+oz(pm(&2&WXeuUY zP-JyHE*a*LEaPH+$|2h(V-HD*IcL0qJH5*ad3Q1J);%_^?Zx{G!P^#zM$BESudwjh}pf6|pWL6C?S#5wGr@CYKIjm9lZp5mGU zsqjsWZ^06Rcme%__=5ecC+|msEW2H}y-e6L-!E?7dQR0DTPF`y5yeV-SFHKJPBP*X z&i$iznL~N@_Sh=` diff --git a/jackify/engine/System.ObjectModel.dll b/jackify/engine/System.ObjectModel.dll old mode 100644 new mode 100755 index d6f23eb990bbd1d29b5aa4d653646e878df64a0b..ed8e1c901276e5fa571b8228e13428ca28ddc398 GIT binary patch delta 4628 zcmb_gXH-+`w#^Qqg)U&|y-G_V0i<`NhzKZ$A{{}h5KvGEgx;hC2t_(7T`-7rl`aT~ zARt`z}`ud|LD2u{wN$cPfTa{lM8K#mIJd&q-a$$fc{ zGeMFnkNKEETr)^TdLt$EQ{4ei`YvId%0}StV5R2+Rff@+?G=s{=cHv`G{KZw5OM~R zu+-u7Y_=Ya_e%-{HU3;z&S~Y$BLd_nBCt@ilDOFhp-?0OiI$aDKqFA3AAHqO%(*g} zFp6JP+6kS~hHqawN|35ctD)-uVSzyM07y(uN<|JHej#Hu5`DGe>;FJ4Nm(@Ly5z5Jf{(5mJGB7K^GtWx0NTv2xTZfb2SK^j! zNKK}b9jRQS5Ai+0^9`?N*o9j2pEw-1ZrkvcpoQAs{SHc3R-!j2-bI^#jJkcjVQ^95 z8Xaf2A$L;8J7&LdPm%;^FM?8{q4P6}aT@>gDL;B4Fz0 z>hFm4@bw80F!u2Fz`D91&coTx=#;Ds@)&s}5+#L(qfknO)74{KdF(!9{es?}*6YiE zl&8aN*vbm0eWHdpbN&o|^4{Zn#p4CTYx~x&jh9P;2sYxQ`vro|XGjK}RXEy5g;L(X9^f02xtJ#5!o;Vp^5$yL z0IoAOZ&*3kw^g8B6!)_pcdtYB4=uBE9kg~ZFHmG5ehiG4d3SeVd-o@_dG>%)+f%7r zc`fS;w!vyBdz<BH`9&w`rE+ z=jRXKM9jB{*T1Q3$W{|7Wyv?>AHMm6v80`kF01os6I%5&*#xJ`_gKL{eBL_ij{CQK z8JZ3C^Oy=WVIoz_vQN7w%!EhI?%hf(Azwg8y|*D~QZy_BQJUt7OkUZ)N>MZhXy3+R zRn2>CPbt*)ZN?%Geue~CzZmHBN~OCCrkJw}4JcY;(#X*=blc?)e9cpwZPYdC{k01- znQ|kz`j(`P>o1jj|)bA=XMal$o{@5Z8qP1%)+ zev#JngoxY8&uc2aT<)AZy=~a_CHQLIHV>16jbR#9ZOw8@=Q6lTGuu7;D13uHvktL7 z_YG#3fu1;Sm<1KoFeDUIrRz6AW*!y>sBXb5Ef>Sp*Zm~Co48pQ>LQiO9HY6i=hzn;_WFi*`Ld=4APGNgO!qGkPgy52F(V!TVsU$TZK zopU1ci)@)V3~O>}{q@nC zWkHe#^X~K6aW(!M56A5!pFg9>s8gFe!i96%`}X@D)@rm(iOFGYUgV!V;i#H8(Fa9x zuLiO8dTzDN4TrXG5+>P49G=2;*e%28Bjjcy8c)r4krRoERn$*g`Kl+~`z}%%E;@%& z_n0^{=ARB}qN6@MOF8_-4pp7A(jO6&a)gbnh{8N#A$Bhfdb=)&~FJw&Z*aqC*CR6I!O_mp1T_#gP)@c33^%EHDYvRwRItr_x|Iz zJa)^CpPJ1$S*MKz_}mS1zB}@E`bG#F!>~-Ww{E1Yi5%KjbPvQ9X(v;3(3eM$=-v>U zRL^^k51RU|I^QA`X*NV3JR1SHkPUqd#dug991p9ef=W>V5CE@0K>;A}u!m$U`@eY) zES?NS6AJfWT-H={f0+_3GXN>V1D7CpK$k2|nuK?ILdGEyW?@XP81s`BV8i)*ZycMe z1}bV2%&uE~ebN)LV&x8|axbkrEqBmcJRG4(2tGuJ72#P<;CN~YIG&REKRyVYyesd#Cof1x7FG}l zI3dU#r1Qzc704#2h(aL#@Kf!L+r)E}eX zOX$h{@HkkgiO8vb78wKmyko{a?Js8d~n;Q z^A3gxmE?LMAM&V8*ZGe3(WFY%?)t|4M8_p2q0K=mqy&?0j@!H%rWiK{ztb%+K+E(3 z2l{RaB=&zpq5{q1{41k8+aZFPx}y{Of21H=#xwRx9PN!P1cEJN!$7(+fxp6oDgv%E zE6o}p49h*fW-TyRj0N_Md{d`SXs3P(8GCM5JR|VB5j~?3Q~9Rzfp5(L=dMekcZl@j z>&UQ?Qy#(M4`Vymv_2LOZLI4sdgR4>;-r&2d&Dj|O*7`dFu7sKTEgXSQxdXU5jab^ zmh4+50qdVUS^V%k#iOl5c)R$#QHrCa=5C%cxVcm6wN6K0m#nE#;f7@=+o(;PD1+`r z{_gzOO9gx!*+!#BY$oRy`^CP=f|Dc^@p@l=Eh}2zRUQX{%@6$3p|R1>cv01=8C(Q? zZj_t0-0um%YI5Zz?J%eRK7hwQT}v$Q2sn>5dK*IRRjS%(k7c*#-_d+>Y*g50bN3S~ z=-Y24b?rILn)go=;@vrx99Lykiiy`=wWclL+rpLoI^AO}r>C}3vz|?tK7rLOru4SF zD`VZG;TJuE6|{f6AU1`>WOxZ1Fv9N#%t-#r$uEF{^+nPD?R&O_LIhwsJjiDDvi zaI5<#%K}c`^*wW>gI^Z`T)Y~?)tyEnQv((yQ^#GO6IwoRd8HC7(iHWIBLW|uQcY~U z<+9v$r*p0M^&zK2im9^g{PYnRBCD(cgmb{TPLjXoHU&mvMS6aH zX&KJYMZtdSlStZ*96?7W#%~oX3d@-=Ux_ha+4EN$=_+bi`l5yNAB;P_HJs7+%69%& z@0uZwCq&-|K{V?3cbT24o26aMG@UR-RBKS%#*SxR$M?nWiRVEU-peS*RhegeyfD`m zm?&DbKEK473h27*=issdvlS_yjeT6!^O)6dUGeC!#5x>8^@^DTnB|&oHA)Z^6nPx< zWcsEGjLUt~k_mTbd@6uXvG-8_$D}>Q4JCzZHEUOrJ@18~;N7D`Svp-q(Jg6rIz)%` z{XSf@Xcq}Xtb8jJn0Vf@oEuPlm-e$3lUZ)sZYxvPGfZ#J$E|8ggOI65=2atgbcJ3PJlfjraO;_6W%>QU6Ci+CkX|~d zZJyNf)6CxJn+``Uv@3xT)r*5mF$~r7J$kphLD1c`zLknXzF@naCS<;PcHo|?IHwom zIPPPz@o+K3tmOJ#65`}8HTxfMJXrJ0d+`8J{Qsqo#5gK|g)PcipJ~5UTkoBWtKM#2 zOfPu!Mjx?;3dj~;$K{>Eg*cf0rPK(xJO+uf{x^X6FM#Mp4RDE`k--264kd43F!Tfr zoWiO9nKLt!K}yhi_y&$xMGctZf*;@)*04415yyf&bMS-2L6FqbG}r8@z)o>ieb8GaN_2Qa&pIWhGt+T%IC%&0$xH3!5^$uC>Zjr4s# zY|`srv-w#>lT@}j5YezqRmiW!?^hBezq42Ls5=sFe)IF;ATQ(Rd3)B^xGMoHbiW(# zJD$kWNUKTdEtVA7oygP&b%?3xMw*uEB_ys*zQPVq%?Fno!zm2M#-w5`Cl618{bfH~ zU!Th|xK0uJRJFZM?ESZ_=${qKYWd#oCa2yBUA=-cK1^26i(EUM3X_(PhIhI|Sc~cG zkQbzb5B;Xrx!>3DEgf|_hk}396MxYFY0Q5&B4Qpbpds)kWkG;eyk^LS&eqP`B5C2= zhVwT4MsudoE!ITF^%tLrzi9zJVV3B(b4TX=g&d;?9*t3Zl>y&-6}`iblFv74RKJkG z2E!w=iFH&!B=IE_pv3)s5?lx(Q09_;GnqZR3o4#-5Q<~AH#CyvaJUhyLt@BdJJ!6@ z0B893CjdZ434-9kAn&zZ)dA&_F>C37VdqB}N-T4Wjpcnw6DY(!_ny%C8GnId^V6__ zV2@UvaD88^J2?05q-DCo37k#pylAKa(iQPa)`L5t(&dIFx6j&6eX@POL}kvmn08~6 zd+yaQGBumm01NqvW2NtA>jrNXMU~xRKQVEP5vl%Y;#S1yT=|t2r&kB!QGI2<)!(&T z;~S`m91A|3`yH^icCR}1nium?{sxyIi`ZiSsK1nkR^I3PC)UxFid(qpo0CjtB2?j= zdx0jOAW`U&D|Hf*WUUW$&4P%pI!O*rU*>bRxJK)`pXjt~GLq7T`(n9tv0Z>ov;9D5 z-PgUfC}j1*TV@~I=&N76@?H_Q9qpW!dbOdkR};f73rDEK?xt874}8c_hsfM?uVU@> z-WFMcay;$&GedGooS_R>D&14+V@NU87qT$;y+=?FN@cv+(&JjSLVFpY`o!+ICfCfX z;#(Ka)sP{`~50{=QDh67F4XpELrL!?Wou_wiKmD?a zhLy%zpdp>7wT00E%5`q}U#s~Wts UP^IxFzxn1#`ooWB{|-R^06Cx)Z~y=R delta 4628 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 diff --git a/jackify/engine/System.Private.CoreLib.dll b/jackify/engine/System.Private.CoreLib.dll old mode 100644 new mode 100755 index 2e5270aace5ab009cac7fb9d4ed05da16d183392..cf1720a6e5e52ccbfe1bf6bf29e2000ebb7e30f7 GIT binary patch delta 3056651 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ϏU@c-zXRJ=jzS9f86Be@q$cbPcn* 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íl{*ZQ2_n8I2YrmE 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

    f1zJ^!wTI8Ke=D(mwVMU$XUm8qIo^ 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

    2W(MqP~Dy? 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