UInfo.pas
Falk0ner, вс, 06/07/2008 - 15:34.
{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Author: Alexander Vaga
EMail: primary: icq2000cc@hobi.ru
secondary: alexander_vaga@hotmail.com
Web: <a href="http://icq2000cc.hobi.ru
Creation:" title="http://icq2000cc.hobi.ru
Creation:">http://icq2000cc.hobi.ru
Creation:</a> May, 2002
Legal issues: Copyright (C) 2002 by Alexander Vaga
Kyiv, Ukraine
This software is provided 'as-is', without any express or
implied warranty. In no event will the author be held liable
for any damages arising from the use of this software.
Permission is granted to anyone to use this software for any
purpose, including commercial applications, and to alter it
and redistribute it freely.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
unit UInfo;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls,
Forms, Dialogs, StdCtrls, ComCtrls, Buttons,
ExtCtrls, Animate,inifiles,
typess,main,util,packet,
AppEvnts;
type
TUserInfo = class(TForm)
UserInfoDoneBtn: TButton;
UserInfoRetrieveBtn: TButton;
InfoPage: TPageControl;
MainTab: TTabSheet;
HomeTab: TTabSheet;
MoreTab: TTabSheet;
WorkTab: TTabSheet;
InfoAboutTab: TTabSheet;
Panel1: TPanel;
UIAnime: TAnimatedImage;
GroupBox1: TGroupBox;
Label1: TLabel;
Label2: TLabel;
Label6: TLabel;
Label9: TLabel;
uinEd: TEdit;
ipEd: TEdit;
realipEd: TEdit;
verEd: TEdit;
GroupBox2: TGroupBox;
Label3: TLabel;
Label4: TLabel;
Label7: TLabel;
Label8: TLabel;
firstEd: TEdit;
lastEd: TEdit;
displayEd: TEdit;
nickEd: TEdit;
GroupBox3: TGroupBox;
Label5: TLabel;
priEd: TEdit;
Label10: TLabel;
Label11: TLabel;
secEd: TEdit;
oldEd: TEdit;
GroupBox4: TGroupBox;
cityEd: TEdit;
zipEd: TEdit;
stateEd: TEdit;
Label12: TLabel;
Label13: TLabel;
Label14: TLabel;
Label15: TLabel;
streetMemo: TMemo;
Label16: TLabel;
GroupBox5: TGroupBox;
Label17: TLabel;
Label18: TLabel;
Label19: TLabel;
phoneEd: TEdit;
cellularEd: TEdit;
faxEd: TEdit;
GroupBox6: TGroupBox;
Label20: TLabel;
Label21: TLabel;
Label22: TLabel;
tzEd: TEdit;
Edit20: TEdit;
Edit21: TEdit;
GroupBox7: TGroupBox;
Label23: TLabel;
Label24: TLabel;
Label25: TLabel;
homepageEd: TEdit;
ageEd: TEdit;
GroupBox8: TGroupBox;
Label26: TLabel;
Label27: TLabel;
Label28: TLabel;
GroupBox9: TGroupBox;
GroupBox10: TGroupBox;
Label29: TLabel;
Label30: TLabel;
Label31: TLabel;
Label32: TLabel;
Label33: TLabel;
wcityEd: TEdit;
wzipEd: TEdit;
wstateEd: TEdit;
wstreetMemo: TMemo;
GroupBox11: TGroupBox;
Label34: TLabel;
Label36: TLabel;
wphoneEd: TEdit;
wfaxEd: TEdit;
GroupBox12: TGroupBox;
Label38: TLabel;
Label39: TLabel;
companyEd: TEdit;
jobEd: TEdit;
departmentEd: TEdit;
Label35: TLabel;
Label37: TLabel;
whomepageEd: TEdit;
Label40: TLabel;
GroupBox13: TGroupBox;
aboutMemo: TMemo;
AuthLabel: TLabel;
Label43: TLabel;
GroupBox15: TGroupBox;
interMemo: TMemo;
countryCombo: TComboBox;
wcountryCombo: TComboBox;
genderCombo: TComboBox;
monthCombo: TComboBox;
lang1Combo: TComboBox;
lang2Combo: TComboBox;
lang3Combo: TComboBox;
occupationCombo: TComboBox;
dayCombo: TComboBox;
yearCombo: TComboBox;
ApplicationEvents1: TApplicationEvents;
procedure Request_Meta_Info(UIN : longint);
procedure Set_Meta_Info;
procedure UserInfoDoneBtnClick(Sender: TObject);
procedure UserInfoRetrieveBtnClick(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure SetCountry(Combo:TComboBox; Country:word);
function GetCountry(Combo:TComboBox):word;
procedure SetGender(Combo:TComboBox; Gender:byte);
function GetGender(Combo:TComboBox):byte;
procedure SetMonth(Combo:TComboBox; Month:byte);
function GetMonth(Combo:TComboBox):byte;
procedure SetLanguage(Combo:TComboBox; Lang:byte);
function GetLanguage(Combo:TComboBox):byte;
procedure SetOccupation(Combo:TComboBox; Occupation:word);
function GetOccupation(Combo:TComboBox):word;
procedure SetCombo(Combo:TComboBox; min,max,Value:word);
function GetCombo(Combo:TComboBox; min,max:byte):word;
procedure ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean);
private
{ Private declarations }
public
AutoRetrieve : boolean;
UIRecord : TListRecord;
Cookie : word;
end;
implementation
{$R *.DFM}
procedure TUserInfo.UserInfoDoneBtnClick(Sender: TObject);
begin
Close;
end;
procedure TUserInfo.Request_Meta_Info(UIN : longint);
var p,a : pPack;
begin
a := PacketNew;
PacketGoto(a,2);// a[0..1] = len
PacketAppend32(a,main.UIN);
PacketAppend16(a,swap($D007));
Cookie := random($FF) shl 8;
PacketAppend16(a,swap(Cookie));
PacketAppend16(a,swap($B204));
PacketAppend32(a,UIN);
PacketBegin(a);
PacketAppend16(a,a.length-2);
P:=CreatePacket(2,SEQ);
SNACAppend(p,$15,$2);
TLVAppend(p,1,a.length,@a.data);
PacketDelete(a);
Form1.PacketSend(p);
M(Form1.Memo,'>Request Full Info: '+s(UIN)+' '+
'Cookie:$'+inttohex(Cookie,4));
UIAnime.Active := true;
end;
procedure TUserInfo.UserInfoRetrieveBtnClick(Sender: TObject);
begin
if (OL and isLogged)then
Request_Meta_Info(UIRecord.UIN);
end;
procedure TUserInfo.FormShow(Sender: TObject);
begin
InfoPage.ActivePageIndex :=0;
with UIRecord do begin
uinEd.Text := s(UIN);
ipEd.Text := IPtoStr(IP);
realipEd.Text := IPtoStr(REAL_IP);
verEd.Text := s(VER);
firstEd.Text := FIRST;
lastEd.Text := LAST;
nickEd.Text := NICK;
displayEd.Text := NICK;
priEd.Text := PRI_E_MAIL;
secEd.Text := SEC_E_MAIL;
oldEd.Text := OLD_E_MAIL;
cityEd.Text := CITY;
stateEd.Text := STATE;
phoneEd.Text := PHONE;
faxEd.Text := FAX;
cellularEd.Text := CELLULAR;
M(streetMemo,STREET);
SetCountry(countryCombo,COUNTRY);
SetGender(genderCombo,GENDER);
ageEd.Text := s(AGE);
homepageEd.Text := HOMEPAGE;
SetCombo(yearCombo,1,99,BYEAR);
SetMonth(monthCombo,BMONTH);
SetCombo(dayCombo,1,31,BDAY);
case AUTH of
0: AuthLabel.Caption := 'Authorize';
1: AuthLabel.Caption := 'Always';
else AuthLabel.Caption := 'unknown';
end;
SetLanguage(lang1Combo,LANG1);
SetLanguage(lang2Combo,LANG2);
SetLanguage(lang3Combo,LANG3);
M(aboutMemo,ABOUT);
M(interMemo,INTERESTS);
companyEd.Text :=COMPANY;
departmentEd.Text := DEPARTMENT;
jobEd.Text := JOB;
SetOccupation(occupationCombo,Occupation);
wcityEd.Text := WCITY;
wstateEd.Text := WSTATE;
wphoneEd.Text := WPHONE;
wfaxEd.Text := WFAX;
wstreetMemo.Clear;
M(wstreetMemo,WSTREET);
SetCountry(wcountryCombo,WCOUNTRY);
whomepageEd.Text := WHOMEPAGE;
end;
if AutoRetrieve then begin
if (OL and isLogged)then
Request_Meta_Info(UIRecord.UIN);
end;
end;
procedure TUserInfo.FormClose(Sender: TObject; var Action: TCloseAction);
var i : integer;
begin
if not AutoRetrieve then begin
for i:=0 to CLNum-1 do with ContactList[i] do begin
if UIN = UIRecord.UIN then begin
ContactList[i] := UIRecord;
if NICK = '' then begin
if FIRST <> '' then NICK := FIRST
else if LAST <> '' then NICK := LAST
else NICK := s(UIN);
end; // if
Form1.WriteToContactList(ContactList[i]);
break;
end;
end; //for
for i:=0 to Form1.CL.Items.Count-1 do
if Form1.CL.Items[i].Text <> PListRecord(Form1.CL.Items[i].Data)^.NICK then
Form1.CL.Items[i].Text := PListRecord(Form1.CL.Items[i].Data)^.NICK;
end;
Destroy;
end;
procedure TUserInfo.Set_Meta_Info;
begin
// это еще старый кусок из протокола icqv5 (UDP)
// CMD_META_USER + META_CMD_SET_INFO
(*
p:=main.UDPCreateStdPacket(CMD_META_USER);
PacketAppend16(p,META_CMD_SET_INFO);
Cookie := main.UDPSeqNum2-1;
MetaUIN := main.UIN;
PacketAppendString(p,nickEd.Text);
PacketAppendString(p,firstEd.Text);
PacketAppendString(p,lastEd.Text);
PacketAppendString(p,priEd.Text);
PacketAppendString(p,secEd.Text);
PacketAppendString(p,oldEd.Text);
PacketAppendString(p,cityEd.Text);
PacketAppendString(p,stateEd.Text);
PacketAppendString(p,phoneEd.Text);
PacketAppendString(p,faxEd.Text);
PacketAppendString(p,streetMemo.Lines[0]);
PacketAppendString(p,cellularEd.Text);
try PacketAppend32(p,longint(strtoint(zipEd.Text)));
except PacketAppend32(p,-1); end;
PacketAppend16(p,GetCountry(countryCombo));
PacketAppend8(p,0); // 250 = +03:00 TimeZone
PacketAppend8(p,0); // ????
main.SendUDPCmd(p,'META_USER+SET_INFO: ['+s(main.UIN)+'] ===>');
// CMD_META_USER + META_CMD_SET_WORK
p:=main.UDPCreateStdPacket(CMD_META_USER);
PacketAppend16(p,META_CMD_SET_WORK);
PacketAppendString(p,wcityEd.Text);
PacketAppendString(p,wstateEd.Text);
PacketAppendString(p,wphoneEd.Text);
PacketAppendString(p,wfaxEd.Text);
PacketAppendString(p,wstreetMemo.Lines[0]);
try PacketAppend32(p,longint(strtoint(wzipEd.Text)));
except PacketAppend32(p,-1); end;
PacketAppend16(p,GetCountry(wcountryCombo));
PacketAppendString(p,companyEd.Text);
PacketAppendString(p,departmentEd.Text);
PacketAppendString(p,jobEd.Text);
PacketAppend16(p,GetOccupation(occupationCombo));
PacketAppendString(p,whomepageEd.Text);
main.SendUDPCmd(p,'META_USER+SET_WORK: ['+s(main.UIN)+'] ===>');
// CMD_META_USER + META_CMD_SET_MORE
p:=main.UDPCreateStdPacket(CMD_META_USER);
PacketAppend16(p,META_CMD_SET_MORE);
try PacketAppend16(p,word(strtoint(ageEd.Text)));
except PacketAppend16(p,0); end;
PacketAppend8(p,GetGender(genderCombo));
PacketAppendString(p,homepageEd.Text);
PacketAppend8(p,GetCombo(yearCombo,0,99));
PacketAppend8(p,GetMonth(monthCombo));
PacketAppend8(p,GetCombo(dayCombo,1,31));
PacketAppend8(p,GetLanguage(lang1Combo));
PacketAppend8(p,GetLanguage(lang2Combo));
PacketAppend8(p,GetLanguage(lang3Combo));
main.SendUDPCmd(p,'META_USER+SET_MORE: ['+s(main.UIN)+'] ===>');
// CMD_META_USER + META_CMD_SET_ABOUT
p:=main.UDPCreateStdPacket(CMD_META_USER);
PacketAppend16(p,META_CMD_SET_ABOUT);
PacketAppendString(p,aboutMemo.lines[0]);
main.SendUDPCmd(p,'META_USER+SET_ABOUT: ['+s(main.UIN)+'] ===>');
// CMD_META_USER + META_CMD_SET_SECURE
p:=main.UDPCreateStdPacket(CMD_META_USER);
PacketAppend16(p,META_CMD_SET_SECURE);
PacketAppend8(p,1); // 0-autor required; 1-all users
PacketAppend8(p,0); // 0-not allow web; 1-allow web aware
PacketAppend8(p,0); // 0-hide IP; 1-show IP
main.SendUDPCmd(p,'META_USER+SET_SECURE: ['+s(main.UIN)+'] ===>');
/////
*)
UIAnime.Active := true;
end;
procedure TUserInfo.SetCountry(Combo:TComboBox; Country:word);
var i : integer;
begin
Combo.Clear;
for i:=0 to 121 do begin
Combo.Items.Add(Countries[i].Text);
if Countries[i].Code = Country then Combo.Text := Countries[i].Text;
end;
if Combo.Text = '' then Combo.Text := Countries[121].Text;
end;
function TUserInfo.GetCountry(Combo:TComboBox):word;
var i : integer;
begin
Result := $FFFF;
for i:=0 to 121 do begin
if Countries[i].Text = Combo.Text then begin
Result := Countries[i].Code;
break;
end;
end;
end;
procedure TUserInfo.SetGender(Combo:TComboBox; Gender:byte);
begin
Combo.Clear;
Combo.Items.Add('Not specified');
Combo.Items.Add('Female');
Combo.Items.Add('Male');
case Gender of
0: Combo.Text := 'Not specified';
1: Combo.Text := 'Female';
2: Combo.Text := 'Male';
else Combo.Text := 'Not specified';
end;
end;
function TUserInfo.GetGender(Combo:TComboBox):byte;
begin
Result := 0;
if Combo.Text = 'Female' then Result := 1
else if Combo.Text = 'Male' then Result := 2;
end;
procedure TUserInfo.SetMonth(Combo:TComboBox; Month:byte);
var i : integer;
begin
Combo.Clear;
for i:=0 to 12 do begin
Combo.Items.Add(MetaMonth[i].Text);
if MetaMonth[i].Code = Month then Combo.Text := MetaMonth[i].Text;
end;
if Combo.Text = '' then Combo.Text := MetaMonth[12].Text;
end;
function TUserInfo.GetMonth(Combo:TComboBox):byte;
var i : integer;
begin
Result := 0;
for i:=0 to 12 do begin
if MetaMonth[i].Text = Combo.Text then begin
Result := MetaMonth[i].Code;
break;
end;
end;
end;
procedure TUserInfo.SetLanguage(Combo:TComboBox; Lang:byte);
var i : integer;
begin
Combo.Clear;
for i:=0 to 67 do begin
Combo.Items.Add(MetaLanguages[i].Text);
if MetaLanguages[i].Code = Lang then Combo.Text := MetaLanguages[i].Text;
end;
if Combo.Text = '' then Combo.Text := MetaLanguages[0].Text;
end;
function TUserInfo.GetLanguage(Combo:TComboBox):byte;
var i : integer;
begin
Result := 0;
for i:=0 to 67 do begin
if MetaLanguages[i].Text = Combo.Text then begin
Result := MetaLanguages[i].Code;
break;
end;
end;
end;
procedure TUserInfo.SetOccupation(Combo:TComboBox; Occupation:word);
var i : integer;
begin
Combo.Clear;
for i:=0 to 28 do begin
Combo.Items.Add(MetaOccupation[i].Text);
if MetaOccupation[i].Code = Occupation then Combo.Text := MetaOccupation[i].Text;
end;
if Combo.Text = '' then Combo.Text := MetaOccupation[28].Text;
end;
function TUserInfo.GetOccupation(Combo:TComboBox):word;
var i : integer;
begin
Result := 0; // not specified
for i:=0 to 27 do begin
if MetaOccupation[i].Text = Combo.Text then begin
Result := MetaOccupation[i].Code;
break;
end;
end;
end;
procedure TUserInfo.SetCombo(Combo:TComboBox; min,max,Value:word);
var i : integer;
begin
Combo.Clear;
for i:=min to max do begin
Combo.Items.Add(s(i));
if i=Value then Combo.Text := s(i);
end;
Combo.Items.Add('Not specified');
if Combo.Text = '' then Combo.Text := 'Not specified';
end;
function TUserInfo.GetCombo(Combo:TComboBox; min,max:byte):word;
begin
Result := 0;
if Combo.Text = 'Not specified' then exit
else
try Result := strtoint(Combo.Text) except Result := 0; end;
if (Result >= min) and (Result<=max) then exit else Result := 0;
end;
procedure TUserInfo.ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean);
var PBuff : PInfoRec;
begin
if Msg.message = msg_UInfo then begin
if (Msg.wParam = Cookie)then begin
Handled := false;
PBuff := PInfoRec(Msg.lParam);
case PBuff^.f of
dEND: begin
M(Form1.Memo,'The END.');
UIAnime.Active := false;
end;
dNick: begin
UIRecord.NICK := PBuff^.s;
NickEd.Text := PBuff^.s;
end;
dFirst: begin
UIRecord.FIRST := PBuff^.s;
FirstEd.Text := PBuff^.s;
end;
dLast: begin
UIRecord.LAST := PBuff^.s;
LastEd.Text := PBuff^.s;
end;
dE_Mail: begin
UIRecord.PRI_E_MAIL := PBuff^.s;
priEd.Text := PBuff^.s;
end;
dSec_E_Mail: begin
UIRecord.SEC_E_MAIL := PBuff^.s;
secEd.Text := PBuff^.s;
end;
dOld_E_Mail: begin
UIRecord.OLD_E_MAIL := PBuff^.s;
oldEd.Text := PBuff^.s;
end;
dIP: begin
strtoip(PBuff^.s,UIRecord.IP);
ipEd.Text := PBuff^.s;
end;
dReal_IP: begin
strtoip(PBuff^.s,UIRecord.REAL_IP);
realipEd.Text := PBuff^.s;
end;
dVer: begin
UIRecord.VER := strtoint(PBuff^.s);
verEd.Text := PBuff^.s;
end;
dAuth: begin
UIRecord.AUTH := strtoint(PBuff^.s);
case UIRecord.AUTH of
0: AuthLabel.Caption := 'Authorize';
1: AuthLabel.Caption := 'Always';
else AuthLabel.Caption := 'unknown';
end;
end;
dCity: begin
UIRecord.CITY := PBuff^.s;
cityEd.Text := PBuff^.s;
end;
dState: begin
UIRecord.STATE := PBuff^.s;
stateEd.Text := PBuff^.s;
end;
dPhone: begin
UIRecord.Phone := PBuff^.s;
PhoneEd.Text := PBuff^.s;
end;
dFax: begin
UIRecord.Fax := PBuff^.s;
FaxEd.Text := PBuff^.s;
end;
dCellular: begin
UIRecord.Cellular := PBuff^.s;
CellularEd.Text := PBuff^.s;
end;
dZip: begin
UIRecord.Zip := PBuff^.s;
ZipEd.Text := PBuff^.s;
end;
dStreet: begin
UIRecord.Street := PBuff^.s;
streetMemo.Clear;
M(streetMemo,PBuff^.s);
end;
dCountry: begin
UIRecord.Country := strtoint(PBuff^.s);
SetCountry(countryCombo,UIRecord.COUNTRY);
end;
dTimeZone: begin
UIRecord.TimeZone := strtoint(PBuff^.s);
tzEd.Text := PBuff^.s;
end;
dWebAware: begin
// UIRecord.WebAware := strtoint(PBuff^.s);
// webawareEd.Text := PBuff^.s;
end;
dHideIP: begin
// UIRecord.HideIP := PBuff^.s;
// HideIPEd.Text := PBuff^.s;
end;
dAge: begin
UIRecord.Age := strtoint(PBuff^.s);
AgeEd.Text := PBuff^.s;
end;
dGender: begin
UIRecord.Gender := strtoint(PBuff^.s);
SetGender(genderCombo,UIRecord.GENDER);
end;
dHomepage: begin
UIRecord.Homepage := PBuff^.s;
HomepageEd.Text := PBuff^.s;
end;
dByear: begin
UIRecord.Byear := strtoint(PBuff^.s);
if UIRecord.Byear<>0 then dec(UIRecord.Byear,1900);
SetCombo(yearCombo,1,99,UIRecord.Byear);
end;
dBmonth: begin
UIRecord.BMonth := strtoint(PBuff^.s);
SetMonth(monthCombo,UIRecord.BMonth);
end;
dBday: begin
UIRecord.Bday := strtoint(PBuff^.s);
SetCombo(dayCombo,1,31,UIRecord.Bday);
end;
dAbout: begin
UIRecord.ABOUT := PBuff^.s;
AboutMemo.Clear;
M(AboutMemo,PBuff^.s);
end;
dLang1: begin
UIRecord.LANG1 := strtoint(PBuff^.s);
SetLanguage(lang1Combo,UIRecord.LANG1);
end;
dLang2: begin
UIRecord.LANG2 := strtoint(PBuff^.s);
SetLanguage(lang2Combo,UIRecord.LANG2);
end;
dLang3: begin
UIRecord.LANG3 := strtoint(PBuff^.s);
SetLanguage(lang3Combo,UIRecord.LANG3);
end;
dInterests: begin
UIRecord.INTERESTS := PBuff^.s;
interMemo.Clear;
M(interMemo,PBuff^.s);
end;
dFailure: begin
///////////////////////////// ?????
end;
dMeta_Srv_Res: begin
UIAnime.Active := false;
end;
dwCity: begin
UIRecord.WCITY := PBuff^.s;
wcityEd.Text := PBuff^.s;
end;
dwState:begin
UIRecord.WSTATE := PBuff^.s;
wstateEd.Text := PBuff^.s;
end;
dwPhone:begin
UIRecord.WPHONE := PBuff^.s;
wphoneEd.Text := PBuff^.s;
end;
dwFax:begin
UIRecord.WFAX := PBuff^.s;
wfaxEd.Text := PBuff^.s;
end;
dwStreet:begin
UIRecord.WSTREET := PBuff^.s;
wstreetMemo.Clear;
M(wstreetMemo,PBuff^.s);
end;
dwZip:begin
UIRecord.WZIP := PBuff^.s;
wzipEd.Text := PBuff^.s;
end;
dwCountry:begin
UIRecord.WCOUNTRY := strtoint(PBuff^.s);
SetCountry(wcountryCombo,UIRecord.WCOUNTRY);
end;
dCompany:begin
UIRecord.COMPANY := PBuff^.s;
companyEd.Text := PBuff^.s;
end;
dDepartment:begin
UIRecord.DEPARTMENT := PBuff^.s;
departmentEd.Text := PBuff^.s;
end;
dJob:begin
UIRecord.JOB := PBuff^.s;
jobEd.Text := PBuff^.s;
end;
dOccupation:begin
UIRecord.OCCUPATION := strtoint(PBuff^.s);
SetOccupation(occupationCombo,UIRecord.Occupation);
end;
dWhomepage:begin
UIRecord.WHOMEPAGE := PBuff^.s;
whomepageEd.Text := PBuff^.s;
end;
end; // case
Dispose(PBuff);
end;
end;
end;
end.
Author: Alexander Vaga
EMail: primary: icq2000cc@hobi.ru
secondary: alexander_vaga@hotmail.com
Web: <a href="http://icq2000cc.hobi.ru
Creation:" title="http://icq2000cc.hobi.ru
Creation:">http://icq2000cc.hobi.ru
Creation:</a> May, 2002
Legal issues: Copyright (C) 2002 by Alexander Vaga
Kyiv, Ukraine
This software is provided 'as-is', without any express or
implied warranty. In no event will the author be held liable
for any damages arising from the use of this software.
Permission is granted to anyone to use this software for any
purpose, including commercial applications, and to alter it
and redistribute it freely.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
unit UInfo;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls,
Forms, Dialogs, StdCtrls, ComCtrls, Buttons,
ExtCtrls, Animate,inifiles,
typess,main,util,packet,
AppEvnts;
type
TUserInfo = class(TForm)
UserInfoDoneBtn: TButton;
UserInfoRetrieveBtn: TButton;
InfoPage: TPageControl;
MainTab: TTabSheet;
HomeTab: TTabSheet;
MoreTab: TTabSheet;
WorkTab: TTabSheet;
InfoAboutTab: TTabSheet;
Panel1: TPanel;
UIAnime: TAnimatedImage;
GroupBox1: TGroupBox;
Label1: TLabel;
Label2: TLabel;
Label6: TLabel;
Label9: TLabel;
uinEd: TEdit;
ipEd: TEdit;
realipEd: TEdit;
verEd: TEdit;
GroupBox2: TGroupBox;
Label3: TLabel;
Label4: TLabel;
Label7: TLabel;
Label8: TLabel;
firstEd: TEdit;
lastEd: TEdit;
displayEd: TEdit;
nickEd: TEdit;
GroupBox3: TGroupBox;
Label5: TLabel;
priEd: TEdit;
Label10: TLabel;
Label11: TLabel;
secEd: TEdit;
oldEd: TEdit;
GroupBox4: TGroupBox;
cityEd: TEdit;
zipEd: TEdit;
stateEd: TEdit;
Label12: TLabel;
Label13: TLabel;
Label14: TLabel;
Label15: TLabel;
streetMemo: TMemo;
Label16: TLabel;
GroupBox5: TGroupBox;
Label17: TLabel;
Label18: TLabel;
Label19: TLabel;
phoneEd: TEdit;
cellularEd: TEdit;
faxEd: TEdit;
GroupBox6: TGroupBox;
Label20: TLabel;
Label21: TLabel;
Label22: TLabel;
tzEd: TEdit;
Edit20: TEdit;
Edit21: TEdit;
GroupBox7: TGroupBox;
Label23: TLabel;
Label24: TLabel;
Label25: TLabel;
homepageEd: TEdit;
ageEd: TEdit;
GroupBox8: TGroupBox;
Label26: TLabel;
Label27: TLabel;
Label28: TLabel;
GroupBox9: TGroupBox;
GroupBox10: TGroupBox;
Label29: TLabel;
Label30: TLabel;
Label31: TLabel;
Label32: TLabel;
Label33: TLabel;
wcityEd: TEdit;
wzipEd: TEdit;
wstateEd: TEdit;
wstreetMemo: TMemo;
GroupBox11: TGroupBox;
Label34: TLabel;
Label36: TLabel;
wphoneEd: TEdit;
wfaxEd: TEdit;
GroupBox12: TGroupBox;
Label38: TLabel;
Label39: TLabel;
companyEd: TEdit;
jobEd: TEdit;
departmentEd: TEdit;
Label35: TLabel;
Label37: TLabel;
whomepageEd: TEdit;
Label40: TLabel;
GroupBox13: TGroupBox;
aboutMemo: TMemo;
AuthLabel: TLabel;
Label43: TLabel;
GroupBox15: TGroupBox;
interMemo: TMemo;
countryCombo: TComboBox;
wcountryCombo: TComboBox;
genderCombo: TComboBox;
monthCombo: TComboBox;
lang1Combo: TComboBox;
lang2Combo: TComboBox;
lang3Combo: TComboBox;
occupationCombo: TComboBox;
dayCombo: TComboBox;
yearCombo: TComboBox;
ApplicationEvents1: TApplicationEvents;
procedure Request_Meta_Info(UIN : longint);
procedure Set_Meta_Info;
procedure UserInfoDoneBtnClick(Sender: TObject);
procedure UserInfoRetrieveBtnClick(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure SetCountry(Combo:TComboBox; Country:word);
function GetCountry(Combo:TComboBox):word;
procedure SetGender(Combo:TComboBox; Gender:byte);
function GetGender(Combo:TComboBox):byte;
procedure SetMonth(Combo:TComboBox; Month:byte);
function GetMonth(Combo:TComboBox):byte;
procedure SetLanguage(Combo:TComboBox; Lang:byte);
function GetLanguage(Combo:TComboBox):byte;
procedure SetOccupation(Combo:TComboBox; Occupation:word);
function GetOccupation(Combo:TComboBox):word;
procedure SetCombo(Combo:TComboBox; min,max,Value:word);
function GetCombo(Combo:TComboBox; min,max:byte):word;
procedure ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean);
private
{ Private declarations }
public
AutoRetrieve : boolean;
UIRecord : TListRecord;
Cookie : word;
end;
implementation
{$R *.DFM}
procedure TUserInfo.UserInfoDoneBtnClick(Sender: TObject);
begin
Close;
end;
procedure TUserInfo.Request_Meta_Info(UIN : longint);
var p,a : pPack;
begin
a := PacketNew;
PacketGoto(a,2);// a[0..1] = len
PacketAppend32(a,main.UIN);
PacketAppend16(a,swap($D007));
Cookie := random($FF) shl 8;
PacketAppend16(a,swap(Cookie));
PacketAppend16(a,swap($B204));
PacketAppend32(a,UIN);
PacketBegin(a);
PacketAppend16(a,a.length-2);
P:=CreatePacket(2,SEQ);
SNACAppend(p,$15,$2);
TLVAppend(p,1,a.length,@a.data);
PacketDelete(a);
Form1.PacketSend(p);
M(Form1.Memo,'>Request Full Info: '+s(UIN)+' '+
'Cookie:$'+inttohex(Cookie,4));
UIAnime.Active := true;
end;
procedure TUserInfo.UserInfoRetrieveBtnClick(Sender: TObject);
begin
if (OL and isLogged)then
Request_Meta_Info(UIRecord.UIN);
end;
procedure TUserInfo.FormShow(Sender: TObject);
begin
InfoPage.ActivePageIndex :=0;
with UIRecord do begin
uinEd.Text := s(UIN);
ipEd.Text := IPtoStr(IP);
realipEd.Text := IPtoStr(REAL_IP);
verEd.Text := s(VER);
firstEd.Text := FIRST;
lastEd.Text := LAST;
nickEd.Text := NICK;
displayEd.Text := NICK;
priEd.Text := PRI_E_MAIL;
secEd.Text := SEC_E_MAIL;
oldEd.Text := OLD_E_MAIL;
cityEd.Text := CITY;
stateEd.Text := STATE;
phoneEd.Text := PHONE;
faxEd.Text := FAX;
cellularEd.Text := CELLULAR;
M(streetMemo,STREET);
SetCountry(countryCombo,COUNTRY);
SetGender(genderCombo,GENDER);
ageEd.Text := s(AGE);
homepageEd.Text := HOMEPAGE;
SetCombo(yearCombo,1,99,BYEAR);
SetMonth(monthCombo,BMONTH);
SetCombo(dayCombo,1,31,BDAY);
case AUTH of
0: AuthLabel.Caption := 'Authorize';
1: AuthLabel.Caption := 'Always';
else AuthLabel.Caption := 'unknown';
end;
SetLanguage(lang1Combo,LANG1);
SetLanguage(lang2Combo,LANG2);
SetLanguage(lang3Combo,LANG3);
M(aboutMemo,ABOUT);
M(interMemo,INTERESTS);
companyEd.Text :=COMPANY;
departmentEd.Text := DEPARTMENT;
jobEd.Text := JOB;
SetOccupation(occupationCombo,Occupation);
wcityEd.Text := WCITY;
wstateEd.Text := WSTATE;
wphoneEd.Text := WPHONE;
wfaxEd.Text := WFAX;
wstreetMemo.Clear;
M(wstreetMemo,WSTREET);
SetCountry(wcountryCombo,WCOUNTRY);
whomepageEd.Text := WHOMEPAGE;
end;
if AutoRetrieve then begin
if (OL and isLogged)then
Request_Meta_Info(UIRecord.UIN);
end;
end;
procedure TUserInfo.FormClose(Sender: TObject; var Action: TCloseAction);
var i : integer;
begin
if not AutoRetrieve then begin
for i:=0 to CLNum-1 do with ContactList[i] do begin
if UIN = UIRecord.UIN then begin
ContactList[i] := UIRecord;
if NICK = '' then begin
if FIRST <> '' then NICK := FIRST
else if LAST <> '' then NICK := LAST
else NICK := s(UIN);
end; // if
Form1.WriteToContactList(ContactList[i]);
break;
end;
end; //for
for i:=0 to Form1.CL.Items.Count-1 do
if Form1.CL.Items[i].Text <> PListRecord(Form1.CL.Items[i].Data)^.NICK then
Form1.CL.Items[i].Text := PListRecord(Form1.CL.Items[i].Data)^.NICK;
end;
Destroy;
end;
procedure TUserInfo.Set_Meta_Info;
begin
// это еще старый кусок из протокола icqv5 (UDP)
// CMD_META_USER + META_CMD_SET_INFO
(*
p:=main.UDPCreateStdPacket(CMD_META_USER);
PacketAppend16(p,META_CMD_SET_INFO);
Cookie := main.UDPSeqNum2-1;
MetaUIN := main.UIN;
PacketAppendString(p,nickEd.Text);
PacketAppendString(p,firstEd.Text);
PacketAppendString(p,lastEd.Text);
PacketAppendString(p,priEd.Text);
PacketAppendString(p,secEd.Text);
PacketAppendString(p,oldEd.Text);
PacketAppendString(p,cityEd.Text);
PacketAppendString(p,stateEd.Text);
PacketAppendString(p,phoneEd.Text);
PacketAppendString(p,faxEd.Text);
PacketAppendString(p,streetMemo.Lines[0]);
PacketAppendString(p,cellularEd.Text);
try PacketAppend32(p,longint(strtoint(zipEd.Text)));
except PacketAppend32(p,-1); end;
PacketAppend16(p,GetCountry(countryCombo));
PacketAppend8(p,0); // 250 = +03:00 TimeZone
PacketAppend8(p,0); // ????
main.SendUDPCmd(p,'META_USER+SET_INFO: ['+s(main.UIN)+'] ===>');
// CMD_META_USER + META_CMD_SET_WORK
p:=main.UDPCreateStdPacket(CMD_META_USER);
PacketAppend16(p,META_CMD_SET_WORK);
PacketAppendString(p,wcityEd.Text);
PacketAppendString(p,wstateEd.Text);
PacketAppendString(p,wphoneEd.Text);
PacketAppendString(p,wfaxEd.Text);
PacketAppendString(p,wstreetMemo.Lines[0]);
try PacketAppend32(p,longint(strtoint(wzipEd.Text)));
except PacketAppend32(p,-1); end;
PacketAppend16(p,GetCountry(wcountryCombo));
PacketAppendString(p,companyEd.Text);
PacketAppendString(p,departmentEd.Text);
PacketAppendString(p,jobEd.Text);
PacketAppend16(p,GetOccupation(occupationCombo));
PacketAppendString(p,whomepageEd.Text);
main.SendUDPCmd(p,'META_USER+SET_WORK: ['+s(main.UIN)+'] ===>');
// CMD_META_USER + META_CMD_SET_MORE
p:=main.UDPCreateStdPacket(CMD_META_USER);
PacketAppend16(p,META_CMD_SET_MORE);
try PacketAppend16(p,word(strtoint(ageEd.Text)));
except PacketAppend16(p,0); end;
PacketAppend8(p,GetGender(genderCombo));
PacketAppendString(p,homepageEd.Text);
PacketAppend8(p,GetCombo(yearCombo,0,99));
PacketAppend8(p,GetMonth(monthCombo));
PacketAppend8(p,GetCombo(dayCombo,1,31));
PacketAppend8(p,GetLanguage(lang1Combo));
PacketAppend8(p,GetLanguage(lang2Combo));
PacketAppend8(p,GetLanguage(lang3Combo));
main.SendUDPCmd(p,'META_USER+SET_MORE: ['+s(main.UIN)+'] ===>');
// CMD_META_USER + META_CMD_SET_ABOUT
p:=main.UDPCreateStdPacket(CMD_META_USER);
PacketAppend16(p,META_CMD_SET_ABOUT);
PacketAppendString(p,aboutMemo.lines[0]);
main.SendUDPCmd(p,'META_USER+SET_ABOUT: ['+s(main.UIN)+'] ===>');
// CMD_META_USER + META_CMD_SET_SECURE
p:=main.UDPCreateStdPacket(CMD_META_USER);
PacketAppend16(p,META_CMD_SET_SECURE);
PacketAppend8(p,1); // 0-autor required; 1-all users
PacketAppend8(p,0); // 0-not allow web; 1-allow web aware
PacketAppend8(p,0); // 0-hide IP; 1-show IP
main.SendUDPCmd(p,'META_USER+SET_SECURE: ['+s(main.UIN)+'] ===>');
/////
*)
UIAnime.Active := true;
end;
procedure TUserInfo.SetCountry(Combo:TComboBox; Country:word);
var i : integer;
begin
Combo.Clear;
for i:=0 to 121 do begin
Combo.Items.Add(Countries[i].Text);
if Countries[i].Code = Country then Combo.Text := Countries[i].Text;
end;
if Combo.Text = '' then Combo.Text := Countries[121].Text;
end;
function TUserInfo.GetCountry(Combo:TComboBox):word;
var i : integer;
begin
Result := $FFFF;
for i:=0 to 121 do begin
if Countries[i].Text = Combo.Text then begin
Result := Countries[i].Code;
break;
end;
end;
end;
procedure TUserInfo.SetGender(Combo:TComboBox; Gender:byte);
begin
Combo.Clear;
Combo.Items.Add('Not specified');
Combo.Items.Add('Female');
Combo.Items.Add('Male');
case Gender of
0: Combo.Text := 'Not specified';
1: Combo.Text := 'Female';
2: Combo.Text := 'Male';
else Combo.Text := 'Not specified';
end;
end;
function TUserInfo.GetGender(Combo:TComboBox):byte;
begin
Result := 0;
if Combo.Text = 'Female' then Result := 1
else if Combo.Text = 'Male' then Result := 2;
end;
procedure TUserInfo.SetMonth(Combo:TComboBox; Month:byte);
var i : integer;
begin
Combo.Clear;
for i:=0 to 12 do begin
Combo.Items.Add(MetaMonth[i].Text);
if MetaMonth[i].Code = Month then Combo.Text := MetaMonth[i].Text;
end;
if Combo.Text = '' then Combo.Text := MetaMonth[12].Text;
end;
function TUserInfo.GetMonth(Combo:TComboBox):byte;
var i : integer;
begin
Result := 0;
for i:=0 to 12 do begin
if MetaMonth[i].Text = Combo.Text then begin
Result := MetaMonth[i].Code;
break;
end;
end;
end;
procedure TUserInfo.SetLanguage(Combo:TComboBox; Lang:byte);
var i : integer;
begin
Combo.Clear;
for i:=0 to 67 do begin
Combo.Items.Add(MetaLanguages[i].Text);
if MetaLanguages[i].Code = Lang then Combo.Text := MetaLanguages[i].Text;
end;
if Combo.Text = '' then Combo.Text := MetaLanguages[0].Text;
end;
function TUserInfo.GetLanguage(Combo:TComboBox):byte;
var i : integer;
begin
Result := 0;
for i:=0 to 67 do begin
if MetaLanguages[i].Text = Combo.Text then begin
Result := MetaLanguages[i].Code;
break;
end;
end;
end;
procedure TUserInfo.SetOccupation(Combo:TComboBox; Occupation:word);
var i : integer;
begin
Combo.Clear;
for i:=0 to 28 do begin
Combo.Items.Add(MetaOccupation[i].Text);
if MetaOccupation[i].Code = Occupation then Combo.Text := MetaOccupation[i].Text;
end;
if Combo.Text = '' then Combo.Text := MetaOccupation[28].Text;
end;
function TUserInfo.GetOccupation(Combo:TComboBox):word;
var i : integer;
begin
Result := 0; // not specified
for i:=0 to 27 do begin
if MetaOccupation[i].Text = Combo.Text then begin
Result := MetaOccupation[i].Code;
break;
end;
end;
end;
procedure TUserInfo.SetCombo(Combo:TComboBox; min,max,Value:word);
var i : integer;
begin
Combo.Clear;
for i:=min to max do begin
Combo.Items.Add(s(i));
if i=Value then Combo.Text := s(i);
end;
Combo.Items.Add('Not specified');
if Combo.Text = '' then Combo.Text := 'Not specified';
end;
function TUserInfo.GetCombo(Combo:TComboBox; min,max:byte):word;
begin
Result := 0;
if Combo.Text = 'Not specified' then exit
else
try Result := strtoint(Combo.Text) except Result := 0; end;
if (Result >= min) and (Result<=max) then exit else Result := 0;
end;
procedure TUserInfo.ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean);
var PBuff : PInfoRec;
begin
if Msg.message = msg_UInfo then begin
if (Msg.wParam = Cookie)then begin
Handled := false;
PBuff := PInfoRec(Msg.lParam);
case PBuff^.f of
dEND: begin
M(Form1.Memo,'The END.');
UIAnime.Active := false;
end;
dNick: begin
UIRecord.NICK := PBuff^.s;
NickEd.Text := PBuff^.s;
end;
dFirst: begin
UIRecord.FIRST := PBuff^.s;
FirstEd.Text := PBuff^.s;
end;
dLast: begin
UIRecord.LAST := PBuff^.s;
LastEd.Text := PBuff^.s;
end;
dE_Mail: begin
UIRecord.PRI_E_MAIL := PBuff^.s;
priEd.Text := PBuff^.s;
end;
dSec_E_Mail: begin
UIRecord.SEC_E_MAIL := PBuff^.s;
secEd.Text := PBuff^.s;
end;
dOld_E_Mail: begin
UIRecord.OLD_E_MAIL := PBuff^.s;
oldEd.Text := PBuff^.s;
end;
dIP: begin
strtoip(PBuff^.s,UIRecord.IP);
ipEd.Text := PBuff^.s;
end;
dReal_IP: begin
strtoip(PBuff^.s,UIRecord.REAL_IP);
realipEd.Text := PBuff^.s;
end;
dVer: begin
UIRecord.VER := strtoint(PBuff^.s);
verEd.Text := PBuff^.s;
end;
dAuth: begin
UIRecord.AUTH := strtoint(PBuff^.s);
case UIRecord.AUTH of
0: AuthLabel.Caption := 'Authorize';
1: AuthLabel.Caption := 'Always';
else AuthLabel.Caption := 'unknown';
end;
end;
dCity: begin
UIRecord.CITY := PBuff^.s;
cityEd.Text := PBuff^.s;
end;
dState: begin
UIRecord.STATE := PBuff^.s;
stateEd.Text := PBuff^.s;
end;
dPhone: begin
UIRecord.Phone := PBuff^.s;
PhoneEd.Text := PBuff^.s;
end;
dFax: begin
UIRecord.Fax := PBuff^.s;
FaxEd.Text := PBuff^.s;
end;
dCellular: begin
UIRecord.Cellular := PBuff^.s;
CellularEd.Text := PBuff^.s;
end;
dZip: begin
UIRecord.Zip := PBuff^.s;
ZipEd.Text := PBuff^.s;
end;
dStreet: begin
UIRecord.Street := PBuff^.s;
streetMemo.Clear;
M(streetMemo,PBuff^.s);
end;
dCountry: begin
UIRecord.Country := strtoint(PBuff^.s);
SetCountry(countryCombo,UIRecord.COUNTRY);
end;
dTimeZone: begin
UIRecord.TimeZone := strtoint(PBuff^.s);
tzEd.Text := PBuff^.s;
end;
dWebAware: begin
// UIRecord.WebAware := strtoint(PBuff^.s);
// webawareEd.Text := PBuff^.s;
end;
dHideIP: begin
// UIRecord.HideIP := PBuff^.s;
// HideIPEd.Text := PBuff^.s;
end;
dAge: begin
UIRecord.Age := strtoint(PBuff^.s);
AgeEd.Text := PBuff^.s;
end;
dGender: begin
UIRecord.Gender := strtoint(PBuff^.s);
SetGender(genderCombo,UIRecord.GENDER);
end;
dHomepage: begin
UIRecord.Homepage := PBuff^.s;
HomepageEd.Text := PBuff^.s;
end;
dByear: begin
UIRecord.Byear := strtoint(PBuff^.s);
if UIRecord.Byear<>0 then dec(UIRecord.Byear,1900);
SetCombo(yearCombo,1,99,UIRecord.Byear);
end;
dBmonth: begin
UIRecord.BMonth := strtoint(PBuff^.s);
SetMonth(monthCombo,UIRecord.BMonth);
end;
dBday: begin
UIRecord.Bday := strtoint(PBuff^.s);
SetCombo(dayCombo,1,31,UIRecord.Bday);
end;
dAbout: begin
UIRecord.ABOUT := PBuff^.s;
AboutMemo.Clear;
M(AboutMemo,PBuff^.s);
end;
dLang1: begin
UIRecord.LANG1 := strtoint(PBuff^.s);
SetLanguage(lang1Combo,UIRecord.LANG1);
end;
dLang2: begin
UIRecord.LANG2 := strtoint(PBuff^.s);
SetLanguage(lang2Combo,UIRecord.LANG2);
end;
dLang3: begin
UIRecord.LANG3 := strtoint(PBuff^.s);
SetLanguage(lang3Combo,UIRecord.LANG3);
end;
dInterests: begin
UIRecord.INTERESTS := PBuff^.s;
interMemo.Clear;
M(interMemo,PBuff^.s);
end;
dFailure: begin
///////////////////////////// ?????
end;
dMeta_Srv_Res: begin
UIAnime.Active := false;
end;
dwCity: begin
UIRecord.WCITY := PBuff^.s;
wcityEd.Text := PBuff^.s;
end;
dwState:begin
UIRecord.WSTATE := PBuff^.s;
wstateEd.Text := PBuff^.s;
end;
dwPhone:begin
UIRecord.WPHONE := PBuff^.s;
wphoneEd.Text := PBuff^.s;
end;
dwFax:begin
UIRecord.WFAX := PBuff^.s;
wfaxEd.Text := PBuff^.s;
end;
dwStreet:begin
UIRecord.WSTREET := PBuff^.s;
wstreetMemo.Clear;
M(wstreetMemo,PBuff^.s);
end;
dwZip:begin
UIRecord.WZIP := PBuff^.s;
wzipEd.Text := PBuff^.s;
end;
dwCountry:begin
UIRecord.WCOUNTRY := strtoint(PBuff^.s);
SetCountry(wcountryCombo,UIRecord.WCOUNTRY);
end;
dCompany:begin
UIRecord.COMPANY := PBuff^.s;
companyEd.Text := PBuff^.s;
end;
dDepartment:begin
UIRecord.DEPARTMENT := PBuff^.s;
departmentEd.Text := PBuff^.s;
end;
dJob:begin
UIRecord.JOB := PBuff^.s;
jobEd.Text := PBuff^.s;
end;
dOccupation:begin
UIRecord.OCCUPATION := strtoint(PBuff^.s);
SetOccupation(occupationCombo,UIRecord.Occupation);
end;
dWhomepage:begin
UIRecord.WHOMEPAGE := PBuff^.s;
whomepageEd.Text := PBuff^.s;
end;
end; // case
Dispose(PBuff);
end;
end;
end;
end.
Отправить комментарий