public async Task<ArgumentHandleResult> ProcessRsrSetup(string id) {
string data, header;
using (var client = new WebClient {
Headers = {
[HttpRequestHeader.UserAgent] = CmApiProvider.UserAgent
}
}) {
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).ElementAtOrDefault(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(FileUtils.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;
}
}