static void Main() { Mutex mutex = new Mutex(true, "UniqueAppId", out bool isUnique); if (!isUnique) { MessageBox.Show("Another instance is already running, check your taskbar or task manager.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } var args = Environment.GetCommandLineArgs(); if (args != null && args.Any(arg => arg == $"{Data.parameterPrefix}minimized")) { startMinimized = true; if (args.Any(arg => arg == $"{Data.parameterPrefix}notray")) { startMinimizedWithoutTrayIcon = true; } } Data.Initialize(); Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); if (!startMinimizedWithoutTrayIcon) { Application.Run(new Main(startMinimized)); } else { StartupHandler.Initialize(); BackupHandler.Initialize(); //MessageBox.Show("Started the GTA World Chat Log Parser in minimized mode with no tray icon. You can only close it from the task manager.", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information); } GC.KeepAlive(mutex); }
public static string ParseChatLog(string folderPath, bool removeTimestamps, bool showError = false) { try { Data.Initialize(); string log; using (StreamReader sr = new StreamReader(folderPath + Data.logLocation)) { log = sr.ReadToEnd(); } bool oldLog = false; string tempLog = Regex.Match(log, "\\\"chatlog\\\":\\\".+\\\\n\\\"").Value; if (string.IsNullOrWhiteSpace(tempLog)) { tempLog = "\"chatlog\":" + log; tempLog = Regex.Match(tempLog, "\\\"chatlog\\\":\\\".+\\\\n\\\"").Value; if (!string.IsNullOrWhiteSpace(tempLog)) { oldLog = true; if (showError) { if (MessageBox.Show(Strings.OldChatLog, Strings.Warning, MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes) { try { int foundDirectories = 0; foreach (string ip in Data.serverIPs) { if (Directory.Exists($"{folderPath}client_resources\\{ip}")) { foundDirectories++; if (File.Exists($"{folderPath}client_resources\\{ip}\\.storage")) { File.Delete($"{folderPath}client_resources\\{ip}\\.storage"); } foreach (string file in Data.potentiallyOldFiles) { if (File.Exists($"{folderPath}client_resources\\{ip}\\gtalife\\{file}")) { File.Delete($"{folderPath}client_resources\\{ip}\\gtalife\\{file}"); } } } } if (foundDirectories > 1) { MessageBox.Show(string.Format(Strings.MultipleChatLogs, Data.serverIPs[0], Data.serverIPs[1]), Strings.Warning, MessageBoxButtons.OK, MessageBoxIcon.Warning); } } catch { MessageBox.Show(Strings.FileDeleteError, Strings.Error, MessageBoxButtons.OK, MessageBoxIcon.Error); } } } } else { throw new IndexOutOfRangeException(); } } log = tempLog; log = log.Replace("\"chatlog\":\"", string.Empty); // Remove the chat log indicator log = log.Replace("\\n", "\n"); // Change all occurrences of `\n` into new lines log = log.Remove(log.Length - 1, 1); // Remove the `"` character from the end if (oldLog) { log = Regex.Replace(log, "<[^>]*>", string.Empty); // Remove the HTML tags that are added for the chat (example: `If the ingame menus are out of place, use <span style=\"color: dodgerblue\">/movemenu</span>`) log = Regex.Replace(log, "~[A-Za-z]~", string.Empty); // Remove the RAGEMP color tags (example: `~r~` for red) log = Regex.Replace(log, @"!{#(?:[0-9A-Fa-f]{3}){1,2}}", string.Empty); // Remove HEX color tags (example: `!{#FFEC8B}` for the yellow color picked for radio messages) } log = System.Net.WebUtility.HtmlDecode(log); // Decode HTML symbols (example: `'` into `'`) log = log.TrimEnd(new char[] { '\r', '\n' }); // Remove the `new line` characters from the end previousLog = log; if (removeTimestamps) { log = Regex.Replace(log, @"\[\d{1,2}:\d{1,2}:\d{1,2}\] ", string.Empty); } return(log); } catch { if (showError) { MessageBox.Show(Strings.ParseError, Strings.Error, MessageBoxButtons.OK, MessageBoxIcon.Error); } return(string.Empty); } }