/* Get resolvers. */ /// <summary> /// Retrieves a summary of all updates to be performed. /// </summary> public async Task <ModUpdateSummary> GetUpdateDetails() { if (_resolversWithUpdates == null) { var resolverManagerPairs = new List <ResolverManagerModResultPair>(); var resolverTuples = GetResolvers(); foreach (var resolverTuple in resolverTuples) { var modTuple = resolverTuple.ModTuple; var version = resolverTuple.Resolver.GetCurrentVersion(); // Note: Since R2R Support was added, we cannot predict which DLL will be in use. Just return the config file as main file. string filePath = modTuple.Path; var metadata = new AssemblyMetadata(IOEx.ForceValidFilePath(modTuple.Config.ModName), version, filePath); var manager = new UpdateManager(metadata, resolverTuple.Resolver, resolverTuple.Resolver.Extractor); var updateResult = await manager.CheckForUpdatesAsync(); if (updateResult.CanUpdate) { resolverManagerPairs.Add(new ResolverManagerModResultPair(resolverTuple.Resolver, manager, updateResult, modTuple)); } else { resolverTuple.Resolver.PostUpdateCallback(false); } } _resolversWithUpdates = resolverManagerPairs; return(new ModUpdateSummary(_resolversWithUpdates)); } return(new ModUpdateSummary(_resolversWithUpdates)); }
/* Save Mod to Directory */ public void Save() { // Make folder path and save folder. string modConfigDirectory = IoC.Get <LoaderConfig>().ModConfigDirectory; string modDirectory = Path.Combine(modConfigDirectory, IOEx.ForceValidFilePath(Config.ModId)); Directory.CreateDirectory(modDirectory); // Save Config string configSaveDirectory = Path.Combine(modDirectory, ModConfig.ConfigFileName); string iconSaveDirectory = Path.Combine(modDirectory, ModConfig.IconFileName); Config.ModIcon = ModConfig.IconFileName; Config.ModDependencies = Dependencies.Where(x => x.Enabled).Select(x => x.Generic.ModId).ToArray(); Config.SupportedAppId = Constants.EmptyStringArray; ConfigReader <ModConfig> .WriteConfiguration(configSaveDirectory, (ModConfig)Config); // Save Image var encoder = new PngBitmapEncoder(); encoder.Frames.Add(BitmapFrame.Create((BitmapImage)Image)); using (FileStream stream = new FileStream(iconSaveDirectory, FileMode.OpenOrCreate)) { encoder.Save(stream); } }
/// <summary> /// Retrieves an user config folder for a given mod. /// </summary> /// <param name="modId">Id for the mod to get the user config for.</param> /// <param name="configDirectory">The directory containing the user configurations.</param> public static string GetUserConfigFolderForMod(string modId, string configDirectory = null) { if (configDirectory == null) { configDirectory = IConfig <LoaderConfig> .FromPathOrDefault(Paths.LoaderConfigPath).GetModUserConfigDirectory(); } return(Path.Combine(configDirectory, IOEx.ForceValidFilePath(modId))); }
/// <summary> /// Creates the mod. /// </summary> /// <param name="showNonUniqueWindow">Shows a message to tell the user the mod isn't unique.</param> public async Task <PathTuple <ModConfig>?> CreateMod(Action showNonUniqueWindow) { if (!IsUnique(showNonUniqueWindow)) { return(null); } var config = new ModConfig() { ModId = ModId, ReleaseMetadataFileName = $"{ModId}.ReleaseMetadata.json" }; var modDirectory = Path.Combine(IoC.Get <LoaderConfig>().GetModConfigDirectory(), IOEx.ForceValidFilePath(ModId)); var filePath = Path.Combine(modDirectory, ModConfig.ConfigFileName); await IConfig <ModConfig> .ToPathAsync(config, filePath); return(new PathTuple <ModConfig>(filePath, config)); }