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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
|
{$ifdef BIN_IMPORT_}
var
XI:XML_API_W;
rhxml:HXML;
curxml:HXML;
chldxml:HXML;
ptxt:PWideChar;
txtlen:int;
ic,tm:integer;
res:LongBool;
{$else}
begin
If pluginLink^.ServiceExists(MS_SYSTEM_GET_XI)>0 then
begin
XI.cbSize:=SizeOf(XML_API_W);
res:=longbool(pluginLink^.CallService(MS_SYSTEM_GET_XI,0,Int(@XI)));
if not res then
begin
XI.cbSize:=SizeOf(XML_API_W)-4;
res:=longbool(pluginLink^.CallService(MS_SYSTEM_GET_XI,0,Int(@XI)));
if not res then
begin
s:=TranslateWideString('Error at initialization XML parser');
DoMessage(ITXT_THREAD_ERROR,integer(PWideChar(s)),0);
exit;
end;
end;
end
else
begin
s:=TranslateWideString('Your version of Miranda don''t support XML parsing');
DoMessage(ITXT_THREAD_ERROR,integer(PWideChar(s)),0);
exit;
end;
if (DContact.hContact=0) or (DContact.hContact=INVALID_HANDLE_VALUE) then
if (fContact.hContact<>0) and (fContact.hContact<>INVALID_HANDLE_VALUE) then
DContact:=fContact;
if (DContact.hContact<>0) and (DContact.hContact<>INVALID_HANDLE_VALUE) then
begin
proto:=GetContactProto(DContact.hContact);
DoMessage(ITXT_THREAD_DEST_CONTACT,DContact.hContact,0);
DoMessage(ITXT_THREAD_START,0,0);
GetMem(ptxt,SizeOf(WideChar)*FileLen+2);
try
ptxt:=UTF8toWide(pFileText,ptxt,SizeOf(WideChar)*FileLen+2);
ptxt[FileLen+1]:=#0000;
rhxml:=XI.parseString(ptxt,@txtlen,'root');
finally
freemem(ptxt);
end;
if (rhxml=0) then exit;
DoMessage(ITXT_THREAD_MAXPROGRESS,0,xi.getChildCount(rhxml));
chldxml:=xi.getFirstChild(rhxml);
if xi.getName(chldxml)='version' then
begin
ic:=0;
curxml:=xi.getNextChild(rhxml,'event',@ic);
while (curxml<>0) do
begin
fillchar(dbei,sizeof(dbei),0);
dbei.cbSize:=sizeof(dbei);
dbei.szModule:=PChar(proto);
if TryStrToInt(xi.getText(xi.getChildByPath(curxml,'time',false)),tm) then dbei.timestamp:=tm;
if xi.getText(xi.getChildByPath(curxml,'incoming',false))='Yes' then dbei.flags:=DBEF_READ
else dbei.flags:=DBEF_SENT or DBEF_READ;
if isMirandaUnicode then dbei.flags:=dbei.flags or DBEF_UTF;
if xi.getText(xi.getChildByPath(curxml,'type',false))^='2' then
begin
s:=xi.getText(xi.getChildByPath(curxml,'text',false))+': '+
xi.getText(xi.getChildByPath(curxml,'data',false));
dbei.eventType:= EVENTTYPE_URL;
end
else
begin
s:=xi.getText(xi.getChildByPath(curxml,'text',false));
dbei.eventType:= EVENTTYPE_MESSAGE;
end;
try
if IsMirandaUnicode then tempstr:=WidetoUTF8(PWideChar(s),tempstr)
else tempstr:=WideToANSI(PWideChar(s),tempstr,cp);
dbei.cbBlob:=lstrlen(tempstr)+1;
dbei.pBlob:=PByte(tempstr);
if not IsDuplicateEvent(DContact.hContact,dbei) then
if pluginLink^.CallService(MS_DB_EVENT_ADD, wParam(DContact.hContact), lParam(@dbei))<>0 then Inc(AddedMessages)
else begin
s:= 'Error adding message to DB';
DoMessage(ITXT_THREAD_ERROR,integer(PWideChar(s)),0); break; end
else Inc(Duplicates);
finally
FreeMem(tempstr);
curxml:=xi.getNextChild(rhxml,'event',@ic);
DoMessage(ITXT_THREAD_PROGRESS,ic,0);
end;
end;
end
else
begin
s:=WideFormat(TranslateWideString('Its not %s file'),['ICQ5']);
DoMessage(ITXT_THREAD_ERROR,integer(PWideChar(s)),0);
end;
end
else
begin
s:=TranslateWideString('Can''t determine destination contact');
DoMessage(ITXT_THREAD_ERROR,integer(PWideChar(s)),0);
end;
end;
{$endif}
|