From 80221d816eeb98f0df38e0243390033c614952f3 Mon Sep 17 00:00:00 2001 From: Kirill Volinsky Date: Tue, 28 Nov 2017 22:12:43 +0300 Subject: Source files converted to utf-8 --- plugins/TrafficCounter/src/TrafficCounter.cpp | 164 +++++++++++++------------- plugins/TrafficCounter/src/TrafficCounter.h | 12 +- plugins/TrafficCounter/src/misc.cpp | 80 ++++++------- plugins/TrafficCounter/src/misc.h | 34 +++--- plugins/TrafficCounter/src/options.cpp | 40 +++---- plugins/TrafficCounter/src/opttree.cpp | 2 +- plugins/TrafficCounter/src/opttree.h | 2 +- plugins/TrafficCounter/src/statistics.cpp | 154 ++++++++++++------------ plugins/TrafficCounter/src/stdafx.h | 46 ++++---- plugins/TrafficCounter/src/vars.cpp | 22 ++-- plugins/TrafficCounter/src/version.h | 2 +- 11 files changed, 279 insertions(+), 279 deletions(-) (limited to 'plugins/TrafficCounter/src') diff --git a/plugins/TrafficCounter/src/TrafficCounter.cpp b/plugins/TrafficCounter/src/TrafficCounter.cpp index ef7c33e8ca..3c2c81fa82 100644 --- a/plugins/TrafficCounter/src/TrafficCounter.cpp +++ b/plugins/TrafficCounter/src/TrafficCounter.cpp @@ -23,15 +23,15 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. //GLOBAL /*-------------------------------------------------------------------------------------------------------------------*/ uTCFLAGS unOptions; -PROTOLIST *ProtoList; // . -PROTOLIST OverallInfo; // . +PROTOLIST *ProtoList; // Данные обо всех аккаунтах. +PROTOLIST OverallInfo; // Суммарные данные по видимым аккаунтам. int NumberOfAccounts; HWND TrafficHwnd; HINSTANCE hInst; CLIST_INTERFACE *pcli; -int hLangpack = 0; // . +int hLangpack = 0; // Поддержка плагинозависимого перевода. BOOL bPopupExists = FALSE, bVariablesExists = FALSE, bTooltipExists = FALSE; static wchar_t tszFormat[] = @@ -51,7 +51,7 @@ wchar_t *TRAFFIC_COUNTER_WINDOW_CLASS = L"TrafficCounterWnd"; WORD notify_send_size = 0; WORD notify_recv_size = 0; // -// +// Цвет шрифта и фона COLORREF Traffic_BkColor, Traffic_FontColor; //notify @@ -88,12 +88,12 @@ FontIDW TrafficFontID; ColourIDW TrafficBackgroundColorID; //--------------------------------------------------------------------------------------------- -// ToolTip +// Для ToolTip //--------------------------------------------------------------------------------------------- BOOL TooltipShowing; POINT TooltipPosition; -// +// Вспомогательные переменные чтобы заставить работать ключевой цвет BOOL UseKeyColor; COLORREF KeyColor; @@ -129,7 +129,7 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD, LPVOID) extern "C" int __declspec(dllexport) Load(void) { - // . + // Получаем дескриптор языкового пакета. mir_getLP(&pluginInfoEx); pcli = Clist_GetInterface(); @@ -146,13 +146,13 @@ extern "C" int __declspec(dllexport) Load(void) extern "C" int __declspec(dllexport) Unload(void) { - // . + // Удаляем шрифт. if (Traffic_h_font) { DeleteObject(Traffic_h_font); Traffic_h_font = nullptr; } - // . + // Убиваем все рабочие данные. DestroyProtocolList(); return 0; } @@ -164,20 +164,20 @@ int TrafficCounterShutdown(WPARAM, LPARAM) SaveSettings(0); - // . + // Удаляем пункт главного меню. if (hTrafficMainMenuItem) { Menu_RemoveItem(hTrafficMainMenuItem); hTrafficMainMenuItem = nullptr; } - // . + // Удаляем контекстное меню. if (TrafficPopupMenu) { DestroyMenu(TrafficPopupMenu); TrafficPopupMenu = nullptr; } - // . + // Разрегистрируем процедуру отрисовки фрейма. CallService(MS_SKINENG_REGISTERPAINTSUB, (WPARAM)TrafficHwnd, (LPARAM)NULL); - // . + // Удаляем фрейм. if ((ServiceExists(MS_CLIST_FRAMES_REMOVEFRAME)) && Traffic_FrameID) { CallService(MS_CLIST_FRAMES_REMOVEFRAME, (WPARAM)Traffic_FrameID, 0); Traffic_FrameID = nullptr; @@ -200,7 +200,7 @@ int TrafficCounterModulesLoaded(WPARAM, LPARAM) CreateProtocolList(); ModuleLoad(0, 0); - // + // Читаем флаги unOptions.Flags = db_get_dw(NULL, TRAFFIC_SETTINGS_GROUP, SETTINGS_WHAT_DRAW, 0x0882); Stat_SelAcc = db_get_w(NULL, TRAFFIC_SETTINGS_GROUP, SETTINGS_STAT_ACC_OPT, 0x01); @@ -214,7 +214,7 @@ int TrafficCounterModulesLoaded(WPARAM, LPARAM) Traffic_PopupTimeoutDefault = db_get_b(NULL, TRAFFIC_SETTINGS_GROUP, SETTINGS_POPUP_TIMEOUT_DEFAULT, 1); 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)); @@ -226,7 +226,7 @@ int TrafficCounterModulesLoaded(WPARAM, LPARAM) mir_wstrcpy(Traffic_CounterFormat, tszFormat); } - // + // Формат всплывающих подсказок 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)); @@ -240,7 +240,7 @@ int TrafficCounterModulesLoaded(WPARAM, LPARAM) Traffic_AdditionSpace = db_get_b(NULL, TRAFFIC_SETTINGS_GROUP, SETTINGS_ADDITION_SPACE, 0); - // + // Счётчик времени онлайна OverallInfo.Total.Timer = db_get_dw(NULL, TRAFFIC_SETTINGS_GROUP, SETTINGS_TOTAL_ONLINE_TIME, 0); //register traffic font @@ -258,7 +258,7 @@ int TrafficCounterModulesLoaded(WPARAM, LPARAM) TrafficFontID.order = 0; Font_RegisterW(&TrafficFontID); - // + // Регистрируем цвет фона TrafficBackgroundColorID.cbSize = sizeof(ColourIDW); mir_wstrcpy(TrafficBackgroundColorID.group, LPGENW("Traffic counter")); mir_wstrcpy(TrafficBackgroundColorID.name, LPGENW("Font")); @@ -269,11 +269,11 @@ int TrafficCounterModulesLoaded(WPARAM, LPARAM) HookEvent(ME_FONT_RELOAD, UpdateFonts); - // Variables + // Добавляем поддержку плагина Variables RegisterVariablesTokens(); CreateServiceFunction("TrafficCounter/ShowHide", MenuCommand_TrafficShowHide); - // / + // Регистрируем горячую клавишу для показа/скрытия фрейма { HOTKEYDESC hkd = {}; hkd.DefHotKey = HOTKEYCODE(HOTKEYF_CONTROL | HOTKEYF_SHIFT, 'T'); @@ -284,17 +284,17 @@ int TrafficCounterModulesLoaded(WPARAM, LPARAM) Hotkey_Register(&hkd); } - // . + // Добавляем пункт в главное меню. if (unOptions.ShowMainMenuItem) Traffic_AddMainMenuItem(); - // . + // Создаём контекстное меню. if (TrafficPopupMenu = CreatePopupMenu()) { AppendMenu(TrafficPopupMenu, MF_STRING, POPUPMENU_HIDE, TranslateT("Hide traffic window")); AppendMenu(TrafficPopupMenu, MF_STRING, POPUPMENU_CLEAR_NOW, TranslateT("Clear the current (Now:) value")); } - // Netlib + // Регистрируем обработчики событий Netlib HookEvent(ME_NETLIB_FASTRECV, TrafficRecv); HookEvent(ME_NETLIB_FASTSEND, TrafficSend); @@ -308,12 +308,12 @@ void SaveSettings(BYTE OnlyCnt) { unsigned short int i; - // + // Сохраняем счётчик времени онлайна db_set_dw(NULL, TRAFFIC_SETTINGS_GROUP, SETTINGS_TOTAL_ONLINE_TIME, OverallInfo.Total.Timer); if (OnlyCnt) return; - // + // Для каждого протокола сохраняем флаги for (i = 0; i < NumberOfAccounts; i++) { if (!ProtoList[i].name) continue; db_set_b(NULL, ProtoList[i].name, SETTINGS_PROTO_FLAGS, ProtoList[i].Flags); @@ -331,13 +331,13 @@ void SaveSettings(BYTE OnlyCnt) db_set_b(NULL, TRAFFIC_SETTINGS_GROUP, SETTINGS_POPUP_TIMEOUT_DEFAULT, Traffic_PopupTimeoutDefault); db_set_b(NULL, TRAFFIC_SETTINGS_GROUP, SETTINGS_POPUP_TIMEOUT_VALUE, Traffic_PopupTimeoutValue); // - // + // Формат счётчиков db_set_ws(NULL, TRAFFIC_SETTINGS_GROUP, SETTINGS_COUNTER_FORMAT, Traffic_CounterFormat); db_set_ws(NULL, TRAFFIC_SETTINGS_GROUP, SETTINGS_TOOLTIP_FORMAT, Traffic_TooltipFormat); db_set_b(NULL, TRAFFIC_SETTINGS_GROUP, SETTINGS_ADDITION_SPACE, Traffic_AdditionSpace); - // + // Сохраняем флаги db_set_dw(NULL, TRAFFIC_SETTINGS_GROUP, SETTINGS_WHAT_DRAW, unOptions.Flags); db_set_w(NULL, TRAFFIC_SETTINGS_GROUP, SETTINGS_STAT_ACC_OPT, Stat_SelAcc); } @@ -414,7 +414,7 @@ int PaintTrafficCounterWindow(HWND hwnd, HDC hDC) int height = rect.bottom - rect.top; int width = rect.right - rect.left; - // . + // Свой контекст устройства. HDC hdc = CreateCompatibleDC(hDC); BITMAPINFO RGB32BitsBITMAPINFO = { 0 }; @@ -453,43 +453,43 @@ int PaintTrafficCounterWindow(HWND hwnd, HDC hDC) HFONT old_font = (HFONT)SelectObject(hdc, Traffic_h_font); - // + // Ограничиваем область рисования rect.top += 2; rect.left += 3; rect.bottom -= 2; rect.right -= 3; //------------------- - // Variables, . + // Если нет плагина Variables, рисуем упрощённо. //------------------- if (!bVariablesExists) { SummarySession = SummaryTotal = 0; - // + // Для каждого аккаунта for (int i = 0; i < NumberOfAccounts; i++) { - // . + // Только если разрешено его отображение. if (ProtoList[i].Visible && ProtoList[i].Enabled) { int dx = 0; - // . + // Изображаем иконку аккаунта. if (unOptions.DrawProtoIcon) { TC_DrawIconEx(hdc, rect.left, rect.top, Skin_LoadProtoIcon(ProtoList[i].name, CallProtoService(ProtoList[i].name, PS_GETSTATUS, 0, 0)), b, ClistModernPresent); dx = 19; } - // + // Изображаем имя аккаунта if (unOptions.DrawProtoName) { rect.left += dx; TC_AlphaText(hdc, ProtoList[i].tszAccountName, &rect, DT_SINGLELINE | DT_LEFT | DT_TOP, ClistModernPresent); rect.left -= dx; } - // . - // . + // Следующие позиции строятся от правого края. + // Общее время. if (unOptions.DrawTotalTimeCounter) { wchar_t bu[32]; GetDurationFormatM(ProtoList[i].Total.Timer, L"h:mm:ss", bu, 32); TC_AlphaText(hdc, bu, &rect, DT_SINGLELINE | DT_RIGHT | DT_TOP, ClistModernPresent); } - // . + // Текущее время. if (unOptions.DrawCurrentTimeCounter) { wchar_t bu[32]; @@ -498,7 +498,7 @@ int PaintTrafficCounterWindow(HWND hwnd, HDC hDC) TC_AlphaText(hdc, bu, &rect, DT_SINGLELINE | DT_RIGHT | DT_TOP, ClistModernPresent); rect.right += 50; } - // . + // Изображаем общий трафик. if (unOptions.DrawTotalTraffic) { wchar_t bu[32]; @@ -510,7 +510,7 @@ int PaintTrafficCounterWindow(HWND hwnd, HDC hDC) if (ProtoList[i].Visible) SummaryTotal += ProtoList[i].TotalRecvTraffic + ProtoList[i].TotalSentTraffic; } - // . + // Изображаем текущий трафик. if (unOptions.DrawCurrentTraffic) { wchar_t bu[32]; @@ -526,17 +526,17 @@ int PaintTrafficCounterWindow(HWND hwnd, HDC hDC) rect.top += Traffic_LineHeight + Traffic_AdditionSpace; } } - // . + // Рисуем суммарный трафик выбранных аккаунтов. if (unOptions.ShowSummary) { - // . + // Изображаем иконку. int dx = 0; if (unOptions.DrawProtoIcon) { TC_DrawIconEx(hdc, rect.left, rect.top, Skin_LoadIcon(SKINICON_OTHER_MIRANDA), b, ClistModernPresent); dx = 19; } - // - // + // Выводим текст + // Изображаем имя if (unOptions.DrawProtoName) { wchar_t *bu = mir_a2u("Summary"); @@ -545,14 +545,14 @@ int PaintTrafficCounterWindow(HWND hwnd, HDC hDC) rect.left -= dx; mir_free(bu); } - // . + // Общее время. if (unOptions.DrawTotalTimeCounter) { wchar_t bu[32]; GetDurationFormatM(OverallInfo.Total.Timer, L"h:mm:ss", bu, 32); TC_AlphaText(hdc, bu, &rect, DT_SINGLELINE | DT_RIGHT | DT_TOP, ClistModernPresent); } - // . + // Текущее время. if (unOptions.DrawCurrentTimeCounter) { wchar_t bu[32]; @@ -561,7 +561,7 @@ int PaintTrafficCounterWindow(HWND hwnd, HDC hDC) TC_AlphaText(hdc, bu, &rect, DT_SINGLELINE | DT_RIGHT | DT_TOP, ClistModernPresent); rect.right += 50; } - // . + // Изображаем общий трафик. if (unOptions.DrawTotalTraffic) { wchar_t bu[32]; @@ -570,7 +570,7 @@ int PaintTrafficCounterWindow(HWND hwnd, HDC hDC) TC_AlphaText(hdc, bu, &rect, DT_SINGLELINE | DT_RIGHT | DT_TOP, ClistModernPresent); rect.right += 100; } - // . + // Изображаем текущий трафик. if (unOptions.DrawCurrentTraffic) { wchar_t bu[32]; @@ -581,17 +581,17 @@ int PaintTrafficCounterWindow(HWND hwnd, HDC hDC) } } rect.top += Traffic_LineHeight + Traffic_AdditionSpace; - // . + // Рисуем всеобщий трафик. if (unOptions.ShowOverall) { - // . + // Изображаем иконку. int dx = 0; if (unOptions.DrawProtoIcon) { TC_DrawIconEx(hdc, rect.left, rect.top, Skin_LoadIcon(SKINICON_OTHER_MIRANDA), b, ClistModernPresent); dx = 19; } - // - // + // Выводим текст + // Изображаем имя if (unOptions.DrawProtoName) { wchar_t *bu = mir_a2u("Overall"); @@ -600,8 +600,8 @@ int PaintTrafficCounterWindow(HWND hwnd, HDC hDC) rect.left -= dx; mir_free(bu); } - // . - // . + // Следующие позиции строятся от правого края. + // Изображаем общий трафик. if (unOptions.DrawTotalTraffic) { wchar_t bu[32]; @@ -610,7 +610,7 @@ int PaintTrafficCounterWindow(HWND hwnd, HDC hDC) TC_AlphaText(hdc, bu, &rect, DT_SINGLELINE | DT_RIGHT | DT_TOP, ClistModernPresent); rect.right += 100; } - // . + // Изображаем текущий трафик. if (unOptions.DrawCurrentTraffic) { wchar_t bu[32]; @@ -623,16 +623,16 @@ int PaintTrafficCounterWindow(HWND hwnd, HDC hDC) } else { //------------- - // Variables - - + // Если есть Variables - рисуем по-новому //------------- RowItemInfo *ItemsList; WORD ItemsNumber, RowsNumber; - // Variables . + // Готовим список строк для Variables и иконок. wchar_t **ExtraText = (wchar_t**)mir_alloc(sizeof(wchar_t*)); HICON *ahIcon = (HICON*)mir_alloc(sizeof(HICON)); RowsNumber = 0; - // . + // Цикл по аккаунтам. for (int i = 0; i < NumberOfAccounts; i++) { if (ProtoList[i].Visible && ProtoList[i].Enabled) { ExtraText = (wchar_t**)mir_realloc(ExtraText, sizeof(wchar_t*) * (RowsNumber + 1)); @@ -642,7 +642,7 @@ int PaintTrafficCounterWindow(HWND hwnd, HDC hDC) ahIcon[RowsNumber++] = Skin_LoadProtoIcon(ProtoList[i].name, CallProtoService(ProtoList[i].name, PS_GETSTATUS, 0, 0)); } } - // 2 . + // Ещё 2 особых элемента. if (unOptions.ShowSummary) { ExtraText = (wchar_t**)mir_realloc(ExtraText, sizeof(wchar_t*) * (RowsNumber + 1)); ahIcon = (HICON*)mir_realloc(ahIcon, sizeof(HICON) * (RowsNumber + 1)); @@ -658,16 +658,16 @@ int PaintTrafficCounterWindow(HWND hwnd, HDC hDC) ahIcon[RowsNumber++] = Skin_LoadIcon(SKINICON_OTHER_MIRANDA); } - // + // Рисуем свой счётчик для каждого из выбранных протоколов for (int i = 0; i < RowsNumber; i++) { wchar_t *buf = variables_parse(Traffic_CounterFormat, ExtraText[i], NULL); if (ItemsNumber = GetRowItems(buf, &ItemsList)) { - // . + // Рисуем текст. for (int dx = 0; dx < ItemsNumber; dx++) { - // . + // Делаем копию прямоугольника для рисования. memcpy(&rect2, &rect, sizeof(RECT)); rect2.bottom = rect2.top + Traffic_LineHeight; - // ? + // Что за тег? switch (ItemsList[dx].Alignment) { case 'I': TC_DrawIconEx(hdc, ItemsList[dx].Interval, rect2.top, ahIcon[i], b, ClistModernPresent); @@ -688,7 +688,7 @@ int PaintTrafficCounterWindow(HWND hwnd, HDC hDC) } } - // . + // Нужно освободить память. for (; ItemsNumber--;) mir_free(ItemsList[ItemsNumber].String); @@ -698,7 +698,7 @@ int PaintTrafficCounterWindow(HWND hwnd, HDC hDC) rect.top += Traffic_LineHeight + Traffic_AdditionSpace; } - // . + // Удаляем список строк. for (; RowsNumber--;) mir_free(ExtraText[RowsNumber]); mir_free(ExtraText); @@ -735,7 +735,7 @@ void ProtocolIsOnLine(int num) - 1000 * ProtoList[num].AllStatistics[ProtoList[num].NumberOfRecords - 1].Time; ProtoList[num].Session.Timer = 0; - if (online_count == 1) // - . + if (online_count == 1) // Хотя бы один аккаунт перешёл в онлайн - готовимся считать суммарное время. { OverallInfo.Session.TimeAtStart = CurrentTimeMs - 1000 * OverallInfo.Session.Timer; OverallInfo.Total.TimeAtStart = CurrentTimeMs - 1000 * OverallInfo.Total.Timer; @@ -838,13 +838,13 @@ LRESULT CALLBACK TrafficCounterWndProc_MW(HWND hwnd, UINT msg, WPARAM wParam, LP NotifyOnSend(); break; - case TIMER_REDRAW: // . + case TIMER_REDRAW: // Перерисовка раз в полсекунды. { DWORD CurrentTimeMs; SYSTEMTIME stNow; SaveSettings(1); - // . + // Перед подсчётом суммарного трафика обнуляем счётчики. OverallInfo.CurrentRecvTraffic = OverallInfo.CurrentSentTraffic = OverallInfo.TotalRecvTraffic = @@ -862,11 +862,11 @@ LRESULT CALLBACK TrafficCounterWndProc_MW(HWND hwnd, UINT msg, WPARAM wParam, LP 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; @@ -875,7 +875,7 @@ LRESULT CALLBACK TrafficCounterWndProc_MW(HWND hwnd, UINT msg, WPARAM wParam, LP 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, @@ -892,7 +892,7 @@ LRESULT CALLBACK TrafficCounterWndProc_MW(HWND hwnd, UINT msg, WPARAM wParam, LP OverallInfo.TotalSentTraffic += ProtoList[i].TotalSentTraffic; } } - // ? + // Не пора ли уведомить? if (unOptions.NotifyBySize && Traffic_Notify_size_value) { if (!((OverallInfo.CurrentRecvTraffic >> 10) % Traffic_Notify_size_value) && notify_recv_size != OverallInfo.CurrentRecvTraffic >> 10) @@ -903,10 +903,10 @@ LRESULT CALLBACK TrafficCounterWndProc_MW(HWND hwnd, UINT msg, WPARAM wParam, LP NotifyOnSend(); } - // . + // Счётчики суммарного времени. GetLocalTime(&stNow); - // ? + // Не пора ли сбросить общий счётчик? if ((unOptions.PeriodForShow == 0 && stNow.wHour == 0 && stNow.wMinute == 0 @@ -1002,7 +1002,7 @@ void CreateTrafficWindow(HWND hCluiWnd) 0, 0, 0, 0, hCluiWnd, nullptr, hInst, nullptr); if (ServiceExists(MS_CLIST_FRAMES_ADDFRAME)) { - // + // Готовимся создавать фрейм memset(&f, 0, sizeof(CLISTFrame)); f.align = alBottom; f.cbSize = sizeof(CLISTFrame); @@ -1011,12 +1011,12 @@ void CreateTrafficWindow(HWND hCluiWnd) f.hWnd = TrafficHwnd; f.TBname = ("Traffic counter"); f.name = ("Traffic counter"); - // + // Создаём фрейм Traffic_FrameID = (HANDLE)CallService(MS_CLIST_FRAMES_ADDFRAME, (WPARAM)&f, 0); CallService(MS_SKINENG_REGISTERPAINTSUB, (WPARAM)f.hWnd, (LPARAM)TrafficCounter_PaintCallbackProc); } - // . + // Создаём таймеры. SetTimer(TrafficHwnd, TIMER_REDRAW, 500, nullptr); UpdateNotifyTimer(); } @@ -1113,8 +1113,8 @@ void CreateProtocolList(void) 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; - } // - // . + } // цикл по аккаунтам + // Начальные значения для суммарной информации. OverallInfo.Session.Timer = OverallInfo.Total.Timer = 0; } @@ -1169,7 +1169,7 @@ int UpdateFonts(WPARAM, LPARAM) TrafficFontHeight = abs(logfont.lfHeight) + 1; Traffic_BkColor = Colour_GetW(TrafficBackgroundColorID); - // + // Ключевой цвет UseKeyColor = db_get_b(NULL, "ModernSettings", "UseKeyColor", 1); KeyColor = db_get_dw(NULL, "ModernSettings", "KeyColor", 0); @@ -1190,15 +1190,15 @@ unsigned short int TrafficWindowHeight(void) for (int i = 0; i < NumberOfAccounts; i++) ActProto += ProtoList[i].Visible && ProtoList[i].Enabled; - // 16 ( ). + // Высота строки минимум 16 пикселей (для иконки). Traffic_LineHeight = TrafficFontHeight > 16 ? TrafficFontHeight : 16; - // . + // Высота фрейма равна количеству строк. int MaxWndHeight = ActProto * Traffic_LineHeight + Traffic_AdditionSpace * (ActProto - 1) + 4; return (MaxWndHeight < TrafficFontHeight) ? 0 : MaxWndHeight; } -// ProtoList +// Функция вносит изменения в ProtoList при коммутации аккаунтов int OnAccountsListChange(WPARAM wParam, LPARAM lParam) { PROTOACCOUNT *acc = (PROTOACCOUNT*)lParam; diff --git a/plugins/TrafficCounter/src/TrafficCounter.h b/plugins/TrafficCounter/src/TrafficCounter.h index a033d67289..a11f4178be 100644 --- a/plugins/TrafficCounter/src/TrafficCounter.h +++ b/plugins/TrafficCounter/src/TrafficCounter.h @@ -24,7 +24,7 @@ int TrafficRecv(WPARAM wParam,LPARAM lParam); int TrafficSend(WPARAM wParam,LPARAM lParam); //--------------------------------------------------------------------------------------------- -// +// Имена параметров с настройками в базе //--------------------------------------------------------------------------------------------- #define TRAFFIC_SETTINGS_GROUP "TrafficCounter" @@ -51,13 +51,13 @@ int TrafficSend(WPARAM wParam,LPARAM lParam); #define TIMER_REDRAW 3300 #define TIMER_TOOLTIP 3301 #define SETTINGS_TOTAL_ONLINE_TIME "TotalOnlineTime" -// +// Разные флажки #define SETTINGS_WHAT_DRAW "WhatDraw" -// - +// Настройки для протоколов - сохраняются в ветке протокола #define SETTINGS_PROTO_FLAGS "tc_Flags" -/*====== =====*/ +/*====== ФУНКЦИИ МОДУЛЯ =====*/ int TrafficCounterOptInitialise(WPARAM wParam,LPARAM lParam); int TrafficCounterModulesLoaded(WPARAM wParam,LPARAM lParam); int TrafficCounterShutdown(WPARAM wParam,LPARAM lParam); @@ -77,10 +77,10 @@ int OnAccountsListChange(WPARAM wParam, LPARAM lParam); int UpdateFonts(WPARAM wParam, LPARAM lParam); void UpdateTrafficWindowSize(void); unsigned short int TrafficWindowHeight(void); -// +// Рисование int TrafficCounter_Draw(HWND, HDC); int PaintTrafficCounterWindow(HWND, HDC); -// +// Вспомогательные функции INT_PTR MenuCommand_TrafficShowHide(WPARAM, LPARAM); void Traffic_AddMainMenuItem(void); diff --git a/plugins/TrafficCounter/src/misc.cpp b/plugins/TrafficCounter/src/misc.cpp index f15a045250..3e8b231e07 100644 --- a/plugins/TrafficCounter/src/misc.cpp +++ b/plugins/TrafficCounter/src/misc.cpp @@ -19,52 +19,52 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "stdafx.h" -/* . -: -InputString - ; -RowItemsList - . - - . */ +/* Функция разбирает строку и возвращает список тегов и соответствующих им строк. +Аргументы: +InputString - строка для разбора; +RowItemsList - список найденных элементов. +Возвращаемое значение - количество элементов в списках. */ WORD GetRowItems(wchar_t *InputString, RowItemInfo **RowItemsList) { wchar_t *begin, *end; WORD c = 0; - // . + // Ищем слева открывающую скобку. begin = wcschr(InputString, '{'); - // ... + // Если скобка найдена... if (begin) { - // + // Выделяем память под указатели *RowItemsList = (RowItemInfo*)mir_alloc(sizeof(RowItemInfo)); } else return 0; do { - // . + // Сразу вслед за ней ищем закрывающую. end = wcschr(begin, '}'); - // + // Выделяем память под указатели *RowItemsList = (RowItemInfo*)mir_realloc(*RowItemsList, sizeof(RowItemInfo) * (c + 1)); - // . + // Разбираем тег. swscanf(begin + 1, L"%c%hd", &((*RowItemsList)[c].Alignment), &((*RowItemsList)[c].Interval)); - // - , . + // Ищем далее открывающую скобку - это конец строки, соответствующей тегу. begin = wcschr(end, '{'); if (begin) { - // . + // Выделяем память под строку. (*RowItemsList)[c].String = (wchar_t*)mir_alloc(sizeof(wchar_t) * (begin - end)); - // . + // Копируем строку. wcsncpy((*RowItemsList)[c].String, end + 1, begin - end - 1); (*RowItemsList)[c].String[begin - end - 1] = 0; } else { - // . + // Выделяем память под строку. (*RowItemsList)[c].String = (wchar_t*)mir_alloc(sizeof(wchar_t) * mir_wstrlen(end)); - // . + // Копируем строку. wcsncpy((*RowItemsList)[c].String, end + 1, mir_wstrlen(end)); } @@ -74,7 +74,7 @@ WORD GetRowItems(wchar_t *InputString, RowItemInfo **RowItemsList) return c; } -/* . */ +/* Функция возвращает количество дней в указанном месяце указанного года. */ BYTE DaysInMonth(BYTE Month, WORD Year) { switch (Month) { @@ -94,8 +94,8 @@ BYTE DaysInMonth(BYTE Month, WORD Year) return 0; } -// -// 7 - , 1 - . . +// Функция определяет день недели по дате +// 7 - ВС, 1 - ПН и т. д. BYTE DayOfWeek(BYTE Day, BYTE Month, WORD Year) { WORD a, y, m; @@ -111,19 +111,19 @@ BYTE DayOfWeek(BYTE Day, BYTE Month, WORD Year) } /* -: -Value - ; -Unit - (0 - , 1 - , 2 - , 3 - ); -Buffer - ; -Size - . - : . +Аргументы: +Value - количество байт; +Unit - единицы измерения (0 - байты, 1 - килобайты, 2 - мегабайты, 3 - автоматически); +Buffer - адрес строки для записи результата; +Size - размер буфера. +Возвращаемое значение: требуемый размер буфера. */ size_t GetFormattedTraffic(DWORD Value, BYTE Unit, wchar_t *Buffer, size_t Size) { wchar_t Str1[32], szUnit[4] = { ' ', 0 }; DWORD Divider; NUMBERFMT nf = { 0, 1, 3, L",", L" ", 0 }; - wchar_t *Res; // . + wchar_t *Res; // Промежуточный результат. switch (Unit) { case 0: //bytes @@ -167,36 +167,36 @@ size_t GetFormattedTraffic(DWORD Value, BYTE Unit, wchar_t *Buffer, size_t Size) return l; } -/* -: -Duration: ; -Format: ; -Buffer: , . -Size - . */ +/* Преобразование интервала времени в его строковое представление +Аргументы: +Duration: интервал времени в секундах; +Format: строка формата; +Buffer: адрес буфера, куда функция помещает результат. +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; // Промежуточный результат. - Res = (wchar_t*)malloc(sizeof(wchar_t)); // - , . + Res = (wchar_t*)malloc(sizeof(wchar_t)); // Выделяем чуть-чуть памяти под результат, но это только начало. //SecureZeroMemory(Res, sizeof(wchar_t)); Res[0] = 0; for (FormatIndex = 0; Format[FormatIndex];) { - // . , - . + // Ищем токены. Считается, что токен - только буквы. TokenIndex = 0; q = iswalpha(Format[FormatIndex]); - // . + // Копируем символы в аккумулятор до смены флага. do { Token[TokenIndex++] = Format[FormatIndex++]; } while (q == iswalpha(Format[FormatIndex])); Token[TokenIndex] = 0; - // ? + // Что получили в аккумуляторе? if (!mir_wstrcmp(Token, L"d")) { q = Duration / (60 * 60 * 24); mir_snwprintf(Token, L"%d", q); @@ -233,7 +233,7 @@ size_t GetDurationFormatM(DWORD Duration, wchar_t *Format, wchar_t *Buffer, size Duration -= q; } - // , . + // Добавим памяти, если нужно. Length = mir_wstrlen(Res) + mir_wstrlen(Token) + 1; Res = (wchar_t*)realloc(Res, Length * sizeof(wchar_t)); mir_wstrcat(Res, Token); @@ -249,7 +249,7 @@ size_t GetDurationFormatM(DWORD Duration, wchar_t *Format, wchar_t *Buffer, size return Length; } -/* : +/* Результат: -1 - st1 < st2 0 - st1 = st2 +1 - st1 > st2 diff --git a/plugins/TrafficCounter/src/misc.h b/plugins/TrafficCounter/src/misc.h index d0d784e6cf..04343d3c33 100644 --- a/plugins/TrafficCounter/src/misc.h +++ b/plugins/TrafficCounter/src/misc.h @@ -1,30 +1,30 @@ typedef struct { - wchar_t Alignment; // . L - , R - . - WORD Interval; // , . - wchar_t *String; // . + wchar_t Alignment; // Выравнивание. L - к левой границе, R - к правой. + WORD Interval; // Расстояние, на которое граница строки отстоит от левого края фрейма. + wchar_t *String; // Собственно строка. } RowItemInfo; -/* . -: -InputString - ; -RowItemsList - . - - . */ +/* Функция разбирает строку и возвращает список тегов и соответствующих им строк. +Аргументы: +InputString - строка для разбора; +RowItemsList - список найденных элементов. +Возвращаемое значение - количество элементов в списках. */ WORD GetRowItems(wchar_t *InputString, RowItemInfo **RowItemsList); -/* . */ +/* Функция возвращает количество дней в указанном месяце указанного года. */ BYTE DaysInMonth(BYTE Month, WORD Year); -// -// 7 - , 1 - . . +// Функция определяет день недели по дате +// 7 - ВС, 1 - ПН и т. д. BYTE DayOfWeek(BYTE Day, BYTE Month, WORD Year); -/* : - Value - ; - Unit - (0 - , 1 - , 2 - , 3 - ); - Buffer - ; - Size - . - : . */ +/* Аргументы: + Value - количество байт; + Unit - единицы измерения (0 - байты, 1 - килобайты, 2 - мегабайты, 3 - автоматически); + Buffer - адрес строки для записи результата; + Size - размер буфера. +Возвращаемое значение: требуемый размер буфера. */ size_t GetFormattedTraffic(DWORD Value, BYTE Unit, wchar_t *Buffer, size_t Size); size_t GetDurationFormatM(DWORD Duration, wchar_t *Format, wchar_t *Buffer, size_t Size); diff --git a/plugins/TrafficCounter/src/options.cpp b/plugins/TrafficCounter/src/options.cpp index 605f04767a..16cfb39ab7 100644 --- a/plugins/TrafficCounter/src/options.cpp +++ b/plugins/TrafficCounter/src/options.cpp @@ -17,13 +17,13 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* ====================================================================================== - -: Mironych +Здесь содержатся переменные и функции для работы со статистикой +Автор: Mironych =======================================================================================*/ #include "stdafx.h" -OPTTREE_OPTION *pOptions; // opttree.c . +OPTTREE_OPTION *pOptions; // Через этот указатель модуль opttree.c может добраться до списка опций. ///////////////////////////////////////////////////////////////////////////////////////// @@ -135,8 +135,8 @@ static OPTTREE_OPTION options[] = {0, LPGENW("General") L"/" LPGENW("Draw frame as skin element"), OPTTREE_CHECK, 1, nullptr, "DrawFrmAsSkin"}, {0, LPGENW("General") L"/" LPGENW("Show tooltip in traffic window"), OPTTREE_CHECK, 1, nullptr, "ShowTooltip"}, {0, LPGENW("General") L"/" LPGENW("\"Toggle traffic counter\" in main menu"), OPTTREE_CHECK, 1, nullptr, "ShowMainMenuItem"}, - // - // 16 16 + // Резервируем место под активные и видимые протоколы + // Максимум 16 позиций видимых и 16 активных {0, nullptr, OPTTREE_CHECK, OPTTREE_INVISIBLE, nullptr, nullptr}, {0, nullptr, OPTTREE_CHECK, OPTTREE_INVISIBLE, nullptr, nullptr}, {0, nullptr, OPTTREE_CHECK, OPTTREE_INVISIBLE, nullptr, nullptr}, @@ -183,12 +183,12 @@ static INT_PTR CALLBACK DlgProcTCOptions(HWND hwndDlg, UINT msg, WPARAM wParam, if (!Initialized) { pOptions = options; optionCount = _countof(options); - // Variables, + // Если нет Variables, активируем галочки для старого метода рисования if (!bVariablesExists) for (i = 0; i < 8; i++) options[i].dwFlag = 1; - // . + // Флажки для видимости аккаунтов создаются в любом случае. for (i = j = 0; (j < NumberOfAccounts) && (i < optionCount) ; i++) if ((options[i].dwFlag & OPTTREE_INVISIBLE) && !options[i].szSettingName) { @@ -215,11 +215,11 @@ static INT_PTR CALLBACK DlgProcTCOptions(HWND hwndDlg, UINT msg, WPARAM wParam, //show/hide button SetDlgItemText(hwndDlg,IDC_BSHOWHIDE,(IsWindowVisible(TrafficHwnd) != 0)? TranslateT("Hide now") : TranslateT("Show now")); - // + // Строки формата для счётчиков EnableWindow(GetDlgItem(hwndDlg, IDC_EDIT_COUNTER_FORMAT), bVariablesExists); SetDlgItemText(hwndDlg, IDC_EDIT_COUNTER_FORMAT, Traffic_CounterFormat); - // + // Формат всплывающей подсказки EnableWindow(GetDlgItem(hwndDlg,IDC_EDIT_TOOLTIP_FORMAT), bTooltipExists); SetDlgItemText(hwndDlg, IDC_EDIT_TOOLTIP_FORMAT, Traffic_TooltipFormat); @@ -230,7 +230,7 @@ static INT_PTR CALLBACK DlgProcTCOptions(HWND hwndDlg, UINT msg, WPARAM wParam, SendDlgItemMessage(hwndDlg, IDC_COMBO_AUTO_CLEAR, CB_INSERTSTRING, -1, (LPARAM)TranslateT("Year")); SendDlgItemMessage(hwndDlg, IDC_COMBO_AUTO_CLEAR, CB_SETCURSEL, unOptions.PeriodForShow, 0); - // + // Интервал между строками SetDlgItemInt(hwndDlg, IDC_EDIT_SPACE, Traffic_AdditionSpace, 0); SendDlgItemMessage(hwndDlg, IDC_EDIT_SPACE, EM_LIMITTEXT, 2, 0); @@ -246,7 +246,7 @@ static INT_PTR CALLBACK DlgProcTCOptions(HWND hwndDlg, UINT msg, WPARAM wParam, OptTree_SetOptions(hwndDlg, IDC_APPEARANCEOPTIONS, options, optionCount, unOptions.ShowTooltip, "ShowTooltip"); OptTree_SetOptions(hwndDlg, IDC_APPEARANCEOPTIONS, options, optionCount, unOptions.ShowMainMenuItem, "ShowMainMenuItem"); - // + // Настройки видимости протоколов for (i = 0; i < NumberOfAccounts; i++) { char buffer[32]; mir_strcpy(buffer, ProtoList[i].name); @@ -285,9 +285,9 @@ static INT_PTR CALLBACK DlgProcTCOptions(HWND hwndDlg, UINT msg, WPARAM wParam, case PSN_APPLY: unOptions.PeriodForShow = (char)SendDlgItemMessage(hwndDlg,IDC_COMBO_AUTO_CLEAR,CB_GETCURSEL,0,0); - // + // Интервал между строками Traffic_AdditionSpace = GetDlgItemInt(hwndDlg, IDC_EDIT_SPACE, nullptr, 0); - // Appearance + // Настройки Appearance unOptions.DrawProtoIcon = OptTree_GetOptions(hwndDlg, IDC_APPEARANCEOPTIONS, options, optionCount, "DrawProtoIcon"); unOptions.DrawProtoName = OptTree_GetOptions(hwndDlg, IDC_APPEARANCEOPTIONS, options, optionCount, "DrawProtoName"); unOptions.DrawCurrentTraffic = OptTree_GetOptions(hwndDlg, IDC_APPEARANCEOPTIONS, options, optionCount, "DrawCurrentTraffic"); @@ -300,7 +300,7 @@ static INT_PTR CALLBACK DlgProcTCOptions(HWND hwndDlg, UINT msg, WPARAM wParam, unOptions.ShowTooltip = OptTree_GetOptions(hwndDlg, IDC_APPEARANCEOPTIONS, options, optionCount, "ShowTooltip"); unOptions.ShowMainMenuItem = OptTree_GetOptions(hwndDlg, IDC_APPEARANCEOPTIONS, options, optionCount, "ShowMainMenuItem"); - // + // Настройки видимости протоколов for (i = 0; i < NumberOfAccounts; i++) { char buffer[32]; @@ -309,25 +309,25 @@ static INT_PTR CALLBACK DlgProcTCOptions(HWND hwndDlg, UINT msg, WPARAM wParam, } unOptions.ShowOverall = OptTree_GetOptions(hwndDlg, IDC_APPEARANCEOPTIONS, options, optionCount, "ShowOverall"); - // + // Формат счётчиков GetDlgItemText(hwndDlg, IDC_EDIT_COUNTER_FORMAT, Traffic_CounterFormat, _countof(Traffic_CounterFormat)); - // + // Формат всплывающей подсказки GetDlgItemText(hwndDlg, IDC_EDIT_TOOLTIP_FORMAT, Traffic_TooltipFormat, _countof(Traffic_TooltipFormat)); - // + // Ключевой цвет UseKeyColor = db_get_b(NULL, "ModernSettings", "UseKeyColor", 1); KeyColor = db_get_dw(NULL, "ModernSettings", "KeyColor", 0); - // + // Перерисовываем фрейм UpdateTrafficWindowSize(); - // , . + // Если отключается показ пункта главного меню, то удаляем его. if (!unOptions.ShowMainMenuItem && hTrafficMainMenuItem) { Menu_RemoveItem(hTrafficMainMenuItem); hTrafficMainMenuItem = nullptr; } - // , . + // Если включается, то создаём. if (unOptions.ShowMainMenuItem && !hTrafficMainMenuItem) Traffic_AddMainMenuItem(); diff --git a/plugins/TrafficCounter/src/opttree.cpp b/plugins/TrafficCounter/src/opttree.cpp index c3d6cfdc7d..fb9ffe8f91 100644 --- a/plugins/TrafficCounter/src/opttree.cpp +++ b/plugins/TrafficCounter/src/opttree.cpp @@ -36,7 +36,7 @@ static void OptTree_TranslateItem(HWND hwndTree, HTREEITEM hItem) tvi.pszText = buf; tvi.cchTextMax = _countof(buf); SendMessage(hwndTree, TVM_GETITEM, 0, (LPARAM)&tvi); - // , . + // Проверим, надо ли переводить. if ((tvi.lParam != -1) && (pOptions[tvi.lParam].dwFlag & OPTTREE_NOTRANSLATE)) return; tvi.pszText = TranslateW(tvi.pszText); SendMessage(hwndTree, TVM_SETITEM, 0, (LPARAM)&tvi); diff --git a/plugins/TrafficCounter/src/opttree.h b/plugins/TrafficCounter/src/opttree.h index 8c80b599eb..4fde5a2387 100644 --- a/plugins/TrafficCounter/src/opttree.h +++ b/plugins/TrafficCounter/src/opttree.h @@ -24,7 +24,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #ifndef __opttree_h__ #define __opttree_h__ -// +// дыруш #define OPTTREE_CHECK 0 #define OPTTREE_INVISIBLE 2 #define OPTTREE_NOTRANSLATE 4 diff --git a/plugins/TrafficCounter/src/statistics.cpp b/plugins/TrafficCounter/src/statistics.cpp index 342b1d8fa2..5451e7158e 100644 --- a/plugins/TrafficCounter/src/statistics.cpp +++ b/plugins/TrafficCounter/src/statistics.cpp @@ -17,13 +17,13 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* ====================================================================================== - -: Mironych +Здесь содержатся переменные и функции для работы со статистикой +Автор: Mironych =======================================================================================*/ #include "stdafx.h" -WORD Stat_SelAcc; // +WORD Stat_SelAcc; // Выбранные аккаунты в окне статистики HWND hListAccs; @@ -34,7 +34,7 @@ INT_PTR CALLBACK DlgProcOptStatistics(HWND hwndDlg, UINT msg, WPARAM wParam, LPA switch (msg) { case WM_INITDIALOG: TranslateDialogDefault(hwndDlg); - // ListBox c . + // Создаём ListBox c перечнем аккаунтов. hListAccs = CreateWindowEx(WS_EX_CLIENTEDGE, L"ListBox", nullptr, WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_TABSTOP | LBS_NOINTEGRALHEIGHT | LBS_EXTENDEDSEL | LBS_NOTIFY, @@ -42,19 +42,19 @@ INT_PTR CALLBACK DlgProcOptStatistics(HWND hwndDlg, UINT msg, WPARAM wParam, LPA hwndDlg, nullptr, nullptr, nullptr); SendMessage(hListAccs, WM_SETFONT, (WPARAM)(HFONT)GetStockObject(DEFAULT_GUI_FONT), 0); for (i = 0; i < NumberOfAccounts; i++) { - // + // Готовим список аккаунтов if (ProtoList[i].tszAccountName) SendMessage(hListAccs, LB_ADDSTRING, 0, (LPARAM)ProtoList[i].tszAccountName); } for (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")); SendDlgItemMessage(hwndDlg, IDC_COMBO_UNITS, CB_INSERTSTRING, -1, (LPARAM)TranslateT("KB")); SendDlgItemMessage(hwndDlg, IDC_COMBO_UNITS, CB_INSERTSTRING, -1, (LPARAM)TranslateT("MB")); SendDlgItemMessage(hwndDlg, IDC_COMBO_UNITS, CB_INSERTSTRING, -1, (LPARAM)TranslateT("Adaptive")); SendDlgItemMessage(hwndDlg, IDC_COMBO_UNITS, CB_SETCURSEL, unOptions.Stat_Units, 0); - // + // Готовим закладки { TCITEM tci; tci.mask = TCIF_TEXT; @@ -70,7 +70,7 @@ INT_PTR CALLBACK DlgProcOptStatistics(HWND hwndDlg, UINT msg, WPARAM wParam, LPA SendDlgItemMessage(hwndDlg, IDC_TAB_STATS, TCM_INSERTITEM, 4, (LPARAM)&tci); SendDlgItemMessage(hwndDlg, IDC_TAB_STATS, TCM_SETCURSEL, unOptions.Stat_Tab, 0); } - // ListView - + // Готовим ListView - колонки и стили { SendDlgItemMessage(hwndDlg, IDC_LIST_DATA, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, LVS_EX_FULLROWSELECT); SendDlgItemMessage(hwndDlg, IDC_LIST_DATA, LVM_SETUNICODEFORMAT, 1, 0); @@ -136,7 +136,7 @@ INT_PTR CALLBACK DlgProcOptStatistics(HWND hwndDlg, UINT msg, WPARAM wParam, LPA for (i = NumberOfAccounts; i--;) if (0x01 & (Stat_SelAcc >> i)) { SetFilePointer(ProtoList[i].hFile, sizeof(HOURLYSTATS), nullptr, FILE_BEGIN); - SetEndOfFile(ProtoList[i].hFile); // . + SetEndOfFile(ProtoList[i].hFile); // Усекаем файл до одной записи. ProtoList[i].NumberOfRecords = 1; ProtoList[i].AllStatistics = (HOURLYSTATS*)mir_realloc(ProtoList[i].AllStatistics, sizeof(HOURLYSTATS)); ProtoList[i].AllStatistics[0].Hour = stNow.wHour; @@ -179,10 +179,10 @@ INT_PTR CALLBACK DlgProcOptStatistics(HWND hwndDlg, UINT msg, WPARAM wParam, LPA if (!(pdi->item.mask & LVIF_TEXT)) return 0; - // . + // Если нужна надпись. if (!pdi->item.iSubItem) { EldestAcc = Stat_GetEldestAcc(Stat_SelAcc); - // ! + // Индекс применим только для самого старого аккаунта! Index = Stat_GetStartIndex(EldestAcc, unOptions.Stat_Tab, pdi->item.iItem, &st); switch (unOptions.Stat_Tab) { case 0: // Hourly @@ -196,12 +196,12 @@ INT_PTR CALLBACK DlgProcOptStatistics(HWND hwndDlg, UINT msg, WPARAM wParam, LPA GetDateFormat(LOCALE_USER_DEFAULT, DATE_SHORTDATE, &st, nullptr, pdi->item.pszText, 32); break; case 2: // Weekly - // . + // Уходим к первому понедельнику слева. SystemTimeToVariantTime(&st, &vartime); vartime -= DayOfWeek(st.wDay, st.wMonth, st.wYear) - 1; VariantTimeToSystemTime(vartime, &st); GetDateFormat(LOCALE_USER_DEFAULT, DATE_SHORTDATE, &st, nullptr, pdi->item.pszText, 32); - // . + // Теперь к воскресенью. SystemTimeToVariantTime(&st, &vartime); vartime += 6; VariantTimeToSystemTime(vartime, &st); @@ -220,14 +220,14 @@ INT_PTR CALLBACK DlgProcOptStatistics(HWND hwndDlg, UINT msg, WPARAM wParam, LPA Value = Stat_GetItemValue(Stat_SelAcc, unOptions.Stat_Tab, pdi->item.iItem, pdi->item.iSubItem); - // ListView . + // Теперь можно записать в ListView циферки. switch (pdi->item.iSubItem) { - case 1: // - case 2: // - case 3: // + case 1: // Входящий + case 2: // Исходящий + case 3: // Сумма GetFormattedTraffic(Value, unOptions.Stat_Units, pdi->item.pszText, 32); break; - case 4: // + case 4: // Время { wchar_t *Fmt[5] = { L"m:ss", L"h:mm:ss", L"h:mm:ss", L"d hh:mm:ss", L"d hh:mm:ss" }; GetDurationFormatM(Value, Fmt[unOptions.Stat_Tab], pdi->item.pszText, 32); @@ -257,10 +257,10 @@ INT_PTR CALLBACK DlgProcOptStatistics(HWND hwndDlg, UINT msg, WPARAM wParam, LPA LPNMLVCUSTOMDRAW lplvcd = (LPNMLVCUSTOMDRAW)lParam; switch (lplvcd->nmcd.dwDrawStage) { - case CDDS_PREPAINT: // ListView. + case CDDS_PREPAINT: // Перед началом рисования всего ListView. SetWindowLongPtr(hwndDlg, DWLP_MSGRESULT, CDRF_NOTIFYITEMDRAW); return TRUE; - case CDDS_ITEMPREPAINT: // . + case CDDS_ITEMPREPAINT: // Перед началом рисования строки. { COLORREF Color; BYTE r, g, b; @@ -291,7 +291,7 @@ INT_PTR CALLBACK DlgProcOptStatistics(HWND hwndDlg, UINT msg, WPARAM wParam, LPA } /* - n. +Функция читает статистику из файла для аккаунта с номером n. */ void Stat_ReadFile(BYTE n) { @@ -308,9 +308,9 @@ void Stat_ReadFile(BYTE n) ProtoList[n].hFile = CreateFile(FileName, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, nullptr, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, nullptr); GetFileSizeEx(ProtoList[n].hFile, &Size); - if (Size.QuadPart != 0) // ... + 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); @@ -320,7 +320,7 @@ 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; @@ -334,17 +334,17 @@ void Stat_ReadFile(BYTE n) Stat_CheckStatistics(n); } -/* ListView . -: hwndDialog - . */ +/* Функция готовит вывод в ListView статистики. +Аргументы: hwndDialog - хэндл окна диалога. */ void Stat_Show(HWND hwndDialog) { DWORD MaxRecords; - // . + // Нужно узнать количество записей. MaxRecords = Stat_GetRecordsNumber(Stat_GetEldestAcc(Stat_SelAcc), unOptions.Stat_Tab); - // ListView. + // Установим такое же количество строк в ListView. SendDlgItemMessage(hwndDialog, IDC_LIST_DATA, LVM_SETITEMCOUNT, MaxRecords, 0); - // . + // Надо показать самые свежие записи. SendDlgItemMessage(hwndDialog, IDC_LIST_DATA, LVM_ENSUREVISIBLE, (WPARAM)(MaxRecords - 1), 0); } @@ -361,11 +361,11 @@ void Stat_UpdateTotalTraffic(HWND hwndDialog, DWORD Incoming, DWORD Outgoing) } /* - n. - , . - ( ), - . - , . +Функция сравнивает с текущим время последней записи в статистике для аккаунта с номером n. +Если они совпадают, ничего не происходит. +Если текущее время меньше времени последней записи (часы перевели назад), +количество записей уменьшается на соответствующее количество часов. +Если текущее время больше, в статистику включается необходимое количество пустых записей. */ void Stat_CheckStatistics(BYTE n) { @@ -381,15 +381,15 @@ void Stat_CheckStatistics(BYTE n) 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); return; } - // . + // Если часы перевели назад. if (d < 0) { do { stLast.wHour--; @@ -411,14 +411,14 @@ void Stat_CheckStatistics(BYTE n) } 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); - // , ( ). + // Последняя запись из статистики понадобится для вычисления новых записей, поэтому копируем её (кроме трафика и времени). memcpy(&htTmp, &ProtoList[n].AllStatistics[ProtoList[n].NumberOfRecords - 1], sizeof(HOURLYSTATS) - 2 * sizeof(DWORD) - sizeof(WORD)); - // . + // Счётчик времени каждый час должен начинать считать с нуля. ProtoList[n].Total.TimeAtStart = GetTickCount() - stNow.wMilliseconds; do { @@ -441,7 +441,7 @@ void Stat_CheckStatistics(BYTE n) stLast.wMonth = htTmp.Month; stLast.wYear = htTmp.Year; - // . + // Добавляем записи одновременно в ОЗУ и в файл. WriteFile(ProtoList[n].hFile, &htTmp, sizeof(HOURLYSTATS), &q, nullptr); memcpy(&ProtoList[n].AllStatistics[ProtoList[n].NumberOfRecords - 1], &htTmp, sizeof(HOURLYSTATS)); @@ -449,16 +449,16 @@ void Stat_CheckStatistics(BYTE n) } } -/* , . - . -: -ItemNumber - ListView ( ). -stReq - , . +/* Функция возращает индекс первой записи в статистике, относящейся к выбранному интервалу. +При вычислении учитывается выбранный интервал и аккаунты. +Аргументы: +ItemNumber - номер строки в ListView (номер периода). +stReq - дата, соответствующая вычисленному индексу. */ DWORD Stat_GetStartIndex(BYTE AccNum, BYTE Interval, DWORD ItemNumber, SYSTEMTIME *stReq) { - DWORD Left, Right, Probe; // ( ). - SYSTEMTIME stProbe = { 0 }; // . + DWORD Left, Right, Probe; // Границы интервала для поиска (индексы статистики). + SYSTEMTIME stProbe = { 0 }; // Время тыка. signed short int d = 1; if (!ItemNumber) { @@ -469,7 +469,7 @@ DWORD Stat_GetStartIndex(BYTE AccNum, BYTE Interval, DWORD ItemNumber, SYSTEMTIM return 0; } - // , . + // Вычисляем время, соответствующее началу интервала. for (Probe = 0, Left = 1; Left < ProtoList[AccNum].NumberOfRecords; Left++) { switch (Interval) { case STAT_INTERVAL_HOUR: @@ -509,7 +509,7 @@ DWORD Stat_GetStartIndex(BYTE AccNum, BYTE Interval, DWORD ItemNumber, SYSTEMTIM Left = 0; Right = ProtoList[AccNum].NumberOfRecords - 1; - // . + // Вычисляем индекс начала интервала. while (TRUE) { if (Right - Left == 1) return Right; Probe = (Left + Right) >> 1; @@ -525,12 +525,12 @@ DWORD Stat_GetStartIndex(BYTE AccNum, BYTE Interval, DWORD ItemNumber, SYSTEMTIM return Probe; } -/* , - , - . */ +/* Функция устанавливает величину сдвига для заданного аккаунта, +то есть номер записи в статистике старейшего из выбранных аккаунтов, +дата которой соответствует началу статистики указанного аккаунта. */ void Stat_SetAccShift(BYTE AccNum, BYTE EldestAccount) { - DWORD Left, Right, Probe = 0; // ( ). + DWORD Left, Right, Probe = 0; // Границы интервала для поиска (индексы статистики). SYSTEMTIME stReq = { 0 }, stProbe; signed short int d = 1; @@ -544,7 +544,7 @@ void Stat_SetAccShift(BYTE AccNum, BYTE EldestAccount) stReq.wMonth = ProtoList[AccNum].AllStatistics[0].Month; stReq.wYear = ProtoList[AccNum].AllStatistics[0].Year; - // . + // Вычисляем индекс начала интервала. Left = 0; Right = ProtoList[EldestAccount].NumberOfRecords - 1; while (TRUE) { if (Right - Left == 1) { @@ -564,13 +564,13 @@ void Stat_SetAccShift(BYTE AccNum, BYTE EldestAccount) ProtoList[AccNum].Shift = Probe; } -/* , - ListView. -: -SelectedAccs - , ; -Interval - ; -ItemNum - ListVew; -SubitemNum - , . */ +/* Функция вычисляет значение, соответствующее указанному подэлементу +указанной строки ListView. +Аргументы: +SelectedAccs - слово, в котором единичные биты соответствуют выбранным аккаунтам; +Interval - выбранный интервал; +ItemNum - номер строки в ListVew; +SubitemNum - номер колонки, определяет вид информации. */ DWORD Stat_GetItemValue(WORD SelectedAccs, BYTE Interval, DWORD ItemNum, BYTE SubItemNum) { @@ -592,29 +592,29 @@ DWORD Stat_GetItemValue(WORD SelectedAccs, BYTE Interval, DWORD ItemNum, BYTE Su for (i = 0;;) { if (IndexM >= 0) switch (SubItemNum) { - case 1: // + case 1: // Входящий Result += ProtoList[a].AllStatistics[IndexM].Incoming; break; - case 2: // + case 2: // Исходящий Result += ProtoList[a].AllStatistics[IndexM].Outgoing; break; - case 3: // + case 3: // Сумма Result += ProtoList[a].AllStatistics[IndexM].Incoming + ProtoList[a].AllStatistics[IndexM].Outgoing; break; - case 4: // + case 4: // Время Result += ProtoList[a].AllStatistics[IndexM].Time; break; } - IndexM++; IndexP++; // . + IndexM++; IndexP++; // Переходим к следующей записи. if (IndexM == ProtoList[a].NumberOfRecords) break; - // ? + // Когда остановиться? switch (Interval) { case STAT_INTERVAL_HOUR: - i = 1; // . + i = 1; // Новый час начинается каждый час. break; case STAT_INTERVAL_DAY: i = (0 == ProtoList[EldestAcc].AllStatistics[IndexP].Hour); @@ -643,16 +643,16 @@ DWORD Stat_GetItemValue(WORD SelectedAccs, BYTE Interval, DWORD ItemNum, BYTE Su return Result; } -/* - . */ +/* Функция возвращает количество записей в статистике для +заданного аккаунта и заданного интервала. */ DWORD Stat_GetRecordsNumber(BYTE AccNum, BYTE Interval) { DWORD Result, i; - // . + // Нужно узнать количество записей. switch (Interval) { case STAT_INTERVAL_HOUR: - Result = ProtoList[AccNum].NumberOfRecords; // . + Result = ProtoList[AccNum].NumberOfRecords; // Для почасовой статистики совпадает. break; case STAT_INTERVAL_DAY: for (Result = 1, i = ProtoList[AccNum].NumberOfRecords - 1; i--;) @@ -688,16 +688,16 @@ BYTE Stat_GetEldestAcc(WORD SelectedAccs) { BYTE Result, i; - // , . - // ( .) + // Узнаём номер аккаунта из числа выбранных, имеющего самую старую первую запись. + // (Это аккаунт с максимальным количеством записей.) for (Result = i = 0; i < NumberOfAccounts; i++) { - // - . + // Надо с чего-то начать поиск. if (0x01 & (SelectedAccs >> i)) { Result = i; break; } } - // . + // Продолжаем поиск. for (; ++i < NumberOfAccounts;) { if (0x01 & (SelectedAccs >> i) && (ProtoList[i].NumberOfRecords > ProtoList[Result].NumberOfRecords)) Result = i; diff --git a/plugins/TrafficCounter/src/stdafx.h b/plugins/TrafficCounter/src/stdafx.h index 2868dc3b87..edd4494e3a 100644 --- a/plugins/TrafficCounter/src/stdafx.h +++ b/plugins/TrafficCounter/src/stdafx.h @@ -65,53 +65,53 @@ typedef struct typedef struct tagTimer { - DWORD TimeAtStart; // - . - DWORD Timer; // . + DWORD TimeAtStart; // Время в момент запуска таймера - в миллисекундах. + DWORD Timer; // Количество секунд со времени запуска таймера. } TIMER; typedef struct { - char *name; // . + char *name; // Имя аккаунта. - TIMER Session; // ( ). - TIMER Total; // . + TIMER Session; // Таймер текущей сессии (протокол в онлайне). + TIMER Total; // Таймер общий. - DWORD TotalRecvTraffic, // ( ) + DWORD TotalRecvTraffic, // Общий трафик протокола (за выбранный период) TotalSentTraffic, - CurrentRecvTraffic, // ( ) + CurrentRecvTraffic, // Текущий трафик протокола (за сессию) CurrentSentTraffic; union { BYTE Flags; struct { - unsigned int Reserv0:1; // - . - unsigned int Visible:1; // = 1 - - unsigned int Enabled:1; // = 1 - - unsigned int State:1; // = 1 - + unsigned int Reserv0:1; // Активность потеряла смысл - статистика ведётся по всем аккаунтам. + unsigned int Visible:1; // = 1 - аккаунт будет показываться во фрейме счётчиков + unsigned int Enabled:1; // = 1 - аккаунт включен и не прячется + unsigned int State:1; // = 1 - аккаунт сейчас онлайн unsigned int Reserv1:3; }; }; - // 0.1.1.0. - DWORD NumberOfRecords; // . - HOURLYSTATS *AllStatistics; // . - HANDLE hFile; // . + // Добавлено в версии 0.1.1.0. + DWORD NumberOfRecords; // Количество часов в общей статистике. + HOURLYSTATS *AllStatistics; // Полная статистика вместе со статистикой онлайна. + HANDLE hFile; // Файл с сохранённой статистикой данного протокола. - DWORD StartIndex; // , . - DWORD StartIncoming; // . - DWORD StartOutgoing; // . + DWORD StartIndex; // Номер записи в статистике, бывший актуальным на момент запуска. + DWORD StartIncoming; // Значение входящего трафика на момент запуска. + DWORD StartOutgoing; // Значение исходящего трафика на момент запуска. // 0.1.1.5. - DWORD Shift; // , - // . + DWORD Shift; // Номер записи в статистике старейшего выбранного аккаунта, + // дата которой соответствует началу статистики данного аккаунта. // 0.1.1.6 - wchar_t *tszAccountName; // . + wchar_t *tszAccountName; // Человеческое имя аккаунта для использования в графическом интерфейсе. } PROTOLIST; //--------------------------------------------------------------------------------------------- -// +// Различные флаги //--------------------------------------------------------------------------------------------- typedef union { @@ -166,7 +166,7 @@ extern COLORREF KeyColor; extern HGENMENU hTrafficMainMenuItem; extern WORD Stat_SelAcc; -extern OPTTREE_OPTION *pOptions; // TrafficCounter.c. +extern OPTTREE_OPTION *pOptions; // Объявлено в модуле TrafficCounter.c. extern PROTOLIST OverallInfo; #endif diff --git a/plugins/TrafficCounter/src/vars.cpp b/plugins/TrafficCounter/src/vars.cpp index b7df5fb1ba..fdbb22892b 100644 --- a/plugins/TrafficCounter/src/vars.cpp +++ b/plugins/TrafficCounter/src/vars.cpp @@ -17,8 +17,8 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* ====================================================================================== - Variables -: Mironych +Здесь содержатся функции для поддержки плагина Variables +Автор: Mironych =======================================================================================*/ #include "stdafx.h" @@ -50,7 +50,7 @@ static wchar_t* GetTraffic(ARGUMENTSINFO *ai) } } else - { // , + { // Ищем индекс протокола, переданного первым аргументом for (tmp = ed = 0; ed < NumberOfAccounts; ed++) { if (!ProtoList[ed].name) continue; @@ -61,7 +61,7 @@ static wchar_t* GetTraffic(ARGUMENTSINFO *ai) tmprn = ProtoList[ed].CurrentRecvTraffic; tmpst = ProtoList[ed].TotalSentTraffic; tmprt = ProtoList[ed].TotalRecvTraffic; - tmp = 0xAA; // , + tmp = 0xAA; // Признак того, что протокол был найден } mir_free(buf); } @@ -98,8 +98,8 @@ static wchar_t* GetTraffic(ARGUMENTSINFO *ai) if (!mir_wstrcmp(ai->targv[4], L"d")) ed = 3; else return nullptr; - // . - // . + // Получаем форматированную строку и возвращаем указатель на неё. + // Сначала узнаем размер буфера. size_t l = GetFormattedTraffic(tmp, ed, nullptr, 0); wchar_t *res = (wchar_t*)mir_alloc(l * sizeof(wchar_t)); if (!res) return nullptr; @@ -117,7 +117,7 @@ static wchar_t* GetTime(ARGUMENTSINFO *ai) if (ai->argc != 4) return nullptr; - // , + // Ищем индекс протокола, переданного первым аргументом for (flag = ed = 0; ed < NumberOfAccounts; ed++) { wchar_t *buf; @@ -147,8 +147,8 @@ static wchar_t* GetTime(ARGUMENTSINFO *ai) if (flag != 0xAA) return nullptr; - // . - // . + // Получаем форматированную строку и возвращаем указатель на неё. + // Сначала узнаем размер буфера. size_t l = GetDurationFormatM(Duration, ai->targv[3], nullptr, 0); wchar_t *res = (wchar_t*)mir_alloc(l * sizeof(wchar_t)); if (!res) return nullptr; @@ -166,14 +166,14 @@ void RegisterVariablesTokens(void) memset(&trs, 0, sizeof(trs)); trs.cbSize = sizeof(TOKENREGISTER); - // , + // Функция, возвращающая трафик trs.tszTokenString = L"tc_GetTraffic"; trs.parseFunctionT = GetTraffic; trs.szHelpText = "Traffic counter\t(A,B,C,D)\tGet traffic counter value. A: OR overall OR summary; B: now OR total; C: sent OR received OR both; D: b - in bytes, k - in kilobytes, m - in megabytes, d - dynamic"; trs.flags = TRF_TCHAR | TRF_PARSEFUNC | TRF_FUNCTION | TRF_FREEMEM; trs.memType = TR_MEM_MIRANDA; CallService(MS_VARS_REGISTERTOKEN, 0, (LPARAM)&trs); - // , + // Функция, возвращающая время trs.tszTokenString = L"tc_GetTime"; trs.parseFunctionT = GetTime; trs.szHelpText = "Traffic counter\t(A,B,C)\tGet time counter value. A: OR summary; B: now OR total; C: format"; diff --git a/plugins/TrafficCounter/src/version.h b/plugins/TrafficCounter/src/version.h index 1b0394a143..46154c826f 100644 --- a/plugins/TrafficCounter/src/version.h +++ b/plugins/TrafficCounter/src/version.h @@ -11,4 +11,4 @@ #define __AUTHOR "Ghost, Mironych" #define __AUTHOREMAIL "" #define __AUTHORWEB "https://miranda-ng.org/p/TrafficCounter/" -#define __COPYRIGHT " 2002-2006 Ghost, 2007-2012 Mironych" +#define __COPYRIGHT "© 2002-2006 Ghost, 2007-2012 Mironych" -- cgit v1.2.3