コード例 #1
0
ファイル: ModMainForm.cs プロジェクト: jordyan/AAEmu-Packer
        private void BtnUninstall_Click(object sender, EventArgs e)
        {
            btnInstall.Enabled = false;
            pb.Minimum         = 0;
            pb.Maximum         = FilesToMod.Count;
            pb.Step            = 1;
            lInstallInfo.Text  = "Uninstalling mod files";
            foreach (var fi in FilesToMod)
            {
                // If file exists in gamepak, make a backup
                AAPakFileInfo rfi = restorepak.nullAAPakFileInfo;
                if (restorepak.GetFileByName(fi.name, ref rfi))
                {
                    var fileRestoreStream = restorepak.ExportFileAsStream(fi.name);
                    fileRestoreStream.Position = 0;
                    AAPakFileInfo restoreFileInfo = gamepak.nullAAPakFileInfo;
                    if (!gamepak.AddFileFromStream(fi.name, fileRestoreStream, DateTime.FromFileTime(rfi.createTime), DateTime.FromFileTime(rfi.modifyTime), false, out restoreFileInfo))
                    {
                        MessageBox.Show("Error restoring file " + fi.name);
                    }
                    else
                    {
                        restorepak.DeleteFile(rfi);
                    }
                }

                pb.PerformStep();
                pb.Refresh();
                // System.Threading.Thread.Sleep(50);
            }

            // Remove added files

            if (restorepak.FileExists(ModNewFilesFileName))
            {
                ReadNewFilesFromRestore();

                foreach (var fn in FilesToMod)
                {
                    if (RestoreNewFilesList.IndexOf(fn.name) < 0)
                    {
                        continue;
                    }
                    AAPakFileInfo delFileInfo = gamepak.nullAAPakFileInfo;
                    if (gamepak.GetFileByName(fn.name, ref delFileInfo))
                    {
                        gamepak.DeleteFile(delFileInfo);
                        RestoreNewFilesList.Remove(fn.name);
                    }
                }

                WriteNewFilesForRestore();
            }

            lInstallInfo.Text = "Updating pak file headers";
            lInstallInfo.Refresh();
            restorepak.SaveHeader();
            gamepak.SaveHeader();
            pb.Value = pb.Maximum;

            MessageBox.Show("Mod has been uninstalled", "Uninstall", MessageBoxButtons.OK, MessageBoxIcon.Information);
            ValidateInstallOptions();
        }
コード例 #2
0
ファイル: ModMainForm.cs プロジェクト: jordyan/AAEmu-Packer
        private void ValidateInstallOptions()
        {
            // TODO: Enabled buttons depending on the state of game_pak and restore_pak compared to the aamod pak
            // Get file list from mod pak
            FilesToMod.Clear();
            foreach (var fi in modpak.files)
            {
                if (fi.name.StartsWith(ModFileFolderName))
                {
                    // Don't include own mod files
                }
                else
                {
                    // TODO: compare to gamepak to check if installed or not
                    FilesToMod.Add(fi);
                }
            }

            FilesToInstall.Clear();
            FilesAddedWithInstall.Clear();
            foreach (var fi in FilesToMod)
            {
                AAPakFileInfo gfi = gamepak.nullAAPakFileInfo;
                if (gamepak.GetFileByName(fi.name, ref gfi))
                {
                    if ((fi.size != gfi.size) || (!fi.md5.SequenceEqual(gfi.md5)))
                    {
                        FilesToInstall.Add(fi);
                    }
                }
                else
                {
                    FilesToInstall.Add(fi);
                    FilesAddedWithInstall.Add(fi);
                }
            }

            FilesToUnInstall.Clear();
            foreach (var fi in FilesToMod)
            {
                if (restorepak.FileExists(fi.name))
                {
                    FilesToUnInstall.Add(fi);
                }
            }

            if (FilesToInstall.Count > 0)
            {
                btnInstall.Enabled = true;
                string s = string.Empty;
                if (FilesToMod.Count != 1)
                {
                    s += "Mod " + FilesToMod.Count.ToString() + " file(s)";
                }
                else
                {
                    s += "Mod " + FilesToMod.Count.ToString() + " file";
                }
                if (FilesAddedWithInstall.Count > 0)
                {
                    s += ", with " + FilesAddedWithInstall.Count.ToString() + " new";
                }
                lInstallInfo.Text = s;
            }

            // Check if these same files are all present in the restore pak
            // If not, disable the uninstall option (likely not installed)
            // TODO:
            btnUninstall.Enabled = (FilesToUnInstall.Count > 0);
        }