public async Task <IActionResult> TakeQualityTime(int id) { QualityTime time = new QualityTime(); time.Student = _context.Students.SingleOrDefault(S => S.Id == id); time.Time = DateTime.Now; _context.QualityTime.Add(time); _context.SaveChanges(); TempData["QualityTime"] = "taken"; TempData["CheckButton"] = id.ToString(); return(RedirectToAction("QualityTime")); }
private void OnCheckProcess(object state) //TODO:Сделать завязку на состояния программы в зависимости от врнмени простоя { lock (Lock) //блок что бы не один другой поток не смог изменить елементы которые находятся в блоке Lock { if (LastInputHelper.GetLastInputTime() > 30) //если пользователь ничего не делал больше 30 сек то выход(потом будет все записываться в специальное поле pause) { return; } var currentProcess = ProcessHelper.GetForegroundProcess(); //получаем активный процесс if (currentProcess == null) //если вдруг(ШИЗА) =) { return; } QualityTime qualityTime; //объект который в себе содержит enum который определяет продуктивное, непродуктивное, нейтральное время if (!_processNameQualityTime.TryGetValue(currentProcess.ProcessName, out qualityTime)) //TryGetValue служит для проучения value по key { qualityTime = new QualityTime { ProcessTime = TypeOfQualityTime.NeutralTime } } ; //если для такого процесса нет качества времени, то мы создаем качество времени "нейтральное" //_processNameQualityTime dictionary с названием процесса и качеством времени для него if (_clientProcesses.Any(a => a.Name == currentProcess.ProcessName && a.Title == currentProcess.MainWindowTitle)) //проверка на то есть ли такой процесс в массиве(что бы добавить время) { // _clientProcesses массив с объектами(объект сосотоит из активного времени, качества времени, названия процесса и пару служебных полей) //достаем этот процесс из массива var processUpdate = _clientProcesses.First(f => f.Name == currentProcess.ProcessName && f.Title == currentProcess.MainWindowTitle); //проверяем - вдруг качество процесса изменилось if (processUpdate.QualityTime.ProcessTime != qualityTime.ProcessTime) { processUpdate.QualityTime.ProcessTime = qualityTime.ProcessTime; //если изменилось, то меняем качество для данного процесса } processUpdate.ProcessTime += TimeSpan.FromMinutes(1); //добавляем минуту(чекаем просто каждую минуту какой процесс активен) //TODO:Debug - это сделано что бы отслеживать выполнение программы, лог грубо говоря var debugProcess = _clientProcesses.First(f => f.Name == currentProcess.ProcessName && f.Title == currentProcess.MainWindowTitle); Debug.WriteLine("Print: " + DateTime.Now.ToString("T")); Debug.WriteLine("Edit:\t" + "|id: " + debugProcess.ProcessId + " |name: " + debugProcess.Name + " |title: " + debugProcess.Title + " |time: " + debugProcess.Time + "| Total: " + _clientProcesses.Count); // } else { var debugProcess = new ClientProcess //если такого процесса нет в массиве, то мы создаем объект { ProcessId = currentProcess.Id, //id процесса в системе Name = currentProcess.ProcessName, //имя Title = currentProcess.MainWindowTitle, //тайтл окна QualityTime = qualityTime, //полезность времени, созданый объект выше ProcessTime = new TimeSpan(0, 1, 0) //добавляем первую минуту }; _clientProcesses.Add(debugProcess); //добавляем процесс в лист(массив) //TODO:Debug - опять отладочная хня - LOG... Debug.WriteLine("Print: " + DateTime.Now.ToString("T")); Debug.WriteLine("Add new:\t" + "|id: " + debugProcess.ProcessId + " |name: " + debugProcess.Name + " |title: " + debugProcess.Title + " |time: " + debugProcess.Time); } } }