public static async Task StartLiteAsync(string kn5, string skinId = null) { if (_starting) return; _starting = true; _last?.Stop(); _last = null; ForwardKn5ObjectRenderer renderer = null; Logging.Write("Custom Showroom: Magick.NET IsSupported=" + ImageUtils.IsMagickSupported); RenderLogging.Initialize(Logging.Filename, true); try { var carDirectory = Path.GetDirectoryName(kn5); if (Path.GetFileName(Path.GetDirectoryName(carDirectory)) == @"..") { carDirectory = Path.GetDirectoryName(Path.GetDirectoryName(carDirectory)); } var carObject = CarsManager.Instance.GetById(Path.GetFileName(carDirectory) ?? ""); var toolboxMode = IsSameDirectories(carObject?.Location, carDirectory); LiteShowroomWrapper wrapper; using (var waiting = new WaitingDialog()) { waiting.Report(ControlsStrings.CustomShowroom_Loading); if (toolboxMode) { renderer = await Task.Run(() => new ToolsKn5ObjectRenderer(kn5, carDirectory)); wrapper = new LiteShowroomWrapperWithTools((ToolsKn5ObjectRenderer)renderer, carObject, skinId); } else { Logging.Warning($"Can’t find CarObject for “{carDirectory}”"); Logging.Warning($"Found location: “{carObject?.Location ?? @"NULL"}”"); renderer = await Task.Run(() => new ForwardKn5ObjectRenderer(kn5, carDirectory)); wrapper = new LiteShowroomWrapper(renderer); if (skinId != null) { renderer.SelectSkin(skinId); } } renderer.UseMsaa = SettingsHolder.CustomShowroom.LiteUseMsaa; renderer.UseFxaa = SettingsHolder.CustomShowroom.LiteUseFxaa; renderer.UseBloom = SettingsHolder.CustomShowroom.LiteUseBloom; _last = wrapper; SetProperties(wrapper, renderer); wrapper.Form.Icon = AppIconService.GetAppIcon(); } wrapper.Run(() => _starting = false); GC.Collect(); } catch (Exception e) { NonfatalError.Notify(ControlsStrings.CustomShowroom_CannotStart, e); } finally { renderer?.Dispose(); _last = null; _starting = false; } }
public static async Task ShareAsync(SharedEntryType type, [CanBeNull] string defaultName, [CanBeNull] string target, [NotNull] byte[] data) { if (_sharingInProcess) return; _sharingInProcess = true; try { var contentName = defaultName; if (!SettingsHolder.Sharing.ShareWithoutName) { contentName = Prompt.Show(ControlsStrings.Share_EnterName, ControlsStrings.Share_EnterNameHeader, defaultName, ToolsStrings.Common_None, maxLength: 60); if (contentName == null) return; // cancelled if (string.IsNullOrWhiteSpace(contentName)) { contentName = null; } } string id = null; if (SettingsHolder.Sharing.CustomIds) { id = Prompt.Show(ControlsStrings.Share_EnterCustomId, ControlsStrings.Share_EnterCustomIdHeader, "", ToolsStrings.Common_None, maxLength: 200)?.Trim(); if (id == null) return; // cancelled if (string.IsNullOrWhiteSpace(id)) { id = null; } } var authorName = SettingsHolder.Sharing.ShareAnonymously ? null : SettingsHolder.Sharing.SharingName; if (SettingsHolder.Sharing.VerifyBeforeSharing && ModernDialog.ShowMessage( string.Format(ControlsStrings.Share_VerifyMessage, authorName ?? @"?", contentName ?? @"?", type.GetDescription()), ControlsStrings.Share_VerifyMessageHeader, MessageBoxButton.YesNo) != MessageBoxResult.Yes) { return; } string link; using (var waiting = new WaitingDialog()) { waiting.Report(ControlsStrings.Share_InProgress); link = await SharingHelper.ShareAsync(type, contentName, target, data, id, waiting.CancellationToken); if (link == null) return; } ShowShared(type, link); await Task.Delay(2000); #if WIN10_SHARE try { var dataTransferManager = DataTransferManager.GetForCurrentView(); dataTransferManager.DataRequested += OnDataRequested; DataTransferManager.ShowShareUI(); } catch (Exception e) { Logging.Warning("DataTransferManager exception: " + e); } #endif } catch (Exception e) { NonfatalError.Notify(string.Format(ControlsStrings.Share_CannotShare, type.GetDescription()), ToolsStrings.Common_CannotDownloadFile_Commentary, e); } finally { _sharingInProcess = false; } }
private static async Task <ArgumentHandleResult> ProcessSharedById(string id, bool justGo) { SharedEntry shared; using (var waiting = new WaitingDialog()) { waiting.Report(ControlsStrings.Common_Loading); shared = await SharingHelper.GetSharedAsync(id, waiting.CancellationToken); } return(await ProcessSharedEntry(shared, justGo)); }
private static async Task <string> LoadRemoveFileToNew(string argument, string destination) { using (var waiting = new WaitingDialog(ControlsStrings.Common_Loading)) { return(await FlexibleLoader.LoadAsyncTo(argument, destination, waiting, information => { if (information.FileName != null) { waiting.Title = $@"Loading {information.FileName}…"; } }, waiting.CancellationToken)); } }
/// <summary> /// Loads remote file using FlexibleLoader. /// </summary> /// <param name="argument">Remote source.</param> /// <param name="destination">Destination.</param> /// <exception cref="Exception">Thrown if failed or cancelled.</exception> private static async Task LoadRemoteFileToNew(string argument, string destination) { using (var waiting = new WaitingDialog(ControlsStrings.Common_Loading)) { await FlexibleLoader.LoadAsyncTo(argument, (url, information) => new FlexibleLoaderDestination(destination, false), null, information => { if (information.FileName != null) { waiting.Title = $@"Loading {information.FileName}…"; } }, null, waiting, waiting.CancellationToken); } }
private static async Task <string> LoadRemoveFile(string argument, string name = null, string extension = null) { using (var waiting = new WaitingDialog(ControlsStrings.Common_Loading)) { return(await FlexibleLoader.LoadAsyncTo(argument, (url, information) => { var filename = Path.Combine(SettingsHolder.Content.TemporaryFilesLocationValue, name + extension); return new FlexibleLoaderDestination(filename, true); }, null, information => { if (information.FileName != null) { waiting.Title = $@"Loading {information.FileName}…"; } }, null, waiting, waiting.CancellationToken)); } }
public static async Task ShareReplay(string name, string filename, [CanBeNull] CarObject car, [CanBeNull] TrackObjectBase track) { UploadResult result; try { using (var waiting = new WaitingDialog(ControlsStrings.Common_Uploading)) { waiting.Report(ControlsStrings.Common_Preparing); var uploader = Uploaders.List.First(); await uploader.SignIn(waiting.CancellationToken); waiting.Report(ControlsStrings.Common_Compressing); byte[] data = null; await Task.Run(() => { using (var file = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Read)) using (var memory = new MemoryStream()) { using (var writer = WriterFactory.Open(memory, ArchiveType.Zip, CompressionType.Deflate)) { var readMe = string.Format(AppStrings.Replay_SharedReadMe, GetDescription(car, track), Path.GetFileName(filename)); using (var stream = new MemoryStream(Encoding.UTF8.GetBytes(readMe))) { writer.Write(@"ReadMe.txt", stream); } writer.Write(Path.GetFileName(filename), file, new FileInfo(filename).CreationTime); } data = memory.ToArray(); Logging.Write($"Compressed: {file.Length.ToReadableSize()} to {data.LongLength.ToReadableSize()}"); } }); result = await uploader.Upload(name ?? AppStrings.Replay_DefaultUploadedName, Path.GetFileNameWithoutExtension(filename) + @".zip", @"application/zip", GetDescription(car, track), data, waiting, waiting.CancellationToken); } } catch (Exception e) { NonfatalError.Notify(AppStrings.Replay_CannotShare, ToolsStrings.Common_MakeSureInternetWorks, e); return; } SharingHelper.Instance.AddToHistory(SharedEntryType.Replay, name, car?.DisplayName, result); SharingUiHelper.ShowShared(SharedEntryType.Replay, result.Url); }
public static async Task AddServerManually(string listKey) { var address = Prompt.Show(AppStrings.Online_AddServer, AppStrings.Online_AddServer_Title, "", @"127.0.0.1:8081", AppStrings.Online_AddServer_Tooltip); if (address == null) { return; } try { var list = new List <ServerInformationComplete>(); using (var waiting = new WaitingDialog()) { waiting.Report(AppStrings.Online_AddingServer); foreach (var s in address.Split(',').Select(x => x.Trim())) { var part = await OnlineManager.Instance.ScanForServers(s, waiting, waiting.CancellationToken); if (part == null || waiting.CancellationToken.IsCancellationRequested) { return; } list.AddRange(part); } } if (list.Count == 0) { ModernDialog.ShowMessage("Nothing found.", AppStrings.Online_AddServer_Title, MessageBoxButton.OK); } else { new OnlineAddManuallyDialog(listKey, list).ShowDialog(); } } catch (Exception e) { NonfatalError.Notify(AppStrings.Online_CannotAddServer, e); } }
private async Task<ArgumentHandleResult> ProcessShared(string id) { SharedEntry shared; using (var waiting = new WaitingDialog()) { waiting.Report(ControlsStrings.Common_Loading); shared = await SharingHelper.GetSharedAsync(id, waiting.CancellationToken); } var data = shared?.Data; if (data == null) return ArgumentHandleResult.Failed; switch (shared.EntryType) { case SharedEntryType.Weather: { var result = ShowDialog(shared, applyable: false); switch (result) { case Choise.Save: var directory = FileUtils.EnsureUnique(Path.Combine( WeatherManager.Instance.Directories.EnabledDirectory, shared.GetFileName())); Directory.CreateDirectory(directory); var written = 0; using (var stream = new MemoryStream(data)) { var reader = ReaderFactory.Open(stream); try { while (reader.MoveToNextEntry()) { if (!reader.Entry.IsDirectory) { reader.WriteEntryToDirectory(directory, new ExtractionOptions { ExtractFullPath = true, Overwrite = true }); written++; } } } catch (EndOfStreamException) { if (written < 2) { throw; } } } return ArgumentHandleResult.SuccessfulShow; default: return ArgumentHandleResult.Failed; } } case SharedEntryType.PpFilter: { var result = ShowDialog(shared, appliableWithoutSaving: false); switch (result) { case Choise.Save: case Choise.ApplyAndSave: var filename = FileUtils.EnsureUnique(Path.Combine( PpFiltersManager.Instance.Directories.EnabledDirectory, shared.GetFileName())); Directory.CreateDirectory(Path.GetDirectoryName(filename) ?? ""); File.WriteAllBytes(filename, data); if (result == Choise.ApplyAndSave) { AcSettingsHolder.Video.PostProcessingFilter = Path.GetFileNameWithoutExtension(filename); } return ArgumentHandleResult.SuccessfulShow; default: return ArgumentHandleResult.Failed; } } case SharedEntryType.CarSetup: { var content = data.ToUtf8String(); var metadata = SharingHelper.GetMetadata(SharedEntryType.CarSetup, content, out content); var carId = metadata.GetValueOrDefault("car"); var trackId = metadata.GetValueOrDefault("track") ?? CarSetupObject.GenericDirectory; if (carId == null) { throw new InformativeException(AppStrings.Arguments_CannotInstallCarSetup, AppStrings.Arguments_MetadataIsMissing); } var result = ShowDialog(shared, applyable: false, additionalButton: trackId == CarSetupObject.GenericDirectory ? null : AppStrings.Arguments_SaveAsGeneric); switch (result) { case Choise.Save: case Choise.Extra: var filename = FileUtils.EnsureUnique(Path.Combine(FileUtils.GetCarSetupsDirectory(carId), result == Choise.Save ? trackId : CarSetupObject.GenericDirectory, shared.GetFileName())); Directory.CreateDirectory(Path.GetDirectoryName(filename) ?? ""); File.WriteAllText(filename, content); return ArgumentHandleResult.SuccessfulShow; default: return ArgumentHandleResult.Failed; } } case SharedEntryType.ControlsPreset: { var result = ShowDialog(shared, AppStrings.Arguments_Shared_ApplyFfbOnly); switch (result) { case Choise.Save: case Choise.ApplyAndSave: var filename = FileUtils.EnsureUnique(Path.Combine( AcSettingsHolder.Controls.UserPresetsDirectory, @"Loaded", shared.GetFileName())); Directory.CreateDirectory(Path.GetDirectoryName(filename) ?? ""); File.WriteAllBytes(filename, data); if (result == Choise.ApplyAndSave) { AcSettingsHolder.Controls.LoadPreset(filename, true); } return ArgumentHandleResult.SuccessfulShow; case Choise.Apply: if (File.Exists(AcSettingsHolder.Controls.Filename)) { FileUtils.Recycle(AcSettingsHolder.Controls.Filename); } File.WriteAllBytes(AcSettingsHolder.Controls.Filename, data); return ArgumentHandleResult.SuccessfulShow; case Choise.Extra: // ffb only var ini = IniFile.Parse(data.ToUtf8String()); AcSettingsHolder.Controls.LoadFfbFromIni(ini); return ArgumentHandleResult.SuccessfulShow; default: return ArgumentHandleResult.Failed; } } case SharedEntryType.ForceFeedbackPreset: { var result = ShowDialog(shared, saveable: false); switch (result) { case Choise.Apply: var ini = IniFile.Parse(data.ToUtf8String()); AcSettingsHolder.Controls.LoadFfbFromIni(ini); AcSettingsHolder.System.LoadFfbFromIni(ini); return ArgumentHandleResult.SuccessfulShow; default: return ArgumentHandleResult.Failed; } } case SharedEntryType.VideoSettingsPreset: { var result = ShowDialog(shared); switch (result) { case Choise.Save: case Choise.ApplyAndSave: var filename = FileUtils.EnsureUnique(Path.Combine( PresetsManager.Instance.GetDirectory(AcSettingsHolder.VideoPresets.PresetableKey), @"Loaded", shared.GetFileName())); Directory.CreateDirectory(Path.GetDirectoryName(filename) ?? ""); File.WriteAllBytes(filename, data); if (result == Choise.ApplyAndSave) { UserPresetsControl.LoadPreset(AcSettingsHolder.VideoPresets.PresetableKey, filename); } return ArgumentHandleResult.SuccessfulShow; case Choise.Apply: AcSettingsHolder.VideoPresets.ImportFromPresetData(data.ToUtf8String()); return ArgumentHandleResult.SuccessfulShow; default: return ArgumentHandleResult.Failed; } } case SharedEntryType.AssistsSetupPreset: { var result = ShowDialog(shared); switch (result) { case Choise.Save: case Choise.ApplyAndSave: var filename = FileUtils.EnsureUnique(Path.Combine( PresetsManager.Instance.GetDirectory(AssistsViewModel.Instance.PresetableKey), @"Loaded", shared.GetFileName())); Directory.CreateDirectory(Path.GetDirectoryName(filename) ?? ""); File.WriteAllBytes(filename, data); if (result == Choise.ApplyAndSave) { UserPresetsControl.LoadPreset(AssistsViewModel.Instance.PresetableKey, filename); } return ArgumentHandleResult.SuccessfulShow; case Choise.Apply: AssistsViewModel.Instance.ImportFromPresetData(data.ToUtf8String()); return ArgumentHandleResult.SuccessfulShow; default: return ArgumentHandleResult.Failed; } } case SharedEntryType.QuickDrivePreset: { var result = ShowDialog(shared, AppStrings.Arguments_Shared_JustGo); switch (result) { case Choise.Save: case Choise.ApplyAndSave: var filename = FileUtils.EnsureUnique(Path.Combine( PresetsManager.Instance.GetDirectory(QuickDrive.PresetableKeyValue), @"Loaded", shared.GetFileName())); Directory.CreateDirectory(Path.GetDirectoryName(filename) ?? ""); File.WriteAllBytes(filename, data); if (result == Choise.ApplyAndSave) { QuickDrive.LoadPreset(filename); } return ArgumentHandleResult.SuccessfulShow; case Choise.Apply: QuickDrive.LoadSerializedPreset(data.ToUtf8String()); return ArgumentHandleResult.SuccessfulShow; case Choise.Extra: // just go if (!QuickDrive.RunSerializedPreset(data.ToUtf8String())) { throw new InformativeException(AppStrings.Common_CannotStartRace, AppStrings.Arguments_CannotStartRace_Commentary); } return ArgumentHandleResult.SuccessfulShow; default: return ArgumentHandleResult.Failed; } } case SharedEntryType.RaceGridPreset: { var result = ShowDialog(shared); switch (result) { case Choise.Save: case Choise.ApplyAndSave: var filename = FileUtils.EnsureUnique(Path.Combine( PresetsManager.Instance.GetDirectory(RaceGridViewModel.PresetableKeyValue), @"Loaded", shared.GetFileName())); Directory.CreateDirectory(Path.GetDirectoryName(filename) ?? ""); File.WriteAllBytes(filename, data); if (result == Choise.ApplyAndSave) { RaceGridViewModel.LoadPreset(filename); QuickDrive.NavigateToPage(); } return ArgumentHandleResult.SuccessfulShow; case Choise.Apply: RaceGridViewModel.LoadSerializedPreset(data.ToUtf8String()); QuickDrive.NavigateToPage(); return ArgumentHandleResult.SuccessfulShow; default: return ArgumentHandleResult.Failed; } } default: throw new Exception(string.Format(AppStrings.Arguments_SharedUnsupported, shared.EntryType)); } }
public static async Task ShareAsync(SharedEntryType type, [CanBeNull] string defaultName, [CanBeNull] string target, [NotNull] byte[] data) { if (_sharingInProcess) { return; } _sharingInProcess = true; try { var contentName = defaultName; if (!SettingsHolder.Sharing.ShareWithoutName) { contentName = Prompt.Show(ControlsStrings.Share_EnterName, ControlsStrings.Share_EnterNameHeader, defaultName, ToolsStrings.Common_None, maxLength: 60); if (contentName == null) { return; // cancelled } if (string.IsNullOrWhiteSpace(contentName)) { contentName = null; } } string id = null; if (SettingsHolder.Sharing.CustomIds) { id = Prompt.Show(ControlsStrings.Share_EnterCustomId, ControlsStrings.Share_EnterCustomIdHeader, "", ToolsStrings.Common_None, maxLength: 200)?.Trim(); if (id == null) { return; // cancelled } if (string.IsNullOrWhiteSpace(id)) { id = null; } } var authorName = SettingsHolder.Sharing.ShareAnonymously ? null : SettingsHolder.Sharing.SharingName; if (SettingsHolder.Sharing.VerifyBeforeSharing && ModernDialog.ShowMessage( string.Format(ControlsStrings.Share_VerifyMessage, authorName ?? @"?", contentName ?? @"?", type.GetDescription()), ControlsStrings.Share_VerifyMessageHeader, MessageBoxButton.YesNo) != MessageBoxResult.Yes) { return; } string link; using (var waiting = new WaitingDialog()) { waiting.Report(ControlsStrings.Share_InProgress); link = await SharingHelper.ShareAsync(type, contentName, target, data, id, waiting.CancellationToken); if (link == null) { return; } } ShowShared(type, link); await Task.Delay(2000); } catch (Exception e) { NonfatalError.Notify(string.Format(ControlsStrings.Share_CannotShare, type.GetDescription()), ToolsStrings.Common_CannotDownloadFile_Commentary, e); } finally { _sharingInProcess = false; } }
private static async Task <ArgumentHandleResult> ProcessShared(string id) { SharedEntry shared; using (var waiting = new WaitingDialog()) { waiting.Report(ControlsStrings.Common_Loading); shared = await SharingHelper.GetSharedAsync(id, waiting.CancellationToken); } var data = shared?.Data; if (data == null) { return(ArgumentHandleResult.Failed); } switch (shared.EntryType) { case SharedEntryType.PpFilter: return(ProcessSharedPpFilter(shared, data)); case SharedEntryType.CarSetup: return(ProcessSharedCarSetup(shared, data)); case SharedEntryType.ControlsPreset: return(ProcessSharedControlsPreset(shared, data)); case SharedEntryType.ForceFeedbackPreset: return(ProcessSharedForceFeedbackPreset(shared, data)); case SharedEntryType.VideoSettingsPreset: return(ProcessSharedSettingsPreset(AcSettingsHolder.VideoPresets, shared, data)); case SharedEntryType.AudioSettingsPreset: return(ProcessSharedSettingsPreset(AcSettingsHolder.AudioPresets, shared, data)); case SharedEntryType.AssistsSetupPreset: return(ProcessSharedAssistsSetupPreset(shared, data)); case SharedEntryType.TrackStatePreset: return(ProcessSharedTrackStatePreset(shared, data)); case SharedEntryType.QuickDrivePreset: return(await ProcessSharedQuickDrivePreset(shared, data)); case SharedEntryType.RaceGridPreset: return(ProcessSharedRaceGridPreset(shared, data)); case SharedEntryType.RhmPreset: return(ProcessSharedRhmPreset(shared, data)); case SharedEntryType.UserChampionship: return(OptionUserChampionshipExtMode ? ProcessSharedUserChampionshipExt(shared, data) : ProcessSharedUserChampionship(shared, data)); case SharedEntryType.Weather: return(ProcessSharedWeather(shared, data)); case SharedEntryType.CustomShowroomPreset: return(ProcessSharedCustomShowroomPreset(shared, data)); case SharedEntryType.CustomPreviewsPreset: return(ProcessSharedCustomPreviewsPreset(shared, data)); case SharedEntryType.CspSettings: return(ProcessSharedCspSettings(shared, data)); case SharedEntryType.Replay: throw new NotSupportedException(); case SharedEntryType.Results: ModernDialog.ShowMessage(Encoding.UTF8.GetString(data)); return(ArgumentHandleResult.Successful); default: throw new Exception(string.Format(AppStrings.Arguments_SharedUnsupported, shared.EntryType)); } }
private static async Task StartAsyncInner(string kn5, string skinId = null, string presetFilename = null) { if (_starting) { return; } _starting = true; await FormWrapperBase.PrepareAsync(); ForwardKn5ObjectRenderer renderer = null; Logging.Write("Custom Showroom: Magick.NET IsSupported=" + ImageUtils.IsMagickSupported); try { var carDirectory = Path.GetDirectoryName(kn5); if (Path.GetFileName(Path.GetDirectoryName(carDirectory)) == @"..") { carDirectory = Path.GetDirectoryName(Path.GetDirectoryName(carDirectory)); } var carObject = CarsManager.Instance.GetById(Path.GetFileName(carDirectory) ?? ""); var toolboxMode = IsSameDirectories(carObject?.Location, carDirectory); LiteShowroomFormWrapper formWrapper; using (var waiting = new WaitingDialog()) { waiting.Report(ControlsStrings.CustomShowroom_Loading); var description = new CarDescription(kn5, carDirectory, carObject?.AcdData); if (toolboxMode) { ExtraModelProvider.Initialize(); var toolsRenderer = await Task.Run(() => SettingsHolder.CustomShowroom.UseOldLiteShowroom? new ToolsKn5ObjectRenderer(description) { UseMsaa = SettingsHolder.CustomShowroom.LiteUseMsaa, UseFxaa = SettingsHolder.CustomShowroom.LiteUseFxaa, UseBloom = SettingsHolder.CustomShowroom.LiteUseBloom, SoundFactory = new AcCarSoundFactory() } : new DarkKn5ObjectRenderer(description) { SoundFactory = new AcCarSoundFactory() }); formWrapper = new LiteShowroomFormWrapperWithTools(toolsRenderer, carObject, skinId, presetFilename); renderer = toolsRenderer; } else { Logging.Warning($"Can’t find CarObject for “{carDirectory}”"); Logging.Warning($"Found location: “{carObject?.Location ?? @"NULL"}”"); renderer = await Task.Run(() => SettingsHolder.CustomShowroom.UseOldLiteShowroom? new ForwardKn5ObjectRenderer(description) { UseMsaa = SettingsHolder.CustomShowroom.LiteUseMsaa, UseFxaa = SettingsHolder.CustomShowroom.LiteUseFxaa, UseBloom = SettingsHolder.CustomShowroom.LiteUseBloom } : new DarkKn5ObjectRenderer(description) { FlatMirror = true, VisibleUi = true, UseSprite = true }); formWrapper = new LiteShowroomFormWrapper(renderer); if (skinId != null) { renderer.SelectSkin(skinId); } } SetProperties(formWrapper, renderer); formWrapper.Form.Icon = AppIconService.GetAppIcon(); } formWrapper.Run(() => _starting = false); } catch (Exception e) { NonfatalError.Notify(ControlsStrings.CustomShowroom_CannotStart, e); } finally { try { renderer?.Dispose(); } catch (Exception e) { NonfatalError.Notify("Can’t close Custom Showroom", e); } finally { _starting = false; } } }
public static async Task StartFancyAsync(string kn5, string skinId = null, string showroomKn5 = null) { if (_starting) return; _starting = true; _last?.Stop(); _last = null; Kn5ObjectRenderer renderer = null; try { FancyShowroomWrapper wrapper; using (var waiting = new WaitingDialog()) { waiting.Report(ControlsStrings.CustomShowroom_Loading); renderer = await Task.Run(() => new Kn5ObjectRenderer(kn5, showroomKn5)); renderer.UseFxaa = SettingsHolder.CustomShowroom.LiteUseFxaa; wrapper = new FancyShowroomWrapper(renderer); if (skinId != null) { renderer.SelectSkin(skinId); } _last = wrapper; SetProperties(wrapper, renderer); wrapper.Form.Icon = AppIconService.GetAppIcon(); } wrapper.Run(() => _starting = false); } catch (Exception e) { NonfatalError.Notify(ControlsStrings.CustomShowroom_CannotStart, e); } finally { renderer?.Dispose(); _last = null; } }
public void StartWithDialog() { using (var waiting = new WaitingDialog()) { Start(waiting, waiting.CancellationToken).Ignore(); } }
private async Task<string> LoadRemoveFileTo(string argument, string destination) { using (var waiting = new WaitingDialog(ControlsStrings.Common_Loading)) { return await FlexibleLoader.LoadAsyncTo(argument, destination, waiting, waiting.CancellationToken); } }
public override async Task Drive(Game.BasicProperties basicProperties, Game.AssistsProperties assistsProperties, Game.ConditionProperties conditionProperties, Game.TrackProperties trackProperties) { var selectedCar = CarsManager.Instance.GetById(basicProperties.CarId); var selectedTrack = TracksManager.Instance.GetLayoutById(basicProperties.TrackId, basicProperties.TrackConfigurationId); IEnumerable<Game.AiCar> botCars; try { using (var waiting = new WaitingDialog()) { if (selectedCar == null || !selectedCar.Enabled) { ModernDialog.ShowMessage(AppStrings.Drive_CannotStart_SelectNonDisabled, AppStrings.Drive_CannotStart_Title, MessageBoxButton.OK); return; } if (selectedTrack == null) { ModernDialog.ShowMessage(AppStrings.Drive_CannotStart_SelectTrack, AppStrings.Drive_CannotStart_Title, MessageBoxButton.OK); return; } botCars = await RaceGridViewModel.GenerateGameEntries(waiting.CancellationToken); if (waiting.CancellationToken.IsCancellationRequested) return; if (botCars == null || !botCars.Any()) { ModernDialog.ShowMessage(AppStrings.Drive_CannotStart_SetOpponent, AppStrings.Drive_CannotStart_Title, MessageBoxButton.OK); return; } } } catch (TaskCanceledException) { return; } await StartAsync(new Game.StartProperties { BasicProperties = basicProperties, AssistsProperties = assistsProperties, ConditionProperties = conditionProperties, TrackProperties = trackProperties, ModeProperties = GetModeProperties(botCars) }); }
private async Task <string> LoadRemoveFile(string argument, string name = null, string extension = null) { using (var waiting = new WaitingDialog(ControlsStrings.Common_Loading)) { return(await FlexibleLoader.LoadAsync(argument, name, extension, waiting, waiting.CancellationToken)); } }
private static async Task StartAsyncInner([CanBeNull] CarObject carObject, string kn5, IEnumerable <CustomShowroomLodDefinition> lodDefinitions = null, string skinId = null, string presetFilename = null, bool forceToolboxMode = false) { if (_starting) { return; } _starting = true; await FormWrapperBase.PrepareAsync(); ForwardKn5ObjectRenderer renderer = null; Logging.Write("Custom Showroom: Magick.NET IsSupported=" + ImageUtils.IsMagickSupported); if (!_interopSet) { _interopSet = true; Task.Delay(TimeSpan.FromSeconds(1d)).ContinueWithInMainThread(r => { DpiAwareWindow.NewWindowCreated += (sender, args) => ElementHost.EnableModelessKeyboardInterop((DpiAwareWindow)sender); foreach (Window window in Application.Current.Windows) { ElementHost.EnableModelessKeyboardInterop(window); } }).Ignore(); } try { var kn5Directory = Path.GetDirectoryName(kn5); var toolboxMode = forceToolboxMode || lodDefinitions != null || IsSameDirectories(carObject?.Location, kn5Directory); LiteShowroomFormWrapper formWrapper; using (var waiting = new WaitingDialog()) { waiting.Report(ControlsStrings.CustomShowroom_Loading); var description = new CarDescription(kn5, carObject?.Location ?? kn5Directory, carObject?.AcdData); if (toolboxMode) { ExtraModelProvider.Initialize(); var toolsRenderer = await Task.Run(() => SettingsHolder.CustomShowroom.UseOldLiteShowroom? new ToolsKn5ObjectRenderer(description) { UseMsaa = SettingsHolder.CustomShowroom.LiteUseMsaa, UseFxaa = SettingsHolder.CustomShowroom.LiteUseFxaa, UseBloom = SettingsHolder.CustomShowroom.LiteUseBloom, SoundFactory = new AcCarSoundFactory() } : new DarkKn5ObjectRenderer(description) { SoundFactory = new AcCarSoundFactory() }); formWrapper = new LiteShowroomFormWrapperWithTools(toolsRenderer, carObject, skinId, presetFilename, lodDefinitions); renderer = toolsRenderer; } else { Logging.Warning($"Can’t find CarObject for “{kn5Directory}”"); Logging.Warning($"Found location: “{carObject?.Location ?? @"NULL"}”"); renderer = await Task.Run(() => SettingsHolder.CustomShowroom.UseOldLiteShowroom? new ForwardKn5ObjectRenderer(description) { UseMsaa = SettingsHolder.CustomShowroom.LiteUseMsaa, UseFxaa = SettingsHolder.CustomShowroom.LiteUseFxaa, UseBloom = SettingsHolder.CustomShowroom.LiteUseBloom } : new DarkKn5ObjectRenderer(description) { FlatMirror = true, VisibleUi = true, UseSprite = true }); formWrapper = new LiteShowroomFormWrapper(renderer); if (skinId != null) { renderer.SelectSkin(skinId); } } SetProperties(formWrapper, renderer); formWrapper.Form.Icon = AppIconService.GetAppIcon(); } formWrapper.Run(() => _starting = false); } catch (Exception e) { NonfatalError.Notify(ControlsStrings.CustomShowroom_CannotStart, e); } finally { try { renderer?.Dispose(); } catch (Exception e) { NonfatalError.Notify("Can’t close Custom Showroom", e); } finally { _starting = false; } } }
public void StartWithDialog() { using (var waiting = new WaitingDialog()) { Start(waiting, waiting.CancellationToken).Forget(); } }
private async Task <string> LoadRemoveFileTo(string argument, string destination) { using (var waiting = new WaitingDialog(ControlsStrings.Common_Loading)) { return(await FlexibleLoader.LoadAsyncTo(argument, destination, waiting, waiting.CancellationToken)); } }
private async Task<string> LoadRemoveFile(string argument, string name = null, string extension = null) { using (var waiting = new WaitingDialog(ControlsStrings.Common_Loading)) { return await FlexibleLoader.LoadAsync(argument, name, extension, waiting, waiting.CancellationToken); } }