You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
RnQ/RnQ/ICQ/ICQCommon.pas

144 lines
3.5 KiB
Plaintext

{
This file is part of R&Q.
Under same license
}
unit ICQCommon;
{$I RnQConfig.inc}
interface
uses
Windows, Classes, Types, SysUtils, RnQNet, RnQPrefsLib, RnQGraphics32, RDGlobal, RDUtils, RnQPics;
{$I NoRTTI.inc}
type
{$IFDEF UID_IS_UNICODE}
TUID = String;
TUID_Char = Char;
{$ELSE ansi}
TUID = AnsiString;
TUID_Char = AnsiChar;
{$ENDIF UID_IS_UNICODE}
TUIDS = array of TUID;
PStatusProp = ^TStatusProp;
TStatusProp = record
Cptn: String;
ShortName: TPicName;
ImageName: TPicName;
idx: Byte;
end;
TStatusArray = array of TStatusProp;
TStatusMenu = array of Byte;
TOnStatusDisable = packed record
Tips,
Blinking,
Sounds,
OpenChat: Boolean;
end;
TXStatStr = record
Cap, Desc: String;
end;
TWhatLog = (WL_connected, WL_disconnected,
WL_serverGot, WL_serverSent,
WL_heSent, WL_meSent, WL_connecting,
WL_sent_text, WL_rcvd_text{$IFDEF DEBUG_PACKETS}, WL_unknown{$ENDIF DEBUG_PACKETS});
const
// Flags for messages
IF_multiple = 1 shl 0; // multiple recipients
IF_offline = 1 shl 1; // sent while you were offline
IF_urgent = 1 shl 2; // send msg urgent
IF_noblink = 1 shl 3; // send to contact list
IF_sticker = 1 shl 4; // message is a sticker
IF_no_matter = 1 shl 10; // If set, don't play sound
// Avatar type
IS_AVATAR = 0;
IS_PHOTO = 1;
IS_NONE = 2;
const
LogPics: array[TwhatLog] of TPicName = (PIC_CONNECTING, PIC_OUTGOING,
PIC_LEFT, PIC_RIGHT,
PIC_RIGHT, PIC_LEFT, PIC_CONNECTING,
PIC_LEFT, PIC_RIGHT{$IFDEF DEBUG_PACKETS}, PIC_HELP{$ENDIF DEBUG_PACKETS});
var
GMToffset:TdateTime; // add it to a GMT time, subtract it from your local time
GMToffset0:TdateTime; // For OfflineMsg-s & ViewInfo
procedure LogProtoPkt(What: TWhatLog; const Head: String; const Data: String = '');
procedure FlushLogPktFile;
implementation
uses
StrUtils, System.Threading,
{$IFDEF UNICODE}
AnsiStrings,
{$ENDIF UNICODE}
RQLog, RDFileUtil, RnQBinUtils, RQUtil, RnQGlobal, RnQCrypt,
globalLib, utilLib, themesLib, mainDlg;
var
LogPktFileData: AnsiString;
TZinfo: TTimeZoneInformation;
procedure LogProtoPkt(What: TWhatLog; const Head: String; const Data: String = '');
var
sA: RawByteString;
sU: String;
NeedHash: Boolean;
begin
NeedHash := not (What in [WL_sent_text, WL_rcvd_text, WL_serverGot, WL_serverSent]);
if NeedHash then
begin
sA := Data;
sU := '';
end
else
begin
sA := '';
sU := Data;
end;
if LogPref.pkts.onWindow then
LogEvPkt(Head, sU, sA, LogPics[What], NeedHash);
if LogPref.pkts.onFile then
begin
if needHash then
sA := hexDump(Data)
else
sA := Data;
LogPktFileData := LogPktFileData + AnsiString(Head) + CRLF + sA + CRLF;
end;
end;
procedure FlushLogPktFile;
begin
if Length(logPktFileData) > 0 then
if appendFile(logPath+packetslogFilename, logPktFileData)
or (Length(logPktFileData) > MByte) then
logPktFileData := '';
end;
initialization
GetTimeZoneInformation(TZinfo);
case GetTimeZoneInformation(TZInfo) of
TIME_ZONE_ID_STANDARD: GMToffset := TZInfo.StandardBias;
TIME_ZONE_ID_DAYLIGHT: GMToffset := TZInfo.DaylightBias;
else GMToffset := 0;
end;
GMToffset:=-(TZinfo.bias+GMToffset)/(24*60);
GMToffset0 :=-(TZinfo.bias)/(24*60);
end.