diff options
-rw-r--r-- | plugins/TrafficCounter/src/TrafficCounter.cpp | 263 | ||||
-rw-r--r-- | plugins/TrafficCounter/src/misc.cpp | 14 | ||||
-rw-r--r-- | plugins/TrafficCounter/src/statistics.cpp | 88 | ||||
-rw-r--r-- | plugins/TrafficCounter/src/statistics.h | 6 | ||||
-rw-r--r-- | plugins/TrafficCounter/src/stdafx.h | 17 | ||||
-rw-r--r-- | plugins/TrafficCounter/src/version.h | 14 |
6 files changed, 179 insertions, 223 deletions
diff --git a/plugins/TrafficCounter/src/TrafficCounter.cpp b/plugins/TrafficCounter/src/TrafficCounter.cpp index 7a43bc55fc..33e6f9c779 100644 --- a/plugins/TrafficCounter/src/TrafficCounter.cpp +++ b/plugins/TrafficCounter/src/TrafficCounter.cpp @@ -34,7 +34,7 @@ CLIST_INTERFACE *pcli; int hLangpack = 0; // Поддержка плагинозависимого перевода.
BOOL bPopupExists = FALSE, bVariablesExists = FALSE, bTooltipExists = FALSE;
-static wchar_t tszFormat[] =
+static wchar_t wszDefaultFormat[] =
_A2W("{I4}\x0D\x0A\x0A\
{R65}?tc_GetTraffic(%extratext%,now,sent,d)\x0D\x0A\x0A\
{R115}?tc_GetTraffic(%extratext%,now,received,d)\x0D\x0A\x0A\
@@ -194,8 +194,6 @@ int ModuleLoad(WPARAM, LPARAM) int TrafficCounterModulesLoaded(WPARAM, LPARAM)
{
- DBVARIANT dbv;
-
CreateProtocolList();
ModuleLoad(0, 0);
@@ -214,28 +212,18 @@ int TrafficCounterModulesLoaded(WPARAM, LPARAM) Traffic_PopupTimeoutValue = db_get_b(NULL, TRAFFIC_SETTINGS_GROUP, SETTINGS_POPUP_TIMEOUT_VALUE, 5);
// Формат счётчика для каждого активного протокола
- if (db_get_ws(NULL, TRAFFIC_SETTINGS_GROUP, SETTINGS_COUNTER_FORMAT, &dbv) == 0) {
- if (mir_wstrlen(dbv.ptszVal) > 0)
- mir_wstrncpy(Traffic_CounterFormat, dbv.ptszVal, _countof(Traffic_CounterFormat));
- //
- db_free(&dbv);
- }
- else //defaults here
- {
- mir_wstrcpy(Traffic_CounterFormat, tszFormat);
- }
+ ptrW wszFormat(db_get_wsa(NULL, MODULENAME, SETTINGS_COUNTER_FORMAT));
+ if (mir_wstrlen(wszFormat) > 0)
+ mir_wstrncpy(Traffic_CounterFormat, wszFormat, _countof(Traffic_CounterFormat));
+ else
+ mir_wstrcpy(Traffic_CounterFormat, wszDefaultFormat);
// Формат всплывающих подсказок
- if (db_get_ws(NULL, TRAFFIC_SETTINGS_GROUP, SETTINGS_TOOLTIP_FORMAT, &dbv) == 0) {
- if (mir_wstrlen(dbv.ptszVal) > 0)
- mir_wstrncpy(Traffic_TooltipFormat, dbv.ptszVal, _countof(Traffic_TooltipFormat));
- //
- db_free(&dbv);
- }
- else //defaults here
- {
+ wszFormat = db_get_wsa(NULL, MODULENAME, SETTINGS_TOOLTIP_FORMAT);
+ if (mir_wstrlen(wszFormat) > 0)
+ mir_wstrncpy(Traffic_TooltipFormat, wszFormat, _countof(Traffic_TooltipFormat));
+ else
mir_wstrcpy(Traffic_TooltipFormat, L"Traffic Counter");
- }
Traffic_AdditionSpace = db_get_b(NULL, TRAFFIC_SETTINGS_GROUP, SETTINGS_ADDITION_SPACE, 0);
@@ -753,9 +741,6 @@ static POINT ptMouse = { 0 }; LRESULT CALLBACK TrafficCounterWndProc_MW(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
- POINT p;
- int i;
- //
switch (msg) {
case (WM_USER + 697) :
if (lParam == 666)
@@ -781,16 +766,20 @@ LRESULT CALLBACK TrafficCounterWndProc_MW(HWND hwnd, UINT msg, WPARAM wParam, LP case WM_LBUTTONDOWN:
if (db_get_b(NULL, "CLUI", "ClientAreaDrag", SETTING_CLIENTDRAG_DEFAULT)) {
+ POINT p;
ClientToScreen(GetParent(hwnd), &p);
return SendMessage(GetParent(hwnd), WM_SYSCOMMAND, SC_MOVE | HTCAPTION, MAKELPARAM(p.x, p.y));
}
break;
case WM_RBUTTONDOWN:
- p.x = GET_X_LPARAM(lParam);
- p.y = GET_Y_LPARAM(lParam);
- ClientToScreen(hwnd, &p);
- TrackPopupMenu(TrafficPopupMenu, TPM_LEFTALIGN | TPM_LEFTBUTTON | TPM_VERTICAL, p.x, p.y, 0, hwnd, nullptr);
+ {
+ POINT p;
+ p.x = GET_X_LPARAM(lParam);
+ p.y = GET_Y_LPARAM(lParam);
+ ClientToScreen(hwnd, &p);
+ TrackPopupMenu(TrafficPopupMenu, TPM_LEFTALIGN | TPM_LEFTBUTTON | TPM_VERTICAL, p.x, p.y, 0, hwnd, nullptr);
+ }
break;
case WM_COMMAND:
@@ -800,12 +789,11 @@ LRESULT CALLBACK TrafficCounterWndProc_MW(HWND hwnd, UINT msg, WPARAM wParam, LP break;
case POPUPMENU_CLEAR_NOW:
- for (i = 0; i < NumberOfAccounts; i++) {
- ProtoList[i].StartIncoming =
- ProtoList[i].AllStatistics[ProtoList[i].NumberOfRecords - 1].Incoming;
- ProtoList[i].StartOutgoing =
- ProtoList[i].AllStatistics[ProtoList[i].NumberOfRecords - 1].Outgoing;
- ProtoList[i].Session.TimeAtStart = GetTickCount();
+ for (int i = 0; i < NumberOfAccounts; i++) {
+ auto &p = ProtoList[i];
+ p.StartIncoming = p.AllStatistics[p.NumberOfRecords - 1].Incoming;
+ p.StartOutgoing = p.AllStatistics[p.NumberOfRecords - 1].Outgoing;
+ p.Session.TimeAtStart = GetTickCount();
}
OverallInfo.CurrentRecvTraffic = OverallInfo.CurrentSentTraffic = 0;
}
@@ -851,46 +839,45 @@ LRESULT CALLBACK TrafficCounterWndProc_MW(HWND hwnd, UINT msg, WPARAM wParam, LP CurrentTimeMs = GetTickCount();
- for (i = 0; i < NumberOfAccounts; i++) {
- if (ProtoList[i].State) {
- ProtoList[i].AllStatistics[ProtoList[i].NumberOfRecords - 1].Time =
- (CurrentTimeMs - ProtoList[i].Total.TimeAtStart) / 1000;
- ProtoList[i].Session.Timer =
- (CurrentTimeMs - ProtoList[i].Session.TimeAtStart) / 1000;
+ for (int i = 0; i < NumberOfAccounts; i++) {
+ auto &p = ProtoList[i];
+ if (p.State) {
+ p.AllStatistics[p.NumberOfRecords - 1].Time = (CurrentTimeMs - p.Total.TimeAtStart) / 1000;
+ p.Session.Timer = (CurrentTimeMs - p.Session.TimeAtStart) / 1000;
}
- Stat_CheckStatistics(i);
-
- { // Здесь на основании статистики вычисляются значения всех трафиков и времени.
- DWORD Sum1, Sum2;
- unsigned long int j;
-
- // Значения для текущей сессии.
- for (Sum1 = Sum2 = 0, j = ProtoList[i].StartIndex; j < ProtoList[i].NumberOfRecords; j++) {
- Sum1 += ProtoList[i].AllStatistics[j].Incoming;
- Sum2 += ProtoList[i].AllStatistics[j].Outgoing;
- }
- ProtoList[i].CurrentRecvTraffic = Sum1 - ProtoList[i].StartIncoming;
- ProtoList[i].CurrentSentTraffic = Sum2 - ProtoList[i].StartOutgoing;
- OverallInfo.CurrentRecvTraffic += ProtoList[i].CurrentRecvTraffic;
- OverallInfo.CurrentSentTraffic += ProtoList[i].CurrentSentTraffic;
- // Значения для выбранного периода.
- ProtoList[i].TotalRecvTraffic =
- Stat_GetItemValue(1 << i,
- unOptions.PeriodForShow + 1,
- Stat_GetRecordsNumber(i, unOptions.PeriodForShow + 1) - 1, 1);
- ProtoList[i].TotalSentTraffic =
- Stat_GetItemValue(1 << i,
- unOptions.PeriodForShow + 1,
- Stat_GetRecordsNumber(i, unOptions.PeriodForShow + 1) - 1, 2);
- ProtoList[i].Total.Timer =
- Stat_GetItemValue(1 << i,
- unOptions.PeriodForShow + 1,
- Stat_GetRecordsNumber(i, unOptions.PeriodForShow + 1) - 1, 4);
- OverallInfo.TotalRecvTraffic += ProtoList[i].TotalRecvTraffic;
- OverallInfo.TotalSentTraffic += ProtoList[i].TotalSentTraffic;
+ Stat_CheckStatistics(p);
+
+ // Здесь на основании статистики вычисляются значения всех трафиков и времени.
+ DWORD Sum1 = 0, Sum2 = 0;
+
+ // Значения для текущей сессии.
+ for (int j = p.StartIndex; j < p.NumberOfRecords; j++) {
+ Sum1 += p.AllStatistics[j].Incoming;
+ Sum2 += p.AllStatistics[j].Outgoing;
}
+
+ p.CurrentRecvTraffic = Sum1 - p.StartIncoming;
+ p.CurrentSentTraffic = Sum2 - p.StartOutgoing;
+ OverallInfo.CurrentRecvTraffic += p.CurrentRecvTraffic;
+ OverallInfo.CurrentSentTraffic += p.CurrentSentTraffic;
+ // Значения для выбранного периода.
+ p.TotalRecvTraffic =
+ Stat_GetItemValue(1 << i,
+ unOptions.PeriodForShow + 1,
+ Stat_GetRecordsNumber(i, unOptions.PeriodForShow + 1) - 1, 1);
+ p.TotalSentTraffic =
+ Stat_GetItemValue(1 << i,
+ unOptions.PeriodForShow + 1,
+ Stat_GetRecordsNumber(i, unOptions.PeriodForShow + 1) - 1, 2);
+ p.Total.Timer =
+ Stat_GetItemValue(1 << i,
+ unOptions.PeriodForShow + 1,
+ Stat_GetRecordsNumber(i, unOptions.PeriodForShow + 1) - 1, 4);
+ OverallInfo.TotalRecvTraffic += p.TotalRecvTraffic;
+ OverallInfo.TotalSentTraffic += p.TotalSentTraffic;
}
+
// Не пора ли уведомить?
if (unOptions.NotifyBySize && Traffic_Notify_size_value) {
if (!((OverallInfo.CurrentRecvTraffic >> 10) % Traffic_Notify_size_value)
@@ -906,33 +893,15 @@ LRESULT CALLBACK TrafficCounterWndProc_MW(HWND hwnd, UINT msg, WPARAM wParam, LP GetLocalTime(&stNow);
// Не пора ли сбросить общий счётчик?
- if ((unOptions.PeriodForShow == 0
- && stNow.wHour == 0
- && stNow.wMinute == 0
- && stNow.wSecond == 0)
- || (unOptions.PeriodForShow == 1
- && DayOfWeek(stNow.wDay, stNow.wMonth, stNow.wYear) == 1
- && stNow.wHour == 0
- && stNow.wMinute == 0
- && stNow.wSecond == 0)
- || (unOptions.PeriodForShow == 2
- && stNow.wDay == 1
- && stNow.wHour == 0
- && stNow.wMinute == 0
- && stNow.wSecond == 0)
- || (unOptions.PeriodForShow == 3
- && stNow.wMonth == 1
- && stNow.wDay == 1
- && stNow.wHour == 0
- && stNow.wMinute == 0
- && stNow.wSecond == 0))
+ if ((unOptions.PeriodForShow == 0 && stNow.wHour == 0 && stNow.wMinute == 0 && stNow.wSecond == 0)
+ || (unOptions.PeriodForShow == 1 && DayOfWeek(stNow.wDay, stNow.wMonth, stNow.wYear) == 1 && stNow.wHour == 0 && stNow.wMinute == 0 && stNow.wSecond == 0)
+ || (unOptions.PeriodForShow == 2 && stNow.wDay == 1 && stNow.wHour == 0 && stNow.wMinute == 0 && stNow.wSecond == 0)
+ || (unOptions.PeriodForShow == 3 && stNow.wMonth == 1 && stNow.wDay == 1 && stNow.wHour == 0 && stNow.wMinute == 0 && stNow.wSecond == 0))
OverallInfo.Total.TimeAtStart = CurrentTimeMs;
if (online_count > 0) {
- OverallInfo.Session.Timer =
- (CurrentTimeMs - OverallInfo.Session.TimeAtStart) / 1000;
- OverallInfo.Total.Timer =
- (CurrentTimeMs - OverallInfo.Total.TimeAtStart) / 1000;
+ OverallInfo.Session.Timer = (CurrentTimeMs - OverallInfo.Session.TimeAtStart) / 1000;
+ OverallInfo.Total.Timer = (CurrentTimeMs - OverallInfo.Total.TimeAtStart) / 1000;
}
CallService(MS_CLIST_FRAMES_UPDATEFRAME, (WPARAM)Traffic_FrameID, FU_FMREDRAW);
@@ -940,40 +909,35 @@ LRESULT CALLBACK TrafficCounterWndProc_MW(HWND hwnd, UINT msg, WPARAM wParam, LP break;
case TIMER_TOOLTIP:
- {
- wchar_t *TooltipText;
- CLCINFOTIP ti = { 0 };
- RECT rt;
+ GetCursorPos(&TooltipPosition);
+ if (!TooltipShowing && unOptions.ShowTooltip) {
+ KillTimer(TrafficHwnd, TIMER_TOOLTIP);
+ ScreenToClient(TrafficHwnd, &TooltipPosition);
- GetCursorPos(&TooltipPosition);
- if (!TooltipShowing && unOptions.ShowTooltip) {
- KillTimer(TrafficHwnd, TIMER_TOOLTIP);
- ScreenToClient(TrafficHwnd, &TooltipPosition);
- GetClientRect(TrafficHwnd, &rt);
- if (PtInRect(&rt, TooltipPosition)) {
- GetCursorPos(&ptMouse);
- ti.rcItem.left = TooltipPosition.x - 10;
- ti.rcItem.right = TooltipPosition.x + 10;
- ti.rcItem.top = TooltipPosition.y - 10;
- ti.rcItem.bottom = TooltipPosition.y + 10;
- ti.cbSize = sizeof(ti);
- TooltipText = variables_parsedup(Traffic_TooltipFormat, nullptr, NULL);
-
- CallService(MS_TIPPER_SHOWTIPW, (WPARAM)TooltipText, (LPARAM)&ti);
-
- TooltipShowing = TRUE;
- mir_free(TooltipText);
- }
+ RECT rt;
+ GetClientRect(TrafficHwnd, &rt);
+ if (PtInRect(&rt, TooltipPosition)) {
+ GetCursorPos(&ptMouse);
+
+ CLCINFOTIP ti = { 0 };
+ ti.rcItem.left = TooltipPosition.x - 10;
+ ti.rcItem.right = TooltipPosition.x + 10;
+ ti.rcItem.top = TooltipPosition.y - 10;
+ ti.rcItem.bottom = TooltipPosition.y + 10;
+ ti.cbSize = sizeof(ti);
+
+ wchar_t *TooltipText = variables_parsedup(Traffic_TooltipFormat, nullptr, NULL);
+ CallService(MS_TIPPER_SHOWTIPW, (WPARAM)TooltipText, (LPARAM)&ti);
+ mir_free(TooltipText);
+
+ TooltipShowing = TRUE;
}
}
break;
}
break;
-
- default:
- return DefWindowProc(hwnd, msg, wParam, lParam);
}
- //
+
return DefWindowProc(hwnd, msg, wParam, lParam);
}
@@ -1089,30 +1053,25 @@ void NotifyOnRecv(void) void CreateProtocolList(void)
{
- int i;
- PROTOACCOUNT **acc;
- //
- Proto_EnumAccounts(&NumberOfAccounts, &acc);
- //
- ProtoList = (PROTOLIST*)mir_alloc(sizeof(PROTOLIST)*(NumberOfAccounts));
- //
- for (i = 0; i < NumberOfAccounts; i++) {
- ProtoList[i].name = mir_strdup(acc[i]->szModuleName);
- ProtoList[i].tszAccountName = mir_wstrdup(acc[i]->tszAccountName);
-
- ProtoList[i].Flags = db_get_b(NULL, ProtoList[i].name, SETTINGS_PROTO_FLAGS, 3);
- ProtoList[i].CurrentRecvTraffic =
- ProtoList[i].CurrentSentTraffic =
- ProtoList[i].Session.Timer = 0;
-
- ProtoList[i].Enabled = acc[i]->bIsEnabled;
- ProtoList[i].State = 0;
-
- Stat_ReadFile(i);
- ProtoList[i].StartIndex = ProtoList[i].NumberOfRecords - 1;
- ProtoList[i].StartIncoming = ProtoList[i].AllStatistics[ProtoList[i].StartIndex].Incoming;
- ProtoList[i].StartOutgoing = ProtoList[i].AllStatistics[ProtoList[i].StartIndex].Outgoing;
- } // цикл по аккаунтам
+ auto &accs = Accounts();
+
+ NumberOfAccounts = accs.getCount();
+ ProtoList = (PROTOLIST*)mir_calloc(sizeof(PROTOLIST)*NumberOfAccounts);
+
+ int i = 0;
+ for (auto &pa : accs) {
+ auto &p = ProtoList[i++];
+ p.name = mir_strdup(pa->szModuleName);
+ p.tszAccountName = mir_wstrdup(pa->tszAccountName);
+ p.Flags = db_get_b(NULL, p.name, SETTINGS_PROTO_FLAGS, 3);
+ p.Enabled = pa->IsEnabled();
+
+ Stat_ReadFile(p);
+ p.StartIndex = p.NumberOfRecords - 1;
+ p.StartIncoming = p.AllStatistics[p.StartIndex].Incoming;
+ p.StartOutgoing = p.AllStatistics[p.StartIndex].Outgoing;
+ }
+
// Начальные значения для суммарной информации.
OverallInfo.Session.Timer = OverallInfo.Total.Timer = 0;
}
@@ -1120,11 +1079,12 @@ void CreateProtocolList(void) void DestroyProtocolList(void)
{
for (int i = 0; i < NumberOfAccounts; i++) {
- Stat_CheckStatistics(i);
- CloseHandle(ProtoList[i].hFile);
- mir_free(ProtoList[i].tszAccountName);
- mir_free(ProtoList[i].name);
- mir_free(ProtoList[i].AllStatistics);
+ auto &p = ProtoList[i];
+ Stat_CheckStatistics(p);
+ CloseHandle(p.hFile);
+ mir_free(p.tszAccountName);
+ mir_free(p.name);
+ mir_free(p.AllStatistics);
}
mir_free(ProtoList);
@@ -1198,6 +1158,7 @@ unsigned short int TrafficWindowHeight(void) }
// Функция вносит изменения в ProtoList при коммутации аккаунтов
+
int OnAccountsListChange(WPARAM wParam, LPARAM lParam)
{
PROTOACCOUNT *acc = (PROTOACCOUNT*)lParam;
diff --git a/plugins/TrafficCounter/src/misc.cpp b/plugins/TrafficCounter/src/misc.cpp index 3e8b231e07..2ea49fbf10 100644 --- a/plugins/TrafficCounter/src/misc.cpp +++ b/plugins/TrafficCounter/src/misc.cpp @@ -177,19 +177,15 @@ Size - размер буфера. */ size_t GetDurationFormatM(DWORD Duration, wchar_t *Format, wchar_t *Buffer, size_t Size)
{
size_t Length;
- DWORD q;
- WORD TokenIndex, FormatIndex;
- wchar_t Token[256], // Аккумулятор.
- *Res; // Промежуточный результат.
+ wchar_t Token[256]; // Аккумулятор.
- Res = (wchar_t*)malloc(sizeof(wchar_t)); // Выделяем чуть-чуть памяти под результат, но это только начало.
- //SecureZeroMemory(Res, sizeof(wchar_t));
+ wchar_t *Res = (wchar_t*)malloc(sizeof(wchar_t)); // Выделяем чуть-чуть памяти под результат, но это только начало.
Res[0] = 0;
- for (FormatIndex = 0; Format[FormatIndex];) {
+ for (int FormatIndex = 0; Format[FormatIndex];) {
// Ищем токены. Считается, что токен - только буквы.
- TokenIndex = 0;
- q = iswalpha(Format[FormatIndex]);
+ int TokenIndex = 0;
+ int q = iswalpha(Format[FormatIndex]);
// Копируем символы в аккумулятор до смены флага.
do {
Token[TokenIndex++] = Format[FormatIndex++];
diff --git a/plugins/TrafficCounter/src/statistics.cpp b/plugins/TrafficCounter/src/statistics.cpp index 5451e7158e..a0872b769e 100644 --- a/plugins/TrafficCounter/src/statistics.cpp +++ b/plugins/TrafficCounter/src/statistics.cpp @@ -29,8 +29,6 @@ HWND hListAccs; INT_PTR CALLBACK DlgProcOptStatistics(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{
- WORD i;
-
switch (msg) {
case WM_INITDIALOG:
TranslateDialogDefault(hwndDlg);
@@ -41,12 +39,12 @@ INT_PTR CALLBACK DlgProcOptStatistics(HWND hwndDlg, UINT msg, WPARAM wParam, LPA 2, 20, 246, 112,
hwndDlg, nullptr, nullptr, nullptr);
SendMessage(hListAccs, WM_SETFONT, (WPARAM)(HFONT)GetStockObject(DEFAULT_GUI_FONT), 0);
- for (i = 0; i < NumberOfAccounts; i++) {
+ for (int i = 0; i < NumberOfAccounts; i++) {
// Готовим список аккаунтов
if (ProtoList[i].tszAccountName)
SendMessage(hListAccs, LB_ADDSTRING, 0, (LPARAM)ProtoList[i].tszAccountName);
}
- for (i = NumberOfAccounts; i--;)
+ for (int i = NumberOfAccounts; i--;)
SendMessage(hListAccs, LB_SETSEL, (WPARAM)0x01 & (Stat_SelAcc >> i), (LPARAM)i);
// Готовим список единиц измерения
SendDlgItemMessage(hwndDlg, IDC_COMBO_UNITS, CB_INSERTSTRING, -1, (LPARAM)TranslateT("Bytes"));
@@ -112,7 +110,8 @@ INT_PTR CALLBACK DlgProcOptStatistics(HWND hwndDlg, UINT msg, WPARAM wParam, LPA LB_GETSELITEMS,
SelItemsCount,
(LPARAM)SelItems);
- for (Stat_SelAcc = i = 0; i < SelItemsCount; i++)
+ Stat_SelAcc = 0;
+ for (int i = 0; i < SelItemsCount; i++)
Stat_SelAcc |= 1 << SelItems[i];
Stat_Show(hwndDlg);
}
@@ -133,7 +132,7 @@ INT_PTR CALLBACK DlgProcOptStatistics(HWND hwndDlg, UINT msg, WPARAM wParam, LPA MB_OKCANCEL | MB_ICONWARNING))
break;
GetLocalTime(&stNow);
- for (i = NumberOfAccounts; i--;)
+ for (int i = NumberOfAccounts; i--;)
if (0x01 & (Stat_SelAcc >> i)) {
SetFilePointer(ProtoList[i].hFile, sizeof(HOURLYSTATS), nullptr, FILE_BEGIN);
SetEndOfFile(ProtoList[i].hFile); // Усекаем файл до одной записи.
@@ -149,7 +148,7 @@ INT_PTR CALLBACK DlgProcOptStatistics(HWND hwndDlg, UINT msg, WPARAM wParam, LPA ProtoList[i].StartOutgoing = 0;
ProtoList[i].AllStatistics[0].Time = 0;
ProtoList[i].Total.TimeAtStart = GetTickCount();
- Stat_CheckStatistics(i);
+ Stat_CheckStatistics(ProtoList[i]);
}
Stat_Show(hwndDlg);
}
@@ -242,7 +241,7 @@ INT_PTR CALLBACK DlgProcOptStatistics(HWND hwndDlg, UINT msg, WPARAM wParam, LPA {
DWORD j = -1, dwTotalIncoming = 0, dwTotalOutgoing = 0;
- i = SendDlgItemMessage(hwndDlg, IDC_LIST_DATA, LVM_GETSELECTEDCOUNT, 0, 0);
+ int i = SendDlgItemMessage(hwndDlg, IDC_LIST_DATA, LVM_GETSELECTEDCOUNT, 0, 0);
for (; i--;) {
j = SendDlgItemMessage(hwndDlg, IDC_LIST_DATA, LVM_GETNEXTITEM, j, LVNI_SELECTED);
dwTotalIncoming += Stat_GetItemValue(Stat_SelAcc, unOptions.Stat_Tab, j, 1);
@@ -293,7 +292,7 @@ INT_PTR CALLBACK DlgProcOptStatistics(HWND hwndDlg, UINT msg, WPARAM wParam, LPA /*
Функция читает статистику из файла для аккаунта с номером n.
*/
-void Stat_ReadFile(BYTE n)
+void Stat_ReadFile(PROTOLIST &p)
{
LARGE_INTEGER Size;
DWORD BytesRead;
@@ -302,18 +301,18 @@ void Stat_ReadFile(BYTE n) pszPath = Utils_ReplaceVarsW(L"%miranda_userdata%\\statistics");
CreateDirectoryTreeW(pszPath);
- mir_snwprintf(FileName, L"%s\\%S.stat", pszPath, ProtoList[n].name);
+ mir_snwprintf(FileName, L"%s\\%S.stat", pszPath, p.name);
mir_free(pszPath);
GetLocalTime(&stNow);
- ProtoList[n].hFile = CreateFile(FileName, GENERIC_READ | GENERIC_WRITE,
+ p.hFile = CreateFile(FileName, GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ, nullptr, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, nullptr);
- GetFileSizeEx(ProtoList[n].hFile, &Size);
+ GetFileSizeEx(p.hFile, &Size);
if (Size.QuadPart != 0) // Если файл со статистикой существует и имеет ненулевой размер...
{
// ...то читаем статистику из файла
- ProtoList[n].NumberOfRecords = DWORD(Size.QuadPart / sizeof(HOURLYSTATS));
- ProtoList[n].AllStatistics = (HOURLYSTATS*)mir_alloc(sizeof(HOURLYSTATS)*ProtoList[n].NumberOfRecords);
- ReadFile(ProtoList[n].hFile, &ProtoList[n].AllStatistics[0], sizeof(HOURLYSTATS)*ProtoList[n].NumberOfRecords, &BytesRead, nullptr);
+ p.NumberOfRecords = DWORD(Size.QuadPart / sizeof(HOURLYSTATS));
+ p.AllStatistics = (HOURLYSTATS*)mir_alloc(sizeof(HOURLYSTATS)*p.NumberOfRecords);
+ ReadFile(p.hFile, &p.AllStatistics[0], sizeof(HOURLYSTATS)*p.NumberOfRecords, &BytesRead, nullptr);
if (!BytesRead) {
MessageBox(TrafficHwnd, TranslateT("Couldn't read statistics file"), TranslateT("Traffic Counter"), MB_OK);
return;
@@ -321,17 +320,15 @@ void Stat_ReadFile(BYTE n) }
else {
// Необходимо создать новый файл.
- ProtoList[n].NumberOfRecords = 1;
- ProtoList[n].AllStatistics = (HOURLYSTATS*)mir_alloc(sizeof(HOURLYSTATS));
- ProtoList[n].AllStatistics[0].Hour = stNow.wHour;
- ProtoList[n].AllStatistics[0].Day = stNow.wDay;
- ProtoList[n].AllStatistics[0].Month = stNow.wMonth;
- ProtoList[n].AllStatistics[0].Year = stNow.wYear;
- ProtoList[n].AllStatistics[0].Incoming =
- ProtoList[n].AllStatistics[0].Outgoing =
- ProtoList[n].AllStatistics[0].Time = 0;
+ p.NumberOfRecords = 1;
+ p.AllStatistics = (HOURLYSTATS*)mir_alloc(sizeof(HOURLYSTATS));
+ p.AllStatistics[0].Hour = stNow.wHour;
+ p.AllStatistics[0].Day = stNow.wDay;
+ p.AllStatistics[0].Month = stNow.wMonth;
+ p.AllStatistics[0].Year = stNow.wYear;
+ p.AllStatistics[0].Incoming = p.AllStatistics[0].Outgoing = p.AllStatistics[0].Time = 0;
}
- Stat_CheckStatistics(n);
+ Stat_CheckStatistics(p);
}
/* Функция готовит вывод в ListView статистики.
@@ -367,25 +364,25 @@ void Stat_UpdateTotalTraffic(HWND hwndDialog, DWORD Incoming, DWORD Outgoing) количество записей уменьшается на соответствующее количество часов.
Если текущее время больше, в статистику включается необходимое количество пустых записей.
*/
-void Stat_CheckStatistics(BYTE n)
+void Stat_CheckStatistics(PROTOLIST &p)
{
SYSTEMTIME stNow, stLast = { 0 };
HOURLYSTATS htTmp = { 0 };
signed short int d;//, i;
DWORD q;
- stLast.wHour = ProtoList[n].AllStatistics[ProtoList[n].NumberOfRecords - 1].Hour;
- stLast.wDay = ProtoList[n].AllStatistics[ProtoList[n].NumberOfRecords - 1].Day;
- stLast.wMonth = ProtoList[n].AllStatistics[ProtoList[n].NumberOfRecords - 1].Month;
- stLast.wYear = ProtoList[n].AllStatistics[ProtoList[n].NumberOfRecords - 1].Year;
+ stLast.wHour = p.AllStatistics[p.NumberOfRecords - 1].Hour;
+ stLast.wDay = p.AllStatistics[p.NumberOfRecords - 1].Day;
+ stLast.wMonth = p.AllStatistics[p.NumberOfRecords - 1].Month;
+ stLast.wYear = p.AllStatistics[p.NumberOfRecords - 1].Year;
GetLocalTime(&stNow);
d = TimeCompare(stNow, stLast);
// Если текущее время совпадает со временем последней записи...
if (!d) {
// ...сохраняем запись в файл и уходим.
- SetFilePointer(ProtoList[n].hFile, -LONG(sizeof(HOURLYSTATS)), nullptr, FILE_END);
- WriteFile(ProtoList[n].hFile, &ProtoList[n].AllStatistics[ProtoList[n].NumberOfRecords - 1], sizeof(HOURLYSTATS), &q, nullptr);
+ SetFilePointer(p.hFile, -LONG(sizeof(HOURLYSTATS)), nullptr, FILE_END);
+ WriteFile(p.hFile, &p.AllStatistics[p.NumberOfRecords - 1], sizeof(HOURLYSTATS), &q, nullptr);
return;
}
@@ -405,25 +402,25 @@ void Stat_CheckStatistics(BYTE n) }
}
- ProtoList[n].NumberOfRecords--;
+ p.NumberOfRecords--;
} while (TimeCompare(stNow, stLast));
return;
}
if (d > 0) {
// Сохраняем.
- SetFilePointer(ProtoList[n].hFile, -LONG(sizeof(HOURLYSTATS)), nullptr, FILE_END);
- WriteFile(ProtoList[n].hFile, &ProtoList[n].AllStatistics[ProtoList[n].NumberOfRecords - 1], sizeof(HOURLYSTATS), &q, nullptr);
+ SetFilePointer(p.hFile, -LONG(sizeof(HOURLYSTATS)), nullptr, FILE_END);
+ WriteFile(p.hFile, &p.AllStatistics[p.NumberOfRecords - 1], sizeof(HOURLYSTATS), &q, nullptr);
// Последняя запись из статистики понадобится для вычисления новых записей, поэтому копируем её (кроме трафика и времени).
- memcpy(&htTmp, &ProtoList[n].AllStatistics[ProtoList[n].NumberOfRecords - 1],
+ memcpy(&htTmp, &p.AllStatistics[p.NumberOfRecords - 1],
sizeof(HOURLYSTATS) - 2 * sizeof(DWORD) - sizeof(WORD));
// Счётчик времени каждый час должен начинать считать с нуля.
- ProtoList[n].Total.TimeAtStart = GetTickCount() - stNow.wMilliseconds;
+ p.Total.TimeAtStart = GetTickCount() - stNow.wMilliseconds;
do {
- ProtoList[n].AllStatistics =
- (HOURLYSTATS*)mir_realloc(ProtoList[n].AllStatistics, sizeof(HOURLYSTATS) * ++ProtoList[n].NumberOfRecords);
+ p.AllStatistics =
+ (HOURLYSTATS*)mir_realloc(p.AllStatistics, sizeof(HOURLYSTATS) * ++p.NumberOfRecords);
htTmp.Hour++;
if (htTmp.Hour > 23) {
@@ -442,8 +439,8 @@ void Stat_CheckStatistics(BYTE n) stLast.wYear = htTmp.Year;
// Добавляем записи одновременно в ОЗУ и в файл.
- WriteFile(ProtoList[n].hFile, &htTmp, sizeof(HOURLYSTATS), &q, nullptr);
- memcpy(&ProtoList[n].AllStatistics[ProtoList[n].NumberOfRecords - 1], &htTmp, sizeof(HOURLYSTATS));
+ WriteFile(p.hFile, &htTmp, sizeof(HOURLYSTATS), &q, nullptr);
+ memcpy(&p.AllStatistics[p.NumberOfRecords - 1], &htTmp, sizeof(HOURLYSTATS));
} while (TimeCompare(stNow, stLast));
}
@@ -455,9 +452,9 @@ void Stat_CheckStatistics(BYTE n) ItemNumber - номер строки в ListView (номер периода).
stReq - дата, соответствующая вычисленному индексу.
*/
-DWORD Stat_GetStartIndex(BYTE AccNum, BYTE Interval, DWORD ItemNumber, SYSTEMTIME *stReq)
+DWORD Stat_GetStartIndex(BYTE AccNum, BYTE Interval, int ItemNumber, SYSTEMTIME *stReq)
{
- DWORD Left, Right, Probe; // Границы интервала для поиска (индексы статистики).
+ int Left, Right, Probe; // Границы интервала для поиска (индексы статистики).
SYSTEMTIME stProbe = { 0 }; // Время тыка.
signed short int d = 1;
@@ -499,7 +496,8 @@ DWORD Stat_GetStartIndex(BYTE AccNum, BYTE Interval, DWORD ItemNumber, SYSTEMTIM Probe++;
break;
}
- if (Probe == ItemNumber) break;
+ if (Probe == ItemNumber)
+ break;
}
stReq->wHour = ProtoList[AccNum].AllStatistics[Left].Hour;
@@ -576,7 +574,7 @@ DWORD Stat_GetItemValue(WORD SelectedAccs, BYTE Interval, DWORD ItemNum, BYTE Su {
DWORD Result = 0;
SYSTEMTIME st = { 0 };
- DWORD Index, IndexP, i;
+ int Index, IndexP, i;
signed long int IndexM;
BYTE a, EldestAcc;
diff --git a/plugins/TrafficCounter/src/statistics.h b/plugins/TrafficCounter/src/statistics.h index ebe368e27d..7c034779c1 100644 --- a/plugins/TrafficCounter/src/statistics.h +++ b/plugins/TrafficCounter/src/statistics.h @@ -32,11 +32,11 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #define STAT_UNITS_ADAPTIVE 3
INT_PTR CALLBACK DlgProcOptStatistics(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam);
-void Stat_ReadFile(BYTE);
+void Stat_ReadFile(PROTOLIST &p);
void Stat_Show(HWND);
void Stat_UpdateTotalTraffic(HWND, DWORD, DWORD);
-void Stat_CheckStatistics(BYTE);
-DWORD Stat_GetStartIndex(BYTE AccNum, BYTE Interval, DWORD ItemNumber, SYSTEMTIME *st);
+void Stat_CheckStatistics(PROTOLIST &p);
+DWORD Stat_GetStartIndex(BYTE AccNum, BYTE Interval, int ItemNumber, SYSTEMTIME *st);
void Stat_SetAccShift(BYTE AccNum, BYTE EldestAccount);
DWORD Stat_GetItemValue(WORD SelectedAccs, BYTE Interval, DWORD ItemNum, BYTE SubitemNum);
DWORD Stat_GetRecordsNumber(BYTE AccNum, BYTE Interval);
diff --git a/plugins/TrafficCounter/src/stdafx.h b/plugins/TrafficCounter/src/stdafx.h index edd4494e3a..a28e37460f 100644 --- a/plugins/TrafficCounter/src/stdafx.h +++ b/plugins/TrafficCounter/src/stdafx.h @@ -49,7 +49,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "misc.h"
#include "opttree.h"
#include "vars.h"
-#include "statistics.h"
#include "TrafficCounter.h"
#pragma pack(push)
@@ -69,7 +68,7 @@ typedef struct tagTimer DWORD Timer; // Количество секунд со времени запуска таймера.
} TIMER;
-typedef struct
+struct PROTOLIST
{
char *name; // Имя аккаунта.
@@ -94,21 +93,23 @@ typedef struct };
// Добавлено в версии 0.1.1.0.
- DWORD NumberOfRecords; // Количество часов в общей статистике.
+ int NumberOfRecords; // Количество часов в общей статистике.
HOURLYSTATS *AllStatistics; // Полная статистика вместе со статистикой онлайна.
HANDLE hFile; // Файл с сохранённой статистикой данного протокола.
- DWORD StartIndex; // Номер записи в статистике, бывший актуальным на момент запуска.
- DWORD StartIncoming; // Значение входящего трафика на момент запуска.
- DWORD StartOutgoing; // Значение исходящего трафика на момент запуска.
+ int StartIndex; // Номер записи в статистике, бывший актуальным на момент запуска.
+ int StartIncoming; // Значение входящего трафика на момент запуска.
+ int StartOutgoing; // Значение исходящего трафика на момент запуска.
// 0.1.1.5.
- DWORD Shift; // Номер записи в статистике старейшего выбранного аккаунта,
+ int Shift; // Номер записи в статистике старейшего выбранного аккаунта,
// дата которой соответствует началу статистики данного аккаунта.
// 0.1.1.6
wchar_t *tszAccountName; // Человеческое имя аккаунта для использования в графическом интерфейсе.
-} PROTOLIST;
+};
+
+#include "statistics.h"
//---------------------------------------------------------------------------------------------
// Различные флаги
diff --git a/plugins/TrafficCounter/src/version.h b/plugins/TrafficCounter/src/version.h index 6acb2ae8ac..f465ad5020 100644 --- a/plugins/TrafficCounter/src/version.h +++ b/plugins/TrafficCounter/src/version.h @@ -1,13 +1,13 @@ -#define __MAJOR_VERSION 0
-#define __MINOR_VERSION 1
+#define __MAJOR_VERSION 0
+#define __MINOR_VERSION 1
#define __RELEASE_NUM 1
-#define __BUILD_NUM 8
+#define __BUILD_NUM 9
#include <stdver.h>
#define __PLUGIN_NAME "Traffic counter"
#define __FILENAME "TrafficCounter.dll"
-#define __DESCRIPTION "Adding traffic and time counters."
-#define __AUTHOR "Ghost, Mironych"
-#define __AUTHORWEB "https://miranda-ng.org/p/TrafficCounter/"
-#define __COPYRIGHT "© 2002-2006 Ghost, 2007-2012 Mironych"
+#define __DESCRIPTION "Adding traffic and time counters."
+#define __AUTHOR "Ghost, Mironych"
+#define __AUTHORWEB "https://miranda-ng.org/p/TrafficCounter/"
+#define __COPYRIGHT "© 2002-2006 Ghost, 2007-2012 Mironych"
|