1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
|
{$IFDEF BIN_IMPORT_}
var
DS: PDataSource;
SS: PSession;
QR1: PQuery;
var
OneContact: boolean;
flags: integer;
timestamp: LongWord;
Msg: AnsiString;
function FindUIDinDB(too: string): string;
var
QR2: PQuery;
begin
QR2 := NewQuery(SS);
QR2.Text := 'select to, UID from ChatHistory WHERE to=' + too;
QR2.Open;
QR2.First;
result := QR2.FieldByNameAsStr['UID'];
QR2.Free;
end;
{$ELSE}
begin
DoUnMapFile;
OneContact := (DContact.hContact <> 0) and (DContact.hContact <> INVALID_HANDLE_VALUE);
try
DS := NewDataSource('Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;' +
'Data Source=' + FileName +
';Mode=Share Deny None;' +
'Extended Properties="";' +
'Locale Identifier=1033;' +
'Persist Security Info=False;');
SS := NewSession(DS);
QR1 := NewQuery(SS);
QR1.Text := 'SELECT Messages.from, date, to, type, subType, subject FROM Messages';
QR1.Open;
if (QR1.ColCount = 7) then
begin
DoMessage(ITXT_THREAD_START, 0, 0);
QR1.First;
DoMessage(ITXT_THREAD_MAXPROGRESS, 0, QR1.RowCount);
While not QR1.EOF do
begin
try
if (QR1.SFieldByName['type'] = 'Text') and
(QR1.SFieldByName['subType'] = 'IM') then
begin
UIDStr := FindUIDinDB(QR1.FieldByNameAsStr['to']);
if not OneContact then
begin
DContact.ContactUID := UIDStr;
TryDetermContact(DContact);
end;
if (DContact.hContact <> 0) and
(DContact.hContact <> INVALID_HANDLE_VALUE) then
begin
if QR1.SField[1] = '' then
flags := DBEF_READ or DBEF_UTF or DBEF_SENT
else
flags := DBEF_READ or DBEF_UTF;
timestamp := DateTimeToTimeStamp(QR1.DFieldByName['date'] - 693594);
Msg := QR1.SFieldByName['subject'];
tempstr := ANSIToUTF8(PAnsiChar(Msg), tempstr, cp);
Msg := tempstr;
FreeMem(tempstr);
AddMsgToDB(DContact.hContact, flags, timestamp, Msg, AddedMessages, Duplicates);
end;
end;
except
ShowException(ExceptObject, ExceptAddr)
end;
QR1.Next;
DoMessage(ITXT_THREAD_PROGRESS, QR1.CurIndex, 0);
end; // for
end
else
begin
s := WideFormat(TranslateWideString('It''s not %s file'), ['ICQ6 mdb']);
DoMessage(ITXT_THREAD_ERROR, wparam(PWideChar(s)), 0);
end;
finally
DS.Free;
DS := nil;
SS := nil;
QR1 := nil;
end;
end;
{$ENDIF}
|