AcManager.Tools.Miscellaneous.AcLogHelper.TryToDetermineWhatsGoingOn C# (CSharp) Method

TryToDetermineWhatsGoingOn() private method

private TryToDetermineWhatsGoingOn ( ) : WhatsGoingOn
return WhatsGoingOn
        public static WhatsGoingOn TryToDetermineWhatsGoingOn() {
            try {
                var log = File.Open(FileUtils.GetLogFilename(), FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite).ReadAsStringAndDispose();

                if (log.Contains(@"ACClient:: ACP_WRONG_PASSWORD")) {
                    return new WhatsGoingOn(WhatsGoingOnType.OnlineWrongPassword);
                }

                if (log.Contains(@"ERROR: RaceManager :: Handshake FAILED")) {
                    return new WhatsGoingOn(WhatsGoingOnType.OnlineConnectionFailed);
                }
                
                if (log.Contains(@"COULD NOT FIND SUSPENSION OBJECT SUSP_")) {
                    return new WhatsGoingOn(WhatsGoingOnType.SuspensionIsMissing);
                }
                
                if (log.Contains(@"COULD NOT FIND SUSPENSION OBJECT WHEEL_")) {
                    return new WhatsGoingOn(WhatsGoingOnType.WheelsAreMissing);
                }
                
                if (log.Contains(@"Error, cannot initialize Post Processing, system/cfg/ppfilters/default.ini not found")) {
                    return new WhatsGoingOn(WhatsGoingOnType.DefaultPpFilterIsMissing) {
                        Fix = Fixes.FixMissingDefaultPpFilter
                    };
                }

                {
                    var match = Regex.Match(log, @"ERROR: Shader (.+) NOT FOUND, RETURNING NULL");
                    if (match.Success) {
                        var shader = match.Groups[1].Value;
                        Func<CancellationToken, Task> fix = null;

                        if (shader == @"ksSkyBox" && AcRootDirectory.Instance.Value != null) {
                            var model = Regex.Matches(log, @"LOADING MODEL (.+\.kn5)").OfType<Match>().LastOrDefault();
                            if (model?.Success == true) {
                                var filename = Path.Combine(AcRootDirectory.Instance.Value, model.Groups[1].Value);
                                fix = c => Fixes.FixMissingKsSkyBoxShader(filename, c);
                            }
                        }

                        return new WhatsGoingOn(WhatsGoingOnType.ShaderIsMissing, match.Groups[1].Value) {
                            Fix = fix
                        };
                    }
                }

                {
                    var match = Regex.Match(log, @"Error, cannot initialize Post Processing, (.+) not found", RegexOptions.CultureInvariant);
                    if (match.Success) return new WhatsGoingOn(WhatsGoingOnType.PpFilterIsMissing, match.Groups[1].Value);
                }

                var i = log.IndexOf(@"CRASH in:", StringComparison.Ordinal);
                if (i == -1) return null;

                var crash = log.Substring(i);
                if (crash.Contains(@" evaluateTimeFromTrackSpline")) {
                    return new WhatsGoingOn(WhatsGoingOnType.TimeAttackNotSupported);
                }

                if (crash.Contains(@"SkyBox::updateCloudsGeneration")) {
                    return new WhatsGoingOn(WhatsGoingOnType.CloudsMightBeMissing);
                }
                
                if (crash.Contains(@"DriverModel::DriverModel")) {
                    return new WhatsGoingOn(WhatsGoingOnType.DriverModelIsMissing);
                }
            } catch (Exception e) {
                Logging.Write("Can’t determine what’s going on: " + e);
            }

            return null;
        }
    }