diff options
author | Kirill Volinsky <mataes2007@gmail.com> | 2017-11-28 22:12:43 +0300 |
---|---|---|
committer | Kirill Volinsky <mataes2007@gmail.com> | 2017-11-28 22:12:43 +0300 |
commit | 80221d816eeb98f0df38e0243390033c614952f3 (patch) | |
tree | 7618176108093921b6934343bc2f76a66ea97730 /plugins/TrafficCounter/src | |
parent | 25df99ba7462958f2cb9075020ec1c9a5a7c9f50 (diff) |
Source files converted to utf-8
Diffstat (limited to 'plugins/TrafficCounter/src')
-rw-r--r-- | plugins/TrafficCounter/src/TrafficCounter.cpp | 164 | ||||
-rw-r--r-- | plugins/TrafficCounter/src/TrafficCounter.h | 12 | ||||
-rw-r--r-- | plugins/TrafficCounter/src/misc.cpp | 80 | ||||
-rw-r--r-- | plugins/TrafficCounter/src/misc.h | 34 | ||||
-rw-r--r-- | plugins/TrafficCounter/src/options.cpp | 40 | ||||
-rw-r--r-- | plugins/TrafficCounter/src/opttree.cpp | 2 | ||||
-rw-r--r-- | plugins/TrafficCounter/src/opttree.h | 2 | ||||
-rw-r--r-- | plugins/TrafficCounter/src/statistics.cpp | 154 | ||||
-rw-r--r-- | plugins/TrafficCounter/src/stdafx.h | 46 | ||||
-rw-r--r-- | plugins/TrafficCounter/src/vars.cpp | 22 | ||||
-rw-r--r-- | plugins/TrafficCounter/src/version.h | 2 |
11 files changed, 279 insertions, 279 deletions
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: <ProtocolName> 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: <ProtocolName> 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"
|