diff --git a/osu.Desktop/Program.cs b/osu.Desktop/Program.cs index a1a29b918f..c78ea962ff 100644 --- a/osu.Desktop/Program.cs +++ b/osu.Desktop/Program.cs @@ -2,6 +2,9 @@ //Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE using System; +using System.IO; +using System.Linq; +using osu.Framework; using osu.Framework.Desktop; using osu.Framework.Platform; using osu.Game; @@ -11,11 +14,22 @@ namespace osu.Desktop public static class Program { [STAThread] - public static void Main(string[] args) + public static int Main(string[] args) { BasicGameHost host = Host.GetSuitableHost(@"osu"); - host.Add(new OsuGame(args)); + BaseGame osuGame = new OsuGame(); + if (args.Length != 0 && args.All(File.Exists)) + { + host.Load(osuGame); + var beatmapIPC = new IpcChannel(host); + foreach (var file in args) + beatmapIPC.SendMessage(new OsuGame.ImportBeatmap { Path = file }).Wait(); + Console.WriteLine(@"Sent file to running instance"); + return 0; + } + host.Add(osuGame); host.Run(); + return 0; } } } diff --git a/osu.Game/OsuGame.cs b/osu.Game/OsuGame.cs index b0a4ec94e8..11fc3fd33c 100644 --- a/osu.Game/OsuGame.cs +++ b/osu.Game/OsuGame.cs @@ -28,7 +28,7 @@ namespace osu.Game { public class OsuGame : OsuGameBase { - private class ImportBeatmap + public class ImportBeatmap { public string Path; } @@ -37,16 +37,10 @@ private class ImportBeatmap public ChatConsole Chat; public MainMenu MainMenu => intro?.ChildGameMode as MainMenu; private Intro intro; - private string[] args; private IpcChannel BeatmapIPC; public Bindable PlayMode; - public OsuGame(string[] args) - { - this.args = args; - } - public override void SetHost(BasicGameHost host) { base.SetHost(host); @@ -60,13 +54,7 @@ public override void Load(BaseGame game) if (!Host.IsPrimaryInstance) { - if (args.Length == 1 && File.Exists(args[0])) - { - BeatmapIPC.SendMessage(new ImportBeatmap { Path = args[0] }).Wait(); - Logger.Log(@"Sent file to running instance"); - } - else - Logger.Log(@"osu! does not support multiple running instances.", LoggingTarget.Runtime, LogLevel.Error); + Logger.Log(@"osu! does not support multiple running instances.", LoggingTarget.Runtime, LogLevel.Error); Environment.Exit(0); } diff --git a/osu.Game/OsuGameBase.cs b/osu.Game/OsuGameBase.cs index 2d20faeeb1..ba6dd19506 100644 --- a/osu.Game/OsuGameBase.cs +++ b/osu.Game/OsuGameBase.cs @@ -72,8 +72,11 @@ protected override void Update() protected override void Dispose(bool isDisposing) { //refresh token may have changed. - Config.Set(OsuConfig.Token, API.Token); - Config.Save(); + if (Config != null && API != null) + { + Config.Set(OsuConfig.Token, API.Token); + Config.Save(); + } base.Dispose(isDisposing); }