private void OnDateChanged(DateTime?date)
        {
            PowerLogs.Clear();
            Rounding.Value = PreferenceService.Preference.Rounding;
            var summary = new PowerLogEntry();

            if (date.HasValue)
            {
                var entries = PowerLogService.GetPowerLogEntries(date.Value);
                PowerLogs.AddRange(entries);
                if (PowerLogs.Count > 0)
                {
                    var startTime = PowerLogs.FirstOrDefault(x => x.StartTime != null)?.StartTime;
                    if (startTime.HasValue)
                    {
                        summary.StartTime = PowerLogService.GetNormalizeStart(startTime.Value);
                    }
                    var endTime = PowerLogs.Reverse().FirstOrDefault(x => x.EndTime != null)?.EndTime;
                    if (endTime.HasValue)
                    {
                        summary.EndTime = PowerLogService.GetNormalizeEnd(endTime.Value);
                    }
                }
            }
            Summary.Value = summary;
        }
Exemplo n.º 2
0
        public override async Task ScanEventLogsAsync()
        {
            ScanCompleted.Value = false;
            BlackoutDates.Clear();
            var      oldest   = DateTime.Today - TimeSpan.FromDays(PreferenceService.Preference.MaxDays);
            DateTime?lastDate = oldest - TimeSpan.FromDays(30);     // To easy recognission of oldest date

            ScannedDate.Value = oldest;
            AllPowerLogs.Clear();
            long maxTimeDiff = PreferenceService.Preference.MaxDays * 86400000L;
            var  queryStr    = "<QueryList><Query Id=\"0\" Path=\"System\">"
                               + "<Select Path =\"System\">"
                               + "*[System[Provider[@Name = 'Microsoft-Windows-Kernel-Boot'"
                               + " or @Name = 'Microsoft-Windows-Kernel-General'"
                               + " or @Name = 'Microsoft-Windows-Kernel-Power'"
                               + " or @Name = 'EventLog'] "
                               + " and TimeCreated[timediff(@SystemTime) &lt;= " + $"{maxTimeDiff}"
                               + "]]] </Select></Query></QueryList>";
            var            query  = new EventLogQuery("System", PathType.LogName, queryStr);
            EventLogReader reader = new EventLogReader(query);
            EventRecord    record = reader.ReadEvent();

            while (record != null && !ScanCompleted.Value)
            {
                PowerLogEntry pwle = ToPowerLogEntry(record);
                if (pwle != null)
                {
                    AllPowerLogs.Add(pwle);
                    if (lastDate != pwle.Timestamp.Date)
                    {
                        UpdateBlackoutDateRange(lastDate, pwle.Timestamp.Date);
                        ScannedDate.Value = lastDate = pwle.Timestamp.Date;
                        await Task.Yield();
                    }
                }
                record = reader.ReadEvent();
            }
            Logger.Debug("AllPowerLogs.Count = {0}", AllPowerLogs.Count);
            if (AllPowerLogs.Count > 0)
            {
                UpdateBlackoutDateRange(lastDate, DateTime.Today + TimeSpan.FromDays(1));
                if (!ScanCompleted.Value)   // not aborted
                {
                    ScannedDate.Value = AllPowerLogs[AllPowerLogs.Count - 1].Timestamp.Date;
                }
            }
            else
            {
                UpdateBlackoutDateRange(lastDate, DateTime.Today + TimeSpan.FromDays(1));
            }
            BlackoutDateArray   = BlackoutDates.ToArray();
            ScanCompleted.Value = true;
            Logger.Debug("Scan completed");
        }
Exemplo n.º 3
0
        private PowerLogEntry ToPowerLogEntry(EventRecord record)
        {
            PowerLogEntry pwle = null;

            if (record.IsPowerOnEvent())
            {
                pwle = new PowerLogEntry {
                    Id = record.Id, Provider = this.GetSourceName(record.ProviderName), Timestamp = record.TimeCreated.Value - PreferenceService.Preference.DayOffset, StartTime = record.TimeCreated.Value
                };
            }
            else if (record.IsPowerOffEvent())
            {
                pwle = new PowerLogEntry {
                    Id = record.Id, Provider = this.GetSourceName(record.ProviderName), Timestamp = record.TimeCreated.Value - PreferenceService.Preference.DayOffset, EndTime = record.TimeCreated.Value
                };
            }
            return(pwle);
        }