summaryrefslogtreecommitdiff
path: root/plugins/ImportTXT/BICQ5IP.inc
blob: 581085ece6429770981b29fee0a55563fe9cab41 (plain)
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}