/srchybrid/StatisticsDlg.cpp
C++ | 3498 lines | 2949 code | 277 blank | 272 comment | 646 complexity | d574d37a32225f8da8c164e512d36778 MD5 | raw file
Possible License(s): LGPL-2.0, LGPL-3.0, BSD-3-Clause
Large files files are truncated, but you can click here to view the full file
- //this file is part of eMule
- //Copyright (C)2002-2008 Merkur ( strEmail.Format("%s@%s", "devteam", "emule-project.net") / http://www.emule-project.net )
- //
- //This program is free software; you can redistribute it and/or
- //modify it under the terms of the GNU General Public License
- //as published by the Free Software Foundation; either
- //version 2 of the License, or (at your option) any later version.
- //
- //This program is distributed in the hope that it will be useful,
- //but WITHOUT ANY WARRANTY; without even the implied warranty of
- //MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- //GNU General Public License for more details.
- //
- //You should have received a copy of the GNU General Public License
- //along with this program; if not, write to the Free Software
- //Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- #include "stdafx.h"
- #include "emule.h"
- #include "StatisticsDlg.h"
- #include "UploadQueue.h"
- #include "Statistics.h"
- #include "emuledlg.h"
- #include "OtherFunctions.h"
- #include "WebServer.h"
- #include "DownloadQueue.h"
- #include "ClientList.h"
- #include "Preferences.h"
- #include "ListenSocket.h"
- #include "ServerList.h"
- #include "SharedFileList.h"
- #include "UpDownClient.h"
- #include "UserMsgs.h"
- #include "HelpIDs.h"
- #include "Kademlia/Kademlia/kademlia.h"
- #include "Kademlia/Kademlia/Prefs.h"
- #include "kademlia/kademlia/UDPFirewallTester.h"
- #ifdef _DEBUG
- #define new DEBUG_NEW
- #undef THIS_FILE
- static char THIS_FILE[] = __FILE__;
- #endif
- #ifdef _DEBUG
- extern _CRT_ALLOC_HOOK g_pfnPrevCrtAllocHook;
- #endif
- // CStatisticsDlg dialog
- IMPLEMENT_DYNAMIC(CStatisticsDlg, CDialog)
- BEGIN_MESSAGE_MAP(CStatisticsDlg, CResizableDialog)
- ON_WM_SHOWWINDOW()
- ON_WM_SIZE()
- ON_BN_CLICKED(IDC_BNMENU, OnMenuButtonClicked)
- ON_WM_SYSCOLORCHANGE()
- ON_WM_CTLCOLOR()
- ON_STN_DBLCLK(IDC_SCOPE_D, OnStnDblclickScopeD)
- ON_STN_DBLCLK(IDC_SCOPE_U, OnStnDblclickScopeU)
- ON_STN_DBLCLK(IDC_STATSSCOPE, OnStnDblclickStatsscope)
- ON_MESSAGE(UM_OSCOPEPOSITION, OnOscopePositionMsg)
- ON_WM_HELPINFO()
- END_MESSAGE_MAP()
- CStatisticsDlg::CStatisticsDlg(CWnd* pParent /*=NULL*/)
- : CResizableDialog(CStatisticsDlg::IDD, pParent)
- , m_DownloadOMeter(3)
- , m_Statistics(4)
- , m_UploadOMeter(5)
- {
- m_oldcx=0;
- m_oldcy=0;
- m_TimeToolTips = NULL;
- }
- CStatisticsDlg::~CStatisticsDlg()
- {
- delete m_TimeToolTips;
- #ifdef _DEBUG
- POSITION pos = blockFiles.GetStartPosition();
- while (pos != NULL)
- {
- const unsigned char* fileName;
- HTREEITEM* pTag;
- blockFiles.GetNextAssoc(pos, fileName, pTag);
- delete pTag;
- }
- #endif
- }
- void CStatisticsDlg::DoDataExchange(CDataExchange* pDX)
- {
- CResizableDialog::DoDataExchange(pDX);
- DDX_Control(pDX, IDC_STATTREE, stattree);
- }
- void CStatisticsDlg::OnSysColorChange()
- {
- CResizableDialog::OnSysColorChange();
- SetAllIcons();
- }
- void CStatisticsDlg::SetAllIcons()
- {
- InitWindowStyles(this);
- CImageList iml;
- iml.Create(16, 16, theApp.m_iDfltImageListColorFlags | ILC_MASK, 0, 1);
- iml.Add(CTempIconLoader(_T("StatsGeneric"))); // Dots & Arrow (Default icon for stats)
- iml.Add(CTempIconLoader(_T("TransferUpDown"))); // Transfer
- iml.Add(CTempIconLoader(_T("Connection"))); // Connection
- iml.Add(CTempIconLoader(_T("StatsClients"))); // Clients
- iml.Add(CTempIconLoader(_T("Server"))); // Server
- iml.Add(CTempIconLoader(_T("SharedFiles"))); // Shared Files
- iml.Add(CTempIconLoader(_T("Upload"))); // Transfer > Upload
- iml.Add(CTempIconLoader(_T("Download"))); // Transfer > Download
- iml.Add(CTempIconLoader(_T("StatsDetail"))); // Session Sections
- iml.Add(CTempIconLoader(_T("StatsCumulative"))); // Cumulative Sections
- iml.Add(CTempIconLoader(_T("StatsRecords"))); // Records
- iml.Add(CTempIconLoader(_T("TransferUpDown"))); // Connection > General
- iml.Add(CTempIconLoader(_T("StatsTime"))); // Time Section
- iml.Add(CTempIconLoader(_T("StatsProjected"))); // Time > Averages and Projections
- iml.Add(CTempIconLoader(_T("StatsDay"))); // Time > Averages and Projections > Daily
- iml.Add(CTempIconLoader(_T("StatsMonth"))); // Time > Averages and Projections > Monthly
- iml.Add(CTempIconLoader(_T("StatsYear"))); // Time > Averages and Projections > Yearly
- iml.Add(CTempIconLoader(_T("HardDisk"))); // Diskspace
- stattree.SetImageList(&iml, TVSIL_NORMAL);
- imagelistStatTree.DeleteImageList();
- imagelistStatTree.Attach(iml.Detach());
- COLORREF crBk = GetSysColor(COLOR_WINDOW);
- COLORREF crFg = GetSysColor(COLOR_WINDOWTEXT);
- theApp.LoadSkinColorAlt(_T("StatisticsTvBk"), _T("DefLvBk"), crBk);
- theApp.LoadSkinColorAlt(_T("StatisticsTvFg"), _T("DefLvFg"), crFg);
- stattree.SetBkColor(crBk);
- stattree.SetTextColor(crFg);
- // can't use 'TVM_SETLINECOLOR' because the color may not match that one used in "StatsGeneric" item image.
- //stattree.SendMessage(TVM_SETLINECOLOR, 0, (LPARAM)crFg);
- }
- BOOL CStatisticsDlg::OnInitDialog()
- {
- CResizableDialog::OnInitDialog();
- EnableWindow(FALSE);
- SetAllIcons();
- m_bTreepaneHidden=false;
- if (theApp.m_fontSymbol.m_hObject)
- {
- GetDlgItem(IDC_BNMENU)->SetFont(&theApp.m_fontSymbol);
- GetDlgItem(IDC_BNMENU)->SetWindowText(_T("6")); // show a down-arrow
- }
- // Win98: Explicitly set to Unicode to receive Unicode notifications.
- stattree.SendMessage(CCM_SETUNICODEFORMAT, TRUE);
- if (thePrefs.GetUseSystemFontForMainControls())
- stattree.SendMessage(WM_SETFONT, NULL, FALSE);
- CreateMyTree();
- // Setup download-scope
- CRect rcDown;
- GetDlgItem(IDC_SCOPE_D)->GetWindowRect(rcDown);
- GetDlgItem(IDC_SCOPE_D)->DestroyWindow();
- ScreenToClient(rcDown);
- m_DownloadOMeter.Create(WS_VISIBLE | WS_CHILD, rcDown, this, IDC_SCOPE_D);
- SetARange(true, thePrefs.GetMaxGraphDownloadRate());
- m_DownloadOMeter.SetYUnits(GetResString(IDS_KBYTESPERSEC));
-
- // Setup upload-scope
- CRect rcUp;
- GetDlgItem(IDC_SCOPE_U)->GetWindowRect(rcUp);
- GetDlgItem(IDC_SCOPE_U)->DestroyWindow();
- ScreenToClient(rcUp);
- // compensate rounding errors due to dialog units, make each of the 3 panes with same height
- rcUp.top = rcDown.bottom + 4;
- rcUp.bottom = rcUp.top + rcDown.Height();
- m_UploadOMeter.Create(WS_VISIBLE | WS_CHILD, rcUp, this, IDC_SCOPE_U);
- SetARange(false, thePrefs.GetMaxGraphUploadRate(true));
- m_UploadOMeter.SetYUnits(GetResString(IDS_KBYTESPERSEC));
-
- // Setup additional graph-scope
- CRect rcConn;
- GetDlgItem(IDC_STATSSCOPE)->GetWindowRect(rcConn);
- GetDlgItem(IDC_STATSSCOPE)->DestroyWindow();
- ScreenToClient(rcConn);
- // compensate rounding errors due to dialog units, make each of the 3 panes with same height
- rcConn.top = rcUp.bottom + 4;
- rcConn.bottom = rcConn.top + rcDown.Height();
- m_Statistics.Create(WS_VISIBLE | WS_CHILD, rcConn, this, IDC_STATSSCOPE);
- m_Statistics.SetRanges(0, thePrefs.GetStatsMax());
- m_Statistics.autofitYscale = false;
- // Set the trend ratio of the Active Connections trend in the Connection Statistics scope.
- m_Statistics.SetTrendRatio(0, thePrefs.GetStatsConnectionsGraphRatio());
- m_Statistics.SetYUnits(_T(""));
- m_Statistics.SetXUnits(GetResString(IDS_TIME));
- RepaintMeters();
- m_Statistics.SetBackgroundColor(thePrefs.GetStatsColor(0)) ;
- m_Statistics.SetGridColor(thePrefs.GetStatsColor(1)) ;
-
- m_DownloadOMeter.InvalidateCtrl();
- m_UploadOMeter.InvalidateCtrl();
- m_Statistics.InvalidateCtrl();
- if (thePrefs.GetStatsInterval()==0)
- GetDlgItem(IDC_STATTREE)->EnableWindow(false);
- UpdateData(FALSE);
- EnableWindow( TRUE );
- m_ilastMaxConnReached = 0;
- CRect rcW,rcSpl,rcTree,rcStat;
-
- GetWindowRect(rcW);
- ScreenToClient(rcW);
- GetDlgItem(IDC_STATTREE)->GetWindowRect(rcTree);
- ScreenToClient(rcTree);
- m_DownloadOMeter.GetWindowRect(rcDown);
- ScreenToClient(rcDown);
- m_UploadOMeter.GetWindowRect(rcUp);
- ScreenToClient(rcUp);
- m_Statistics.GetWindowRect(rcStat);
- ScreenToClient(rcStat);
-
- //vertical splitter
- rcSpl.left = rcTree.right;
- rcSpl.right = rcSpl.left + 4;
- rcSpl.top = rcW.top + 2;
- rcSpl.bottom = rcW.bottom - 5;
- m_wndSplitterstat.Create(WS_CHILD | WS_VISIBLE, rcSpl, this, IDC_SPLITTER_STAT);
- int PosStatVinitX = rcSpl.left;
- int PosStatVnewX = thePrefs.GetSplitterbarPositionStat()*rcW.Width()/100;
- int maxX = rcW.right-13;
- int minX = rcW.left+8;
- if (thePrefs.GetSplitterbarPositionStat() > 90)
- PosStatVnewX = maxX;
- else if (thePrefs.GetSplitterbarPositionStat() < 10)
- PosStatVnewX = minX;
- rcSpl.left = PosStatVnewX;
- rcSpl.right = PosStatVnewX + 4;
- m_wndSplitterstat.MoveWindow(rcSpl);
- //HR splitter
- rcSpl.left = rcDown.left;
- rcSpl.right = rcDown.right;
- rcSpl.top = rcDown.bottom;
- rcSpl.bottom = rcSpl.top + 4;
- m_wndSplitterstat_HR.Create(WS_CHILD | WS_VISIBLE, rcSpl, this, IDC_SPLITTER_STAT_HR);
- int PosStatVinitZ = rcSpl.top;
- int PosStatVnewZ = thePrefs.GetSplitterbarPositionStat_HR()*rcW.Height()/100;
- int maxZ = rcW.bottom-14;
- int minZ = 0;
- if (thePrefs.GetSplitterbarPositionStat_HR() > 90)
- PosStatVnewZ = maxZ;
- else if (thePrefs.GetSplitterbarPositionStat_HR() < 10)
- PosStatVnewZ = minZ;
- rcSpl.top = PosStatVnewZ;
- rcSpl.bottom = PosStatVnewZ+4;
- m_wndSplitterstat_HR.MoveWindow(rcSpl);
- //HL splitter
- rcSpl.left = rcUp.left;
- rcSpl.right = rcUp.right;
- rcSpl.top = rcUp.bottom;
- rcSpl.bottom = rcSpl.top + 4;
- m_wndSplitterstat_HL.Create(WS_CHILD | WS_VISIBLE, rcSpl, this, IDC_SPLITTER_STAT_HL);
- int PosStatVinitY = rcSpl.top;
- int PosStatVnewY = thePrefs.GetSplitterbarPositionStat_HL()*rcW.Height()/100;
- int maxY = rcW.bottom-9;
- int minY = 10;
- if (thePrefs.GetSplitterbarPositionStat_HL() > 90)
- PosStatVnewY = maxY;
- else if (thePrefs.GetSplitterbarPositionStat_HL() < 10)
- PosStatVnewY = minY;
- rcSpl.top = PosStatVnewY;
- rcSpl.bottom = PosStatVnewY+4;
- m_wndSplitterstat_HL.MoveWindow(rcSpl);
- DoResize_V(PosStatVnewX - PosStatVinitX);
- DoResize_HL(PosStatVnewY - PosStatVinitY);
- DoResize_HR(PosStatVnewZ - PosStatVinitZ);
- Localize();
- ShowStatistics(true);
-
- m_TimeToolTips = new CToolTipCtrl();
- m_TimeToolTips->Create(this);
- m_TimeToolTips->AddTool(GetDlgItem(IDC_SCOPE_D), _T(""), NULL, 0);
- m_TimeToolTips->AddTool(GetDlgItem(IDC_SCOPE_U), _T(""), NULL, 0);
- m_TimeToolTips->AddTool(GetDlgItem(IDC_STATSSCOPE), _T(""), NULL, 0);
- // Any Autopop-Time which is specified higher than ~30 sec. will get reset to 5 sec.
- m_TimeToolTips->SetDelayTime(TTDT_AUTOPOP, 30000);
- m_TimeToolTips->SetDelayTime(TTDT_INITIAL, 30000);
- m_TimeToolTips->SetDelayTime(TTDT_RESHOW, 30000);
- EnableToolTips(TRUE);
- return true;
- }
- void CStatisticsDlg::initCSize()
- {
- UINT x = thePrefs.GetSplitterbarPositionStat();
- UINT y = thePrefs.GetSplitterbarPositionStat_HL();
- UINT z = thePrefs.GetSplitterbarPositionStat_HR();
- if (x > 90)
- x = 100;
- else if (x < 10)
- x = 0;
- if (y > 90)
- y = 100;
- else if (y < 10)
- y = 0;
- if (z > 90)
- z = 100;
- else if (z < 10)
- z = 0;
- RemoveAnchor(IDC_BNMENU);
- AddAnchor(IDC_BNMENU,CSize(0,0));
- //StatTitle
- RemoveAnchor(IDC_STATIC_LASTRESET);
- AddAnchor(IDC_STATIC_LASTRESET,CSize(0,0),CSize(x,0));
- //stattree
- RemoveAnchor(stattree);
- AddAnchor(stattree,CSize(0,0),CSize(x,100));
- //graph
- RemoveAnchor(m_DownloadOMeter);
- AddAnchor(m_DownloadOMeter,CSize(x,0),CSize(100,z));
- RemoveAnchor(m_UploadOMeter);
- AddAnchor(m_UploadOMeter,CSize(x,z),CSize(100,y));
- RemoveAnchor(m_Statistics);
- AddAnchor(m_Statistics,CSize(x,y),CSize(100,100));
-
- //set range
- CRect rcW;
- GetWindowRect(rcW);
- ScreenToClient(rcW);
- CRect rcHR,rcHL;
- m_wndSplitterstat_HR.GetWindowRect(rcHR);
- m_wndSplitterstat_HL.GetWindowRect(rcHL);
- ScreenToClient(rcHR);
- ScreenToClient(rcHL);
- m_wndSplitterstat.SetRange(rcW.left+11, rcW.right-11);
- m_wndSplitterstat_HL.SetRange(rcHR.bottom+5, rcW.bottom-7);
- m_wndSplitterstat_HR.SetRange(rcW.top+3, rcHL.top-5);
- }
- void CStatisticsDlg::DoResize_HL(int delta)
- {
- if(!delta)
- return;
- m_DownloadOMeter.InvalidateCtrl(true);
- CSplitterControl::ChangeHeight(&m_UploadOMeter, delta , CW_TOPALIGN);
- CSplitterControl::ChangeHeight(&m_Statistics, -delta, CW_BOTTOMALIGN);
- CRect rcW;
-
- GetWindowRect(rcW);
- ScreenToClient(rcW);
- CRect rcspl;
- m_UploadOMeter.GetWindowRect(rcspl);
- ScreenToClient(rcspl);
- thePrefs.SetSplitterbarPositionStat_HL(rcspl.bottom*100/rcW.Height());
- initCSize();
- ShowInterval();
- Invalidate();
- UpdateWindow();
- }
- void CStatisticsDlg::DoResize_HR(int delta)
- {
- if(!delta)
- return;
- CSplitterControl::ChangeHeight(&m_DownloadOMeter, delta , CW_TOPALIGN);
- CSplitterControl::ChangeHeight(&m_UploadOMeter, -delta, CW_BOTTOMALIGN);
- m_Statistics.InvalidateCtrl(true);
- CRect rcW;
-
- GetWindowRect(rcW);
- ScreenToClient(rcW);
- CRect rcspl;
- m_DownloadOMeter.GetWindowRect(rcspl);
- ScreenToClient(rcspl);
- thePrefs.SetSplitterbarPositionStat_HR(rcspl.bottom*100/rcW.Height());
- initCSize();
- ShowInterval();
- Invalidate();
- UpdateWindow();
- }
- void CStatisticsDlg::DoResize_V(int delta)
- {
- if(!delta)
- return;
- CSplitterControl::ChangeWidth(GetDlgItem(IDC_STATIC_LASTRESET), delta);
- CSplitterControl::ChangeWidth(&stattree, delta);
- CSplitterControl::ChangeWidth(&m_DownloadOMeter, -delta, CW_RIGHTALIGN);
- CSplitterControl::ChangeWidth(&m_UploadOMeter, -delta, CW_RIGHTALIGN);
- CSplitterControl::ChangeWidth(&m_Statistics, -delta, CW_RIGHTALIGN);
- CRect rcW;
-
- GetWindowRect(rcW);
- ScreenToClient(rcW);
- CRect rcspl;
- GetDlgItem(IDC_STATTREE)->GetWindowRect(rcspl);
- ScreenToClient(rcspl);
- thePrefs.SetSplitterbarPositionStat(rcspl.right*100/rcW.Width());
- if (rcspl.left==rcspl.right) {
- GetDlgItem(IDC_STATTREE)->ShowWindow(SW_HIDE);
- GetDlgItem(IDC_BNMENU)->ShowWindow(SW_HIDE);
- GetDlgItem(IDC_STATIC_LASTRESET)->ShowWindow(SW_HIDE);
- m_bTreepaneHidden=true;
- } else if (m_bTreepaneHidden) {
- m_bTreepaneHidden=false;
- GetDlgItem(IDC_STATTREE)->ShowWindow(SW_SHOW);
- GetDlgItem(IDC_BNMENU)->ShowWindow(SW_SHOW);
- GetDlgItem(IDC_STATIC_LASTRESET)->ShowWindow(SW_SHOW);
- }
- initCSize();
- ShowInterval();
- Invalidate();
- UpdateWindow();
- }
- LRESULT CStatisticsDlg::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam)
- {
- switch (message)
- {
- case WM_PAINT:
- if (m_wndSplitterstat)
- {
- CRect rctree,rcSpl,rcW;
- GetWindowRect(rcW);
- ScreenToClient(rcW);
- GetDlgItem(IDC_STATTREE)->GetWindowRect(rctree);
- ScreenToClient(rctree);
-
- if (rcW.Width()>0)
- {
- rcSpl.left = rctree.right;
- rcSpl.right = rcSpl.left + 4;
- rcSpl.top = rcW.top + 2;
- rcSpl.bottom = rcW.bottom - 5;
- m_wndSplitterstat.MoveWindow(rcSpl,true);
- }
- }
- if (m_wndSplitterstat_HL)
- {
- CRect rcUp,rcSpl,rcW;
- CWnd* pWnd;
- GetWindowRect(rcW);
- ScreenToClient(rcW);
- pWnd = &m_UploadOMeter;
- pWnd->GetWindowRect(rcUp);
- ScreenToClient(rcUp);
- if (rcW.Height()>0)
- {
- rcSpl.left = rcUp.left;
- rcSpl.right = rcUp.right;
- rcSpl.top = rcUp.bottom;
- rcSpl.bottom = rcUp.bottom + 4;
- m_wndSplitterstat_HL.MoveWindow(rcSpl,true);
- }
- }
- if (m_wndSplitterstat_HR)
- {
- CRect rcDown,rcSpl,rcW;
- CWnd* pWnd;
- GetWindowRect(rcW);
- ScreenToClient(rcW);
- pWnd = &m_DownloadOMeter;
- pWnd->GetWindowRect(rcDown);
- ScreenToClient(rcDown);
- if (rcW.Height()>0)
- {
- rcSpl.left = rcDown.left;
- rcSpl.right = rcDown.right;
- rcSpl.top = rcDown.bottom;
- rcSpl.bottom = rcDown.bottom + 4;
- m_wndSplitterstat_HR.MoveWindow(rcSpl,true);
- }
- }
- break;
- case WM_NOTIFY:
- if (wParam == IDC_SPLITTER_STAT)
- {
- SPC_NMHDR* pHdr = (SPC_NMHDR*) lParam;
- DoResize_V(pHdr->delta);
- }
- else if (wParam == IDC_SPLITTER_STAT_HL)
- {
- SPC_NMHDR* pHdr = (SPC_NMHDR*) lParam;
- DoResize_HL(pHdr->delta);
- }
- else if (wParam == IDC_SPLITTER_STAT_HR)
- {
- SPC_NMHDR* pHdr = (SPC_NMHDR*) lParam;
- DoResize_HR(pHdr->delta);
- }
- break;
- case WM_WINDOWPOSCHANGED:
- {
- CRect rcW;
- GetWindowRect(rcW);
- ScreenToClient(rcW);
- if (m_wndSplitterstat && rcW.Width()>0) Invalidate();
- if (m_wndSplitterstat_HL && rcW.Height()>0) Invalidate();
- if (m_wndSplitterstat_HR && rcW.Height()>0) Invalidate();
- break;
- }
- case WM_SIZE:
- {
- //set range
- if (m_wndSplitterstat)
- {
- CRect rcW;
- GetWindowRect(rcW);
- ScreenToClient(rcW);
- if (rcW.Width()>0)
- {
- CRect rcSpl;
- CRect rcTree,rcDown;
- stattree.GetWindowRect(rcTree);
- m_DownloadOMeter.GetWindowRect(rcDown);
- ScreenToClient(rcTree);
- ScreenToClient(rcDown);
- long splitposstat=thePrefs.GetSplitterbarPositionStat()*rcW.Width()/100;
- rcSpl.left = splitposstat;
- rcSpl.right = rcSpl.left + 4;
- rcSpl.top = rcW.top + 2;
- rcSpl.bottom = rcW.bottom - 5;
- m_wndSplitterstat.MoveWindow(rcSpl,true);
- m_wndSplitterstat.SetRange(rcW.left+11, rcW.right-11);
- }
- }
- if (m_wndSplitterstat_HR)
- {
- CRect rcW;
- GetWindowRect(rcW);
- ScreenToClient(rcW);
- if (rcW.Width()>0)
- {
- CRect rcSpl;
- CRect rcDown;
- m_DownloadOMeter.GetWindowRect(rcDown);
- ScreenToClient(rcDown);
- long splitposstat=thePrefs.GetSplitterbarPositionStat()*rcW.Width()/100;
- long splitposstat_HR=thePrefs.GetSplitterbarPositionStat_HR()*rcW.Height()/100;
- long splitposstat_HL=thePrefs.GetSplitterbarPositionStat_HL()*rcW.Height()/100;
- rcSpl.left = splitposstat + 7;
- rcSpl.right = rcW.right - 14;
- rcSpl.top = splitposstat_HR;
- rcSpl.bottom = rcSpl.top + 4;
- m_wndSplitterstat_HR.MoveWindow(rcSpl,true);
- m_wndSplitterstat_HR.SetRange(rcW.top+3, splitposstat_HL-4);
- }
- }
- if (m_wndSplitterstat_HL)
- {
- CRect rcW;
- GetWindowRect(rcW);
- ScreenToClient(rcW);
- if (rcW.Width()>0)
- {
- CRect rcSpl;
- CRect rcStat;
- m_Statistics.GetWindowRect(rcStat);
- ScreenToClient(rcStat);
- long splitposstat=thePrefs.GetSplitterbarPositionStat()*rcW.Width()/100;
- long splitposstat_HR=thePrefs.GetSplitterbarPositionStat_HR()*rcW.Height()/100;
- long splitposstat_HL=thePrefs.GetSplitterbarPositionStat_HL()*rcW.Height()/100;
- rcSpl.left = splitposstat + 7;
- rcSpl.right = rcW.right - 14;
- rcSpl.top = splitposstat_HL;
- rcSpl.bottom = rcSpl.top + 4;
- m_wndSplitterstat_HL.MoveWindow(rcSpl,true);
- m_wndSplitterstat_HL.SetRange(splitposstat_HR+14, rcW.bottom-7);
- }
- }
- break;
- }
- }
- return CResizableDialog::DefWindowProc(message, wParam, lParam);
- }
- void CStatisticsDlg::RepaintMeters()
- {
- CString Buffer;
- m_DownloadOMeter.SetBackgroundColor(thePrefs.GetStatsColor(0)); // Background
- m_DownloadOMeter.SetGridColor(thePrefs.GetStatsColor(1)); // Grid
- m_DownloadOMeter.SetPlotColor(thePrefs.GetStatsColor(4), 0); // Download session
- m_DownloadOMeter.SetPlotColor(thePrefs.GetStatsColor(3), 1); // Download average
- m_DownloadOMeter.SetPlotColor(thePrefs.GetStatsColor(2), 2); // Download current
- m_DownloadOMeter.SetBarsPlot(thePrefs.GetFillGraphs(), 2);
- m_UploadOMeter.SetBackgroundColor(thePrefs.GetStatsColor(0));
- m_UploadOMeter.SetGridColor(thePrefs.GetStatsColor(1)); // Grid
- m_UploadOMeter.SetPlotColor(thePrefs.GetStatsColor(7), 0); // Upload session
- m_UploadOMeter.SetPlotColor(thePrefs.GetStatsColor(6), 1); // Upload average
- m_UploadOMeter.SetPlotColor(thePrefs.GetStatsColor(5), 2); // Upload current
- m_UploadOMeter.SetPlotColor(thePrefs.GetStatsColor(14), 3); // Upload current (excl. overhead)
- m_UploadOMeter.SetPlotColor(thePrefs.GetStatsColor(13), 4); // Upload friend slots
- m_UploadOMeter.SetBarsPlot(thePrefs.GetFillGraphs(), 2);
- m_Statistics.SetBackgroundColor(thePrefs.GetStatsColor(0));
- m_Statistics.SetGridColor(thePrefs.GetStatsColor(1));
- m_Statistics.SetPlotColor(thePrefs.GetStatsColor(8), 0); // Active Connections
- m_Statistics.SetPlotColor(thePrefs.GetStatsColor(10), 1); // Active Uploads
- m_Statistics.SetPlotColor(thePrefs.GetStatsColor(9), 2); // Total Uploads
- m_Statistics.SetPlotColor(thePrefs.GetStatsColor(12), 3); // Active Downloads
- m_Statistics.SetBarsPlot(thePrefs.GetFillGraphs(), 0);
- m_DownloadOMeter.SetYUnits(GetResString(IDS_ST_DOWNLOAD));
- m_DownloadOMeter.SetLegendLabel(GetResString(IDS_ST_SESSION), 0); // Download session
- Buffer.Format(_T(" (%u %s)"), thePrefs.GetStatsAverageMinutes(), GetResString(IDS_MINS));
- m_DownloadOMeter.SetLegendLabel(GetResString(IDS_AVG) + Buffer, 1); // Download average
- m_DownloadOMeter.SetLegendLabel(GetResString(IDS_ST_CURRENT), 2); // Download current
- m_UploadOMeter.SetYUnits(GetResString(IDS_ST_UPLOAD));
- m_UploadOMeter.SetLegendLabel(GetResString(IDS_ST_SESSION), 0); // Upload session
- Buffer.Format(_T(" (%u %s)"), thePrefs.GetStatsAverageMinutes(), GetResString(IDS_MINS));
- m_UploadOMeter.SetLegendLabel(GetResString(IDS_AVG) + Buffer, 1); // Upload average
- m_UploadOMeter.SetLegendLabel(GetResString(IDS_ST_ULCURRENT), 2); // Upload current
- m_UploadOMeter.SetLegendLabel(GetResString(IDS_ST_ULSLOTSNOOVERHEAD), 3); // Upload current (excl. overhead)
- m_UploadOMeter.SetLegendLabel(GetResString(IDS_ST_ULFRIEND), 4); // Upload friend slots
- m_Statistics.SetYUnits(GetResString(IDS_FSTAT_CONNECTION));
- Buffer.Format(_T("%s (1:%u)"), GetResString(IDS_ST_ACTIVEC), thePrefs.GetStatsConnectionsGraphRatio());
- m_Statistics.SetLegendLabel(Buffer, 0); // Active Connections
- m_Statistics.SetLegendLabel(GetResString(IDS_ST_ACTIVEU_ZZ), 1); // Active Uploads
- m_Statistics.SetLegendLabel(GetResString(IDS_SP_TOTALUL), 2); // Total Uploads
- m_Statistics.SetLegendLabel(GetResString(IDS_ST_ACTIVED), 3); // Active Downloads
- }
- void CStatisticsDlg::SetCurrentRate(float uploadrate, float downloadrate)
- {
- if (!theApp.emuledlg->IsRunning())
- return;
- // Download
- double m_dPlotDataDown[3];
- m_dPlotDataDown[0] = theStats.GetAvgDownloadRate(AVG_SESSION);
- m_dPlotDataDown[1] = theStats.GetAvgDownloadRate(AVG_TIME);
- m_dPlotDataDown[2] = downloadrate;
- m_DownloadOMeter.AppendPoints(m_dPlotDataDown);
- // Upload
- double m_dPlotDataUp[5];
- m_dPlotDataUp[0] = theStats.GetAvgUploadRate(AVG_SESSION);
- m_dPlotDataUp[1] = theStats.GetAvgUploadRate(AVG_TIME);
- // current rate to network (standardPackets + controlPackets)
- m_dPlotDataUp[2] = uploadrate;
- // current rate (excl. overhead)
- m_dPlotDataUp[3] = uploadrate - (float)theStats.GetUpDatarateOverhead() / 1024;
- // current rate to friends
- m_dPlotDataUp[4] = uploadrate - (float)theApp.uploadqueue->GetToNetworkDatarate() / 1024;
- m_UploadOMeter.AppendPoints(m_dPlotDataUp);
- // Connections
- CDownloadQueue::SDownloadStats myStats;
- theApp.downloadqueue->GetDownloadSourcesStats(myStats);
- m_dPlotDataMore[0] = theApp.listensocket->GetActiveConnections();
- m_dPlotDataMore[1] = theApp.uploadqueue->GetActiveUploadsCount();
- m_dPlotDataMore[2] = theApp.uploadqueue->GetUploadQueueLength();
- m_dPlotDataMore[3] = myStats.a[1];
- m_Statistics.AppendPoints(m_dPlotDataMore);
- // Websever
- UpDown updown;
- updown.upload = uploadrate;
- updown.download = downloadrate;
- updown.connections = theApp.listensocket->GetActiveConnections();
- theApp.webserver->AddStatsLine(updown);
- }
- void CStatisticsDlg::ShowStatistics(bool forceUpdate)
- {
- stattree.SetRedraw(false);
- CString cbuffer;
- // Set Tree Values
- // TRANSFER SECTION
- // If a section is not expanded, don't waste CPU cycles updating it.
- if (forceUpdate || stattree.IsExpanded(h_transfer))
- {
- uint32 statGoodSessions = 0;
- uint32 statBadSessions = 0;
- double percentSessions = 0;
- // Transfer Ratios
- if ( theStats.sessionReceivedBytes>0 && theStats.sessionSentBytes>0 )
- {
- // Session
- if (theStats.sessionReceivedBytes<theStats.sessionSentBytes)
- {
- cbuffer.Format(_T("%s %.2f : 1"),GetResString(IDS_STATS_SRATIO),(float)theStats.sessionSentBytes/theStats.sessionReceivedBytes);
- stattree.SetItemText(trans[0], cbuffer);
- }
- else
- {
- cbuffer.Format(_T("%s 1 : %.2f"),GetResString(IDS_STATS_SRATIO),(float)theStats.sessionReceivedBytes/theStats.sessionSentBytes);
- stattree.SetItemText(trans[0], cbuffer);
- }
- }
- else
- {
- cbuffer.Format(_T("%s %s"), GetResString(IDS_STATS_SRATIO), GetResString(IDS_FSTAT_WAITING)); // Localize
- stattree.SetItemText(trans[0], cbuffer);
- }
- if ( theStats.sessionReceivedBytes>0 && theStats.sessionSentBytes>0)
- {
- // Session
- if (theStats.sessionSentBytes > theStats.sessionSentBytesToFriend && theStats.sessionReceivedBytes<theStats.sessionSentBytes-theStats.sessionSentBytesToFriend)
- {
- cbuffer.Format(_T("%s %.2f : 1"),GetResString(IDS_STATS_FRATIO),(float)(theStats.sessionSentBytes-theStats.sessionSentBytesToFriend)/theStats.sessionReceivedBytes);
- stattree.SetItemText(trans[1], cbuffer);
- }
- else
- {
- cbuffer.Format(_T("%s 1 : %.2f"),GetResString(IDS_STATS_FRATIO),(float)theStats.sessionReceivedBytes/(theStats.sessionSentBytes-theStats.sessionSentBytesToFriend));
- stattree.SetItemText(trans[1], cbuffer);
- }
- }
- else
- {
- cbuffer.Format(_T("%s %s"), GetResString(IDS_STATS_FRATIO), GetResString(IDS_FSTAT_WAITING)); // Localize
- stattree.SetItemText(trans[1], cbuffer);
- }
- if ( (thePrefs.GetTotalDownloaded()>0 && thePrefs.GetTotalUploaded()>0) || (theStats.sessionReceivedBytes>0 && theStats.sessionSentBytes>0) )
- {
- // Cumulative
- if ((theStats.sessionReceivedBytes+thePrefs.GetTotalDownloaded())<(theStats.sessionSentBytes+thePrefs.GetTotalUploaded()))
- {
- cbuffer.Format(_T("%s %.2f : 1"),GetResString(IDS_STATS_CRATIO),(float)(theStats.sessionSentBytes+thePrefs.GetTotalUploaded())/(theStats.sessionReceivedBytes+thePrefs.GetTotalDownloaded()));
- stattree.SetItemText(trans[2], cbuffer);
- }
- else
- {
- cbuffer.Format(_T("%s 1 : %.2f"),GetResString(IDS_STATS_CRATIO),(float)(theStats.sessionReceivedBytes+thePrefs.GetTotalDownloaded())/(theStats.sessionSentBytes+thePrefs.GetTotalUploaded()));
- stattree.SetItemText(trans[2], cbuffer);
- }
- }
- else
- {
- cbuffer.Format(_T("%s %s"), GetResString(IDS_STATS_CRATIO), GetResString(IDS_FSTAT_WAITING)); // Localize
- stattree.SetItemText(trans[2], cbuffer);
- }
- // TRANSFER -> DOWNLOADS SECTION
- if (forceUpdate || stattree.IsExpanded(h_download))
- {
- uint64 DownOHTotal = 0;
- uint64 DownOHTotalPackets = 0;
- CDownloadQueue::SDownloadStats myStats;
- theApp.downloadqueue->GetDownloadSourcesStats(myStats);
- // TRANSFER -> DOWNLOADS -> SESSION SECTION
- if (forceUpdate || stattree.IsExpanded(h_down_session))
- {
- // Downloaded Data
- cbuffer.Format( GetResString( IDS_STATS_DDATA ) , CastItoXBytes( theStats.sessionReceivedBytes, false, false ) );
- stattree.SetItemText( down_S[0] , cbuffer );
- if (forceUpdate || stattree.IsExpanded(down_S[0]))
- {
- // Downloaded Data By Client
- if (forceUpdate || stattree.IsExpanded(hdown_scb))
- {
- int i = 0;
- uint64 DownDataTotal = thePrefs.GetDownSessionClientData();
- uint64 DownDataClient = thePrefs.GetDownData_EMULE();
- double percentClientTransferred = 0;
- if ( DownDataTotal!=0 && DownDataClient!=0 )
- percentClientTransferred = (double) 100 * DownDataClient / DownDataTotal;
- cbuffer.Format( _T("eMule: %s (%1.1f%%)") , CastItoXBytes( DownDataClient, false, false ) , percentClientTransferred);
- stattree.SetItemText( down_scb[i] , cbuffer );
- i++;
- DownDataClient = thePrefs.GetDownData_EDONKEYHYBRID();
- if ( DownDataTotal!=0 && DownDataClient!=0 )
- percentClientTransferred = (double) 100 * DownDataClient / DownDataTotal;
- else
- percentClientTransferred = 0;
- cbuffer.Format( _T("eD Hybrid: %s (%1.1f%%)") , CastItoXBytes( DownDataClient, false, false ) , percentClientTransferred );
- stattree.SetItemText( down_scb[i] , cbuffer );
- i++;
- DownDataClient = thePrefs.GetDownData_EDONKEY();
- if ( DownDataTotal!=0 && DownDataClient!=0 )
- percentClientTransferred = (double) 100 * DownDataClient / DownDataTotal;
- else
- percentClientTransferred = 0;
- cbuffer.Format( _T("eDonkey: %s (%1.1f%%)") , CastItoXBytes( DownDataClient, false, false ), percentClientTransferred );
- stattree.SetItemText( down_scb[i] , cbuffer );
- i++;
- DownDataClient = thePrefs.GetDownData_AMULE();
- if ( DownDataTotal!=0 && DownDataClient!=0 )
- percentClientTransferred = (double) 100 * DownDataClient / DownDataTotal;
- else
- percentClientTransferred = 0;
- cbuffer.Format( _T("aMule: %s (%1.1f%%)") , CastItoXBytes( DownDataClient, false, false ), percentClientTransferred );
- stattree.SetItemText( down_scb[i] , cbuffer );
- i++;
- DownDataClient = thePrefs.GetDownData_MLDONKEY();
- if ( DownDataTotal!=0 && DownDataClient!=0 )
- percentClientTransferred = (double) 100 * DownDataClient / DownDataTotal;
- else
- percentClientTransferred = 0;
- cbuffer.Format( _T("MLdonkey: %s (%1.1f%%)") , CastItoXBytes( DownDataClient, false, false ), percentClientTransferred );
- stattree.SetItemText( down_scb[i] , cbuffer );
- i++;
- DownDataClient = thePrefs.GetDownData_SHAREAZA();
- if ( DownDataTotal!=0 && DownDataClient!=0 )
- percentClientTransferred = (double) 100 * DownDataClient / DownDataTotal;
- else
- percentClientTransferred = 0;
- cbuffer.Format( _T("Shareaza: %s (%1.1f%%)") , CastItoXBytes( DownDataClient, false, false ), percentClientTransferred );
- stattree.SetItemText( down_scb[i] , cbuffer );
- i++;
- DownDataClient = thePrefs.GetDownData_EMULECOMPAT();
- if ( DownDataTotal!=0 && DownDataClient!=0 )
- percentClientTransferred = (double) 100 * DownDataClient / DownDataTotal;
- else
- percentClientTransferred = 0;
- cbuffer.Format( _T("eM Compat: %s (%1.1f%%)") , CastItoXBytes( DownDataClient, false, false ), percentClientTransferred );
- stattree.SetItemText( down_scb[i] , cbuffer );
- i++;
- DownDataClient = thePrefs.GetDownData_URL();
- if ( DownDataTotal!=0 && DownDataClient!=0 )
- percentClientTransferred = (double) 100 * DownDataClient / DownDataTotal;
- else
- percentClientTransferred = 0;
- cbuffer.Format( _T("URL: %s (%1.1f%%)") , CastItoXBytes( DownDataClient, false, false ), percentClientTransferred );
- stattree.SetItemText( down_scb[i] , cbuffer );
- i++;
- }
- // Downloaded Data By Port
- if (forceUpdate || stattree.IsExpanded(hdown_spb))
- {
- int i = 0;
- uint64 PortDataDefault = thePrefs.GetDownDataPort_4662();
- uint64 PortDataOther = thePrefs.GetDownDataPort_OTHER();
- uint64 PortDataPeerCache = thePrefs.GetDownDataPort_PeerCache();
- uint64 PortDataTotal = thePrefs.GetDownSessionDataPort();
- double percentPortTransferred = 0;
- if ( PortDataTotal!=0 && PortDataDefault!=0 )
- percentPortTransferred = (double) 100 * PortDataDefault / PortDataTotal;
- cbuffer.Format( _T("%s: %s (%1.1f%%)") , GetResString(IDS_STATS_PRTDEF) , CastItoXBytes( PortDataDefault, false, false ) , percentPortTransferred);
- stattree.SetItemText( down_spb[i] , cbuffer );
- i++;
- if ( PortDataTotal!=0 && PortDataOther!=0 )
- percentPortTransferred = (double) 100 * PortDataOther / PortDataTotal;
- else
- percentPortTransferred = 0;
- cbuffer.Format( _T("%s: %s (%1.1f%%)") , GetResString(IDS_STATS_PRTOTHER) , CastItoXBytes( PortDataOther, false, false ) , percentPortTransferred);
- stattree.SetItemText( down_spb[i] , cbuffer );
- i++;
- if ( PortDataTotal!=0 && PortDataPeerCache!=0 )
- percentPortTransferred = (double) 100 * PortDataPeerCache / PortDataTotal;
- else
- percentPortTransferred = 0;
- cbuffer.Format( _T("%s: %s (%1.1f%%)") , thePrefs.GetPeerCacheShow() ? _T("PeerCache") : GetResString(IDS_STATS_PRTOTHER) , CastItoXBytes( PortDataPeerCache, false, false ) , percentPortTransferred);
- stattree.SetItemText( down_spb[i] , cbuffer );
- i++;
- }
- }
- // Completed Downloads
- cbuffer.Format( _T("%s: %u") , GetResString( IDS_STATS_COMPDL ) , thePrefs.GetDownSessionCompletedFiles() );
- stattree.SetItemText( down_S[1] , cbuffer );
- // Active Downloads
- cbuffer.Format( GetResString( IDS_STATS_ACTDL ) , myStats.a[1] );
- stattree.SetItemText( down_S[2] , cbuffer );
- // Found Sources
- cbuffer.Format( GetResString( IDS_STATS_FOUNDSRC ) , myStats.a[0] );
- stattree.SetItemText( down_S[3] , cbuffer );
- if (forceUpdate || stattree.IsExpanded(down_S[3]))
- {
- int i = 0;
- // Sources By Status
- cbuffer.Format( _T("%s: %u") , GetResString( IDS_ONQUEUE ) , myStats.a[2] );
- stattree.SetItemText( down_sources[i] , cbuffer );
- i++;
- cbuffer.Format( _T("%s: %u") , GetResString( IDS_QUEUEFULL ) , myStats.a[3] );
- stattree.SetItemText( down_sources[i] , cbuffer );
- i++;
- cbuffer.Format( _T("%s: %u") , GetResString( IDS_NONEEDEDPARTS ) , myStats.a[4] );
- stattree.SetItemText( down_sources[i] , cbuffer );
- i++;
- cbuffer.Format( _T("%s: %u") , GetResString( IDS_ASKING ) , myStats.a[5] );
- stattree.SetItemText( down_sources[i] , cbuffer );
- i++;
- cbuffer.Format( _T("%s: %u") , GetResString( IDS_RECHASHSET ) , myStats.a[6] );
- stattree.SetItemText( down_sources[i] , cbuffer );
- i++;
- cbuffer.Format( _T("%s: %u") , GetResString( IDS_CONNECTING ) , myStats.a[7] );
- stattree.SetItemText( down_sources[i] , cbuffer );
- i++;
- cbuffer.Format( _T("%s: %u") , GetResString(IDS_CONNVIASERVER) , myStats.a[8] );
- stattree.SetItemText( down_sources[i] , cbuffer );
- i++;
- cbuffer.Format( _T("%s: %u") , GetResString(IDS_TOOMANYCONNS) , myStats.a[9] );
- stattree.SetItemText( down_sources[i] , cbuffer );
- i++;
- cbuffer.Format( _T("%s: %u") , GetResString(IDS_NOCONNECTLOW2LOW) , myStats.a[10] );
- stattree.SetItemText( down_sources[i] , cbuffer );
- i++;
- cbuffer.Format( _T("%s: %u") , GetResString(IDS_STATS_PROBLEMATIC) , myStats.a[12] );
- stattree.SetItemText( down_sources[i] , cbuffer );
- i++;
- cbuffer.Format( _T("%s: %u") , GetResString(IDS_BANNED) , myStats.a[13] );
- stattree.SetItemText( down_sources[i] , cbuffer );
- i++;
- cbuffer.Format( _T("%s: %u") , GetResString(IDS_ASKED4ANOTHERFILE) , myStats.a[15] );
- stattree.SetItemText( down_sources[i] , cbuffer );
- i++;
- cbuffer.Format( _T("%s: %u") , GetResString(IDS_UNKNOWN) , myStats.a[11] );
- stattree.SetItemText( down_sources[i] , cbuffer );
- i++;
- // where from? (3)
- cbuffer.Format( _T("%s: %u") , GetResString( IDS_VIAED2KSQ ) , myStats.a[16] );
- stattree.SetItemText( down_sources[i] , cbuffer );
- i++;
- cbuffer.Format( _T("%s: %u") , GetResString( IDS_VIAKAD ) , myStats.a[17] );
- stattree.SetItemText( down_sources[i] , cbuffer );
- i++;
- cbuffer.Format( _T("%s: %u") , GetResString( IDS_VIASE ) , myStats.a[18] );
- stattree.SetItemText( down_sources[i] , cbuffer );
- i++;
- cbuffer.Format( _T("%s: %u") , GetResString( IDS_VIAPASSIVE ) , myStats.a[14] );
- stattree.SetItemText( down_sources[i] , cbuffer );
- i++;
- cbuffer.Format( _T("eD2K: %u (%.1f%%)") , myStats.a[19], myStats.a[0] ? (myStats.a[19] * 100.0 / myStats.a[0]) : 0.0 );
- stattree.SetItemText( down_sources[i] , cbuffer );
- i++;
- cbuffer.Format( _T("Kad: %u (%.1f%%)") , myStats.a[20], myStats.a[0] ? (myStats.a[20] * 100.0 / myStats.a[0]) : 0.0 );
- stattree.SetItemText( down_sources[i] , cbuffer );
- i++;
- cbuffer.Format( _T("eD2K/Kad: %u (%.1f%%)") , myStats.a[21], myStats.a[0] ? (myStats.a[21] * 100.0 / myStats.a[0]) : 0.0 );
- stattree.SetItemText( down_sources[i] , cbuffer );
- i++;
- cbuffer.Format(_T("%s: %s, %s: %s (%.1f%%)"), GetResString(IDS_UDPREASKS), CastItoIShort(theApp.downloadqueue->GetUDPFileReasks()), GetResString(IDS_UFAILED), CastItoIShort(theApp.downloadqueue->GetFailedUDPFileReasks()), theApp.downloadqueue->GetUDPFileReasks() ? (theApp.downloadqueue->GetFailedUDPFileReasks() * 100.0 / theApp.downloadqueue->GetUDPFileReasks()) : 0.0 );
- stattree.SetItemText( down_sources[i] , cbuffer );
- i++;
- cbuffer.Format(_T("%s: %s (%s + %s)"), GetResString(IDS_DEADSOURCES), CastItoIShort(theApp.clientlist->m_globDeadSourceList.GetDeadSourcesCount() + myStats.a[22]), CastItoIShort(theApp.clientlist->m_globDeadSourceList.GetDeadSourcesCount()), CastItoIShort((UINT)myStats.a[22]));
- stattree.SetItemText( down_sources[i] , cbuffer );
- i++;
- }
- // Set Download Sessions
- statGoodSessions = thePrefs.GetDownS_SuccessfulSessions() + myStats.a[1]; // Add Active Downloads
- statBadSessions = thePrefs.GetDownS_FailedSessions();
- cbuffer.Format( _T("%s: %u") , GetResString(IDS_STATS_DLSES) , statGoodSessions + statBadSessions );
- stattree.SetItemText( down_S[4] , cbuffer );
- if (forceUpdate || stattree.IsExpanded(down_S[4]))
- {
- // Set Successful Download Sessions and Average Downloaded Per Session
- percentSessions = 0;
- if (statGoodSessions > 0)
- {
- percentSessions = (double) 100 * statGoodSessions / (statGoodSessions + statBadSessions);
- cbuffer.Format( _T("%s: %s") , GetResString(IDS_STATS_AVGDATADLSES) , CastItoXBytes( theStats.sessionReceivedBytes / statGoodSessions, false, false ) );
- }
- else
- cbuffer.Format( _T("%s: %s") , GetResString(IDS_STATS_AVGDATADLSES) , CastItoXBytes((uint32)0, false, false) );
- stattree.SetItemText( down_ssessions[2] , cbuffer ); // Set Avg DL/Session
- cbuffer.Format( _T("%s: %u (%1.1f%%)") , GetResString(IDS_STATS_SDLSES) , statGoodSessions , percentSessions );
- stattree.SetItemText( down_ssessions[0] , cbuffer ); // Set Succ Sessions
- // Set Failed Download Sessions (Avoid Division)
- if (percentSessions != 0 && statBadSessions > 0)
- percentSessions = 100 - percentSessions; // There were some good sessions and bad ones...
- else if (percentSessions == 0 && statBadSessions > 0)
- percentSessions = 100; // There were bad sessions and no good ones, must be 100%
- else
- percentSessions = 0; // No sessions at all, or no bad ones.
- cbuffer.Format( _T("%s: %u (%1.1f%%)") , GetResString(IDS_STATS_FDLSES) , statBadSessions , percentSessions );
- stattree.SetItemText( down_ssessions[1] , cbuffer );
- // Set Average Download Time
- cbuffer.Format(_T("%s: %s"), GetResString(IDS_STATS_AVGDLTIME), CastSecondsToLngHM(thePrefs.GetDownS_AvgTime()));
- stattree.SetItemText( down_ssessions[3] , cbuffer );
- }
- // Set Gain Due To Compression
- cbuffer.Format(GetResString(IDS_STATS_GAINCOMP) + _T(" (%.1f%%)"), CastItoXBytes(thePrefs.GetSesSavedFromCompression(), false, false), theStats.sessionReceivedBytes!=0 ? (thePrefs.GetSesSavedFromCompression() * 100.0 / theStats.sessionReceivedBytes) : 0.0);
- stattree.SetItemText( down_S[5] , cbuffer );
- // Set Lost Due To Corruption
- cbuffer.Format(GetResString(IDS_STATS_LOSTCORRUPT) + _T(" (%.1f%%)"), CastItoXBytes(thePrefs.GetSesLostFromCorruption(), false, false), theStats.sessionReceivedBytes!=0 ? (thePrefs.GetSesLostFromCorruption() * 100.0 / theStats.sessionReceivedBytes) : 0.0);
- stattree.SetItemText( down_S[6] , cbuffer );
- // Set Parts Saved Due To ICH
- cbuffer.Format(GetResString(IDS_STATS_ICHSAVED), thePrefs.GetSesPartsSavedByICH());
- stattree.SetItemText( down_S[7] , cbuffer );
- // Calculate downline OH totals
- DownOHTotal = theStats.GetDownDataOverheadFileRequest() +
- theStats.GetDownDataOverheadSourceExchange() +
- theStats.GetDownDataOverheadServer() +
- theStats.GetDownDataOverheadKad() +
- theStats.GetDownDataOverheadOther();
- DownOHTotalPackets =
- theStats.GetDownDataOverheadFileRequestPackets() +
- theStats.GetDownDataOverheadSourceExchangePackets() +
- theStats.GetDownDataOverheadServerPackets() +
- theStats.GetDownDataOverheadKadPackets() +
- theStats.GetDownDataOverheadOtherPackets();
- // Downline Overhead
- cbuffer.Format( GetResString( IDS_TOVERHEAD ) , CastItoXBytes( DownOHTotal, false, false ) , CastItoIShort( DownOHTotalPackets ) );
- stattree.SetItemText( hdown_soh , cbuffer );
- if (forceUpdate || stattree.IsExpanded(hdown_soh))
- {
- int i = 0;
- // Set down session file req OH
- cbuffer.Format( GetResString( IDS_FROVERHEAD ) , CastItoXBytes( theStats.GetDownDataOverheadFileRequest(), false, false ) , CastItoIShort( theStats.GetDownDataOverheadFileRequestPackets() ) );
- stattree.SetItemText( down_soh[i] , cbuffer );
- i++;
- // Set down session source exch OH
- cbuffer.Format( GetResString( IDS_SSOVERHEAD ) , CastItoXBytes( theStats.GetDownDataOverheadSourceExchange(), false, false ), CastItoIShort( theStats.GetDownDataOverheadSourceExchangePackets() ) );
- stattree.SetItemText( down_soh[i] , cbuffer );
- i++;
- // Set down session server OH
- cbuffer.Format(GetResString(IDS_SOVERHEAD),
- CastItoXBytes(theStats.GetDownDataOverheadServer(), false, false),
- CastItoIShort(theStats.GetDownDataOverheadServerPackets()));
- stattree.SetItemText( down_soh[i] , cbuffer );
- i++;
- // Set down session Kad OH
- cbuffer.Format(GetResString(IDS_KADOVERHEAD),
- CastItoXBytes(theStats.GetDownDataOverheadKad(), false, false),
- CastItoIShort(theStats.GetDownDataOverheadKadPackets()));
- stattree.SetItemText( down_soh[i] , cbuffer );
- i++;
- }
- }
- // TRANSFER -> DOWNLOADS -> CUMULATIVE SECTION
- if (forceUpdate || stattree.IsExpanded(h_down_total))
- {
- // Downloaded Data
- uint64 ullCumReceived = theStats.sessionReceivedBytes + thePrefs.GetTotalDownloaded();
- cbuffer.Format(GetResString(IDS_STATS_DDATA), CastItoXBytes(ullCumReceived, false, false));
- stattree.SetItemText(down_T[0], cbuffer);
- if (forceUpdate || stattree.IsExpanded(down_T[0]))
- {
- // Downloaded Data By Client
- if (forceUpdate || stattree.IsExpanded(hdown_tcb))
- {
- int i = 0;
- uint64 DownDataTotal = thePrefs.GetDownTotalClientData();
- uint64 DownDataClient = thePrefs.GetCumDownData_EMULE();
- double percentClientTransferred = 0;
- if ( DownDataTotal!=0 && DownDataClient!=0 )
- percentClientTransferred = (double) 100 * DownDataClient / DownDataTotal;
- cbuffer.Format( _T("eMule: %s (%1.1f%%)") , CastItoXBytes( DownDataClient, false, false ) , percentClientTransferred);
- stattree.SetItemText( down_tcb[i] , cbuffer );
- i++;
- DownDataClient = thePrefs.GetCumDownData_EDONKEYHYBRID();
- if ( DownDataTotal!=0 && DownDataClient!=0 )
- percentClientTransferred = (double) 100 * DownDataClient / DownDataTotal;
- else
- percentClientTransferred = 0;
- cbuffer.Format( _T("eD Hybrid: %s (%1.1f%%)") , CastItoXBytes( DownDataClient, false, false ) , percentClientTransferred );
- stattree.SetItemText( down_tcb[i] , cbuffer );
- i++;
- DownDataClient = thePrefs.GetCumDownData_EDONKEY();
- if ( DownDataTotal!=0 && DownDataClient!=0 )
- percentClientTransferred = (double) 100 * DownDataClient / DownDataTotal;
- else
- percentClientTransferred = 0;
- cbuffer.Format( _T("eDonkey: %s (%1.1f%%)") , CastItoXBytes( DownDataClient, false, false ), percentClientTransferred );
- stattree.SetItemText( down_tcb[i] , cbuffer );
- i++;
- DownDataClient = thePrefs.GetCumDownData_AMULE();
- if ( DownDataTotal!=0 && DownDataClient!=0 )
- percentClientTransferred = (double) 100 * DownDataClient / DownDataTotal;
- else
- percentClientTransferred = 0;
- cbuffer.Format( _T("aMule: %s (%1.1f%%)") , CastItoXBytes( DownDataClient, false, false ), percentClientTransferred );
- stattree.SetItemText( down_tcb[i] , cbuffer );
- i++;
- DownDataClient = thePrefs.GetCumDownData_MLDONKEY();
- if ( DownDataTotal!=0 && DownDataClient!=0 )
- percentClientTransferred = (double) 100 * DownDataClient / DownDataTotal;
- else
- percentClientTransferred = 0;
- cbuffer.Format( _T("MLdonkey: %s (%1.1f%%)") , CastItoXBytes( DownDataClient, false, false ), percentClientTransferred );
- stattree.SetItemText( down_tcb[i] , cbuffer );
- i++;
- DownDataClient = thePrefs.GetCumDownData_SHAREAZA();
- if ( DownDataTotal!=0 && DownDataClient!=0 )
- percentClientTransferred = (double) 100 * DownDataClient / DownDataTotal;
- else
- percentClientTransferred = 0;
- cbuffer.Format( _T("Shareaza: %s (%1.1f%%)") , CastItoXBytes( DownDataClient, false, false ), percentClientTransferred );
- stattree.SetItemText( down_tcb[i] , cbuffer );
- i++;
- DownDataClient = thePrefs.GetCumDownData_EMULECOMPAT();
- if ( DownDataTotal!=0 && DownDataClient!=0 )
- percentClientTransferred = (double) 100 * DownDataClient / DownDataTotal;
- else
- percentClientTransferred = 0;
- cbuffer.Format( _T("eM Compat: %s (%1.1f%%)") , CastItoXBytes( DownDataClient, false, false ), percentClientTransferred );
- stattree.SetItemText( down_tcb[i] , cbuffer );
- i++;
- DownDataClient = thePrefs.GetCumDownData_URL();
- if ( DownDataTotal!=0 && DownDataClient!=0 )
- percentClientTransferred = (double) 100 * DownDataClient / DownDataTotal;
- else
- percentClientTransferred = 0;
- cbuffer.Format( _T("URL: %s (%1.1f%%)") , CastItoXBytes( DownDataClient, false, false ), percentClientTransferred );
- stattree.SetItemText( down_tcb[i] , cbuffer );
- i++;
- }
- // Downloaded Data By Port
- if (forceUpdate || stattree.IsExpanded(hdown_tpb))
- {
- int i = 0;
- uint64 PortDataDefault = thePrefs.GetCumDownDataPort_4662();
- uint64 PortDataOther = thePrefs.GetCumDownDataPort_OTHER();
- uint64 PortDataPeerCache = thePrefs.GetCumDownDataPort_PeerCache();
- uint64 PortDataTotal = thePrefs.GetDownTotalPortData();
- double percentPortTransferred = 0;
- if ( PortDataTotal!=0 && PortDataDefault!=0 )
- percentPortTransferred = (double) 100 * PortDataDefault / PortDataTotal;
- cbuffer.Format( _T("%s: %s (%1.1f%%)") , GetResString(IDS_STATS_PRTDEF) , CastItoXBytes( PortDataDefault, false, false ) , percentPortTransferred);
- stattree.SetItemText( down_tpb[i] , cbuffer );
- i++;
- if ( PortDataTotal!=0 && PortDataOther!=0 )
- percentPortTransferred = (double) 100 * PortDataOther / PortDataTotal;
- else
- percentPortTransferred = 0;
- cbuffer.Format( _T("%s: %s (%1.1f%%)") , GetResString(IDS_STATS_PRTOTHER) , CastItoXBytes( PortDataOther, false, false ) , percentPortTransferred);
- stattree.SetItemText( down_tpb[i] , cbuffer );
- i++;
- if ( PortDataTotal!=0 && PortDataPeerCache!=0 )
- percentPortTransferred = (double) 100 * PortDataPeerCache / PortDataTotal;
- else
- percentPortTransferred = 0;
- cbuffer.Format( _T("%s: %s (%1.1f%%)") , thePrefs.GetPeerCacheShow() ? _T("PeerCache") : GetResString(IDS_STATS_PRTOTHER) , CastItoXBytes( PortDataPeerCache, false, false ) , percentPortTransferred);
- stattree.SetItemText( down_tpb[i] , cbuffer );
- i++;
- }
- }
- // Set Cum Completed Downloads
- cbuffer.Format(_T("%s: %u"), GetResString(IDS_STATS_COMPDL), thePrefs.GetDownCompletedFiles() );
- stattree.SetItemText(down_T[1], cbuffer);
- // Set Cum Download Sessions
- statGoodSessions = thePrefs.GetDownC_SuccessfulSessions() + myStats.a[1]; // Need to reset these from the session section. Declared up there.
- statBadSessions = thePrefs.GetDownC_FailedSessions(); // ^^^^^^^^^^^^^^
- cbuffer.Format(_T("%s: %u"), GetResString(IDS_STATS_DLSES), statGoodSessions+statBadSessions );
- stattree.SetItemText(down_T[2], cbuffer);
- if (forceUpdate || stattree.IsExpanded(down_T[2]))
- {
- // Set Cum Successful Download Sessions & Cum Average Download Per Sessions (Save an if-else statement)
- if (statGoodSessions > 0)
- {
- percentSessions = (double) 100 * statGoodSessions / (statGoodSessions + statBadSessions);
- cbuffer.Format( _T("%s: %s") , GetResString(IDS_STATS_AVGDATADLSES), CastItoXBytes(ullCumReceived / statGoodSessions, false, false));
- }
- else
- {
- percentSessions = 0;
- cbuffer.Format( _T("%s: %s") , GetResString(IDS_STATS_AVGDATADLSES) , CastItoXBytes((uint32)0, false, false) );
- }
- stattree.SetItemText( down_tsessions[2] , cbuffer ); // Set Avg DL/Session
- cbuffer.Format( _T("%s: %u (%1.1f%%)"), GetResString(IDS_STATS_SDLSES) , statGoodSessions , percentSessions );
- stattree.SetItemText( down_tsessions[0] , cbuffer ); // Set Successful Sessions
- // Set Cum Failed Download Sessions
- if (percentSessions != 0 && statBadSessions > 0)
- percentSessions = 100 - percentSessions; // There were some good sessions and bad ones...
- else if (percentSessions == 0 && statBadSessions > 0)
- percentSessions = 100; // There were bad sessions and no good ones, must be 100%
- else
- percentSessions = 0; // No sessions at all, or no bad ones.
- cbuffer.Format( _T("%s: %u (%1.1f%%)") , GetResString(IDS_STATS_FDLSES) , statBadSessions , percentSessions);
- stattree.SetItemText( down_tsessions[1] , cbuffer );
- // Set Cumulative Average Download Time
- uint32 avgDownTime = thePrefs.GetDownS_AvgTime();
- if (thePrefs.GetDownC_AvgTime()<=0)
- thePrefs.SetDownCAvgTime(avgDownTime);
- avgDownTime = (uint32) (avgDownTime+thePrefs.GetDownC_AvgTime())/2;
- cbuffer.Format(_T("%s: %s"), GetResString(IDS_STATS_AVGDLTIME), CastSecondsToLngHM(avgDownTime));
- stattree.SetItemText(down_tsessions[3], cbuffer);
- }
- // Set Cumulative Gained Due To Compression
- uint64 ullCumCompressed = thePrefs.GetSesSavedFromCompression() + thePrefs.GetCumSavedFromCompression();
- cbuffer.Format(GetResString(IDS_STATS_GAINCOMP) + _T(" (%.1f%%)"), CastItoXBytes(ullCumCompressed, false, false), ullCumReceived!=0 ? (ullCumCompressed * 100.0 / ullCumReceived) : 0.0);
- stattree.SetItemText( down_T[3] , cbuffer );
- // Set Cumulative Lost Due To Corruption
- uint64 ullCumCorrupted = thePrefs.GetSesLostFromCorruption() + thePrefs.GetCumLostFromCorruption();
- cbuffer.Format(GetResString(IDS_STATS_LOSTCORRUPT) + _T(" (%.1f%%)"), CastItoXBytes(ullCumCorrupted, false, false…
Large files files are truncated, but you can click here to view the full file