Ejemplo n.º 1
0
        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;
            }
        }
Ejemplo n.º 2
0
        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;
            }
        }
Ejemplo n.º 3
0
        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));
        }
Ejemplo n.º 4
0
 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));
     }
 }
Ejemplo n.º 5
0
 /// <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);
     }
 }
Ejemplo n.º 6
0
 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));
     }
 }
Ejemplo n.º 7
0
        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);
        }
Ejemplo n.º 8
0
        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);
            }
        }
Ejemplo n.º 9
0
        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));
            }
        }
Ejemplo n.º 10
0
        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;
            }
        }
Ejemplo n.º 11
0
        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));
            }
        }
Ejemplo n.º 12
0
        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;
                }
            }
        }
Ejemplo n.º 13
0
        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;
            }
        } 
Ejemplo n.º 14
0
 public void StartWithDialog()
 {
     using (var waiting = new WaitingDialog()) {
         Start(waiting, waiting.CancellationToken).Ignore();
     }
 }
Ejemplo n.º 15
0
 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);
     }
 }
Ejemplo n.º 16
0
            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)
                });
            }
Ejemplo n.º 17
0
 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));
     }
 }
Ejemplo n.º 18
0
        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;
                }
            }
        }
Ejemplo n.º 19
0
 public void StartWithDialog() {
     using (var waiting = new WaitingDialog()) {
         Start(waiting, waiting.CancellationToken).Forget();
     }
 }
Ejemplo n.º 20
0
 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));
     }
 }
Ejemplo n.º 21
0
 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);
     }
 }