summaryrefslogtreecommitdiff
path: root/plugins/ImportTXT/BICQ6IP.inc
blob: 5728fe93e78503dd494cb8feb7dd7e2576885d92 (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
{$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}