private static ArgumentHandleResult ProcessSharedCarSetup(SharedEntry shared, byte[] data) { 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(AcPaths.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); } }
private static void AddDirectoryListener(IDirectoryListener listener) { if (_watcher == null) { _watcher = new DirectoryWatcher(AcPaths.GetCarSetupsDirectory()); _watcher.Subscribe(new InternalListener()); Logging.Write("[CarSetupsDirectories.InternalListener] Start watching…"); } Listeners.Purge(); Listeners.Add(listener); }
private static async Task <ArgumentHandleResult> ProcessTheSetupMarketSetup(string id) { var details = await TheSetupMarketApiProvider.GetSetupFullInformation(id); if (details == null) { throw new InformativeException(AppStrings.Arguments_CannotInstallCarSetup, "The Setup Market is unavailable or has changed."); } var car = CarsManager.Instance.GetById(details.Item1.CarId); var track = details.Item1.TrackKunosId == null ? null : TracksManager.Instance.GetLayoutByKunosId(details.Item1.TrackKunosId); var setupId = details.Item1.FileName; var result = ShowDialog(new SharedEntry { Author = details.Item1.Author, Name = setupId.ApartFromLast(".ini", StringComparison.OrdinalIgnoreCase), Data = new byte[0], EntryType = SharedEntryType.CarSetup, Id = setupId, Target = car?.DisplayName ?? details.Item1.CarId }, applyable: false, additionalButton: AppStrings.Arguments_SaveAsGeneric); switch (result) { case Choise.Save: case Choise.Extra: var filename = FileUtils.EnsureUnique(Path.Combine(AcPaths.GetCarSetupsDirectory(details.Item1.CarId), result == Choise.Save ? (track?.Id ?? details.Item1.TrackKunosId ?? CarSetupObject.GenericDirectory) : CarSetupObject.GenericDirectory, setupId)); FileUtils.EnsureFileDirectoryExists(filename); File.WriteAllText(filename, details.Item2); return(ArgumentHandleResult.SuccessfulShow); default: return(ArgumentHandleResult.Failed); } }
private static async Task <ArgumentHandleResult> ProcessRsrSetup(string id) { string data, header; using (var client = new WebClient()) { data = await client.DownloadStringTaskAsync($"http://www.radiators-champ.com/RSRLiveTiming/ajax.php?action=download_setup&id={id}"); header = client.ResponseHeaders[@"Content-Disposition"]?.Split(new[] { @"filename=" }, StringSplitOptions.None).ArrayElementAtOrDefault(1)?.Trim(); } if (data == null || header == null) { throw new InformativeException(AppStrings.Arguments_CannotInstallCarSetup, AppStrings.Arguments_CannotInstallSetup_Commentary); } var match = Regex.Match(header, @"^([^_]+_.+)_\d+_\d+_\d+_(.+)\.ini$"); if (!match.Success) { throw new InformativeException(AppStrings.Arguments_CannotInstallCarSetup, AppStrings.Arguments_CannotInstallSetup_CommentaryFormat); } var ids = match.Groups[1].Value; var author = match.Groups[2].Value; CarObject car = null; TrackObjectBase track = null; var splitted = ids.Split(new[] { '_' }, StringSplitOptions.RemoveEmptyEntries); for (var i = 1; i < splitted.Length - 1 && (car == null || track == null); i++) { var candidateCarId = splitted.Skip(i).JoinToString('_'); var candidateTrackId = splitted.Take(i).JoinToString('_'); car = CarsManager.Instance.GetById(candidateCarId); track = TracksManager.Instance.GetById(candidateTrackId); } if (car == null || track == null) { throw new InformativeException(AppStrings.Arguments_CannotInstallCarSetup, AppStrings.Arguments_CannotInstallSetup_CommentaryFormat); } var result = ShowDialog(new SharedEntry { Author = author, Data = new byte[0], EntryType = SharedEntryType.CarSetup, Id = header, Target = car.DisplayName }, applyable: false, additionalButton: AppStrings.Arguments_SaveAsGeneric); switch (result) { case Choise.Save: case Choise.Extra: var filename = FileUtils.EnsureUnique(Path.Combine(AcPaths.GetCarSetupsDirectory(car.Id), result == Choise.Save ? track.Id : CarSetupObject.GenericDirectory, header)); Directory.CreateDirectory(Path.GetDirectoryName(filename) ?? ""); File.WriteAllText(filename, data); return(ArgumentHandleResult.SuccessfulShow); default: return(ArgumentHandleResult.Failed); } }
public CarSetupsDirectories(CarObject car) { _enabledDirectory = AcPaths.GetCarSetupsDirectory(car.Id); }