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/icq_fr.pas

595 lines
17 KiB
Plaintext

unit icq_fr;
{$I RnQConfig.inc}
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
ComCtrls, StdCtrls, ExtCtrls, RnQButtons, RnQSpin, RDGlobal,
selectcontactsDlg, RnQPrefsLib,
Mask, Menus;
{$I NoRTTI.inc}
type
TicqFr = class(TPrefFrame)
plBg: TPanel;
O: TPageControl;
TS1: TTabSheet;
birthGrp: TRadioGroup;
addedYouChk: TCheckBox;
clientidChk: TCheckBox;
webawareChk: TCheckBox;
visibilityexploitChk: TCheckBox;
dcGrp: TRadioGroup;
authNeededChk: TCheckBox;
AddTrafTB: TTabSheet;
GBTyping: TGroupBox;
Label2: TLabel;
Label3: TLabel;
ChkSendTyping: TCheckBox;
MTNIdleSpin: TRnQSpinEdit;
GBInvis: TGroupBox;
Label1: TLabel;
ChkinvisCheck: TCheckBox;
CheckInvisSpin: TRnQSpinEdit;
ChkInvisSend: TCheckBox;
ChkInvisGoOfl: TCheckBox;
ShwOfflBox: TCheckBox;
ChkSupInvChk: TCheckBox;
ChkTyping: TCheckBox;
SendUTF8Chk: TCheckBox;
Label4: TLabel;
ChkIntervSpin: TRnQSpinEdit;
Label5: TLabel;
UTF8MsgsChk: TCheckBox;
ChkInvisRG: TRadioGroup;
ProtVerCBox: TComboBox;
AutoReqXStChk: TCheckBox;
TestWWBtn: TRnQButton;
SBSelInvisCl: TRnQButton;
MsgCryptChk: TCheckBox;
useSSIChk: TCheckBox;
PrivacyGrp: TRadioGroup;
AvatarsTS: TTabSheet;
AvatarGrp: TGroupBox;
AvtAutLoadChk: TCheckBox;
AvtAutGetChk: TCheckBox;
CheckBox1: TCheckBox;
RnQSpinEdit1: TRnQSpinEdit;
NotDnlddInfoChk: TCheckBox;
SupAvtChk: TCheckBox;
UseLSIChk: TCheckBox;
ShowInvChk: TCheckBox;
CapEdit: TMaskEdit;
CapsPpp: TPopupMenu;
AddCapsBtn: TRnQButton;
AddCapsChk: TCheckBox;
CapsLabel: TLabel;
FileTrTS: TTabSheet;
FTPortsEdit: TLabeledEdit;
SecTS: TTabSheet;
pwdBox: TEdit;
Label23: TLabel;
SaveMD5chk: TCheckBox;
LoginRG: TRadioGroup;
AdvMsgChk: TCheckBox;
XMPPChk: TCheckBox;
bdayBox: TDateTimePicker;
procedure SBSelInvisClClick(Sender: TObject);
procedure UpdVis1(Sender: TObject; var Key: Word; Shift: TShiftState);
procedure UpdVis(Sender: TObject);
procedure SpeedButton1Click(Sender: TObject);
procedure AddCapsChkClick(Sender: TObject);
procedure AddCapsBtnClick(Sender: TObject);
procedure onCapsMenuClick(Sender: TObject);
procedure CapEditChange(Sender: TObject);
private
{ Private declarations }
// var
wnd: TselectCntsFrm;
public
{ Public declarations }
procedure CloseAction(Sender: TObject);
procedure initPage; Override; final;
procedure unInitPage; Override; final;
procedure applyPage; Override; final;
procedure resetPage; Override; final;
procedure updateVisPage; Override; final;
end;
implementation
{$R *.dfm}
uses
utilLib, RnQLangs, RDUtils, RnQCrypt, RnQPics,
ICQv9, Protocol_ICQ, ICQConsts, RnQProtocol, // contacts,
RnQMenu, menusUnit, themesLib, globalLib,
RQUtil, RnQFileUtil, RnQDialogs, mainDlg;
type
TCapsRec = record
v: AnsiString;
S: String;
pic: TPicName;
end;
const
CliCaps: array [0 .. 3] of TCapsRec = ((v: '&RQinside'; S: '&RQ'; pic: PIC_CLI_NRQ), (v: 'Smaper '; S: 'Smaper';
pic: PIC_CLI_smaper), (v: 'PIGEON!'; S: 'Pigeon'; pic: PIC_CLI_pigeon), (v: 'SIM client'; S: 'SIM'; pic: PIC_CLI_SIM));
TypNotifCap = 'Typing Notification';
ChkInvCap = 'Support invisibility check';
var
needSaveChkList: Boolean;
procedure TicqFr.initPage;
var
I: Integer;
begin
pwdBox.onKeyDown := RnQmain.pwdboxKeyDown;
// pwdBox.Width:= ServerCBox.Width;
pwdBox.Width := TS1.Clientwidth - GAP_SIZE2 - pwdBox.Left;
birthGrp.Width := TS1.Clientwidth - GAP_SIZE2;
birthGrp.Left := GAP_SIZE;
dcGrp.Left := GAP_SIZE;
PrivacyGrp.Left := GAP_SIZE;
dcGrp.Width := birthGrp.Width;
{$IFDEF UseNotSSI}
// dcGrp.width := 190;
LoginRG.Width := dcGrp.Width;
// LoginRG.left := birthGrp.width - LoginRG.width + GAP_SIZE;
LoginRG.Left := GAP_SIZE;
LoginRG.Visible := True;
// OldxStChk.Visible := True;
useSSIChk.Visible := True;
UseLSIChk.Visible := True;
{$ELSE}
LoginRG.Visible := False;
// OldxStChk.Visible := False;
useSSIChk.Visible := False;
UseLSIChk.Visible := False;
{$ENDIF UseNotSSI}
PrivacyGrp.Top := dcGrp.Top + dcGrp.height + GAP_SIZEd2;
PrivacyGrp.Width := birthGrp.Width;
// birthGrp.top:= dcGrp.top + dcGrp.height + GAP_SIZE;
birthGrp.Top := PrivacyGrp.Top + PrivacyGrp.height + GAP_SIZEd2;
bdayBox.Top := birthGrp.Top + birthGrp.height - bdayBox.height - GAP_SIZE;
GBTyping.Width := birthGrp.Width;
GBInvis.Width := birthGrp.Width;
AvatarGrp.Width := birthGrp.Width;
// GBTyping.Caption := ' ' + getTranslation(TypNotifCap);
// GBInvis.Caption := ' ' + getTranslation(ChkInvCap);
bdayBox.Format := getTranslation('MMMM d');
{$IFDEF RNQ_FULL}
{$ELSE}
// TabSheet2.TabVisible := false;
{$ENDIF}
webawareChk.Width := TestWWBtn.Left - webawareChk.Left - 5;
ShwOfflBox.Width := GBInvis.Width - 10;
for I := 0 to Length(CliCaps) - 1 do
AddToMenu(CapsPpp.Items, dupAmperstand(CliCaps[I].S), CliCaps[I].pic, False, onCapsMenuClick, False).Tag := I;
end;
procedure TicqFr.unInitPage;
begin
clearMenu(CapsPpp.Items);
end;
procedure TicqFr.AddCapsBtnClick(Sender: TObject);
begin
// with TRnQButton(Sender).BoundsRect do
// with ClientToScreen(point(left,bottom)) do
with mousePos do
CapsPpp.Popup(X, Y)
end;
procedure TicqFr.onCapsMenuClick(Sender: TObject);
var
S: RawByteString;
begin
// with TRnQButton(Sender).BoundsRect do
// with ClientToScreen(point(left,bottom)) do
// with mousePos do
// CapsPpp.Popup(X,Y)
S := CliCaps[TMenuItem(Sender).Tag].v;
// CapEdit.Text := str2hex(s, ' ');
CapEdit.Text := str2hexU(S);
// CapEdit.EditText := str2hex(s);
end;
procedure TicqFr.CapEditChange(Sender: TObject);
begin
CapsLabel.Caption := hex2StrSafe(CapEdit.Text);
end;
procedure TicqFr.AddCapsChkClick(Sender: TObject);
begin
updateVisPage;
end;
procedure TicqFr.applyPage;
var
mustUpdPerms, mustUpdSts, mustUpdCaps: Boolean;
// tempStatus : byte;
icq: TICQSession;
I, l: Integer;
begin
if not Assigned(Account.AccProto) or (Account.AccProto.ProtoName <> 'ICQ') then
Exit;
icq := TICQSession(Account.AccProto.ProtoElem);
if (icq.saveMD5Pwd <> SaveMD5chk.Checked) then
begin
icq.saveMD5Pwd := SaveMD5chk.Checked;
if icq.saveMD5Pwd then
pwdBox.Text := MD5Pass(pwdBox.Text)
else
pwdBox.Text := '';
end;
if not icq.saveMD5Pwd then
icq.pwd := pwdBox.Text;
// ICQ.loginServerPort:=portBox.text;
mustUpdCaps := False;
mustUpdSts := False;
mustUpdPerms := False;
// sendInterests := sendInterChk.Checked;
if sendBalloonOn <> birthGrp.itemindex then
begin
sendBalloonOn := birthGrp.itemindex;
icq.applyBalloon;
mustUpdSts := True;
end;
sendBalloonOnDate := bdayBox.Date;
case dcGrp.itemindex of
0:
if icq.DCmode <> DC_NONE then
begin
mustUpdSts := True;
icq.DCmode := DC_NONE;
end;
1:
if icq.DCmode <> DC_ROSTER then
begin
mustUpdSts := True;
icq.DCmode := DC_ROSTER;
end;
2:
if icq.DCmode <> DC_EVERYONE then
begin
mustUpdSts := True;
icq.DCmode := DC_EVERYONE;
end;
3:
if icq.DCmode <> DC_FAKE then
begin
mustUpdSts := True;
icq.DCmode := DC_FAKE;
end;
end;
if icq.showclientid <> clientidChk.Checked then
begin
icq.showclientid := clientidChk.Checked;
mustUpdSts := True;
mustUpdCaps := True;
end;
if (AddCapsChk.Checked <> AddExtCliCaps) then
begin
AddExtCliCaps := AddCapsChk.Checked;
mustUpdCaps := True;
end;
if (ExtClientCaps <> hex2StrSafe(CapEdit.Text)) then
begin
if Length(CapEdit.Text) > 2 then
begin
ExtClientCaps := hex2StrSafe(CapEdit.Text);
l := Length(ExtClientCaps);
if l < 16 then
begin
SetLength(ExtClientCaps, 16);
for I := l + 1 to 16 do
ExtClientCaps[I] := #00;
end;
end
else
ExtClientCaps := '';
if AddExtCliCaps then
mustUpdCaps := True;
end;
if showInvisSts <> ShowInvChk.Checked then
begin
if not showInvisSts and (icq.visibility in [VI_invisible, VI_privacy]) then
begin
icq.sendStatusCode(False);
mustUpdSts := False;
end;
showInvisSts := ShowInvChk.Checked;
end;
// ProtVerCBox
if icq.SupportUTF <> SendUTF8Chk.Checked then
begin
icq.SupportUTF := SendUTF8Chk.Checked;
mustUpdCaps := True;
end;
if icq.UseCryptMsg <> MsgCryptChk.Checked then
begin
icq.UseCryptMsg := MsgCryptChk.Checked;
mustUpdCaps := True;
end;
icq.SendingUTF := UTF8MsgsChk.Checked;
icq.UseAdvMsg := AdvMsgChk.Checked;
useFBcontacts := XMPPChk.Checked;
warnVisibilityExploit := visibilityexploitChk.Checked;
if icq.webaware <> webawareChk.Checked then
begin
icq.webaware := webawareChk.Checked;
// ICQ.webaware:=webaware;
mustUpdPerms := True;
mustUpdSts := True;
end;
if PrivacyGrp.itemindex <> icq.showInfo then
begin
icq.showInfo := PrivacyGrp.itemindex;
mustUpdPerms := True;
// mustUpdSts := True;
end;
sendTheAddedYou := addedYouChk.Checked;
if icq.authNeeded <> authNeededChk.Checked then
begin
icq.authNeeded := authNeededChk.Checked;
mustUpdPerms := True;
mustUpdSts := True;
end;
if icq.SupportTypingNotif <> ChkTyping.Checked then
begin
mustUpdCaps := True;
icq.SupportTypingNotif := ChkTyping.Checked;
end;
icq.isSendTypingNotif := ChkSendTyping.Checked;
typingInterval := MTNIdleSpin.AsInteger;
{$IFDEF CHECK_INVIS}
supportInvisCheck := ChkSupInvChk.Checked;
CheckInvis.AutoCheck := ChkinvisCheck.Checked;
CheckInvis.AutoCheckInterval := CheckInvisSpin.AsInteger;
CheckInvis.ChkInvisInterval := ChkIntervSpin.Value;
CheckInvis.AutoCheckOnSend := ChkInvisSend.Checked;
CheckInvis.AutoCheckGoOfflineUsers := ChkInvisGoOfl.Checked;
CheckInvis.Method := ChkInvisRG.itemindex;
showCheckedInvOfl := ShwOfflBox.Checked;
{$ENDIF}
icq.AvatarsSupport := SupAvtChk.Checked;
icq.AvatarsAutoGet := AvtAutLoadChk.Checked;
icq.AvatarsAutoGetSWF := AvtAutGetChk.Checked;
AvatarsNotDnlddInform := NotDnlddInfoChk.Checked;
autoRequestXsts := AutoReqXStChk.Checked;
{$IFDEF UseNotSSI}
{ if OldxStChk.Checked <> UseOldXSt then
begin
UseOldXSt := OldxStChk.Checked;
try
tempStatus := icq.curXStatus;
if (not UseOldXSt and (xsf_6 in XStatusArray[tempStatus].flags))
or (UseOldXSt and (xsf_Old in XStatusArray[tempStatus].flags)) then
else
icq.curXStatus := 0;
except
end;
mustUpdCaps := True;
mustUpdSts := True;
end; }
LoginMD5 := LoginRG.itemindex = 1;
useSSI2 := useSSIChk.Checked;
useLSI2 := UseLSIChk.Checked;
{$ENDIF UseNotSSI}
if mustUpdCaps and icq.isOnline then
icq.sendCapabilities;
if mustUpdSts and icq.isOnline then
icq.sendStatusCode;
if mustUpdPerms and icq.isOnline then
begin
icq.sendPrivacy(PrivacyGrp.itemindex, webawareChk.Checked, authNeededChk.Checked);
// Reload UIN info to refresh this ICQ settings page
icq.sendAdvQueryInfo(Account.AccProto.MyAccNum, '');
end;
if needSaveChkList then
saveListsDelayed := True;
// if not saveFile(userPath+CheckInvisFileName+'.txt', CheckInvis.CList.toString, True) then
// msgDlg(getTranslation('Error saving Check-invisibility list'),mtError);
end;
procedure TicqFr.resetPage;
var
icq: TICQSession;
begin
if not Assigned(Account.AccProto) or (Account.AccProto.ProtoName <> 'ICQ') then
Exit;
icq := TICQSession(Account.AccProto.ProtoElem);
pwdBox.Text := icq.pwd;
SaveMD5chk.Checked := icq.saveMD5Pwd;
// sendInterChk.Checked := sendInterests;
birthGrp.itemindex := sendBalloonOn;
bdayBox.Date := sendBalloonOnDate;
case icq.DCmode of
DC_ROSTER:
dcGrp.itemindex := 1;
DC_EVERYONE:
dcGrp.itemindex := 2;
// DC_FAKE: dcGrp.ItemIndex := 3;
else
// DC_NONE:
dcGrp.itemindex := 0;
end;
visibilityexploitChk.Checked := warnVisibilityExploit;
clientidChk.Checked := icq.showclientid;
AddCapsChk.Checked := AddExtCliCaps;
CapEdit.Text := str2hexU(ExtClientCaps);
SendUTF8Chk.Checked := icq.SupportUTF;
UTF8MsgsChk.Checked := icq.SendingUTF;
MsgCryptChk.Checked := icq.UseCryptMsg;
AdvMsgChk.Checked := icq.UseAdvMsg;
XMPPChk.Checked := useFBcontacts;
ShowInvChk.Checked := showInvisSts;
addedYouChk.Checked := sendTheAddedYou;
webawareChk.Checked := icq.webaware;
PrivacyGrp.itemindex := icq.showInfo;
authNeededChk.Checked := icq.authNeeded;
ChkTyping.Checked := icq.SupportTypingNotif;
ChkSendTyping.Checked := icq.isSendTypingNotif;
MTNIdleSpin.Value := typingInterval;
{$IFDEF CHECK_INVIS}
ChkSupInvChk.Checked := supportInvisCheck;
ChkinvisCheck.Checked := CheckInvis.AutoCheck;
CheckInvisSpin.Value := CheckInvis.AutoCheckInterval;
ChkIntervSpin.Value := CheckInvis.ChkInvisInterval;
ChkInvisSend.Checked := CheckInvis.AutoCheckOnSend;
ChkInvisGoOfl.Checked := CheckInvis.AutoCheckGoOfflineUsers;
ChkInvisRG.itemindex := CheckInvis.Method;
ShwOfflBox.Checked := showCheckedInvOfl;
{$ELSE}
ChkSupInvChk.Checked := False;
ChkSupInvChk.Enabled := False;
{$ENDIF}
SupAvtChk.Checked := icq.AvatarsSupport;
AvtAutLoadChk.Checked := icq.AvatarsAutoGet;
AvtAutGetChk.Checked := icq.AvatarsAutoGetSWF;
NotDnlddInfoChk.Checked := AvatarsNotDnlddInform;
AutoReqXStChk.Checked := autoRequestXsts;
needSaveChkList := False;
{$IFDEF UseNotSSI}
if LoginMD5 then
LoginRG.itemindex := 1
else
LoginRG.itemindex := 0;
useSSIChk.Checked := useSSI2;
UseLSIChk.Checked := useLSI2;
// OldxStChk.Checked := UseOldXSt;
{$ELSE UseNotSSI}
useSSIChk.Checked := True;
useSSIChk.Enabled := False;
{$ENDIF UseNotSSI}
end;
procedure TicqFr.updateVisPage;
begin
GBTyping.Visible := ChkTyping.Checked;
// if ChkTyping.Checked then
// begin
// ChkTyping.Caption := '';
// ChkTyping.Width := ChkTyping.Height;
// end
// else
// begin
ChkTyping.Caption := getTranslation(TypNotifCap);
ChkTyping.Width := GetWidth(ChkTyping);
// end;
// GBTyping.Enabled := ChkTyping.Checked;
{$IFDEF CHECK_INVIS}
GBInvis.Visible := ChkSupInvChk.Checked;
{$ELSE ~CHECK_INVIS}
GBInvis.Visible := False;
{$ENDIF CHECK_INVIS}
// if ChkSupInvChk.Checked then
// begin
// ChkSupInvChk.Caption := '';
// ChkSupInvChk.Width := ChkTyping.Height;
// end
// else
// begin
ChkSupInvChk.Caption := getTranslation(ChkInvCap);
ChkSupInvChk.Width := GetWidth(ChkSupInvChk);
// end;
AvatarGrp.Visible := SupAvtChk.Checked;
SupAvtChk.Width := GetWidth(SupAvtChk);
bdayBox.Enabled := birthGrp.itemindex = 3;
webawareChk.Enabled := Assigned(Account.AccProto) and Account.AccProto.isOnline;
PrivacyGrp.Enabled := webawareChk.Enabled;
{$IFDEF UseNotSSI}
// useSSIChk.Enabled := not webawareChk.Enabled;
UseLSIChk.Enabled := useSSIChk.Enabled and useSSIChk.Checked;
{$ELSE UseNotSSI}
// useSSIChk.Enabled := False;
UseLSIChk.Enabled := useSSIChk.Enabled;
{$ENDIF UseNotSSI}
ShowInvChk.Enabled := useSSIChk.Checked;
CapEdit.Enabled := AddCapsChk.Checked;
AddCapsBtn.Enabled := AddCapsChk.Checked;
SaveMD5chk.Enabled := LoginMD5;
if not LoginMD5 then
SaveMD5chk.Checked := False;
Label23.Enabled := not SaveMD5chk.Checked;
pwdBox.Enabled := Label23.Enabled;
end;
procedure TicqFr.SpeedButton1Click(Sender: TObject);
begin
openURL('http://wwp.icq.com/scripts/online.dll?icq=' + Account.AccProto.getMyInfo.UID2cmp + '&img=3')
end;
procedure TicqFr.UpdVis(Sender: TObject);
begin
updateVisPage;
end;
procedure TicqFr.UpdVis1(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
updateVisPage;
end;
procedure TicqFr.SBSelInvisClClick(Sender: TObject);
begin
if Assigned(wnd) then
SetForegroundWindow(wnd.Handle)
else
begin
wnd := TselectCntsFrm.doAll(TForm(parent), 'Select Invisibility check list', 'Select', Account.AccProto,
Account.AccProto.readList(LT_ROSTER).clone, // .add(notinlist),
CloseAction, [sco_multi, sco_groups, sco_predefined], @wnd, True);
// wnd.toggle(thisContact);
{$IFDEF CHECK_INVIS}
CheckInvis.CList.resetEnumeration;
while CheckInvis.CList.hasMore do
wnd.toggle(CheckInvis.CList.getNext);
{$ENDIF}
// wnd.icon:=theme.getIco(ICO_MSG);
// wnd.extra:=Tincapsulate.aString(msg);
end;
needSaveChkList := True;
end;
procedure TicqFr.CloseAction(Sender: TObject);
var
wnd: TselectCntsFrm;
// cl:TcontactList;
// msg:string;
begin
wnd := (Sender as Tcontrol).parent as TselectCntsFrm;
{$IFDEF CHECK_INVIS}
CheckInvis.CList := wnd.selectedList;
{$ENDIF}
// cl.free;
wnd.extra.free;
wnd.close;
end; // sendmessage action
// INITIALIZATION
// AddPrefPage(2, TicqFr, 'ICQ');
end.