示例#1
0
        /* 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));
        }
示例#2
0
        /* 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));
    }