Refactor beatmap import secondary process

Doesn't launch a new game window and now supports several files at once.
This commit is contained in:
Drew DeVault
2016-10-14 14:10:01 -04:00
parent 9426629853
commit 8e31965fb4
3 changed files with 23 additions and 18 deletions

View File

@ -2,6 +2,9 @@
//Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE //Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
using System; using System;
using System.IO;
using System.Linq;
using osu.Framework;
using osu.Framework.Desktop; using osu.Framework.Desktop;
using osu.Framework.Platform; using osu.Framework.Platform;
using osu.Game; using osu.Game;
@ -11,11 +14,22 @@ namespace osu.Desktop
public static class Program public static class Program
{ {
[STAThread] [STAThread]
public static void Main(string[] args) public static int Main(string[] args)
{ {
BasicGameHost host = Host.GetSuitableHost(@"osu"); 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<OsuGame.ImportBeatmap>(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(); host.Run();
return 0;
} }
} }
} }

View File

@ -28,7 +28,7 @@ namespace osu.Game
{ {
public class OsuGame : OsuGameBase public class OsuGame : OsuGameBase
{ {
private class ImportBeatmap public class ImportBeatmap
{ {
public string Path; public string Path;
} }
@ -37,16 +37,10 @@ namespace osu.Game
public ChatConsole Chat; public ChatConsole Chat;
public MainMenu MainMenu => intro?.ChildGameMode as MainMenu; public MainMenu MainMenu => intro?.ChildGameMode as MainMenu;
private Intro intro; private Intro intro;
private string[] args;
private IpcChannel<ImportBeatmap> BeatmapIPC; private IpcChannel<ImportBeatmap> BeatmapIPC;
public Bindable<PlayMode> PlayMode; public Bindable<PlayMode> PlayMode;
public OsuGame(string[] args)
{
this.args = args;
}
public override void SetHost(BasicGameHost host) public override void SetHost(BasicGameHost host)
{ {
base.SetHost(host); base.SetHost(host);
@ -60,12 +54,6 @@ namespace osu.Game
if (!Host.IsPrimaryInstance) 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); Environment.Exit(0);
} }

View File

@ -72,8 +72,11 @@ namespace osu.Game
protected override void Dispose(bool isDisposing) protected override void Dispose(bool isDisposing)
{ {
//refresh token may have changed. //refresh token may have changed.
if (Config != null && API != null)
{
Config.Set(OsuConfig.Token, API.Token); Config.Set(OsuConfig.Token, API.Token);
Config.Save(); Config.Save();
}
base.Dispose(isDisposing); base.Dispose(isDisposing);
} }