AcTools.LapTimes.SidekickLapTimesReader.TryToGuessCarAndTrack C# (CSharp) Method

TryToGuessCarAndTrack() private method

private TryToGuessCarAndTrack ( string filename, string &carId, string &trackLayoutId ) : bool
filename string
carId string
trackLayoutId string
return bool
        private bool TryToGuessCarAndTrack(string filename, out string carId, out string trackLayoutId) {
            filename = Path.GetFileName(filename)?.ApartFromLast("_pb.ini", StringComparison.OrdinalIgnoreCase);
            if (filename != null) {
                if (_carIds == null) _carIds = _provider.GetCarIds();
                if (_trackLayoutIds == null) _trackLayoutIds = _provider.GetTrackIds();

                var i = -1;
                while (true) {
                    i = filename.IndexOf('_', i + 1);
                    if (i == -1) break;

                    carId = filename.Substring(0, i);
                    trackLayoutId = filename.Substring(i + 1);
                    if (!_carIds.Contains(carId)) continue;
                    /* car found! hopefully */

                    foreach (var track in _trackLayoutIds) {
                        if (track.Item2 == null) {
                            if (track.Item1 == trackLayoutId) {
                                /* track found! awesome */
                                return true;
                            }
                        } else if (trackLayoutId.StartsWith(track.Item1)) {
                            var layoutId = trackLayoutId.Substring(track.Item1.Length);
                            if (track.Item2 == layoutId) {
                                /* track with layout ID found! can’t believe my luck */
                                trackLayoutId = track.Item1 + "/" + track.Item2;
                                return true;
                            }
                        }
                    }
                }
            }

            carId = null;
            trackLayoutId = null;
            return false;
        }