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;
}