lw_common.ui.edit_log_settings_form.load_available_event_logs_async C# (CSharp) Method

load_available_event_logs_async() private method

private load_available_event_logs_async ( string machine_name ) : void
machine_name string
return void
        private void load_available_event_logs_async(string machine_name) {
            // name, friendly name
            List< Tuple<string, string> > available_logs = new List<Tuple<string, string>>();

            try {
                var logs = machine_name == "" ? EventLog.GetEventLogs() : EventLog.GetEventLogs(machine_name);
                foreach (var log in logs) 
                    available_logs.Add( new Tuple<string, string>(log.Log, friendly_event_log_name(log)));

                // if it's local logs, try to go to C:\Windows\System32\winevt\Logs as well
                if (machine_name == "") {
                    string dir = Environment.GetFolderPath(Environment.SpecialFolder.System) + "\\winevt\\Logs";
                    var files = (new DirectoryInfo(dir).EnumerateFiles("*.evtx")).OrderBy(x => -x.LastWriteTime.Ticks).Select(x => {
                        var name = x.Name.Substring(0, x.Name.Length - 5).Replace("%4", "/");
                        string desc = "(? events, size: " + (x.Length / 1024) + " KB)";
                        return new Tuple<string, string>(name, name + desc);
                    }).ToList();
                    if (files.Count > app.inst.max_event_log_files)
                        files = files.GetRange(0, app.inst.max_event_log_files);
                    // remove dumplicates (entries we already have
                    files = files.Where(x => !available_logs.Any(y => y.Item1 == x.Item1) ).ToList();
                    available_logs.AddRange( files );
                }

            } catch (Exception e) {
                logger.Error("update event log list: " + e.Message);
            }

            available_event_logs_ = available_logs.Select(x => x.Item1).ToList();
            
            this.async_call(() => {
                ++ignore_change_;
                eventLogs.Items.Clear();
                foreach (var log in available_logs) {
                    bool is_checked = selectedEventLogs.Text.Split(new string[] {"\r\n"}, StringSplitOptions.RemoveEmptyEntries).Contains(log.Item1);
                    eventLogs.Items.Add(log.Item2, is_checked);
                }
                --ignore_change_;
            });

        }