Ejemplo n.º 1
0
        static PlaysetModConfiguration LoadPlaysetModData(BaseModConfiguration configuration, string extractPath)
        {
            var configPath = Path.Combine(extractPath, "config.json");
            var modData    = Newtonsoft.Json.JsonConvert.DeserializeObject <PlaysetModConfiguration>(File.ReadAllText(configPath));

            return(modData);
        }
Ejemplo n.º 2
0
        static CharacterModConfiguration LoadCharacterModData(BaseModConfiguration configuration, string extractPath)
        {
            var configPath       = Path.Combine(extractPath, "config.json");
            var presentationPath = Path.Combine(extractPath, "presentation.json");

            var modData          = JsonMapper.ToObject <CharacterModConfiguration>(File.ReadAllText(configPath));
            var presentationData = JsonMapper.ToObject <CharacterData>(File.ReadAllText(presentationPath));

            modData.PresentationData = presentationData;
            return(modData);
        }
Ejemplo n.º 3
0
        static BaseModConfiguration LoadModData(BaseModConfiguration configuration, string extractPath)
        {
            switch (configuration.ModCategory)
            {
            case "Character":
                return(LoadCharacterModData(configuration, extractPath));

            default:
                return(configuration);
            }
        }
Ejemplo n.º 4
0
        static CostumeCoinModConfiguration LoadCostumeCoinModData(BaseModConfiguration configuration, string extractPath)
        {
            var configPath       = Path.Combine(extractPath, "config.json");
            var presentationPath = Path.Combine(extractPath, "presentation.json");

            var modData          = Newtonsoft.Json.JsonConvert.DeserializeObject <CostumeCoinModConfiguration>(File.ReadAllText(configPath));
            var presentationData = Newtonsoft.Json.JsonConvert.DeserializeObject <CostumeCoinData>(File.ReadAllText(presentationPath));

            modData.PresentationData = presentationData;
            return(modData);
        }
Ejemplo n.º 5
0
        private static bool TryLoadV1Mod(FileInfo fileInfo, ModPathInfo pathInfo, out BaseModConfiguration modData)
        {
            modData = null;

            if (fileInfo.Extension == ".zip")
            {
                var extractFolder = Path.Combine(pathInfo.extractBasePath, fileInfo.Name);
                System.IO.Compression.ZipFile.ExtractToDirectory(fileInfo.FullName, extractFolder);

                var configPath = Path.Combine(extractFolder, "config.json");

                if (!File.Exists(configPath))
                {
                    return(false);
                }

                var fileData = File.ReadAllText(configPath);
                modData = JsonMapper.ToObject <BaseModConfiguration>(fileData);

                if (string.IsNullOrEmpty(modData.ModID) || modData.Version > 1)
                {
                    return(false);
                }

                var destinationPath = Path.Combine(pathInfo.modCachePath, modData.ModID);

                // Delete the directory and re-save cache the mod data
                if (Directory.Exists(destinationPath))
                {
                    Directory.Delete(destinationPath, true);
                }

                modData = LoadModData(modData, extractFolder);
                Directory.Move(extractFolder, destinationPath);

                modData.ModCachePath = destinationPath;

                // Temporary work around since we can't appear to load images from %APPDATA%
                var imageBytes = File.ReadAllBytes(Path.Join(modData.ModCachePath, modData.DisplayImage));
                modData.DisplayImageBase64 = "data:image/png;base64," + Convert.ToBase64String(imageBytes);

                return(true);
            }

            return(false);
        }
