LRESULT WaitingUsersFrame::onSpeaker(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/) { // [!] IRainman opt. TaskQueue::List t; m_tasks.get(t); if (t.empty()) return 0; CFlyBusyBool l_busy(m_spoken); CLockRedraw<> lockCtrlList(m_ctrlList); CLockRedraw<> lockCtrlQueued(ctrlQueued); for (auto j = t.cbegin(); j != t.cend(); ++j) { switch (j->first) { case REMOVE_WAITING_ITEM: { RemoveFile(static_cast<UploadQueueTask&>(*j->second).getItem()); } break; case REMOVE: { RemoveUser(static_cast<UserTask&>(*j->second).getUser()); } break; case ADD_ITEM: { AddFile(static_cast<UploadQueueTask&>(*j->second).getItem()); m_needsResort = true; } break; case UPDATE_ITEMS: { const int l_item_count = m_ctrlList.GetItemCount(); if (l_item_count) { const int l_top_index = m_ctrlList.GetTopIndex(); const int l_count_per_page = m_ctrlList.GetCountPerPage(); int64_t itime = GET_TIME(); for (int i = l_top_index; i < l_count_per_page; i++) { auto ii = m_ctrlList.getItemData(i); if (ii) { // https://drdump.com/DumpGroup.aspx?DumpGroupID=491521 ii->setText(UploadQueueItem::COLUMN_TRANSFERRED, Util::formatBytesW(ii->getPos()) + _T(" (") + Util::toStringW((double)ii->getPos() * 100.0 / (double)ii->getSize()) + _T("%)")); ii->setText(UploadQueueItem::COLUMN_WAITING, Util::formatSecondsW(itime - ii->getTime())); m_ctrlList.updateItem(i, UploadQueueItem::COLUMN_TRANSFERRED); m_ctrlList.updateItem(i, UploadQueueItem::COLUMN_WAITING); } } } if (m_needsResort) { m_ctrlList.resort(); m_needsResort = false; } if (m_needsUpdateStatus) { if (BOOLSETTING(BOLD_WAITING_USERS)) { setDirty(0); } updateStatus(); m_needsUpdateStatus = false; } } break; default: dcassert(0); } if (j->first != UPDATE_ITEMS) { m_needsUpdateStatus = true; } delete j->second; } return 0; }
LRESULT SpyFrame::onSpeaker(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/) { TaskQueue::List t; m_tasks.get(t); if (t.empty()) return 0; CFlyBusyBool l_busy(m_spoken); CLockRedraw<> lockCtrlList(ctrlSearches); for (auto i = t.cbegin(); i != t.cend(); ++i) { switch (i->first) { case SEARCH: { SMTSearchInfo* si = (SMTSearchInfo*)i->second; //[+]IRainman refactoring SpyFrame if (m_needsUpdateTime) { m_CurrentTime = Text::toT(Util::formatDigitalClock(GET_TIME())); m_needsUpdateTime = false; } //[~]IRainman refactoring SpyFrame tstring l_SeekersNames; { auto& l_searh_item = m_spy_searches[si->s]; if (m_showNick)// [+] IRainman { if (::strncmp(si->seeker.c_str(), "Hub:", 4)) { const string::size_type l_twopt = si->seeker.find(':'); if (l_twopt != string::npos) { const string l_ip = si->seeker.substr(0, l_twopt); const StringList l_users = ClientManager::getUserByIp(l_ip); if (!l_users.empty()) { si->seeker = "[IP:" + l_ip + "] Users:" + Util::toString(l_users); } } } } if (m_log && m_LogFile) { m_log_txt += Text::fromT(m_CurrentTime) + "\t" + si->seeker + "\t" + si->s + "\r\n"; } if (m_showNick)// [+] IRainman { size_t k; for (k = 0; k < NUM_SEEKERS; ++k) if (si->seeker == l_searh_item.m_seekers[k]) break; //that user's searching for file already noted if (k == NUM_SEEKERS) //loop terminated normally l_searh_item.AddSeeker(si->seeker); for (k = 0; k < NUM_SEEKERS; ++k) l_SeekersNames += Text::toT(l_searh_item.m_seekers[k]) + _T(" "); } ++m_total; ++m_perSecond[m_current]; } // !SMT!-S tstring hit; if (si->re == ClientManagerListener::SEARCH_PARTIAL_HIT) hit = _T('*'); else if (si->re == ClientManagerListener::SEARCH_HIT) hit = _T('+'); tstring l_search; l_search = Text::toT(si->s, l_search); const int j = ctrlSearches.find(l_search); if (j == -1) { TStringList a; a.reserve(5); a.push_back(l_search); a.push_back(_T("1")); a.push_back(l_SeekersNames); a.push_back(m_CurrentTime); a.push_back(hit); ctrlSearches.insert(a, 0, si->re);// !SMT!-S int l_Count = ctrlSearches.GetItemCount(); if (l_Count > 500) { ctrlSearches.DeleteItem(--l_Count); } } else { TCHAR tmp[32]; tmp[0] = 0; ctrlSearches.GetItemText(j, COLUMN_COUNT, tmp, 32); ctrlSearches.SetItemText(j, COLUMN_COUNT, Util::toStringW(Util::toInt(tmp) + 1).c_str()); ctrlSearches.SetItemText(j, COLUMN_USERS, l_SeekersNames.c_str()); ctrlSearches.SetItemText(j, COLUMN_TIME, m_CurrentTime.c_str()); ctrlSearches.SetItemText(j, COLUMN_SHARE_HIT, hit.c_str()); // !SMT!-S ctrlSearches.SetItem(j, COLUMN_SHARE_HIT, LVIF_PARAM, NULL, 0, 0, 0, si->re); // !SMT!-S if (ctrlSearches.getSortColumn() == COLUMN_COUNT || ctrlSearches.getSortColumn() == COLUMN_TIME ) m_needsResort = true; } if (BOOLSETTING(BOLD_SEARCH)) { setDirty(0); } #ifdef FLYLINKDC_USE_SOUND_AND_POPUP_IN_SEARCH_SPY SHOW_POPUP(POPUP_SEARCH_SPY, m_CurrentTime + _T(" : ") + l_SeekersNames + _T("\r\n") + l_search, TSTRING(SEARCH_SPY)); // [+] SCALOlaz: Spy Popup. Thanks to tret2003 (NightOrion) with tstring PLAY_SOUND(SOUND_SEARCHSPY); #endif } break; case TICK_AVG: { auto s = (Stats*)i->second; LocalArray<TCHAR, 50> buf; _snwprintf(buf.data(), buf.size(), CTSTRING(SEARCHES_PER), s->m_perS, s->m_perM); ctrlStatus.SetText(2, (TSTRING(TOTAL) + _T(' ') + Util::toStringW(m_total)).c_str()); ctrlStatus.SetText(3, buf.data()); ctrlStatus.SetText(4, (TSTRING(HITS) + _T(' ') + Util::toStringW((size_t)(ShareManager::getHits()))).c_str()); const double ratio = m_total > 0 ? static_cast<double>(ShareManager::getHits()) / static_cast<double>(m_total) : 0.0; ctrlStatus.SetText(5, (TSTRING(HIT_RATIO) + _T(' ') + Util::toStringW(ratio)).c_str()); if (m_needsResort) { m_needsResort = false; ctrlSearches.resort(); } } break; case SAVE_LOG: if (m_log) { try { m_log->setEndPos(0); m_log->write(m_log_txt); } catch (const FileException& e) { LogManager::message("Error write file spylog.log error = " + e.getError()); } m_log_txt.clear(); } break; } delete i->second; } return 0; }