From 14f71c55bf583490405034c4f55843ac6d1af24b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Mail=C3=A4nder?= Date: Sat, 28 Jun 2014 13:04:17 +0200 Subject: [PATCH] unify install from CD logic --- OpenRA.Mods.Cnc/OpenRA.Mods.Cnc.csproj | 1 - .../Widgets/Logic/CncInstallFromCDLogic.cs | 127 -------------- OpenRA.Mods.D2k/OpenRA.Mods.D2k.csproj | 1 - .../Widgets/Logic/D2kInstallFromCDLogic.cs | 164 ------------------ OpenRA.Mods.RA/OpenRA.Mods.RA.csproj | 2 +- ...llFromCDLogic.cs => InstallFromCDLogic.cs} | 32 ++-- OpenRA.Mods.TS/OpenRA.Mods.TS.csproj | 1 - .../Widgets/Logic/TSInstallFromCDLogic.cs | 111 ------------ mods/cnc/chrome/install.yaml | 2 +- mods/cnc/mod.yaml | 4 + mods/d2k/chrome/gameinit.yaml | 2 +- mods/d2k/mod.yaml | 4 + mods/ra/chrome/gameinit.yaml | 2 +- mods/ra/mod.yaml | 4 + mods/ts/chrome/gameinit.yaml | 2 +- mods/ts/mod.yaml | 5 +- 16 files changed, 39 insertions(+), 425 deletions(-) delete mode 100644 OpenRA.Mods.Cnc/Widgets/Logic/CncInstallFromCDLogic.cs delete mode 100644 OpenRA.Mods.D2k/Widgets/Logic/D2kInstallFromCDLogic.cs rename OpenRA.Mods.RA/Widgets/Logic/{RAInstallFromCDLogic.cs => InstallFromCDLogic.cs} (69%) delete mode 100755 OpenRA.Mods.TS/Widgets/Logic/TSInstallFromCDLogic.cs diff --git a/OpenRA.Mods.Cnc/OpenRA.Mods.Cnc.csproj b/OpenRA.Mods.Cnc/OpenRA.Mods.Cnc.csproj index 9de122c9d4..77dd080e1f 100644 --- a/OpenRA.Mods.Cnc/OpenRA.Mods.Cnc.csproj +++ b/OpenRA.Mods.Cnc/OpenRA.Mods.Cnc.csproj @@ -79,7 +79,6 @@ - diff --git a/OpenRA.Mods.Cnc/Widgets/Logic/CncInstallFromCDLogic.cs b/OpenRA.Mods.Cnc/Widgets/Logic/CncInstallFromCDLogic.cs deleted file mode 100644 index 53ea45904d..0000000000 --- a/OpenRA.Mods.Cnc/Widgets/Logic/CncInstallFromCDLogic.cs +++ /dev/null @@ -1,127 +0,0 @@ -#region Copyright & License Information -/* - * Copyright 2007-2011 The OpenRA Developers (see AUTHORS) - * This file is part of OpenRA, which is free software. It is made - * available to you under the terms of the GNU General Public License - * as published by the Free Software Foundation. For more information, - * see COPYING. - */ -#endregion - -using System; -using System.IO; -using System.Linq; -using System.Threading; -using OpenRA.Widgets; - -namespace OpenRA.Mods.Cnc.Widgets.Logic -{ - public class CncInstallFromCDLogic - { - Widget panel; - ProgressBarWidget progressBar; - LabelWidget statusLabel; - Action afterInstall; - ButtonWidget retryButton, backButton; - Widget installingContainer, insertDiskContainer; - - string[] filesToCopy, filesToExtract; - - [ObjectCreator.UseCtor] - public CncInstallFromCDLogic(Widget widget, Action afterInstall, string[] filesToCopy, string[] filesToExtract) - { - this.afterInstall = afterInstall; - this.filesToCopy = filesToCopy; - this.filesToExtract = filesToExtract; - - panel = widget; - progressBar = panel.Get("PROGRESS_BAR"); - statusLabel = panel.Get("STATUS_LABEL"); - - backButton = panel.Get("BACK_BUTTON"); - backButton.OnClick = Ui.CloseWindow; - - retryButton = panel.Get("RETRY_BUTTON"); - retryButton.OnClick = CheckForDisk; - - installingContainer = panel.Get("INSTALLING"); - insertDiskContainer = panel.Get("INSERT_DISK"); - - CheckForDisk(); - } - - public static bool IsValidDisk(string diskRoot) - { - var files = new string[][] { - new[] { diskRoot, "CONQUER.MIX" }, - new[] { diskRoot, "DESERT.MIX" }, - new[] { diskRoot, "INSTALL", "SETUP.Z" }, - }; - - return files.All(f => File.Exists(f.Aggregate(Path.Combine))); - } - - void CheckForDisk() - { - var path = InstallUtils.GetMountedDisk(IsValidDisk); - - if (path != null) - Install(path); - else - { - insertDiskContainer.IsVisible = () => true; - installingContainer.IsVisible = () => false; - } - } - - void Install(string source) - { - backButton.IsDisabled = () => true; - retryButton.IsDisabled = () => true; - insertDiskContainer.IsVisible = () => false; - installingContainer.IsVisible = () => true; - - var dest = new string[] { Platform.SupportDir, "Content", "cnc" }.Aggregate(Path.Combine); - var extractPackage = "INSTALL/SETUP.Z"; - - var installCounter = 0; - var installTotal = filesToExtract.Count() + filesToExtract.Count(); - var onProgress = (Action)(s => Game.RunAfterTick(() => - { - progressBar.Percentage = installCounter * 100 / installTotal; - installCounter++; - - statusLabel.GetText = () => s; - })); - - var onError = (Action)(s => Game.RunAfterTick(() => - { - statusLabel.GetText = () => "Error: " + s; - backButton.IsDisabled = () => false; - retryButton.IsDisabled = () => false; - })); - - new Thread(_ => - { - try - { - if (!InstallUtils.CopyFiles(source, filesToCopy, dest, onProgress, onError)) - return; - - if (!InstallUtils.ExtractFromPackage(source, extractPackage, filesToExtract, dest, onProgress, onError)) - return; - - Game.RunAfterTick(() => - { - Ui.CloseWindow(); - afterInstall(); - }); - } - catch - { - onError("Installation failed"); - } - }) { IsBackground = true }.Start(); - } - } -} diff --git a/OpenRA.Mods.D2k/OpenRA.Mods.D2k.csproj b/OpenRA.Mods.D2k/OpenRA.Mods.D2k.csproj index f6e2e4be16..78b1d3bcdd 100644 --- a/OpenRA.Mods.D2k/OpenRA.Mods.D2k.csproj +++ b/OpenRA.Mods.D2k/OpenRA.Mods.D2k.csproj @@ -67,7 +67,6 @@ - diff --git a/OpenRA.Mods.D2k/Widgets/Logic/D2kInstallFromCDLogic.cs b/OpenRA.Mods.D2k/Widgets/Logic/D2kInstallFromCDLogic.cs deleted file mode 100644 index 234afbd7fb..0000000000 --- a/OpenRA.Mods.D2k/Widgets/Logic/D2kInstallFromCDLogic.cs +++ /dev/null @@ -1,164 +0,0 @@ -#region Copyright & License Information -/* - * Copyright 2007-2013 The OpenRA Developers (see AUTHORS) - * This file is part of OpenRA, which is free software. It is made - * available to you under the terms of the GNU General Public License - * as published by the Free Software Foundation. For more information, - * see COPYING. - */ -#endregion - -using System; -using System.IO; -using System.Linq; -using System.Threading; -using OpenRA.Widgets; - -namespace OpenRA.Mods.D2k.Widgets.Logic -{ - public class D2kInstallFromCDLogic - { - Widget panel; - ProgressBarWidget progressBar; - LabelWidget statusLabel; - Action continueLoading; - ButtonWidget retryButton, backButton; - Widget installingContainer, insertDiskContainer; - - [ObjectCreator.UseCtor] - public D2kInstallFromCDLogic(Widget widget, Action continueLoading) - { - panel = widget.Get("INSTALL_FROMCD_PANEL"); - progressBar = panel.Get("PROGRESS_BAR"); - statusLabel = panel.Get("STATUS_LABEL"); - - backButton = panel.Get("BACK_BUTTON"); - backButton.OnClick = Ui.CloseWindow; - - retryButton = panel.Get("RETRY_BUTTON"); - retryButton.OnClick = CheckForDisk; - - installingContainer = panel.Get("INSTALLING"); - insertDiskContainer = panel.Get("INSERT_DISK"); - - CheckForDisk(); - this.continueLoading = continueLoading; - } - - public static bool IsValidDisk(string diskRoot) - { - var files = new string[][] { - new[] { diskRoot, "music", "ambush.aud" }, - new[] { diskRoot, "setup", "setup.z" }, - }; - - return files.All(f => File.Exists(f.Aggregate(Path.Combine))); - } - - void CheckForDisk() - { - var path = InstallUtils.GetMountedDisk(IsValidDisk); - - if (path != null) - Install(path); - else - { - insertDiskContainer.IsVisible = () => true; - installingContainer.IsVisible = () => false; - } - } - - void Install(string source) - { - backButton.IsDisabled = () => true; - retryButton.IsDisabled = () => true; - insertDiskContainer.IsVisible = () => false; - installingContainer.IsVisible = () => true; - - var destMusic = new string[] { Platform.SupportDir, "Content", "d2k", "Music" }.Aggregate(Path.Combine); - var destData = new[] { Platform.SupportDir, "Content", "d2k" }.Aggregate(Path.Combine); - var destSound = new[] { destData, "GAMESFX" }.Aggregate(Path.Combine); - var copyFiles = new string[] { "music/ambush.aud", "music/arakatak.aud", "music/atregain.aud", "music/entordos.aud", "music/fightpwr.aud", "music/fremen.aud", "music/hark_bat.aud", "music/landsand.aud", "music/options.aud", "music/plotting.aud", "music/risehark.aud", "music/robotix.aud", "music/score.aud", "music/soldappr.aud", "music/spicesct.aud", "music/undercon.aud", "music/waitgame.aud" }; - - var extractPackage = "setup/setup.z"; - var extractFiles = new string[] { "SOUND.RS", "DATA.R8", "MOUSE.R8", "BLOXBASE.R8", "BLOXBAT.R8", "BLOXBGBS.R8", "BLOXICE.R8", "BLOXTREE.R8", "BLOXWAST.R8" }; - var extractAudio = new string[] { "A_ECONF1.AUD", "A_ECONF2.AUD", "A_ECONF3.AUD", "A_ESEL1.AUD", "A_ESEL2.AUD", "A_ESEL3.AUD", - "A_FCONF1.AUD", "A_FCONF2.AUD", "A_FCONF3.AUD", "A_FCONF4.AUD", "A_FSEL1.AUD", "A_FSEL2.AUD", "A_FSEL3.AUD", "A_FSEL4.AUD", - "AI_1MIN.AUD", "AI_2MIN.AUD", "AI_3MIN.AUD", "AI_4MIN.AUD", "AI_5MIN.AUD", "AI_ABORT.AUD", "AI_ATACK.AUD", "AI_BDRDY.AUD", - "AI_BLOST.AUD", "AI_BUILD.AUD", "AI_CANCL.AUD", "AI_CAPT.AUD", "A_ICONF1.AUD", "A_ICONF2.AUD", "A_ICONF3.AUD", "AI_DHRDY.AUD", - "AI_DPLOY.AUD", "AI_ENEMY.AUD", "AI_GANEW.AUD", "AI_GLOAD.AUD", "AI_GSAVE.AUD", "AI_GUARD.AUD", "AI_HATTK.AUD", "AI_HOLD.AUD", - "AI_LAUNC.AUD", "AI_MAP1A.AUD", "AI_MAP1B.AUD", "AI_MAP1C.AUD", "AI_MAP2A.AUD", "AI_MAP2B.AUD", "AI_MAP2C.AUD", "AI_MAP3A.AUD", - "AI_MAP4A.AUD", "AI_MAP5A.AUD", "AI_MAP6A.AUD", "AI_MAP7A.AUD", "AI_MAP8A.AUD", "AI_MAP9A.AUD", "AI_MEND.AUD", "AI_MFAIL.AUD", - "AI_MONEY.AUD", "AI_MWIN.AUD", "AI_NEWOP.AUD", "AI_NROOM.AUD", "AI_ORDER.AUD", "AI_PLACE.AUD", "AI_POWER.AUD", "AI_PREP.AUD", - "AI_PRMRY.AUD", "AI_REINF.AUD", "AI_RUN.AUD", "A_ISEL1.AUD", "A_ISEL2.AUD", "A_ISEL3.AUD", "AI_SELL.AUD", "AI_SILOS.AUD", - "AI_SPORT.AUD", "AI_TRAIN.AUD", "AI_ULOST.AUD", "AI_UNRDY.AUD", "AI_UPGOP.AUD", "AI_UPGRD.AUD", "AI_WATTK.AUD", "AI_WSIGN.AUD", - "A_VCONF1.AUD", "A_VCONF2.AUD", "A_VCONF3.AUD", "A_VSEL1.AUD", "A_VSEL2.AUD", "A_VSEL3.AUD", "G_SCONF1.AUD", "G_SCONF2.AUD", - "G_SCONF3.AUD", "G_SSEL1.AUD", "G_SSEL2.AUD", "G_SSEL3.AUD", "H_ECONF1.AUD", "H_ECONF2.AUD", "H_ECONF3.AUD", "H_ESEL1.AUD", - "H_ESEL2.AUD", "H_ESEL3.AUD", "HI_1MIN.AUD", "HI_2MIN.AUD", "HI_3MIN.AUD", "HI_4MIN.AUD", "HI_5MIN.AUD", "HI_ABORT.AUD", - "HI_ATACK.AUD", "HI_BDRDY.AUD", "HI_BLOST.AUD", "HI_BUILD.AUD", "HI_CANCL.AUD", "HI_CAPT.AUD", "H_ICONF1.AUD", "H_ICONF2.AUD", - "H_ICONF3.AUD", "HI_DHRDY.AUD", "HI_DPLOY.AUD", "HI_ENEMY.AUD", "HI_GANEW.AUD", "HI_GLOAD.AUD", "HI_GSAVE.AUD", "HI_GUARD.AUD", - "HI_HATTK.AUD", "HI_HOLD.AUD", "HI_LAUNC.AUD", "HI_MAP1A.AUD", "HI_MAP1B.AUD", "HI_MAP1C.AUD", "HI_MAP2A.AUD", "HI_MAP2B.AUD", - "HI_MAP2C.AUD", "HI_MAP3A.AUD", "HI_MAP3B.AUD", "HI_MAP4A.AUD", "HI_MAP4B.AUD", "HI_MAP5A.AUD", "HI_MAP6A.AUD", "HI_MAP6B.AUD", - "HI_MAP7A.AUD", "HI_MAP9A.AUD", "HI_MAP9.AUD", "HI_MEND.AUD", "HI_MFAIL.AUD", "HI_MONEY.AUD", "HI_MWIN.AUD", "HI_NEWOP.AUD", - "HI_NROOM.AUD", "HI_ORDER.AUD", "HI_PLACE.AUD", "HI_POWER.AUD", "HI_PREP.AUD", "HI_PRMRY.AUD", "HI_REINF.AUD", "HI_RUN.AUD", - "H_ISEL1.AUD", "H_ISEL2.AUD", "H_ISEL3.AUD", "HI_SELL.AUD", "HI_SILOS.AUD", "HI_SPORT.AUD", "HI_TRAIN.AUD", "HI_ULOST.AUD", - "HI_UNRDY.AUD", "HI_UPGOP.AUD", "HI_UPGRD.AUD", "HI_WATTK.AUD", "HI_WSIGN.AUD", "H_VCONF1.AUD", "H_VCONF2.AUD", "H_VCONF3.AUD", - "H_VSEL1.AUD", "H_VSEL2.AUD", "H_VSEL3.AUD", "O_ECONF1.AUD", "O_ECONF2.AUD", "O_ECONF3.AUD", "O_ESEL1.AUD", "O_ESEL2.AUD", - "O_ESEL3.AUD", "OI_1MIN.AUD", "OI_2MIN.AUD", "OI_3MIN.AUD", "OI_4MIN.AUD", "OI_5MIN.AUD", "OI_ABORT.AUD", "OI_ATACK.AUD", - "OI_BDRDY.AUD", "OI_BLOST.AUD", "OI_BUILD.AUD", "OI_CANCL.AUD", "OI_CAPT.AUD", "O_ICONF1.AUD", "O_ICONF2.AUD", "O_ICONF3.AUD", - "OI_DHRDY.AUD", "OI_DPLOY.AUD", "OI_ENEMY.AUD", "OI_GANEW.AUD", "OI_GLOAD.AUD", "OI_GSAVE.AUD", "OI_GUARD.AUD", "OI_HATTK.AUD", - "OI_HOLD.AUD", "OI_LAUNC.AUD", "OI_MAP1A.AUD", "OI_MAP1B.AUD", "OI_MAP1C.AUD", "OI_MAP2A.AUD", "OI_MAP2B.AUD", "OI_MAP2C.AUD", - "OI_MAP3A.AUD", "OI_MAP4A.AUD", "OI_MAP5A.AUD", "OI_MAP6A.AUD", "OI_MAP7A.AUD", "OI_MAP8A.AUD", "OI_MAP9A.AUD", "OI_MEND.AUD", - "OI_MFAIL.AUD", "OI_MONEY.AUD", "OI_MWIN.AUD", "OI_NEWOP.AUD", "OI_NROOM.AUD", "OI_ORDER.AUD", "OI_PLACE.AUD", "OI_POWER.AUD", - "OI_PREP.AUD", "OI_PRMRY.AUD", "OI_REINF.AUD", "OI_RUN.AUD", "O_ISEL1.AUD", "O_ISEL2.AUD", "O_ISEL3.AUD", "OI_SELL.AUD", - "OI_SILOS.AUD", "OI_SPORT.AUD", "OI_TRAIN.AUD", "OI_ULOST.AUD", "OI_UNRDY.AUD", "OI_UPGOP.AUD", "OI_UPGRD.AUD", "OI_WATTK.AUD", - "OI_WSIGN.AUD", "O_SCONF1.AUD", "O_SCONF2.AUD", "O_SCONF3.AUD", "O_SSEL1.AUD", "O_SSEL2.AUD", "O_SSEL3.AUD", "O_VCONF1.AUD", - "O_VCONF2.AUD", "O_VCONF3.AUD", "O_VSEL1.AUD", "O_VSEL2.AUD", "O_VSEL3.AUD" }; - - var installCounter = 0; - var installTotal = copyFiles.Count() + extractFiles.Count() + extractAudio.Count(); - - var onProgress = (Action)(s => Game.RunAfterTick(() => - { - progressBar.Percentage = installCounter * 100 / installTotal; - installCounter++; - - statusLabel.GetText = () => s; - })); - - var onError = (Action)(s => Game.RunAfterTick(() => - { - statusLabel.GetText = () => "Error: " + s; - backButton.IsDisabled = () => false; - retryButton.IsDisabled = () => false; - })); - - var t = new Thread(_ => - { - try - { - if (!InstallUtils.CopyFiles(source, copyFiles, destMusic, onProgress, onError)) - return; - - if (!InstallUtils.ExtractFromPackage(source, extractPackage, extractFiles, destData, onProgress, onError)) - return; - - if (!InstallUtils.ExtractFromPackage(source, extractPackage, extractAudio, destSound, onProgress, onError)) - return; - - Game.RunAfterTick(() => - { - statusLabel.GetText = () => "Game assets have been extracted."; - backButton.IsDisabled = () => false; - continueLoading(); - }); - } - catch - { - onError("Installation failed"); - } - }) { IsBackground = true }; - t.Start(); - } - } -} diff --git a/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj b/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj index a7c9bdafbe..d6f1e2b4b2 100644 --- a/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj +++ b/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj @@ -391,7 +391,6 @@ - @@ -519,6 +518,7 @@ + diff --git a/OpenRA.Mods.RA/Widgets/Logic/RAInstallFromCDLogic.cs b/OpenRA.Mods.RA/Widgets/Logic/InstallFromCDLogic.cs similarity index 69% rename from OpenRA.Mods.RA/Widgets/Logic/RAInstallFromCDLogic.cs rename to OpenRA.Mods.RA/Widgets/Logic/InstallFromCDLogic.cs index bceb20eab3..678dc97c0a 100644 --- a/OpenRA.Mods.RA/Widgets/Logic/RAInstallFromCDLogic.cs +++ b/OpenRA.Mods.RA/Widgets/Logic/InstallFromCDLogic.cs @@ -16,7 +16,7 @@ using OpenRA.Widgets; namespace OpenRA.Mods.RA.Widgets.Logic { - public class RAInstallFromCDLogic + public class InstallFromCDLogic { Widget panel; ProgressBarWidget progressBar; @@ -26,7 +26,7 @@ namespace OpenRA.Mods.RA.Widgets.Logic Widget installingContainer, insertDiskContainer; [ObjectCreator.UseCtor] - public RAInstallFromCDLogic(Widget widget, Action continueLoading) + public InstallFromCDLogic(Widget widget, Action continueLoading) { this.continueLoading = continueLoading; panel = widget.Get("INSTALL_FROMCD_PANEL"); @@ -44,12 +44,15 @@ namespace OpenRA.Mods.RA.Widgets.Logic CheckForDisk(); } + bool IsValidDisk(string diskRoot) + { + var files = Game.modData.Manifest.ContentInstaller["DiskTestFiles"].Split(','); + return files.All(f => File.Exists(Path.Combine(diskRoot, f))); + } + void CheckForDisk() { - Func ValidDiskFilter = diskRoot => File.Exists(diskRoot+Path.DirectorySeparatorChar+"MAIN.MIX") && - File.Exists(new string[] { diskRoot, "INSTALL", "REDALERT.MIX" }.Aggregate(Path.Combine)); - - var path = InstallUtils.GetMountedDisk(ValidDiskFilter); + var path = InstallUtils.GetMountedDisk(IsValidDisk); if (path != null) Install(path); @@ -67,18 +70,17 @@ namespace OpenRA.Mods.RA.Widgets.Logic insertDiskContainer.IsVisible = () => false; installingContainer.IsVisible = () => true; - var dest = new string[] { Platform.SupportDir, "Content", "ra" }.Aggregate(Path.Combine); - var copyFiles = new string[] { "INSTALL/REDALERT.MIX" }; + var dest = new string[] { Platform.SupportDir, "Content", Game.modData.Manifest.Mod.Id }.Aggregate(Path.Combine); + var copyFiles = Game.modData.Manifest.ContentInstaller["CopyFilesFromCD"].Split(','); - var extractPackage = "MAIN.MIX"; - var extractFiles = new string[] { "conquer.mix", "russian.mix", "allies.mix", "sounds.mix", - "scores.mix", "snow.mix", "interior.mix", "temperat.mix" }; + var extractPackage = Game.modData.Manifest.ContentInstaller["PackageToExtractFromCD"]; + var extractFiles = Game.modData.Manifest.ContentInstaller["ExtractFilesFromCD"].Split(','); var installCounter = 0; var installTotal = copyFiles.Count() + extractFiles.Count(); var onProgress = (Action)(s => Game.RunAfterTick(() => { - progressBar.Percentage = installCounter*100/installTotal; + progressBar.Percentage = installCounter * 100 / installTotal; installCounter++; statusLabel.GetText = () => s; @@ -98,11 +100,13 @@ namespace OpenRA.Mods.RA.Widgets.Logic if (!InstallUtils.CopyFiles(source, copyFiles, dest, onProgress, onError)) return; - if (!InstallUtils.ExtractFromPackage(source, extractPackage, extractFiles, dest, onProgress, onError)) - return; + if (!string.IsNullOrEmpty(extractPackage)) + if (!InstallUtils.ExtractFromPackage(source, extractPackage, extractFiles, dest, onProgress, onError)) + return; Game.RunAfterTick(() => { + statusLabel.GetText = () => "Game assets have been extracted."; Ui.CloseWindow(); continueLoading(); }); diff --git a/OpenRA.Mods.TS/OpenRA.Mods.TS.csproj b/OpenRA.Mods.TS/OpenRA.Mods.TS.csproj index 65ab02ac41..652b989571 100644 --- a/OpenRA.Mods.TS/OpenRA.Mods.TS.csproj +++ b/OpenRA.Mods.TS/OpenRA.Mods.TS.csproj @@ -46,7 +46,6 @@ - diff --git a/OpenRA.Mods.TS/Widgets/Logic/TSInstallFromCDLogic.cs b/OpenRA.Mods.TS/Widgets/Logic/TSInstallFromCDLogic.cs deleted file mode 100755 index c1c82d7a7e..0000000000 --- a/OpenRA.Mods.TS/Widgets/Logic/TSInstallFromCDLogic.cs +++ /dev/null @@ -1,111 +0,0 @@ -#region Copyright & License Information -/* - * Copyright 2007-2011 The OpenRA Developers (see AUTHORS) - * This file is part of OpenRA, which is free software. It is made - * available to you under the terms of the GNU General Public License - * as published by the Free Software Foundation. For more information, - * see COPYING. - */ -#endregion - -using System; -using System.IO; -using System.Linq; -using System.Threading; -using OpenRA.Widgets; - -namespace OpenRA.Mods.TS.Widgets.Logic -{ - public class TSInstallFromCDLogic - { - Widget panel; - ProgressBarWidget progressBar; - LabelWidget statusLabel; - Action continueLoading; - ButtonWidget retryButton, backButton; - Widget installingContainer, insertDiskContainer; - - [ObjectCreator.UseCtor] - public TSInstallFromCDLogic(Widget widget, Action continueLoading) - { - this.continueLoading = continueLoading; - panel = widget.Get("INSTALL_FROMCD_PANEL"); - progressBar = panel.Get("PROGRESS_BAR"); - statusLabel = panel.Get("STATUS_LABEL"); - - backButton = panel.Get("BACK_BUTTON"); - backButton.OnClick = Ui.CloseWindow; - - retryButton = panel.Get("RETRY_BUTTON"); - retryButton.OnClick = CheckForDisk; - - installingContainer = panel.Get("INSTALLING"); - insertDiskContainer = panel.Get("INSERT_DISK"); - CheckForDisk(); - } - - void CheckForDisk() - { - Func validDiskFilter = diskRoot => File.Exists(diskRoot + Path.DirectorySeparatorChar + "multi.mix") && - File.Exists(new string[] { diskRoot, "install", "tibsun.mix" }.Aggregate(Path.Combine)); - - var path = InstallUtils.GetMountedDisk(validDiskFilter); - - if (path != null) - Install(path); - else - { - insertDiskContainer.IsVisible = () => true; - installingContainer.IsVisible = () => false; - } - } - - void Install(string source) - { - backButton.IsDisabled = () => true; - retryButton.IsDisabled = () => true; - insertDiskContainer.IsVisible = () => false; - installingContainer.IsVisible = () => true; - - var dest = new string[] { Platform.SupportDir, "Content", "ts" }.Aggregate(Path.Combine); - var copyFiles = new string[] { "install/tibsun.mix", "scores.mix", "multi.mix" }; - - var installCounter = 0; - var installTotal = copyFiles.Count(); - var onProgress = (Action)(s => Game.RunAfterTick(() => - { - progressBar.Percentage = installCounter * 100 / installTotal; - installCounter++; - - statusLabel.GetText = () => s; - })); - - var onError = (Action)(s => Game.RunAfterTick(() => - { - statusLabel.GetText = () => "Error: " + s; - backButton.IsDisabled = () => false; - retryButton.IsDisabled = () => false; - })); - - var t = new Thread(_ => - { - try - { - if (!InstallUtils.CopyFiles(source, copyFiles, dest, onProgress, onError)) - return; - - Game.RunAfterTick(() => - { - Ui.CloseWindow(); - continueLoading(); - }); - } - catch - { - onError("Installation failed"); - } - }) { IsBackground = true }; - t.Start(); - } - } -} diff --git a/mods/cnc/chrome/install.yaml b/mods/cnc/chrome/install.yaml index 25c2d85913..4f7ffdd0eb 100644 --- a/mods/cnc/chrome/install.yaml +++ b/mods/cnc/chrome/install.yaml @@ -82,7 +82,7 @@ Container@INSTALL_PANEL: Text: Use CD Container@INSTALL_FROMCD_PANEL: - Logic: CncInstallFromCDLogic + Logic: InstallFromCDLogic X: (WINDOW_RIGHT - WIDTH)/2 Y: (WINDOW_BOTTOM - 150)/2 Width: 640 diff --git a/mods/cnc/mod.yaml b/mods/cnc/mod.yaml index 07cc15ea44..edf2f084bc 100644 --- a/mods/cnc/mod.yaml +++ b/mods/cnc/mod.yaml @@ -137,6 +137,10 @@ ContentInstaller: FilesToCopy: CONQUER.MIX, DESERT.MIX, SCORES.MIX, SOUNDS.MIX, TEMPERAT.MIX, WINTER.MIX FilesToExtract: speech.mix, tempicnh.mix, transit.mix PackageMirrorList: http://openra.net/packages/cnc-mirrors.txt + DiskTestFiles: CONQUER.MIX, DESERT.MIX INSTALL/SETUP.Z + PackageToExtractFromCD: INSTALL/SETUP.Z + ExtractFilesFromCD: speech.mix, tempicnh.mix, transit.mix + CopyFilesFromCD: CONQUER.MIX, DESERT.MIX, SCORES.MIX, SOUNDS.MIX, TEMPERAT.MIX, WINTER.MIX ServerTraits: LobbyCommands diff --git a/mods/d2k/chrome/gameinit.yaml b/mods/d2k/chrome/gameinit.yaml index 4f15639075..3991f8f127 100644 --- a/mods/d2k/chrome/gameinit.yaml +++ b/mods/d2k/chrome/gameinit.yaml @@ -101,7 +101,7 @@ Background@INSTALL_DOWNLOAD_PANEL: Key: escape Background@INSTALL_FROMCD_PANEL: - Logic: D2kInstallFromCDLogic + Logic: InstallFromCDLogic X: (WINDOW_RIGHT - WIDTH)/2 Y: (WINDOW_BOTTOM - HEIGHT)/2 Width: 500 diff --git a/mods/d2k/mod.yaml b/mods/d2k/mod.yaml index c242a2291d..1d4c4e85ae 100644 --- a/mods/d2k/mod.yaml +++ b/mods/d2k/mod.yaml @@ -119,6 +119,10 @@ ContentInstaller: # TODO: check if DATA.R8 is at 1.03 patch level with 4840 frames TestFiles: BLOXBASE.R8, BLOXBAT.R8, BLOXBGBS.R8, BLOXICE.R8, BLOXTREE.R8, BLOXWAST.R8, DATA.R8, SOUND.RS PackageMirrorList: http://openra.net/packages/d2k-103-mirrors.txt + DiskTestFiles: music/ambush.aud, setup/setup.z + PackageToExtractFromCD: setup/setup.z + ExtractFilesFromCD: SOUND.RS, DATA.R8, MOUSE.R8, BLOXBASE.R8, BLOXBAT.R8, BLOXBGBS.R8, BLOXICE.R8, BLOXTREE.R8, BLOXWAST.R8, A_ECONF1.AUD, A_ECONF2.AUD, A_ECONF3.AUD, A_ESEL1.AUD, A_ESEL2.AUD, A_ESEL3.AUD, A_FCONF1.AUD, A_FCONF2.AUD, A_FCONF3.AUD,A_FCONF4.AUD, A_FSEL1.AUD, A_FSEL2.AUD, A_FSEL3.AUD, A_FSEL4.AUD, AI_1MIN.AUD, AI_2MIN.AUD, AI_3MIN.AUD, AI_4MIN.AUD, AI_5MIN.AUD, AI_ABORT.AUD, AI_ATACK.AUD, AI_BDRDY.AUD, AI_BLOST.AUD, AI_BUILD.AUD, AI_CANCL.AUD, AI_CAPT.AUD, A_ICONF1.AUD, A_ICONF2.AUD, A_ICONF3.AUD, AI_DHRDY.AUD, AI_DPLOY.AUD, AI_ENEMY.AUD, AI_GANEW.AUD, AI_GLOAD.AUD, AI_GSAVE.AUD, AI_GUARD.AUD, AI_HATTK.AUD, AI_HOLD.AUD, AI_LAUNC.AUD, AI_MAP1A.AUD, AI_MAP1B.AUD, AI_MAP1C.AUD, AI_MAP2A.AUD, AI_MAP2B.AUD, AI_MAP2C.AUD, AI_MAP3A.AUD, AI_MAP4A.AUD, AI_MAP5A.AUD, AI_MAP6A.AUD, AI_MAP7A.AUD, AI_MAP8A.AUD, AI_MAP9A.AUD, AI_MEND.AUD, AI_MFAIL.AUD, AI_MONEY.AUD, AI_MWIN.AUD, AI_NEWOP.AUD, AI_NROOM.AUD, AI_ORDER.AUD, AI_PLACE.AUD, AI_POWER.AUD, AI_PREP.AUD, AI_PRMRY.AUD, AI_REINF.AUD, AI_RUN.AUD, A_ISEL1.AUD, A_ISEL2.AUD, A_ISEL3.AUD, AI_SELL.AUD, AI_SILOS.AUD, AI_SPORT.AUD, AI_TRAIN.AUD, AI_ULOST.AUD, AI_UNRDY.AUD, AI_UPGOP.AUD, AI_UPGRD.AUD, AI_WATTK.AUD, AI_WSIGN.AUD, A_VCONF1.AUD, A_VCONF2.AUD, A_VCONF3.AUD, A_VSEL1.AUD, A_VSEL2.AUD, A_VSEL3.AUD, G_SCONF1.AUD, G_SCONF2.AUD, G_SCONF3.AUD, G_SSEL1.AUD, G_SSEL2.AUD, G_SSEL3.AUD, H_ECONF1.AUD, H_ECONF2.AUD, H_ECONF3.AUD, H_ESEL1.AUD, H_ESEL2.AUD, H_ESEL3.AUD, HI_1MIN.AUD, HI_2MIN.AUD, HI_3MIN.AUD, HI_4MIN.AUD, HI_5MIN.AUD, HI_ABORT.AUD, HI_ATACK.AUD, HI_BDRDY.AUD, HI_BLOST.AUD, HI_BUILD.AUD, HI_CANCL.AUD, HI_CAPT.AUD, H_ICONF1.AUD, H_ICONF2.AUD, H_ICONF3.AUD, HI_DHRDY.AUD, HI_DPLOY.AUD, HI_ENEMY.AUD, HI_GANEW.AUD,HI_GLOAD.AUD, HI_GSAVE.AUD, HI_GUARD.AUD, HI_HATTK.AUD, HI_HOLD.AUD, HI_LAUNC.AUD, HI_MAP1A.AUD, HI_MAP1B.AUD, HI_MAP1C.AUD, HI_MAP2A.AUD, HI_MAP2B.AUD, HI_MAP2C.AUD, HI_MAP3A.AUD, HI_MAP3B.AUD, HI_MAP4A.AUD, HI_MAP4B.AUD, HI_MAP5A.AUD, HI_MAP6A.AUD, HI_MAP6B.AUD, HI_MAP7A.AUD, HI_MAP9A.AUD, HI_MAP9.AUD, HI_MEND.AUD, HI_MFAIL.AUD, HI_MONEY.AUD, HI_MWIN.AUD, HI_NEWOP.AUD, HI_NROOM.AUD, HI_ORDER.AUD, HI_PLACE.AUD, HI_POWER.AUD, HI_PREP.AUD, HI_PRMRY.AUD, HI_REINF.AUD, HI_RUN.AUD, H_ISEL1.AUD, H_ISEL2.AUD, H_ISEL3.AUD, HI_SELL.AUD, HI_SILOS.AUD,HI_SPORT.AUD, HI_TRAIN.AUD, HI_ULOST.AUD, HI_UNRDY.AUD, HI_UPGOP.AUD, HI_UPGRD.AUD, HI_WATTK.AUD, HI_WSIGN.AUD, H_VCONF1.AUD, H_VCONF2.AUD, H_VCONF3.AUD, H_VSEL1.AUD, H_VSEL2.AUD, H_VSEL3.AUD, O_ECONF1.AUD, O_ECONF2.AUD, O_ECONF3.AUD, O_ESEL1.AUD, O_ESEL2.AUD, O_ESEL3.AUD, OI_1MIN.AUD, OI_2MIN.AUD, OI_3MIN.AUD, OI_4MIN.AUD, OI_5MIN.AUD, OI_ABORT.AUD, OI_ATACK.AUD, OI_BDRDY.AUD, OI_BLOST.AUD, OI_BUILD.AUD, OI_CANCL.AUD, OI_CAPT.AUD, O_ICONF1.AUD, O_ICONF2.AUD, O_ICONF3.AUD, OI_DHRDY.AUD, OI_DPLOY.AUD, OI_ENEMY.AUD, OI_GANEW.AUD, OI_GLOAD.AUD, OI_GSAVE.AUD, OI_GUARD.AUD, OI_HATTK.AUD, OI_HOLD.AUD, OI_LAUNC.AUD, OI_MAP1A.AUD, OI_MAP1B.AUD, OI_MAP1C.AUD, OI_MAP2A.AUD, OI_MAP2B.AUD, OI_MAP2C.AUD, OI_MAP3A.AUD, OI_MAP4A.AUD, OI_MAP5A.AUD, OI_MAP6A.AUD, OI_MAP7A.AUD, OI_MAP8A.AUD, OI_MAP9A.AUD, OI_MEND.AUD, OI_MFAIL.AUD, OI_MONEY.AUD, OI_MWIN.AUD, OI_NEWOP.AUD, OI_NROOM.AUD, OI_ORDER.AUD, OI_PLACE.AUD, OI_POWER.AUD, OI_PREP.AUD, OI_PRMRY.AUD, OI_REINF.AUD, OI_RUN.AUD, O_ISEL1.AUD, O_ISEL2.AUD, O_ISEL3.AUD, OI_SELL.AUD, OI_SILOS.AUD, OI_SPORT.AUD, OI_TRAIN.AUD, OI_ULOST.AUD, OI_UNRDY.AUD, OI_UPGOP.AUD, OI_UPGRD.AUD, OI_WATTK.AUD, OI_WSIGN.AUD, O_SCONF1.AUD, O_SCONF2.AUD, O_SCONF3.AUD, O_SSEL1.AUD, O_SSEL2.AUD, O_SSEL3.AUD, O_VCONF1.AUD, O_VCONF2.AUD, O_VCONF3.AUD, O_VSEL1.AUD, O_VSEL2.AUD, O_VSEL3.AUD + CopyFilesFromCD: music/ambush.aud, music/arakatak.aud, music/atregain.aud, music/entordos.aud, music/fightpwr.aud, music/fremen.aud, music/hark_bat.aud, music/landsand.aud, music/options.aud, music/plotting.aud, music/risehark.aud, music/robotix.aud, music/score.aud, music/soldappr.aud, music/spicesct.aud, music/undercon.aud, music/waitgame.aud ServerTraits: LobbyCommands diff --git a/mods/ra/chrome/gameinit.yaml b/mods/ra/chrome/gameinit.yaml index 0c7d2c527c..0eb2e30166 100644 --- a/mods/ra/chrome/gameinit.yaml +++ b/mods/ra/chrome/gameinit.yaml @@ -94,7 +94,7 @@ Background@INSTALL_DOWNLOAD_PANEL: Key: escape Background@INSTALL_FROMCD_PANEL: - Logic: RAInstallFromCDLogic + Logic: InstallFromCDLogic X: (WINDOW_RIGHT - WIDTH)/2 Y: (WINDOW_BOTTOM - HEIGHT)/2 Width: 500 diff --git a/mods/ra/mod.yaml b/mods/ra/mod.yaml index 94eafcaf11..bba740abd4 100644 --- a/mods/ra/mod.yaml +++ b/mods/ra/mod.yaml @@ -135,6 +135,10 @@ ContentInstaller: InstallerMenuWidget: INSTALL_PANEL TestFiles: allies.mix, conquer.mix, general.mix, interior.mix, redalert.mix, russian.mix, scores.mix, snow.mix, sounds.mix, temperat.mix PackageMirrorList: http://openra.net/packages/ra-mirrors.txt + DiskTestFiles: MAIN.MIX, INSTALL/REDALERT.MIX + PackageToExtractFromCD: MAIN.MIX + ExtractFilesFromCD: conquer.mix, russian.mix, allies.mix, sounds.mix, scores.mix, snow.mix, interior.mix, temperat.mix + CopyFilesFromCD: INSTALL/REDALERT.MIX ServerTraits: LobbyCommands diff --git a/mods/ts/chrome/gameinit.yaml b/mods/ts/chrome/gameinit.yaml index 7f83536c3e..51ed1dc801 100644 --- a/mods/ts/chrome/gameinit.yaml +++ b/mods/ts/chrome/gameinit.yaml @@ -94,7 +94,7 @@ Background@INSTALL_DOWNLOAD_PANEL: Key: escape Background@INSTALL_FROMCD_PANEL: - Logic: TSInstallFromCDLogic + Logic: InstallFromCDLogic X: (WINDOW_RIGHT - WIDTH)/2 Y: (WINDOW_BOTTOM - HEIGHT)/2 Width: 500 diff --git a/mods/ts/mod.yaml b/mods/ts/mod.yaml index 2d2427477d..6445ca0367 100644 --- a/mods/ts/mod.yaml +++ b/mods/ts/mod.yaml @@ -160,7 +160,10 @@ ContentInstaller: InstallerMenuWidget: INSTALL_PANEL TestFiles: cache.mix, conquer.mix, isosnow.mix, isotemp.mix, local.mix, sidec01.mix, sidec02.mix, sno.mix, snow.mix, sounds.mix, speech01.mix, tem.mix, temperat.mix PackageMirrorList: http://openra.net/packages/ts-mirrors.txt - Text: Updating EVA installation..., Changing perspective... + DiskTestFiles: multi.mix, install/tibsun.mix + PackageToExtractFromCD: + ExtractFilesFromCD: + CopyFilesFromCD: install/tibsun.mix, scores.mix, multi.mix ServerTraits: LobbyCommands