예제 #1
0
        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);
                }
            }
        }