Ejemplo n.º 6
0
        static bool CheckModConfigurationIsValid(BaseModConfiguration configuration, List <string> loadErrors)
        {
            bool result = true;

            // If we don't have any actions, no need to validate
            if (configuration.InstallActions == null)
            {
                return(true);
            }

            foreach (var action in configuration.InstallActions)
            {
                if (action is MoveFileAction)
                {
                    result &= CheckFileMoveAction(action as MoveFileAction, loadErrors);
                }
                else if (action is CopyFileAction)
                {
                    result &= CheckFileCopyAction(action as CopyFileAction, loadErrors);
                }
                else if (action is DeleteFilesAction)
                {
                    result &= CheckFileDeleteAction(action as DeleteFilesAction, loadErrors);
                }
                else if (action is ReplaceFileAction)
                {
                    result &= CheckFileReplaceAction(action as ReplaceFileAction, loadErrors);
                }
                else if (action is WriteToFileAction)
                {
                    result &= CheckFileWriteAction(action as WriteToFileAction, loadErrors);
                }
                else if (action is QuickBMSExtractAction)
                {
                    result &= CheckQuickBMSExtractAction(action as QuickBMSExtractAction, loadErrors);
                }
                else if (action is UnluacDecompileAction)
                {
                    result &= CheckUnluacDecompileAction(action as UnluacDecompileAction, loadErrors);
                }
            }

            return(result);
        }
Ejemplo n.º 7
0
        static BaseModConfiguration LoadModData(BaseModConfiguration configuration, string extractPath)
        {
            if (configuration.Version < 2)
            {
                switch (configuration.ModCategory)
                {
                case "Character":
                    return(LoadCharacterModData(configuration, extractPath));

                case "CostumeCoin":
                    return(LoadCostumeCoinModData(configuration, extractPath));

                case "Playset":
                    return(LoadPlaysetModData(configuration, extractPath));

                default:
                    return(configuration);
                }
            }

            return(configuration);
        }
Ejemplo n.º 8
0
        private static ModLoadStatus TryLoadV1Mod(FileInfo fileInfo, ModPathInfo pathInfo, out BaseModConfiguration modData, List <string> loadErrors)
        {
            modData = null;
            string zipFile = null;

            try
            {
                zipFile = Path.ChangeExtension(fileInfo.FullName, ".zip");
                File.Copy(fileInfo.FullName, zipFile);

                if (fileInfo.Extension == ".mod")
                {
                    var extractFolder = Path.Combine(pathInfo.extractBasePath, fileInfo.Name);

                    System.IO.Compression.ZipFile.ExtractToDirectory(zipFile, extractFolder);

                    var configPath = Path.Combine(extractFolder, "config.json");

                    if (!File.Exists(configPath))
                    {
                        return(ModLoadStatus.NoConfig);
                    }

                    var fileData = File.ReadAllText(configPath);
                    //JsonMapper.ToObject<BaseModConfiguration>(fileData);
                    modData = Newtonsoft.Json.JsonConvert.DeserializeObject <BaseModConfiguration>(fileData, new ModInstallActionConverter());

                    if (string.IsNullOrEmpty(modData.ModID))
                    {
                        return(ModLoadStatus.ConfigInvalid);
                    }

                    if (modData.Version < 2)
                    {
                        return(ModLoadStatus.UnsupportedVersion);
                    }

                    if (modData.Version > 2)
                    {
                        return(ModLoadStatus.UnsupportedVersion);
                    }

                    modData = LoadModData(modData, extractFolder);
                    modData.ModCachePath = extractFolder;

                    // Temporary work around since we can't appear to load images from %APPDATA%
                    var imageFileInfo = new FileInfo(Path.Join(modData.ModCachePath, modData.DisplayImage));
                    var imageBytes    = File.ReadAllBytes(imageFileInfo.FullName);
                    modData.DisplayImageBase64 = $"data:image/{imageFileInfo.Extension};base64," + Convert.ToBase64String(imageBytes);

                    var configValid = CheckModConfigurationIsValid(modData, loadErrors);

                    return(configValid ? ModLoadStatus.Success : ModLoadStatus.ConfigInvalid);
                }
                else
                {
                    return(ModLoadStatus.ExtensionInvalid);
                }
            }
            catch (Exception ex)
            {
                Logging.LogMessage(ex.ToString(), Logging.LogSeverity.Error);
                return(ModLoadStatus.UnspecifiedFailure);
            }
            finally
            {
                if (!string.IsNullOrWhiteSpace(zipFile))
                {
                    File.Delete(zipFile);
                }
            }
        }