void ProcessModel::ResetDirty(int puid) { int index = GetProcessIndex(puid); Lock(); _processes[index].dirty = false; Unlock(); }
void ProcessModel::HideProcess(int puid) { // Modify the Model int index = GetProcessIndex(puid); Lock(); if (index != -1) { _processes[index].hidden = true; } Unlock(); if (index != -1) { // Update View if (!ProcessView::IsHidden()) { ProcessView::Update(false, true); } else { ProcessView::Update(true); } // Update Profile std::vector<int> hiddenProcesses; ExportHiddenProcesses(hiddenProcesses); g_profile.SetHiddenProcesses(hiddenProcesses); } }
bool ProcessModel::GetProcessRate(int puid, int *txRate, int *rxRate) { int index = GetProcessIndex(puid); if( index == -1 ) { return false; } else { Lock(); *txRate = _processes[index].prevTxRate; *rxRate = _processes[index].prevRxRate; Unlock(); return true; } }
void ProcessModel::ShowProcess(int puid) { // Modify the Model int index = GetProcessIndex(puid); Lock(); if (index != -1) { _processes[index].hidden = false; } Unlock(); if (index != -1) { // Update View ProcessView::Update(false, true); // Update Profile std::vector<int> hiddenProcesses; ExportHiddenProcesses(hiddenProcesses); g_profile.SetValue(TEXT("HiddenProcess"), new ProfileIntListItem(hiddenProcesses)); } }
// Event handlers void ProcessModel::OnPacket(PacketInfoEx *pi) { int index = GetProcessIndex(pi->puid); if( index == -1 ) // A new process { // Insert a ProcessItem ProcessItem item; RtlZeroMemory(&item, sizeof(item)); item.active = true; item.dirty = false; item.pid = pi->pid; // The first pid is logged item.puid = pi->puid; _tcscpy_s(item.name, MAX_PATH, pi->name); _tcscpy_s(item.fullPath, MAX_PATH, pi->fullPath); item.hidden = false; item.txRate = 0; item.rxRate = 0; item.prevTxRate = 0; item.prevRxRate = 0; // Add to process list Lock(); _processes.push_back(item); Unlock(); } else { Lock(); // Update the ProcessItem that already Exists ProcessItem &item = _processes[index]; if( !item.active ) { item.active = true; item.pid = pi->pid; // The first pid is logged _tcscpy_s(item.fullPath, MAX_PATH, pi->fullPath); item.txRate = 0; item.rxRate = 0; item.prevTxRate = 0; item.prevRxRate = 0; } if( pi->dir == DIR_UP ) { item.txRate += pi->size; } else if( pi->dir == DIR_DOWN ) { item.rxRate += pi->size; } item.dirty = true; Unlock(); } }