コード例 #1
0
        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);
            }
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
            }
        }
コード例 #4
0
        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);
            }
        }
コード例 #5
0
 public CarSetupsDirectories(CarObject car)
 {
     _enabledDirectory = AcPaths.GetCarSetupsDirectory(car.Id);
 }