LRESULT WaitingUsersFrame::onRemove(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) { if (getSelectedUser()) { const UserPtr User = getCurrentdUser(); if (User) { UploadManager::LockInstanceQueue lockedInstance; // [+] IRainman opt. lockedInstance->clearUserFilesL(User); } } else { if (m_ctrlList.getSelectedCount()) { int j = -1; UserList RemoveUsers; while ((j = m_ctrlList.GetNextItem(j, LVNI_SELECTED)) != -1) { // Ok let's cheat here, if you try to remove more users here is not working :( RemoveUsers.push_back((m_ctrlList.getItemData(j))->getUser()); } UploadManager::LockInstanceQueue lockedInstance; // [+] IRainman opt. for (auto i = RemoveUsers.cbegin(); i != RemoveUsers.cend(); ++i) { lockedInstance->clearUserFilesL(*i); } } } m_needsUpdateStatus = true; // [!] IRainman opt. return 0; }
void WaitingUsersFrame::LoadAll() { CLockRedraw<> l_lock_draw(m_ctrlList); CLockRedraw<true> l_lock_draw_q(ctrlQueued); HTREEITEM userNode = ctrlQueued.GetRootItem(); while (userNode) { delete reinterpret_cast<UserItem *>(ctrlQueued.GetItemData(userNode)); userNode = ctrlQueued.GetNextSiblingItem(userNode); } // TODO - delete m_ctrlList.DeleteAllItems(); ctrlQueued.DeleteAllItems(); UQFUsers.clear(); // Load queue { UploadManager::LockInstanceQueue lockedInstance; const auto& users = lockedInstance->getUploadQueueL(); UQFUsers.reserve(users.size()); for (auto uit = users.cbegin(); uit != users.cend(); ++uit) { UQFUsers.push_back(uit->getUser()); ctrlQueued.InsertItem(TVIF_PARAM | TVIF_TEXT, (uit->getUser()->getLastNickT() + _T(" - ") + Text::toT(uit->m_hintedUser.hint)).c_str(), 0, 0, 0, 0, (LPARAM)(new UserItem(uit->getUser())), TVI_ROOT, TVI_LAST); for (auto i = uit->m_waiting_files.cbegin(); i != uit->m_waiting_files.cend(); ++i) { AddFile(*i); } } } m_needsResort = true; // [!] IRainman opt. m_needsUpdateStatus = true; // [!] IRainman opt. }
void WaitingUsersFrame::removeSelected() { int j = -1; UserList RemoveUsers; while ((j = m_ctrlList.GetNextItem(j, LVNI_SELECTED)) != -1) { // Ok let's cheat here, if you try to remove more users here is not working :( RemoveUsers.push_back(m_ctrlList.getItemData(j)->getUser()); } { UploadManager::LockInstanceQueue lockedInstance; // [+] IRainman opt. for (auto i = RemoveUsers.cbegin(); i != RemoveUsers.cend(); ++i) { lockedInstance->clearUserFilesL(*i); } } m_needsUpdateStatus = true; // [!] IRainman opt. }
LRESULT WaitingUsersFrame::onItemChanged(int /*idCtrl*/, LPNMHDR /* pnmh */, BOOL& /*bHandled*/) { HTREEITEM userNode = ctrlQueued.GetSelectedItem(); while (userNode) { CLockRedraw<> l_lock_draw(m_ctrlList); CLockRedraw<true> l_lock_draw_q(ctrlQueued); m_ctrlList.DeleteAllItems(); UserItem* ui = reinterpret_cast<UserItem *>(ctrlQueued.GetItemData(userNode)); if (ui) { UploadManager::LockInstanceQueue lockedInstance; const auto& users = lockedInstance->getUploadQueueL(); auto it = std::find_if(users.begin(), users.end(), [&](const UserPtr & u) { return u == ui->m_user; }); if (it != users.end()) { for (auto i = it->m_waiting_files.cbegin(); i != it->m_waiting_files.cend(); ++i) { AddFile(*i); } m_needsResort = true; // [!] IRainman opt. m_needsUpdateStatus = true; // [!] IRainman opt. return 0; } } else { LoadAll(); } userNode = ctrlQueued.GetNextSiblingItem(userNode); } return 0; }
// !SMT!-UI void UserInfoSimple::addSummaryMenu() { // TODO: move obtain information about the user in the UserManager if (!getUser()) return; CWaitCursor l_cursor_wait; //-V808 UserInfoGuiTraits::userSummaryMenu.InsertSeparatorLast(getUser()->getLastNickT()); ClientManager::UserParams l_params; if (ClientManager::getUserParams(getUser(), l_params)) { tstring userInfo = TSTRING(SLOTS) + _T(": ") + Util::toStringW(l_params.m_slots) + _T(", ") + TSTRING(SHARED) + _T(": ") + Util::formatBytesW(l_params.m_bytesShared); if (l_params.m_limit) { userInfo += _T(", ") + TSTRING(SPEED_LIMIT) + _T(": ") + Util::formatBytesW(l_params.m_limit) + _T('/') + WSTRING(SEC); } UserInfoGuiTraits::userSummaryMenu.AppendMenu(MF_STRING | MF_DISABLED, IDC_NONE, userInfo.c_str()); const time_t slot = UploadManager::getReservedSlotTime(getUser()); if (slot) { const tstring note = TSTRING(EXTRA_SLOT_TIMEOUT) + _T(": ") + Util::formatSecondsW((slot - GET_TICK()) / 1000); UserInfoGuiTraits::userSummaryMenu.AppendMenu(MF_STRING | MF_DISABLED, IDC_NONE, note.c_str()); } if (!l_params.m_ip.empty()) { UserInfoGuiTraits::userSummaryMenu.AppendMenu(MF_STRING | MF_DISABLED, IDC_NONE, l_params.getTagIP().c_str()); const Util::CustomNetworkIndex l_location = Util::getIpCountry(l_params.m_ip, true); // Не обращаемся в базу данных const tstring loc = TSTRING(COUNTRY) + _T(": ") + l_location.getCountry() + _T(", ") + l_location.getDescription(); UserInfoGuiTraits::userSummaryMenu.AppendMenu(MF_STRING | MF_DISABLED, IDC_NONE, loc.c_str()); HubFrame::addDupeUsersToSummaryMenu(l_params); } else { UserInfoGuiTraits::userSummaryMenu.AppendMenu(MF_STRING | MF_DISABLED, IDC_NONE, l_params.getTagIP().c_str()); HubFrame::addDupeUsersToSummaryMenu(l_params); } } //UserInfoGuiTraits::userSummaryMenu.AppendMenu(MF_SEPARATOR); bool caption = false; { UploadManager::LockInstanceQueue lockedInstance; const auto& users = lockedInstance->getUploadQueueL(); for (auto uit = users.cbegin(); uit != users.cend(); ++uit) { if (uit->getUser() == getUser()) { uint8_t l_count_menu = 0; // [+]PPA for (auto i = uit->m_waiting_files.cbegin(); i != uit->m_waiting_files.cend(); ++i) { if (!caption) { UserInfoGuiTraits::userSummaryMenu.InsertSeparatorLast(TSTRING(USER_WAIT_MENU)); caption = true; } const tstring note = _T('[') + Util::toStringW((double)(*i)->getPos() * 100.0 / (double)(*i)->getSize()) + _T("% ") + Util::formatSecondsW(GET_TIME() - (*i)->getTime()) + _T("]\t") + Text::toT((*i)->getFile()); UserInfoGuiTraits::userSummaryMenu.AppendMenu(MF_STRING | MF_DISABLED, IDC_NONE, note.c_str()); if (l_count_menu++ == 10) //[+]PPA { UserInfoGuiTraits::userSummaryMenu.AppendMenu(MF_STRING | MF_DISABLED, IDC_NONE, _T("...")); break; } } } } } caption = false; { uint8_t l_count_menu = 0; // [+]PPA RLock(*QueueItem::g_cs); QueueManager::LockFileQueueShared l_fileQueue; const auto& downloads = l_fileQueue.getQueueL(); for (auto j = downloads.cbegin(); j != downloads.cend(); ++j) { const QueueItemPtr& aQI = j->second; const bool src = aQI->isSourceL(getUser()); bool badsrc = false; if (!src) { badsrc = aQI->isBadSourceL(getUser()); } if (src || badsrc) { if (!caption) { UserInfoGuiTraits::userSummaryMenu.InsertSeparatorLast(TSTRING(NEED_USER_FILES_MENU)); caption = true; } tstring note = Text::toT(aQI->getTarget()); if (aQI->getSize() > 0) { note += tstring(_T("\t(")) + Util::toStringW((double)aQI->getDownloadedBytes() * 100.0 / (double)aQI->getSize()) + tstring(_T("%)")); } const UINT flags = MF_STRING | MF_DISABLED | (badsrc ? MF_GRAYED : 0); UserInfoGuiTraits::userSummaryMenu.AppendMenu(flags, IDC_NONE, note.c_str()); if (l_count_menu++ == 10) //[+]PPA { UserInfoGuiTraits::userSummaryMenu.AppendMenu(MF_STRING | MF_DISABLED, IDC_NONE, _T("...")); break; } } } } }