From 0c1b97a6027e2341a2d68711e147d87be08ca411 Mon Sep 17 00:00:00 2001 From: George Hazan Date: Wed, 29 Aug 2018 13:49:40 +0300 Subject: ImportTXT moved to deprecated --- plugins/Actman/version.RES | Bin 0 -> 312 bytes plugins/ImportTXT/BICQ5IP.inc | 98 ---- plugins/ImportTXT/BICQ6IP(ADO).inc | 103 ----- plugins/ImportTXT/BICQ6IP.inc | 93 ---- plugins/ImportTXT/BRMSIP.inc | 85 ---- plugins/ImportTXT/BbayanIP.inc | 81 ---- plugins/ImportTXT/BmContactIP.inc | 60 --- plugins/ImportTXT/BqhfIP.inc | 145 ------ plugins/ImportTXT/FileDlgs.pas | 133 ------ plugins/ImportTXT/General.pas | 500 --------------------- plugins/ImportTXT/ImpDlgRes.inc | 13 - plugins/ImportTXT/ImpTxtDlg.rc | 18 - plugins/ImportTXT/ImpTxtDlg.res | Bin 1832 -> 0 bytes plugins/ImportTXT/ImpTxtWiz.rc | 64 --- plugins/ImportTXT/ImpTxtWiz.res | Bin 2840 -> 0 bytes plugins/ImportTXT/ImpWizRes.inc | 23 - plugins/ImportTXT/ImportT.pas | 87 ---- plugins/ImportTXT/ImportTU.pas | 268 ----------- plugins/ImportTXT/ImportThrd.pas | 643 --------------------------- plugins/ImportTXT/ImportTxtWiz.pas | 390 ---------------- plugins/ImportTXT/PerlRegEx.pas | 447 ------------------- plugins/ImportTXT/doc/changelog_ru.txt | 77 ---- plugins/ImportTXT/doc/examples_ru.txt | 169 ------- plugins/ImportTXT/doc/pattern_cfg_ru.txt | 77 ---- plugins/ImportTXT/doc/readme_ru.txt | 78 ---- plugins/ImportTXT/ico/def_ico.ico | Bin 1150 -> 0 bytes plugins/ImportTXT/importtxt.dpr | 155 ------- plugins/ImportTXT/importtxt/ICQ5_p.ini | 9 - plugins/ImportTXT/importtxt/ICQ6_p.ini | 5 - plugins/ImportTXT/importtxt/MAgent_p.ini | 23 - plugins/ImportTXT/importtxt/QHF_p.ini | 5 - plugins/ImportTXT/importtxt/SEmidprms_p.ini | 5 - plugins/ImportTXT/importtxt/bayanICQ_p.ini | 9 - plugins/ImportTXT/importtxt/dichat_p.ini | 24 - plugins/ImportTXT/importtxt/historypp_p.ini | 1 - plugins/ImportTXT/importtxt/jasmine.ini | 23 - plugins/ImportTXT/importtxt/jimm_p.ini | 24 - plugins/ImportTXT/importtxt/jimmws2_p.ini | 22 - plugins/ImportTXT/importtxt/jimmws_p.ini | 23 - plugins/ImportTXT/importtxt/mContact_p.ini | 9 - plugins/ImportTXT/importtxt/msgexport_p.ini | 23 - plugins/ImportTXT/importtxt/nokmidprms_p.ini | 9 - plugins/ImportTXT/importtxt/pigeon_p.ini | 23 - plugins/ImportTXT/importtxt/qip_p.ini | 23 - plugins/ImportTXT/importtxt/rnq_p.ini | 22 - plugins/ImportTXT/importtxt/smaper_p.ini | 23 - plugins/ImportTXT/importtxt/smapern_p.ini | 23 - plugins/ImportTXT/importtxtdlg.pas | 227 ---------- plugins/ImportTXT/make.bat | 30 -- plugins/ImportTXT/version.rc | 51 --- plugins/QuickSearch/version.RES | Bin 0 -> 312 bytes plugins/Watrack/version.RES | Bin 0 -> 312 bytes plugins/mRadio/version.RES | Bin 0 -> 312 bytes 53 files changed, 4443 deletions(-) create mode 100644 plugins/Actman/version.RES delete mode 100644 plugins/ImportTXT/BICQ5IP.inc delete mode 100644 plugins/ImportTXT/BICQ6IP(ADO).inc delete mode 100644 plugins/ImportTXT/BICQ6IP.inc delete mode 100644 plugins/ImportTXT/BRMSIP.inc delete mode 100644 plugins/ImportTXT/BbayanIP.inc delete mode 100644 plugins/ImportTXT/BmContactIP.inc delete mode 100644 plugins/ImportTXT/BqhfIP.inc delete mode 100644 plugins/ImportTXT/FileDlgs.pas delete mode 100644 plugins/ImportTXT/General.pas delete mode 100644 plugins/ImportTXT/ImpDlgRes.inc delete mode 100644 plugins/ImportTXT/ImpTxtDlg.rc delete mode 100644 plugins/ImportTXT/ImpTxtDlg.res delete mode 100644 plugins/ImportTXT/ImpTxtWiz.rc delete mode 100644 plugins/ImportTXT/ImpTxtWiz.res delete mode 100644 plugins/ImportTXT/ImpWizRes.inc delete mode 100644 plugins/ImportTXT/ImportT.pas delete mode 100644 plugins/ImportTXT/ImportTU.pas delete mode 100644 plugins/ImportTXT/ImportThrd.pas delete mode 100644 plugins/ImportTXT/ImportTxtWiz.pas delete mode 100644 plugins/ImportTXT/PerlRegEx.pas delete mode 100644 plugins/ImportTXT/doc/changelog_ru.txt delete mode 100644 plugins/ImportTXT/doc/examples_ru.txt delete mode 100644 plugins/ImportTXT/doc/pattern_cfg_ru.txt delete mode 100644 plugins/ImportTXT/doc/readme_ru.txt delete mode 100644 plugins/ImportTXT/ico/def_ico.ico delete mode 100644 plugins/ImportTXT/importtxt.dpr delete mode 100644 plugins/ImportTXT/importtxt/ICQ5_p.ini delete mode 100644 plugins/ImportTXT/importtxt/ICQ6_p.ini delete mode 100644 plugins/ImportTXT/importtxt/MAgent_p.ini delete mode 100644 plugins/ImportTXT/importtxt/QHF_p.ini delete mode 100644 plugins/ImportTXT/importtxt/SEmidprms_p.ini delete mode 100644 plugins/ImportTXT/importtxt/bayanICQ_p.ini delete mode 100644 plugins/ImportTXT/importtxt/dichat_p.ini delete mode 100644 plugins/ImportTXT/importtxt/historypp_p.ini delete mode 100644 plugins/ImportTXT/importtxt/jasmine.ini delete mode 100644 plugins/ImportTXT/importtxt/jimm_p.ini delete mode 100644 plugins/ImportTXT/importtxt/jimmws2_p.ini delete mode 100644 plugins/ImportTXT/importtxt/jimmws_p.ini delete mode 100644 plugins/ImportTXT/importtxt/mContact_p.ini delete mode 100644 plugins/ImportTXT/importtxt/msgexport_p.ini delete mode 100644 plugins/ImportTXT/importtxt/nokmidprms_p.ini delete mode 100644 plugins/ImportTXT/importtxt/pigeon_p.ini delete mode 100644 plugins/ImportTXT/importtxt/qip_p.ini delete mode 100644 plugins/ImportTXT/importtxt/rnq_p.ini delete mode 100644 plugins/ImportTXT/importtxt/smaper_p.ini delete mode 100644 plugins/ImportTXT/importtxt/smapern_p.ini delete mode 100644 plugins/ImportTXT/importtxtdlg.pas delete mode 100644 plugins/ImportTXT/make.bat delete mode 100644 plugins/ImportTXT/version.rc create mode 100644 plugins/QuickSearch/version.RES create mode 100644 plugins/Watrack/version.RES create mode 100644 plugins/mRadio/version.RES (limited to 'plugins') diff --git a/plugins/Actman/version.RES b/plugins/Actman/version.RES new file mode 100644 index 0000000000..aa7c19667f Binary files /dev/null and b/plugins/Actman/version.RES differ diff --git a/plugins/ImportTXT/BICQ5IP.inc b/plugins/ImportTXT/BICQ5IP.inc deleted file mode 100644 index 46ee251e59..0000000000 --- a/plugins/ImportTXT/BICQ5IP.inc +++ /dev/null @@ -1,98 +0,0 @@ -{$IFDEF BIN_IMPORT_} - -var - rhxml: HXML; - curxml: HXML; - chldxml: HXML; - ptxt: PWideChar; - txtlen: int; - ic, tm: integer; - res: LongBool; - -{$ELSE} - -begin - 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 := xmlparseString(ptxt, @txtlen, 'root'); - finally - freemem(ptxt); - end; - if (rhxml = 0) then - exit; - DoMessage(ITXT_THREAD_MAXPROGRESS, 0, xmlgetChildCount(rhxml)); - chldxml := xmlgetFirstChild(rhxml); - if xmlgetName(chldxml) = 'version' then - begin - ic := 0; - curxml := xmlgetNextChild(rhxml, 'event', @ic); - while (curxml <> 0) do - begin - fillchar(dbei, SizeOf(dbei), 0); - dbei.szModule := PAnsiChar(proto); - if TryStrToInt(xmlgetText(xmlgetChildByPath(curxml, 'time', false)), tm) - then - dbei.timestamp := tm; - if xmlgetText(xmlgetChildByPath(curxml, 'incoming', false)) = 'Yes' then - dbei.flags := DBEF_READ or DBEF_UTF - else - dbei.flags := DBEF_READ or DBEF_UTF or DBEF_SENT; - - if xmlgetText(xmlgetChildByPath(curxml, 'type', false))^ = '2' then - begin - s := xmlgetText(xmlgetChildByPath(curxml, 'text', false)) + ': ' + - xmlgetText(xmlgetChildByPath(curxml, 'data', false)); - dbei.eventType := EVENTTYPE_URL; - end - else - begin - s := xmlgetText(xmlgetChildByPath(curxml, 'text', false)); - dbei.eventType := EVENTTYPE_MESSAGE; - end; - try - tempstr := WidetoUTF8(PWideChar(s), tempstr); - dbei.cbBlob := lstrlena(tempstr) + 1; - dbei.pBlob := PByte(tempstr); - if not IsDuplicateEvent(DContact.hContact, dbei) then - if db_event_add(wParam(DContact.hContact), @dbei) <> 0 then - Inc(AddedMessages) - else - begin - s := 'Error adding message to database'; - DoMessage(ITXT_THREAD_ERROR, wparam(PWideChar(s)), 0); - break; - end - - else - Inc(Duplicates); - - finally - freemem(tempstr); - curxml := xmlgetNextChild(rhxml, 'event', @ic); - DoMessage(ITXT_THREAD_PROGRESS, ic, 0); - end; - end; - end - else - begin - s := WideFormat(TranslateWideString('It''s not %s file'), ['ICQ5']); - DoMessage(ITXT_THREAD_ERROR, wparam(PWideChar(s)), 0); - end; - end - else - begin - s := TranslateWideString('Can''t determine destination contact'); - DoMessage(ITXT_THREAD_ERROR, wparam(PWideChar(s)), 0); - end; -end; -{$ENDIF} diff --git a/plugins/ImportTXT/BICQ6IP(ADO).inc b/plugins/ImportTXT/BICQ6IP(ADO).inc deleted file mode 100644 index f713c48950..0000000000 --- a/plugins/ImportTXT/BICQ6IP(ADO).inc +++ /dev/null @@ -1,103 +0,0 @@ -{$IFDEF BIN_IMPORT_} - -var - QR1: TADOQuery; - -var - OneContact: boolean; - flags: integer; - timestamp: LongWord; - Msg: AnsiString; - ADOConnection:TADOConnection; - -function FindUIDinDB(too: string): string; -var - QR2: TADOQuery; -begin - QR2 := TADOQuery.Create(nil); - QR2.Connection := ADOConnection; - QR2.SQL.Text := 'select to, UID from ChatHistory WHERE to=' + too; - QR2.Open; - QR2.First; - result := QR2.FieldByName('UID').AsString; - QR2.Close; - QR2.Free; -end; - -{$ELSE} - -begin - DoUnMapFile; - OneContact := (DContact.hContact <> 0) and (DContact.hContact <> INVALID_HANDLE_VALUE); - try -// coInitialize(nil); - ADOConnection:=TADOConnection.Create(nil); - ADOConnection.Connected:=false; - ADOConnection.LoginPrompt:=false; - ADOConnection.Provider:='Microsoft.Jet.OLEDB.4.0'; - ADOConnection.ConnectionString := - 'User ID=Admin;' + - 'Data Source=' + FileName + - ';Mode=Share Deny None;' + - 'Extended Properties="";' + - 'Locale Identifier=1033;' + - 'Persist Security Info=False;'; - - ADOConnection.Connected:=true; - - QR1 := TADOQuery.Create(nil); - QR1.Connection := ADOConnection; - QR1.SQL.Text := 'SELECT Messages.from, date, to, type, subType, subject FROM Messages'; - QR1.Open; - if (QR1.FieldCount = 7) then - begin - DoMessage(ITXT_THREAD_START, 0, 0); - QR1.First; - DoMessage(ITXT_THREAD_MAXPROGRESS, 0, QR1.RecordCount); - While not QR1.EOF do - begin - try - if (QR1.FieldByName('type').AsString = 'Text') and - (QR1.FieldByName('subType').AsString = 'IM') then - begin - UIDStr := FindUIDinDB(QR1.FieldByName('to').AsString); - 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.Fields[1].AsString = '' then - flags := DBEF_READ or DBEF_UTF or DBEF_SENT - else - flags := DBEF_READ or DBEF_UTF; - timestamp := DateTimeToTimeStamp(QR1.FieldByName('date').AsDateTime - 693594); - Msg := QR1.FieldByName('subject').AsString; - 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.RecNo, 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 - QR1.Close; - QR1.Free; - ADOConnection.Close; - ADOConnection.Free; - end; -end; -{$ENDIF} diff --git a/plugins/ImportTXT/BICQ6IP.inc b/plugins/ImportTXT/BICQ6IP.inc deleted file mode 100644 index 5728fe93e7..0000000000 --- a/plugins/ImportTXT/BICQ6IP.inc +++ /dev/null @@ -1,93 +0,0 @@ -{$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} diff --git a/plugins/ImportTXT/BRMSIP.inc b/plugins/ImportTXT/BRMSIP.inc deleted file mode 100644 index a270102f8d..0000000000 --- a/plugins/ImportTXT/BRMSIP.inc +++ /dev/null @@ -1,85 +0,0 @@ -{$IFDEF BIN_IMPORT_} -var - rsz: integer; - -{$ELSE} - -begin - pt := uint_ptr(pFileText); - i := 0; - if FileLen >= $30 then - if (StrLComp(PAnsiChar(pt), 'midp-rms', 8) = 0) then - begin - if FileLen >= $48 then - if (RLInteger(pt + $40) = $48) then - begin - fsz := RLInteger(pt + $44); - i := $48; - end; - if (RLInteger(pt + $28) = $30) then - begin - fsz := RLInteger(pt + $2C); - i := $30; - 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); - DoMessage(ITXT_THREAD_MAXPROGRESS, 0, fsz); - while Cardinal(i) < fsz do - begin - fillchar(dbei, sizeof(dbei), 0); - dbei.szModule := PAnsiChar(proto); - rsz := RLInteger(pt + i + $08); - if PByte(pt + i + $10)^ = $00 then - dbei.flags := DBEF_READ or DBEF_UTF - else - dbei.flags := DBEF_READ or DBEF_UTF or DBEF_SENT; - // utf8 - dbei.eventType := EVENTTYPE_MESSAGE; - dbei.cbBlob := RLWord(pt + i + $13 + RLWord(pt + i + $11)); - dbei.pBlob := Pointer(pt + i + $13 + RLWord(pt + i + $11) + $2); - dbei.timestamp := StrToTimeStamp - (Pointer(uint_ptr(pt + i) + $13 + RLWord(pt + i + $11) + $4 + dbei.cbBlob), - RLWord(uint_ptr(pt + i) + $13 + RLWord(pt + i + $11) + $2 + dbei.cbBlob)); - inc(dbei.cbBlob); - - try - if not IsDuplicateEvent(DContact.hContact, dbei) then - if db_event_add(DContact.hContact, @dbei) <> 0 then - inc(AddedMessages) - else - begin - s := 'Error adding message to database'; - DoMessage(ITXT_THREAD_ERROR, wparam(PWideChar(s)), 0); - break; - end - - else - inc(Duplicates); - finally - inc(i, rsz); - end; - DoMessage(ITXT_THREAD_PROGRESS, i, 0); - end; - end - else - begin - s := TranslateWideString('Can''t determine destination contact'); - DoMessage(ITXT_THREAD_ERROR, wparam(PWideChar(s)), 0); - end; - end - else - begin - s := WideFormat(TranslateWideString('It''s not %s file'), ['midp-rms']); - DoMessage(ITXT_THREAD_ERROR, wparam(PWideChar(s)), 0); - end - else // file len - -end; -{$ENDIF} diff --git a/plugins/ImportTXT/BbayanIP.inc b/plugins/ImportTXT/BbayanIP.inc deleted file mode 100644 index d0f1d5ab7b..0000000000 --- a/plugins/ImportTXT/BbayanIP.inc +++ /dev/null @@ -1,81 +0,0 @@ -{$IFDEF BIN_IMPORT_} - -var - j: integer; -{$ELSE} - -begin - pt := uint_ptr(pFileText); - if FileLen >= 10 then - if true { (PWORD(pt)^=$4248) and (PDWORD(pt+2)^=$FFFFFFFF) } then - begin - // - 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); - fsz := FileLen - 2; // - DoMessage(ITXT_THREAD_MAXPROGRESS, 0, fsz); - inc(pt, 2); - i := 0; - while Cardinal(i) < fsz do - begin - with dbei do - begin - fillchar(dbei, sizeof(dbei), 0); - dbei.szModule := PAnsiChar(proto); - dbei.timestamp := ImportTU.timestamp( - RLWORD(pt + i + 5), - PByte(pt + i + 4)^, - PByte(pt + i + 3)^, - PByte(pt + i)^, - PByte(pt + i + 1)^, - PByte(pt + i + 2)^); - - if PByte(pt + i + $7)^ = $00 then - dbei.flags := DBEF_READ or DBEF_UTF - else - dbei.flags := DBEF_READ or DBEF_UTF or DBEF_SENT; - dbei.eventType := EVENTTYPE_MESSAGE; - dbei.cbBlob := (RLWORD(pt + i + $8) + 1) * sizeof(WideChar); - s := ''; - for j := 0 to RLWORD(pt + i + $8) do - s := s + WideChar(RLWORD(pt + i + $0A + (j * 2))); - - dbei.pBlob := PByte(WideToUTF8(PWideChar(s), PAnsiChar(pBlob))); - end; - if not IsDuplicateEvent(DContact.hContact, dbei) then - if db_event_add(wParam(DContact.hContact), @dbei) <> 0 then - inc(AddedMessages) - else - begin - s := 'Error adding message to database'; - DoMessage(ITXT_THREAD_ERROR, wparam(PWideChar(s)), 0); - break; - end - - else - inc(Duplicates); - inc(i, dbei.cbBlob + $0C); - FreeMem(dbei.pBlob); - DoMessage(ITXT_THREAD_PROGRESS, i, 0); - end; - end - else - begin - s := TranslateWideString('Can''t determine destination contact'); - DoMessage(ITXT_THREAD_ERROR, wparam(PWideChar(s)), 0); - end; - end - else - begin - s := WideFormat(TranslateWideString('It''s not %s file'), ['bayanICQ']); - DoMessage(ITXT_THREAD_ERROR, wparam(PWideChar(s)), 0); - end - else // file len -end; -{$ENDIF} diff --git a/plugins/ImportTXT/BmContactIP.inc b/plugins/ImportTXT/BmContactIP.inc deleted file mode 100644 index cc81555d56..0000000000 --- a/plugins/ImportTXT/BmContactIP.inc +++ /dev/null @@ -1,60 +0,0 @@ -{$IFDEF BIN_IMPORT_} -{$ELSE} - -begin - pt := uint_ptr(pFileText); - if FileLen >= 10 then - if (PWORD(pt)^ = $4248) and (PDWORD(pt + 2)^ = $FFFFFFFF) then - begin - // - 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); - fsz := PDWORD(pt + 6)^; // - DoMessage(ITXT_THREAD_MAXPROGRESS, 0, fsz); - inc(pt, 10); - i := 0; - while cardinal(i) < fsz do - begin - evSize := PInteger(pt + i)^; - dbei.szModule := PAnsiChar(proto); - dbei.timestamp := PDWORD(pt + i + $08)^; - dbei.flags := PDWORD(pt + i + $0C)^; - dbei.eventtype := PDWORD(pt + i + $10)^; - dbei.cbBlob := PDWORD(pt + i + $14)^; - dbei.pBlob := PBYTE(pt + i + evSize); - - if not IsDuplicateEvent(DContact.hContact, dbei) then - if db_event_add(DContact.hContact, @dbei) <> 0 then - inc(AddedMessages) - else - begin - s := 'Error adding message to database'; - DoMessage(ITXT_THREAD_ERROR, wparam(PWideChar(s)), 0); - break; - end - else - inc(Duplicates); - inc(i, evSize + integer(dbei.cbBlob)); - DoMessage(ITXT_THREAD_PROGRESS, i, 0); - end; - end - else - begin - s := TranslateWideString('Can''t determine destination contact'); - DoMessage(ITXT_THREAD_ERROR, wparam(PWideChar(s)), 0); - end; - end - else - begin - s := WideFormat(TranslateWideString('It''s not %s file'), ['mContact']); - DoMessage(ITXT_THREAD_ERROR, wparam(PWideChar(s)), 0); - end - else // file len -end; -{$ENDIF} diff --git a/plugins/ImportTXT/BqhfIP.inc b/plugins/ImportTXT/BqhfIP.inc deleted file mode 100644 index cd99bbfaa3..0000000000 --- a/plugins/ImportTXT/BqhfIP.inc +++ /dev/null @@ -1,145 +0,0 @@ -{$IFDEF BIN_IMPORT_} - -var - qhfver: byte; - szMsgHd: word; - UIDstr: UTF8String; - UIDLen, NickLen: word; - NickStr: UTF8String; - -function DecodeQHFMsg(ver: byte; adr: integer; cSize: word): AnsiString; - - function get1(c: AnsiChar): byte; - begin - if ShortInt(c) >= 0 then - Result := byte(c) - else - Result := byte(c) + 256; - end; - - function get2(b: byte): AnsiChar; - begin - if b < 128 then - Result := AnsiChar(b) - else - Result := AnsiChar(b - 256); - end; - -var - i: integer; -begin - SetLength(Result, cSize); - for i := 1 to cSize do - begin - Result[i] := PAnsiChar(adr + i - 1)^; - if ver <> $01 then - begin - inc(Result[i], i); - Result[i] := get2(255 - get1(Result[i])); - end - end; -end; - -{$ELSE} - -begin - pt := uint_ptr(pFileText); - if FileLen >= $2E then - if (PAnsiChar(pt)^ = 'Q') and (PAnsiChar(pt + 1)^ = 'H') and (PAnsiChar(pt + 2)^ = 'F') then - begin - qhfver := PByte(pt + 3)^; - if qhfver >= $03 then - szMsgHd := $23 - else - szMsgHd := $21; - fsz := RLInteger(pt + $04); - - UIDLen := RLWord(pt + $2C); - SetLength(UIDstr, UIDLen); - if qhfver <= 2 then - lstrcpynA(PAnsiChar(UIDstr), PAnsiChar(pt + $2E), UIDLen) - else - lstrcpynA(PAnsiChar(UIDstr), PAnsiChar(pt + $2E), UIDLen + 1); - - NickLen := RLWord(pt + $2E + UIDLen); - SetLength(NickStr, NickLen); - if qhfver <= 2 then - lstrcpynA(PAnsiChar(NickStr), PAnsiChar(pt + $2E + UIDLen + 2), UIDLen) - else - lstrcpynA(PAnsiChar(NickStr), PAnsiChar(pt + $2E + UIDLen + 2), UIDLen + 1); - - inc(pt, $2E + UIDLen + 2 + NickLen); - if fsz <> FileLen - ($2E + UIDLen + 2 + NickLen) then - fsz := FileLen - ($2E + UIDLen + 2 + NickLen); - - if (DContact.hContact = 0) or (DContact.hContact = INVALID_HANDLE_VALUE) - then - begin - DContact.ContactUID := UIDstr; - DContact.ContactNick := UTF8Decode{UTF8ToWideString}(NickStr); - TryDetermContact(DContact); - 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); - DoMessage(ITXT_THREAD_MAXPROGRESS, 0, fsz); - i := 0; - while Cardinal(i) < fsz do - begin - fillchar(dbei, sizeof(dbei), 0); - dbei.szModule := PAnsiChar(proto); - dbei.timestamp := RLInteger(pt + i + $12); - dbei.timestamp := dbei.timestamp - - (Cardinal(TimeZone_ToLocal(dbei.timestamp)) - dbei.timestamp); // GMT - if PByte(pt + i + $1A)^ = $00 then - dbei.flags := DBEF_READ or DBEF_UTF - else - dbei.flags := DBEF_READ or DBEF_UTF or DBEF_SENT; - // utf8 - dbei.eventType := EVENTTYPE_MESSAGE; - dbei.cbBlob := RLWord(pt + i + szMsgHd - 2) + 1; - // #0 - dbei.pBlob := AllocMem(dbei.cbBlob); - - try - Move(DecodeQHFMsg(qhfver, pt + i + szMsgHd, dbei.cbBlob - 1)[1], - dbei.pBlob^, dbei.cbBlob - 1); - if not IsDuplicateEvent(DContact.hContact, dbei) then - if db_event_add(DContact.hContact, @dbei) <> 0 then - inc(AddedMessages) - else - begin - s := 'Error adding message to database'; - DoMessage(ITXT_THREAD_ERROR, wparam(PWideChar(s)), 0); - break; - end - - else - inc(Duplicates); - - finally - inc(i, szMsgHd + dbei.cbBlob - 1); - FreeMem(dbei.pBlob); - end; - DoMessage(ITXT_THREAD_PROGRESS, i, 0); - end; - end - else - begin - s := TranslateWideString('Can''t determine destination contact'); - DoMessage(ITXT_THREAD_ERROR, wparam(PWideChar(s)), 0); - end; - end - else - begin - s := WideFormat(TranslateWideString('It''s not %s file'), ['QHF']); - DoMessage(ITXT_THREAD_ERROR, wparam(PWideChar(s)), 0); - end - else // file len -end; -{$ENDIF} diff --git a/plugins/ImportTXT/FileDlgs.pas b/plugins/ImportTXT/FileDlgs.pas deleted file mode 100644 index 970c005334..0000000000 --- a/plugins/ImportTXT/FileDlgs.pas +++ /dev/null @@ -1,133 +0,0 @@ -unit FileDlgs; - -interface - -uses windows,m_api; - -function OpenDialogExecute(hDlg:hWnd; flg:cardinal; var nFO:integer; const DefExt:string):WideString; // -function FolderDialogExecute(hdlg:HWND; var nFO:integer; const DefExt:string):WideString; // - -implementation - -uses ActiveX, ShlObj, SysUtils, CommDlg; - -function OpenDialogExecute(hDlg:hWnd; flg:cardinal; var nFO:integer; const DefExt:string):WideString; // -var - OpenFilename:OpenFilenameW; - TempFilename:WideString; - Temp1,Temp2:WideString; - res:bool; -begin - nFO:=0; - FillChar(OpenFileName, SizeOf(OpenFileName), 0); - with OpenFilename do - begin - lStructSize:=SizeOf(OpenFilename); - hWndOwner:=hDlg; - Temp1:= - TranslateWideString('Default extension')+' (*.'+DefExt+')'+#0+'*.'+DefExt+#0+ - TranslateWideString('All files (*.*)')+#0+'*.*'+#0#0; - lpstrFilter:=PWideChar(Temp1); - nMaxFile:=MAX_PATH*16; - SetLength(TempFilename, nMaxFile + 2); - TempFilename[1]:=#0; - lpstrFile :=PWideChar(TempFilename); - Temp2:=TranslateWideString('Choose a file for import...'); - lpstrTitle:=PWideChar(Temp2); - Flags:=flg or OFN_EXPLORER or OFN_ENABLESIZING or OFN_PATHMUSTEXIST or OFN_FILEMUSTEXIST or OFN_NOCHANGEDIR; - end; - res:=GetOpenFileNameW(@OpenFileName); - if res then - begin - Result:=TempFilename; - nFO:=OpenFilename.nFileOffset; - end - else - Result:=''; -end; - -//***Awkward - author of this procedures************ - -function StrDupW(var dst:PWideChar;src:PWideChar;len:integer=0):PWideChar; -begin - if (src=nil) or (src^=#0) then - dst:=nil - else - begin - if len=0 then - len:=lstrlenw(src); - GetMem(dst,(len+1)*SizeOf(WideChar)); - lstrcpynw(dst,src,len+1); - end; - result:=dst; -end; - -function SelectDirectory(Caption:PWideChar;var Directory:PWideChar; - Parent:HWND=0;newstyle:bool=false):Boolean; -var - BrowseInfo:BrowseInfoW; - Buffer:array [0..MAX_PATH-1] of WideChar; - ItemIDList:PItemIDList; - ShellMalloc:IMalloc; -begin - Result:=False; - FillChar(BrowseInfo,SizeOf(BrowseInfo),0); - if (ShGetMalloc(ShellMalloc)=S_OK) and (ShellMalloc<>nil) then - begin - with BrowseInfo do - begin - hwndOwner :=Parent; - pszDisplayName:=Buffer; - lpszTitle :=Caption; - ulFlags :=BIF_RETURNONLYFSDIRS; - end; - if newstyle then - if CoInitializeEx(nil,COINIT_APARTMENTTHREADED)<>RPC_E_CHANGED_MODE then - BrowseInfo.ulFlags:=BrowseInfo.ulFlags or BIF_NEWDIALOGSTYLE; - try - ItemIDList:=ShBrowseForFolderW(@BrowseInfo); - Result:=ItemIDList<>nil; - if Result then - begin - ShGetPathFromIDListW(ItemIDList,Buffer); - StrDupW(Directory,Buffer); - ShellMalloc.Free(ItemIDList); - end; - finally - if newstyle then CoUninitialize; - end; - end; -end; - -//******************************************************************* - -function FolderDialogExecute(hdlg:HWND; var nFO:integer; const DefExt:string):WideString; // -var - SR: _WIN32_FIND_DATAW; - hFFF:THandle; - tpwc:PWideChar; - tws:WideString; -begin - if SelectDirectory(TranslateW('Select folder for import...'),tpwc,hdlg,true) then - begin - result:=tpwc; - result:=result+#0; - nFO:=length(result); - tws:=tpwc; - tws:=tws+'\*.'+DefExt; - SR.dwFileAttributes:=faAnyFile; - hFFF:=FindFirstFileW(PWideChar(tws),SR); - if hFFF<>INVALID_HANDLE_VALUE then - begin - repeat - result:=result+SR.cFileName; - result:=result+#0; - until not FindNextFileW(hFFF,SR); - windows.FindClose(hFFF); - result:=result+#0; - end; - end - else result:=''; -end; - -end. diff --git a/plugins/ImportTXT/General.pas b/plugins/ImportTXT/General.pas deleted file mode 100644 index 76a25be9ae..0000000000 --- a/plugins/ImportTXT/General.pas +++ /dev/null @@ -1,500 +0,0 @@ -unit general; - -interface - -uses - Windows, Messages, SysUtils, IniFiles, - m_api, - ImportT, - ImportTU; - -var - cp: cardinal; - -var - AppPath: array [0 .. MAX_PATH] of Char; - TxtPatterns: array of RTxtPattern; - Protocols: array of TDestProto; - ProtoCount: integer; - CheckForDuplicates: boolean; - ShowDuplicates: boolean; - -const - BIN_PROCEDURE_COUNT = 6; // - -const -{$EXTERNALSYM PBM_SETRANGE} - PBM_SETRANGE = WM_USER + 1; -{$EXTERNALSYM PBM_SETPOS} - PBM_SETPOS = WM_USER + 2; - -const - IMPORT_TXT_MODULE = 'ImportTXT'; - IMPORT_TXT_SERVICE = IMPORT_TXT_MODULE + '/Import'; - IMPORT_WIZ_SERVICE = IMPORT_TXT_MODULE + '/Wizard'; - - // keys - IMPORT_TXT_AS = 'AutoStart'; - IMPORT_TXT_LP = 'LastPattern'; - -type - TOnAccountListChange = procedure(); - -var - OnAccountListChange: TOnAccountListChange; - -procedure ReadPatterns; -procedure ExtractFilePath(fName: PAnsiChar); -function GetContactProto(hContact: THandle): AnsiString; -function GetContactByUID(const proto: AnsiString; const id: AnsiString): THandle; -function GetContactByNick(const proto: AnsiString; const Nick: WideString): THandle; -procedure EnumProtocols; -function GetContactID(hContact: THandle; proto: AnsiString = ''; Contact: boolean = false): WideString; -function GetContactNick(hContact: THandle; proto: AnsiString = ''; Contact: boolean = false): WideString; -function DBReadByte(hContact: THandle; szModule: PAnsiChar; szSetting: PAnsiChar; default: byte = 0): byte; -function DBWriteByte(hContact: THandle; szModule: PAnsiChar; szSetting: PAnsiChar; val: byte): integer; -procedure SetLastPattern(lp: byte); -function GetLastPattern: byte; -function TimeStampToWStr(ts: DWORD): WideString; -function StrToTimeStamp(STime: PAnsiChar; len: integer): DWORD; - -function RLWord(adr: integer): word; -function RLInteger(adr: integer): integer; - -implementation - -procedure ExtractFilePath(fName: PAnsiChar); -var - p: PAnsiChar; -begin - p := fName; - if p <> nil then - begin - while p^ <> #0 do - inc(p); - while p^ <> '\' do - dec(p); - inc(p); - p^ := #0; - end; -end; - -function ReadPattern(const FileName: String): boolean; -var - TI: TIniFile; - tempstr: String; - pattern:pRTxtPattern; -begin - TI := TIniFile.Create(FileName); - try - if not TI.SectionExists('General') then - exit; - - pattern:=@TxtPatterns[High(TxtPatterns)]; - // if "General" exists - if TI.ValueExists('General', 'Name') then - pattern^.Name := TI.ReadString('General', 'Name', '') - else - exit; - if TI.ValueExists('General', 'Type') then - pattern^.IType := TI.ReadInteger('General', 'Type', 1) - else - exit; - case pattern^.IType of - 1: - begin - if TI.ValueExists('General', 'Charset') then - begin - tempstr := TI.ReadString('General', 'Charset', 'UTF8'); - if tempstr = 'ANSI' then - pattern^.Charset := inANSI - else if tempstr = 'UTF8' then - pattern^.Charset := inUTF8 - else if tempstr = 'UCS2' then - pattern^.Charset := inUCS2 - else - exit; - end - else - exit; - if pattern^.Charset = inANSI then - begin - pattern^.Codepage := TI.ReadInteger('General', 'Codepage', 0); - if not IsValidCodePage(pattern^.Codepage) then - pattern^.Codepage := 0; - end; - pattern^.UseHeader := TI.ReadInteger('General', 'UseHeader', 0); - pattern^.UsePreMsg := TI.ReadBool('General', 'UsePreMsg', false); - // Read message section - if TI.SectionExists('Message') then - begin - if TI.ValueExists('Message', 'Pattern') then - pattern^.Msg.Pattern := TI.ReadString('Message', 'Pattern', '') - else - exit; - pattern^.Msg.Incoming := TI.ReadString('Message', 'In', ''); - pattern^.Msg.Outgoing := TI.ReadString('Message', 'Out', ''); - if TI.ValueExists('Message', 'Direction') then - pattern^.Msg.Direction := TI.ReadInteger('Message', 'Direction', 0) - else - exit; - if TI.ValueExists('Message', 'Day') then - pattern^.Msg.Day := TI.ReadInteger('Message', 'Day', 0) - else - exit; - if TI.ValueExists('Message', 'Month') then - pattern^.Msg.Month := TI.ReadInteger('Message', 'Month', 0) - else - exit; - if TI.ValueExists('Message', 'Year') then - pattern^.Msg.Year := TI.ReadInteger('Message', 'Year', 0) - else - exit; - if TI.ValueExists('Message', 'Hours') then - pattern^.Msg.Hours := TI.ReadInteger('Message', 'Hours', 0) - else - exit; - if TI.ValueExists('Message', 'Minutes') then - pattern^.Msg.Minutes := TI.ReadInteger('Message', 'Minutes', 0) - else - exit; - pattern^.Msg.Seconds := TI.ReadInteger('Message', 'Seconds', 0) - end - else - exit; - // if need read header section - if (pattern^.UseHeader > 0) then - if TI.SectionExists('Header') then - begin - if TI.ValueExists('Header', 'Pattern') then - pattern^.Header.Pattern := TI.ReadString('Header', 'Pattern', '') - else - exit; - if (not TI.ValueExists('Header', 'In')) and - ((pattern^.UseHeader and 1) = 1) then - exit; - pattern^.Header.Incoming := TI.ReadInteger('Header', 'In', 0); - pattern^.Header.Outgoing := TI.ReadInteger('Header', 'Out', 0); - pattern^.Header.InNick := TI.ReadInteger('Header', 'InNick', 0); - pattern^.Header.OutNick := TI.ReadInteger('Header', 'OutNick', 0); - pattern^.Header.InUID := TI.ReadInteger('Header', 'InUID', 0); - pattern^.Header.OutUID := TI.ReadInteger('Header', 'OutUID', 0); - if ((pattern^.UseHeader and 2) = 2) then - if (pattern^.Header.InNick = 0) and - (pattern^.Header.InUID = 0) then - exit; - end - else - exit; - // if nead read PreMessage section - if pattern^.UsePreMsg then - if TI.SectionExists('PreMessage') then - begin - pattern^.PreMsg.PreRN := TI.ReadInteger('PreMessage', 'PreRN', -1); - pattern^.PreMsg.AfterRN := TI.ReadInteger('PreMessage', 'AfterRN', -1); - pattern^.PreMsg.PreSP := TI.ReadInteger('PreMessage', 'PreSP', 0); - pattern^.PreMsg.AfterSP := TI.ReadInteger('PreMessage', 'AfterSP', 0); - end - else - exit; - end; // 1 - 2: - begin - pattern^.BinProc := TI.ReadInteger('General', 'BinProcedure', 0); - if (pattern^.BinProc > BIN_PROCEDURE_COUNT) then - exit; - end; - end; // case - pattern^.DefExtension := TI.ReadString('General', 'DefaultExtension', 'txt'); - pattern^.UseFileName := TI.ReadBool('General', 'UseFileName', false); - // if nead read FileName section - if pattern^.UseFileName then - if TI.SectionExists('FileName') then - begin - if TI.ValueExists('FileName', 'Pattern') then - pattern^.fName.Pattern := TI.ReadString('FileName', 'Pattern', '') - else - exit; - pattern^.fName.InNick := TI.ReadInteger('FileName', 'InNick', 0); - pattern^.fName.InUID := TI.ReadInteger('FileName', 'InUID', 0); - if (pattern^.fName.InNick = 0) and (pattern^.fName.InUID = 0) then - exit; - pattern^.fName.OutNick := TI.ReadInteger('FileName', 'OutNick', 0); - pattern^.fName.OutUID := TI.ReadInteger('FileName', 'OutUID', 0); - end - else - exit; - finally - TI.Free; - result := true; - end; - result := false; -end; - -procedure ReadPatterns; -var - SR: TSearchRec; - FileAttrs: integer; - i: integer; -begin - FileAttrs := faAnyFile; - i := 0; - if FindFirst(AppPath + '\importtxt\*.ini', FileAttrs, SR) = 0 then - begin - repeat - SetLength(TxtPatterns, i+1); - if not ReadPattern(AppPath + '\importtxt\' + SR.Name) then - inc(i); - until FindNext(SR) <> 0; - FindClose(SR); - end; - // cut unneded - SetLength(TxtPatterns, i); -end; - -function GetContactByUID(const proto: AnsiString; const id: AnsiString): THandle; -var - Contact: THandle; - otherproto: AnsiString; - idnum: integer; - tempwstr: PWideChar; - ws: WideString; -begin - if not TryStrToInt(id, idnum) then - idnum := 0; - tempwstr := UTF8ToWide(PAnsiChar(id), tempwstr); - ws := tempwstr; - FreeMem(tempwstr); - Contact := db_find_first(); - while (Contact <> 0) do - begin - otherproto := Proto_GetProtoName(Contact); - if otherproto = proto then - begin - tempwstr := Contact_GetInfo(CNF_UNIQUEID, Contact, PAnsiChar(otherproto)); - if (tempwstr <> nil) and (tempwstr = ws) then - begin - mir_free(tempwstr); - break; - end; - mir_free(tempwstr); - end; // if - Contact := db_find_next(Contact); - end; // while - if Contact=0 then - result := INVALID_HANDLE_VALUE - else - result := Contact; -end; - -function GetContactByNick(const proto: AnsiString; const Nick: WideString): THandle; -var - Contact: THandle; - otherproto: AnsiString; - tmpwstr: PWideChar; -begin - result := INVALID_HANDLE_VALUE; - Contact := db_find_first(); - while (Contact <> 0) do - begin - otherproto := Proto_GetProtoName(Contact); - if otherproto = proto then - begin - tmpwstr := Contact_GetInfo(CNF_NICK, Contact, PAnsiChar(otherproto)); - if (tmpwstr <> nil) and (Nick = tmpwstr) then - begin - mir_free(tmpwstr); - result := Contact; - break; - end; // if - mir_free(tmpwstr); - end; // if - Contact := db_find_next(Contact); - end; // while -end; - -procedure EnumProtocols; -var - i, iProtoCount: integer; - ppAccounts: ^PPROTOACCOUNT; - temps: WideString; -begin - ProtoCount := 0; - SetLength(Protocols, 30); - Proto_EnumAccounts(iProtoCount, ppAccounts); - for i := 1 to iProtoCount do - begin - temps := GetContactID(0, ppAccounts^^.szModuleName, false); - if temps <> '' then - begin - Protocols[ProtoCount].ProtoName := ppAccounts^^.szModuleName; - Protocols[ProtoCount].ProtoUID := temps; - Protocols[ProtoCount].ProtoNick := GetContactNick(0, ppAccounts^^.szModuleName, false); - inc(ProtoCount); - end; - inc(ppAccounts); - end; - SetLength(Protocols, ProtoCount); -end; - -function GetContactProto(hContact: THandle): AnsiString; -begin - result := Proto_GetProtoName(hContact); -end; - -function GetContactID(hContact: THandle; proto: AnsiString = ''; - Contact: boolean = false): WideString; -var - uid: PAnsiChar; - dbv: TDBVARIANT; - tempstr: PWideChar; -begin - result := ''; - if not((hContact = 0) and Contact) then - begin - if proto = '' then - proto := GetContactProto(hContact); - uid := Proto_GetUniqueId(PAnsiChar(proto)); - if uid <> nil then - begin - if db_get(hContact, PAnsiChar(proto), uid, @dbv) = 0 then - begin - case dbv._type of - DBVT_BYTE: - result := intToStr(dbv.bVal); - DBVT_WORD: - result := intToStr(dbv.wVal); - DBVT_DWORD: - result := intToStr(dbv.dVal); - DBVT_ASCIIZ: - begin - tempstr := ANSIToWide(dbv.szVal.a, tempstr, cp); - result := tempstr; - FreeMem(tempstr); - end; - DBVT_UTF8: - begin - tempstr := UTF8ToWide(dbv.szVal.a, tempstr); - result := tempstr; - FreeMem(tempstr); - end; - DBVT_WCHAR: - result := dbv.szVal.w; - end; - // free variant - db_free(@dbv); - end; - end; - end; -end; - -function GetContactNick(hContact: THandle; proto: AnsiString = ''; - Contact: boolean = false): WideString; -var - dbv: TDBVARIANT; - tempstr: PWideChar; -begin - result := ''; - if not((hContact = 0) and Contact) then - begin - if proto = '' then - proto := GetContactProto(hContact); - if db_get(hContact, PAnsiChar(proto), 'Nick', @dbv) = 0 then - begin - case dbv._type of - DBVT_BYTE: - result := intToStr(dbv.bVal); - DBVT_WORD: - result := intToStr(dbv.wVal); - DBVT_DWORD: - result := intToStr(dbv.dVal); - DBVT_ASCIIZ: - begin - tempstr := ANSIToWide(dbv.szVal.a, tempstr, cp); - result := tempstr; - FreeMem(tempstr); - end; - DBVT_UTF8: - begin - tempstr := UTF8ToWide(dbv.szVal.a, tempstr); - result := tempstr; - FreeMem(tempstr); - end; - DBVT_WCHAR: - result := dbv.szVal.w; - end; - // free variant - db_free(@dbv); - end; - end; -end; - -function DBReadByte(hContact: THandle; szModule: PAnsiChar; - szSetting: PAnsiChar; default: byte = 0): byte; -var - dbv: TDBVARIANT; -begin - If db_get(hContact, szModule, szSetting, @dbv) <> 0 then - result := default - else - result := dbv.bVal; -end; - -function DBWriteByte(hContact: THandle; szModule: PAnsiChar; szSetting: PAnsiChar; val: byte): integer; -begin - result := db_set_b(hContact, szModule, szSetting, val); -end; - -procedure SetLastPattern(lp: byte); -begin - DBWriteByte(0, IMPORT_TXT_MODULE, IMPORT_TXT_LP, lp); -end; - -function GetLastPattern: byte; -begin - result := DBReadByte(0, IMPORT_TXT_MODULE, IMPORT_TXT_LP, 0); - if result >= Length(TxtPatterns) then - result := 0; -end; - -function TimeStampToWStr(ts: DWORD): WideString; -var - s: WideString; -begin - SetLength(s, 20); - TimeZone_ToStringW(ts, 'd s', PWideChar(s), 20); - result := s; -end; - -function StrToTimeStamp(STime: PAnsiChar; len: integer): DWORD; -var - hour, min, sec, Day, Month, Year: integer; -begin - sec := 0; - Day := (ord(STime[0]) - $30) * 10 + (ord(STime[1]) - $30); - Month := (ord(STime[3]) - $30) * 10 + (ord(STime[4]) - $30); - Year := (ord(STime[6]) - $30) * 1000 + (ord(STime[7]) - $30) * 100 + - (ord(STime[8]) - $30) * 10 + (ord(STime[9]) - $30); - hour := (ord(STime[11]) - $30) * 10 + (ord(STime[12]) - $30); - min := (ord(STime[14]) - $30) * 10 + (ord(STime[15]) - $30); - if len > 15 then - sec := (ord(STime[17]) - $30) * 10 + (ord(STime[18]) - $30); - result := Timestamp(Year, Month, Day, hour, min, sec); -end; - -function RLWord(adr: integer): word; -begin - result := PByte(adr + 1)^ + (PByte(adr)^ * $100); -end; - -function RLInteger(adr: integer): integer; -begin - result := PByte(adr + 3)^ + (PByte(adr + 2)^ * $100) + - (PByte(adr + 1)^ * $10000) + (PByte(adr)^ * $1000000); -end; - -begin - GetModuleFileName(hInstance, @AppPath[0], MAX_PATH); - ExtractFilePath(@AppPath); - ReadPatterns; -end. diff --git a/plugins/ImportTXT/ImpDlgRes.inc b/plugins/ImportTXT/ImpDlgRes.inc deleted file mode 100644 index b5ee3604ef..0000000000 --- a/plugins/ImportTXT/ImpDlgRes.inc +++ /dev/null @@ -1,13 +0,0 @@ -const - IDD_IMPDIALOG = 101; - - IDSTART = 1001; - IDC_FILENAME = 1002; - IDC_BRWSBTN = 1003; - IDC_TYPECOMBO = 1004; - IDC_STATUSLIST = 1005; - IDC_PROGRESS = 1006; - IDC_CHKDUP = 1007; - IDC_SHOWDUP = 1008; - - IDI_DEFAULT = 110; diff --git a/plugins/ImportTXT/ImpTxtDlg.rc b/plugins/ImportTXT/ImpTxtDlg.rc deleted file mode 100644 index e1f3b19b74..0000000000 --- a/plugins/ImportTXT/ImpTxtDlg.rc +++ /dev/null @@ -1,18 +0,0 @@ -101 DIALOGEX 0, 0, 264, 220 -STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "Import history to " -LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL -FONT 8, "MS Shell Dlg" -BEGIN - PUSHBUTTON "Start",1001,2,204,50,14 - PUSHBUTTON "Close",IDCLOSE,211,204,50,14 - LTEXT "Choose a file...",1002,3,3,240,11,SS_SUNKEN - PUSHBUTTON "...",1003,244,3,17,11 - COMBOBOX 1004,3,16,258,80,CBS_DROPDOWNLIST | CBS_DISABLENOSCROLL | WS_VSCROLL | WS_TABSTOP - LISTBOX 1005,3,42,258,150,LBS_NOINTEGRALHEIGHT | LBS_NOSEL | WS_VSCROLL | WS_TABSTOP - CONTROL "",1006,"msctls_progress32",0x1,3,194,258,8 - CHECKBOX "Check for duplicates", 1007, 3, 29, 105, 12, BS_AUTOCHECKBOX | WS_VISIBLE | WS_TABSTOP - CHECKBOX "Show duplicates", 1008, 140, 29, 86, 12, BS_AUTOCHECKBOX | WS_VISIBLE | WS_TABSTOP -END - -110 ICON "ico\def_ico.ico" \ No newline at end of file diff --git a/plugins/ImportTXT/ImpTxtDlg.res b/plugins/ImportTXT/ImpTxtDlg.res deleted file mode 100644 index 75fd95ae0c..0000000000 Binary files a/plugins/ImportTXT/ImpTxtDlg.res and /dev/null differ diff --git a/plugins/ImportTXT/ImpTxtWiz.rc b/plugins/ImportTXT/ImpTxtWiz.rc deleted file mode 100644 index 617c23af55..0000000000 --- a/plugins/ImportTXT/ImpTxtWiz.rc +++ /dev/null @@ -1,64 +0,0 @@ - -102 DIALOGEX 0, 0, 220, 143 -STYLE DS_SETFONT | DS_FIXEDSYS | DS_CENTER | WS_CAPTION | WS_SYSMENU -CAPTION "Import Text Files Wizard" -LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL -FONT 8, "MS Shell Dlg" -BEGIN - DEFPUSHBUTTON "&Next >",IDOK,120,124,45,13 - PUSHBUTTON "Cancel",IDCANCEL,168,124,45,13 - PUSHBUTTON "< &Back",3,75,124,45,13 - CONTROL "",1011,"Static",SS_ETCHEDHORZ,5,116,210,1 -END - -103 DIALOGEX 0, 0, 220, 114 -STYLE DS_SETFONT | DS_3DLOOK | DS_FIXEDSYS | DS_CONTROL | WS_CHILD -FONT 8, "MS Shell Dlg" -BEGIN - LTEXT "This wizard will help you import message history from some other clients and Miranda plugins, stored in text files.",1010,18,12,182,32 - LTEXT "Click ""Next"" to choose the information you wish to import, or click ""Cancel"" to exit the wizard and continue using Miranda.",1009,18,42,182,25 - CTEXT "It is recommended that you create a backup of your current Miranda profile before importing.",1008,18,78,182,21 -END - -104 DIALOGEX 0, 0, 220, 114 -STYLE DS_SETFONT | DS_3DLOOK | DS_FIXEDSYS | DS_CONTROL | WS_CHILD -FONT 8, "MS Shell Dlg" -BEGIN - LTEXT "Choose type of imported files:",1010,6,76,208,8 - COMBOBOX 1007,5,90,208,30,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP -END - -105 DIALOGEX 0, 0, 220, 114 -STYLE DS_SETFONT | DS_3DLOOK | DS_FIXEDSYS | DS_CONTROL | WS_CHILD -FONT 8, "MS Shell Dlg" -BEGIN - LTEXT "Select files or the whole directory for import:",1010,6,86,208,8 - LISTBOX 1002,5,12,208,55,LBS_SORT | LBS_NOINTEGRALHEIGHT | LBS_NOSEL | WS_VSCROLL | WS_TABSTOP - PUSHBUTTON "Files...",1001,157,96,56,14 - LTEXT "Path:",1009,6,73,24,8 - EDITTEXT 1003,31,71,182,12,ES_AUTOHSCROLL | WS_DISABLED - LTEXT "Files:",1008,6,3,208,8 - PUSHBUTTON "Directory...",1005,101,96,56,14 -END - -106 DIALOGEX 0, 0, 220, 114 -STYLE DS_SETFONT | DS_3DLOOK | DS_FIXEDSYS | DS_CONTROL | WS_CHILD -FONT 8, "MS Shell Dlg" -BEGIN - CHECKBOX "Check messages for duplicates", 1012, 6, 20, 140, 14, BS_AUTOCHECKBOX | WS_VISIBLE | WS_TABSTOP - CHECKBOX "Show duplicates", 1013, 6, 32, 86, 14, BS_AUTOCHECKBOX | WS_VISIBLE | WS_TABSTOP - LTEXT "All previous chosen files will try to import to this protocol.", 1010, 6, 46, 208, 10 - COMBOBOX 1007,5,66,208,30,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP - LTEXT "Select protocol or account:",1009,6,55,208,8 - CTEXT "Click ""Next"" to start Import or ""Cancel"" to Abort.",1008,6,96,208,8 -END - -107 DIALOGEX 0, 0, 220, 114 -STYLE DS_SETFONT | DS_3DLOOK | DS_FIXEDSYS | DS_CONTROL | WS_CHILD -FONT 8, "MS Shell Dlg" -BEGIN - LTEXT "Now importing...",1010,6,11,208,8 - CONTROL "Progress1",1004,"msctls_progress32",WS_BORDER | 0x1,5,24,208,10 - LISTBOX 1006,5,38,208,61,NOT LBS_NOTIFY | LBS_NOINTEGRALHEIGHT | LBS_DISABLENOSCROLL | LBS_NOSEL | WS_VSCROLL | WS_TABSTOP -END - diff --git a/plugins/ImportTXT/ImpTxtWiz.res b/plugins/ImportTXT/ImpTxtWiz.res deleted file mode 100644 index 2164f8ebd1..0000000000 Binary files a/plugins/ImportTXT/ImpTxtWiz.res and /dev/null differ diff --git a/plugins/ImportTXT/ImpWizRes.inc b/plugins/ImportTXT/ImpWizRes.inc deleted file mode 100644 index 3770583df9..0000000000 --- a/plugins/ImportTXT/ImpWizRes.inc +++ /dev/null @@ -1,23 +0,0 @@ -const - IDC_BACK = 3; - - IDD_IMPWIZARD = 102; - IDD_IMPWIZARDINTRO = 103; - IDD_IMPTYPE = 104; - IDD_IMPFILES = 105; - IDD_IMPDEST = 106; - IDD_PROGRESS = 107; - - IDC_FILE = 1001; - IDC_LIST = 1002; - IDC_PATH = 1003; - IDC_PROGRESS = 1004; - IDC_DIR = 1005; - IDC_STATUS = 1006; - IDC_COMBO1 = 1007; - IDC_STATIC3 = 1008; - IDC_STATIC2 = 1009; - IDC_STATIC1 = 1010; - IDC_STATIC = 1011; - IDC_CHKDUPW = 1012; - IDC_SHOWDUPW = 1013; diff --git a/plugins/ImportTXT/ImportT.pas b/plugins/ImportTXT/ImportT.pas deleted file mode 100644 index 7a9b9cc935..0000000000 --- a/plugins/ImportTXT/ImportT.pas +++ /dev/null @@ -1,87 +0,0 @@ -unit ImportT; -interface - -uses windows; - -type - - RHeader = record - Pattern:String; - Incoming:integer; - Outgoing:integer; - InNick:integer; - OutNick:integer; - InUID:integer; - OutUID:integer; - end; - - RPreMessage = record - PreRN:integer; - AfterRN:integer; - PreSP:integer; - AfterSP:integer; - end; - - RMessage = record - Pattern:String; - Incoming:String; - Outgoing:String; - Direction:integer; - Day:integer; - Month:integer; - Year:integer; - Hours:integer; - Minutes:integer; - Seconds:integer; - end; - - RFileName = record - Pattern:String; - InNick:integer; - OutNick:integer; - InUID:integer; - OutUID:integer; - end; - - pRTxtPattern = ^RTxtPattern; - RTxtPattern = record - Name:String; - IType:byte; //1 -text,2- binary, 3 - ... - Charset:word; - Codepage:Cardinal; - DefExtension:String; - BinProc:word; - UseHeader:Byte; - UseFileName:ByteBool; - UsePreMsg:ByteBool; - Msg:RMessage; - Header:RHeader; - PreMsg:RPreMessage; - FName:RFileName; - end; - -const - inANSI = 1; - inUTF8 = 2; - inUCS2 = 3; - -type - PDestProto = ^TDestProto; - TDestProto = record - ProtoName: AnsiString; - ProtoUID: WideString; - ProtoNick: WideString; - end; - -type - PDestContact = ^TDestContact; - TDestContact = record - hContact: THandle; - ProtoName: AnsiString; - ContactUID: AnsiString; - ContactNick: WideString; - end; - -implementation - -end. diff --git a/plugins/ImportTXT/ImportTU.pas b/plugins/ImportTXT/ImportTU.pas deleted file mode 100644 index 2fac66ad55..0000000000 --- a/plugins/ImportTXT/ImportTU.pas +++ /dev/null @@ -1,268 +0,0 @@ -Unit ImportTU; - -interface - -Uses windows, // StrUtils, - m_api; - -type - PDayTable = ^TDayTable; - TDayTable = array [1 .. 12] of Word; - -const - MonthDays: array [Boolean] of TDayTable = ( - (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31), - (31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)); - -function Timestamp(Year, Month, Day, Hour, Min, Sec: Word; toGMT: Boolean = true): LongWord; -{ function TimestampICQ(Year,Month,Day,Hour,Min,Sec:Word):LongWord; } -function DateTimeToTimeStamp(const DateTime: TDateTime; toGMT: Boolean = true): DWord; - -{ ***** Authtor of this procedures Alexey Kulakov aka Awkward***** } -function ChangeUnicode(str: PWideChar): PWideChar; -function UTF8Len(src: PAnsiChar): integer; -function WideToANSI(src: PWideChar; var dst: PAnsiChar; cp: DWord = CP_ACP): PAnsiChar; -function ANSIToWide(src: PAnsiChar; var dst: PWideChar; cp: DWord = CP_ACP): PWideChar; -function ANSIToUTF8(src: PAnsiChar; var dst: PAnsiChar; cp: DWord = CP_ACP): PAnsiChar; -function UTF8toANSI(src: PAnsiChar; var dst: PAnsiChar; cp: DWord = CP_ACP): PAnsiChar; -function UTF8toWide(src: PAnsiChar; var dst: PWideChar; len: cardinal = DWord(-1)): PWideChar; -function WidetoUTF8(src: PWideChar; var dst: PAnsiChar): PAnsiChar; -{ ***** } - -implementation - -uses SysUtils; - -function IsLeapYear(Year: Word): Boolean; -begin - Result := (Year mod 4 = 0) and ((Year mod 100 <> 0) or (Year mod 400 = 0)); -end; - -function Timestamp(Year, Month, Day, Hour, Min, Sec: Word; toGMT: Boolean = true): LongWord; -var - i: integer; - DayTable: PDayTable; - DT, D: LongWord; -begin - // fix for 2 digit year - if Year > 0 then - if Year < 90 then - inc(Year, 2000) - else if Year < 100 then - inc(Year, 1900); - // - DayTable := @MonthDays[IsLeapYear(Year)]; - for i := 1 to Month - 1 do - inc(Day, DayTable^[i]); - i := Year - 1; - D := i * 365 + i div 4 - i div 100 + i div 400 + Day - - (1969 * 365 + 492 - 19 + 4 + 1); - DT := (D * 24 * 60 * 60) + (Hour * 3600 + Min * 60 + Sec); - // GMT... GMT - if toGMT then - Result := DT - (Longword(TimeZone_ToLocal(DT)) - DT) - else - Result := DT; -end; - -function DateTimeToTimeStamp(const DateTime: TDateTime; toGMT: Boolean = true): DWord; -begin - Result := Round((DateTime - UnixDateDelta) * SecsPerDay); - if toGMT then - Result := Result - (Dword(TimeZone_ToLocal(Result)) - Result); -end; - -function ChangeUnicode(str: PWideChar): PWideChar; -var - i, len: integer; -begin - Result := str; - if str = nil then - exit; - if (Word(str^) = $FFFE) or (Word(str^) = $FEFF) then - begin - len := lstrlenw(str); - if Word(str^) = $FFFE then - begin - i := len - 1; - while i > 0 do // str^<>#0 - begin - pword(str)^ := swap(pword(str)^); - inc(str); - dec(i); - end; - // str:=result; - end; - move((Result + 1)^, Result^, len * SizeOf(WideChar)); - end; -end; - -function WideToANSI(src: PWideChar; var dst: PAnsiChar; cp: DWord = CP_ACP): PAnsiChar; -var - len, l: integer; -begin - if (src = nil) or (src^ = #0) then - begin - GetMem(dst, 1); - dst^ := #0; - end - else - begin - l := lstrlenw(src); - len := WideCharToMultiByte(cp, 0, src, l, NIL, 0, NIL, NIL) + 1; - GetMem(dst, len); - FillChar(dst^, len, 0); - WideCharToMultiByte(cp, 0, src, l, dst, len, NIL, NIL); - end; - Result := dst; -end; - -function ANSIToWide(src: PAnsiChar; var dst: PWideChar; cp: DWord = CP_ACP): PWideChar; -var - len, l: integer; -begin - if (src = nil) or (src^ = #0) then - begin - GetMem(dst, SizeOf(WideChar)); - dst^ := #0; - end - else - begin - l := lstrlena(src); - len := MultiByteToWideChar(cp, 0, src, l, NIL, 0) + 1; - GetMem(dst, len * SizeOf(WideChar)); - FillChar(dst^, len * SizeOf(WideChar), 0); - MultiByteToWideChar(cp, 0, src, l, dst, len); - end; - Result := dst; -end; - -function ANSIToUTF8(src: PAnsiChar; var dst: PAnsiChar; cp: DWord = CP_ACP): PAnsiChar; -var - tmp: PWideChar; -begin - ANSIToWide(src, tmp, cp); - Result := WidetoUTF8(tmp, dst); - FreeMem(tmp); -end; - -function UTF8Len(src: PAnsiChar): integer; // w/o zero -begin - Result := 0; - if src <> nil then - begin - while src^ <> #0 do - begin - if (ord(src^) and $80) = 0 then - else if (ord(src^) and $E0) = $E0 then - inc(src, 2) - else - inc(src); - inc(Result); - inc(src); - end; - end; -end; - -function CalcUTF8Len(src: PWideChar): integer; -begin - Result := 0; - if src <> nil then - begin - while src^ <> #0 do - begin - if src^ < #$0080 then - else if src^ < #$0800 then - inc(Result) - else - inc(Result, 2); - inc(src); - inc(Result); - end; - end; -end; - -function UTF8toWide(src: PAnsiChar; var dst: PWideChar; len: cardinal = DWord(-1)): PWideChar; -var - w: Word; - p: PWideChar; -begin - GetMem(dst, (UTF8Len(src) + 1) * SizeOf(WideChar)); - p := dst; - if src <> nil then - begin - while (src^ <> #0) and (len > 0) do - begin - if ord(src^) < $80 then - w := ord(src^) - else if (ord(src^) and $E0) = $E0 then - begin - w := (ord(src^) and $1F) shl 12; - inc(src); - dec(len); - w := w or (((ord(src^)) and $3F) shl 6); - inc(src); - dec(len); - w := w or (ord(src^) and $3F); - end - else - begin - w := (ord(src^) and $3F) shl 6; - inc(src); - dec(len); - w := w or (ord(src^) and $3F); - end; - p^ := WideChar(w); - inc(p); - inc(src); - dec(len); - end; - end; - p^ := #0; - Result := dst; -end; - -function UTF8toANSI(src: PAnsiChar; var dst: PAnsiChar; cp: DWord = CP_ACP): PAnsiChar; -var - tmp: PWideChar; -begin - UTF8toWide(src, tmp); - Result := WideToANSI(tmp, dst, cp); - FreeMem(tmp); -end; - -function WidetoUTF8(src: PWideChar; var dst: PAnsiChar): PAnsiChar; -var - p: PAnsiChar; -begin - GetMem(dst, CalcUTF8Len(src) + 1); - p := dst; - if src <> nil then - begin - while src^ <> #0 do - begin - if src^ < #$0080 then - p^ := AnsiChar(src^) - else if src^ < #$0800 then - begin - p^ := AnsiChar($C0 or (ord(src^) shr 6)); - inc(p); - p^ := AnsiChar($80 or (ord(src^) and $3F)); - end - else - begin - p^ := AnsiChar($E0 or (ord(src^) shr 12)); - inc(p); - p^ := AnsiChar($80 or ((ord(src^) shr 6) and $3F)); - inc(p); - p^ := AnsiChar($80 or (ord(src^) and $3F)); - end; - inc(p); - inc(src); - end; - end; - p^ := #0; - Result := dst; -end; - -end. diff --git a/plugins/ImportTXT/ImportThrd.pas b/plugins/ImportTXT/ImportThrd.pas deleted file mode 100644 index 4315977a0a..0000000000 --- a/plugins/ImportTXT/ImportThrd.pas +++ /dev/null @@ -1,643 +0,0 @@ -unit ImportThrd; - -interface - -uses - Classes, - Windows, - SysUtils, - StrUtils, - PerlRegEx, - m_api, - general, - ImportT, - ImportTU, - KOLEdb {ADODB if want to use ADO}; - -const - ITXT_THREAD_BASE = $8000 + $2000; // WM_APP + $2000 - ITXT_THREAD_START = ITXT_THREAD_BASE + 1; // (0,0) - ITXT_THREAD_MAXPROGRESS = ITXT_THREAD_BASE + 2; - // (0, MaxProgress) - ITXT_THREAD_PROGRESS = ITXT_THREAD_BASE + 3; // (Current, 0) - ITXT_THREAD_ERROR = ITXT_THREAD_BASE + 4; - // (PWideChar(ErrorString),0) - ITXT_THREAD_FINISH = ITXT_THREAD_BASE + 5; - // , (Added, Duplicates) - ITXT_THREAD_START_FILE = ITXT_THREAD_BASE + 6; - // (PWideChar(FileName),0); - ITXT_THREAD_DEST_CONTACT = ITXT_THREAD_BASE + 7; - // (hContact,0) - ITXT_THREAD_ALLSTARTED = ITXT_THREAD_BASE + 8; // - ITXT_THREAD_ALLFINISHED = ITXT_THREAD_BASE + 9; // :) - -type - TSendMethod = (smSend, smPost); - -type - TImportThrd = class(TThread) - private - { Private declarations } - RegExpr: TPerlRegEx; - hMapedFile: THandle; - hFile: THandle; - pFileText: Pointer; - FolderName: WideString; - FileName: WideString; - FileLen: Cardinal; - fContact: TDestContact; // Contact recognised by filename - AddedMessages: integer; - Duplicates: integer; - function DoMessage(Message: Longword; wParam: WPARAM; lParam: LPARAM; - Method: TSendMethod = smSend): Boolean; - function DoMapFile: Boolean; - procedure DoUnMapFile; - Procedure PreMessageSP(var src: AnsiString; CSP: integer); - procedure AddMsgToDB(hContact: THandle; Direction: integer; - MsgTimeStamp: Longword; const Text: AnsiString; var AddMsg, Dupy: integer); - procedure TextImportProcedure; - procedure BinImportProcedure; - protected - procedure Execute; override; - public - FileNames: WideString; // File Names - OffsetFileName: integer; // offset name of file in FileNames - WorkPattern: RTxtPattern; // Pattern for work - DContact: TDestContact; // Recognised or defined contact - Destination: TDestProto; // destination protocol - ParentHWND: Longword; // HWND of parent window - end; - -function IsDuplicateEvent(hContact: THandle; dbei: TDBEVENTINFO): Boolean; - -function PassMessage(Handle: THandle; Message: Longword; wParam: wParam; - lParam: lParam; Method: TSendMethod = smSend): Boolean; - -implementation - -// Returns TRUE if event already is in base -function IsDuplicateEvent(hContact: THandle; dbei: TDBEVENTINFO): Boolean; -var - hExistingDbEvent: THandle; - dbeiExisting: TDBEVENTINFO; - dwFirstEventTimeStamp: Longword; - dwLastEventTimeStamp: Longword; - dwPreviousTimeStamp: Longword; -begin - result := FALSE; - if not CheckForDuplicates then - exit; - hExistingDbEvent := db_event_first(hContact); - if hExistingDbEvent = 0 then - begin - result := FALSE; - exit; - end; - - FillChar(dbeiExisting, SizeOf(dbeiExisting), Byte(0)); - dbeiExisting.cbBlob := 0; - db_event_get(hExistingDbEvent, @dbeiExisting); - dwFirstEventTimeStamp := dbeiExisting.timestamp; - - hExistingDbEvent := db_event_last(hContact); - if hExistingDbEvent = 0 then - begin - result := FALSE; - exit; - end; - - FillChar(dbeiExisting, SizeOf(dbeiExisting), Byte(0)); - dbeiExisting.cbBlob := 0; - db_event_get(hExistingDbEvent, @dbeiExisting); - dwLastEventTimeStamp := dbeiExisting.timestamp; - - // If before the first - if (dbei.timestamp < dwFirstEventTimeStamp) then - begin - result := FALSE; - exit; - end; - - // If after the last - if (dbei.timestamp > dwLastEventTimeStamp) then - begin - result := FALSE; - exit; - end; - - dwPreviousTimeStamp := dwLastEventTimeStamp; - - if (dbei.timestamp <= dwPreviousTimeStamp) then // search from the end - begin - while (hExistingDbEvent <> 0) do - begin - FillChar(dbeiExisting, SizeOf(dbeiExisting), Byte(0)); - dbeiExisting.cbBlob := 0; - db_event_get(hExistingDbEvent, @dbeiExisting); - // compare event - if (dbei.timestamp = dbeiExisting.timestamp) and - ((dbei.flags) = (dbeiExisting.flags)) and - // fix for first event - (dbei.eventType = dbeiExisting.eventType) and - (dbei.cbBlob = dbeiExisting.cbBlob) then - begin - result := true; - exit; - end; - - if (dbei.timestamp > dbeiExisting.timestamp) then - begin - result := FALSE; - exit; - end; - // get the previous - hExistingDbEvent := db_event_prev(hContact,hExistingDbEvent); - end; - end; -end; - -Procedure TImportThrd.PreMessageSP(var src: AnsiString; CSP: integer); -var - i: integer; - ls: integer; - PSP, ASP: integer; -begin - ls := -1; - repeat - i := ls + 2; - PSP := 0; - while (src[i + PSP] = ' ') do - inc(PSP); - if PSP > 0 then - case WorkPattern.PreMsg.PreSP of - 0: PSP := 0; - -1: ; - -2: if PSP > CSP then - PSP := CSP; - else - if PSP > WorkPattern.PreMsg.PreSP then - PSP := WorkPattern.PreMsg.PreSP; - end; // case - Delete(src, i, PSP); - ls := PosEx(#$0D#$0A, src, i); - ASP := 0; - while (ls > 1) and (src[ls - ASP - 1] = ' ') do - inc(ASP); - if ASP > 0 then - case WorkPattern.PreMsg.AfterSP of - 0: ASP := 0; - -1: ; - -2: if ASP > CSP then - ASP := CSP; - else - if ASP > WorkPattern.PreMsg.AfterSP then - ASP := WorkPattern.PreMsg.AfterSP; - end; // case - Delete(src, ls - ASP - 1, ASP); - Until ls <= 0 -end; - -Procedure TImportThrd.AddMsgToDB(hContact: THandle; Direction: integer; - MsgTimeStamp: Longword; const Text: AnsiString; var AddMsg, Dupy: integer); -var - dbei: TDBEVENTINFO; - proto: AnsiString; - s: WideString; -begin - FillChar(dbei, SizeOf(dbei), Byte(0)); - dbei.eventType := EVENTTYPE_MESSAGE; - dbei.flags := Direction; - proto := GetContactProto(hContact); - dbei.szModule := PAnsiChar(proto); - dbei.timestamp := MsgTimeStamp; - dbei.cbBlob := Length(Text) + 1; - dbei.pBlob := PByte(AllocMem(dbei.cbBlob)); - try - Move(Text[1], dbei.pBlob^, dbei.cbBlob); - if not IsDuplicateEvent(hContact, dbei) then - if db_event_add(hContact, @dbei) <> 0 then - inc(AddMsg) - else - begin - s := 'Error adding message to database'; - DoMessage(ITXT_THREAD_ERROR, wparam(PWideChar(s)), 0); - end - else - begin - if ShowDuplicates then - begin - if (dbei.flags and DBEF_SENT) > 0 then - s := '>' - else - s := '<'; - s := TranslateWideString('Duplicate:') + ' ' + s + ' ' + - TimeStampToWStr(dbei.timestamp); - DoMessage(ITXT_THREAD_ERROR, wparam(PWideChar(s)), 0, smSend); - end; - inc(Dupy); - end; - finally - FreeMem(dbei.pBlob); - end; -end; - -function PassMessage(Handle: THandle; Message: Longword; wParam: wParam; - lParam: lParam; Method: TSendMethod = smSend): Boolean; -var - Tries: integer; -begin - result := true; - case Method of - smSend: - SendMessage(Handle, Message, wParam, lParam); - smPost: begin - Tries := 5; - while (Tries > 0) and not PostMessage(Handle, Message, wParam, - lParam) do - begin - Dec(Tries); - Sleep(5); - end; - result := (Tries > 0); - end; - end; -end; - -function TImportThrd.DoMessage(Message: Longword; wParam: wParam; - lParam: lParam; Method: TSendMethod = smSend): Boolean; -begin - result := PassMessage(ParentHWND, Message, wParam, lParam, Method); -end; - -function TImportThrd.DoMapFile: Boolean; -var - s: pWideChar; -begin - result := true; - hFile := CreateFileW(PWideChar(FileName), GENERIC_READ, 0, nil, - OPEN_EXISTING, 0, 0); - if hFile = INVALID_HANDLE_VALUE then - begin - result := FALSE; - s := 'Error opening file'; - DoMessage(ITXT_THREAD_ERROR, wparam(s), 0); - exit; - end; - FileLen := GetFileSize(hFile, nil); - hMapedFile := CreateFileMapping(hFile, nil, PAGE_READONLY, 0, 0, 'ImportTXTmapfile'); - if hMapedFile = 0 then - begin - result := FALSE; - s := 'Error mapping file'; - DoMessage(ITXT_THREAD_ERROR, wparam(s), 0); - exit; - end; - pFileText := MapViewOfFile(hMapedFile, FILE_MAP_READ, 0, 0, 0); - if pFileText = nil then - begin - result := FALSE; - s := 'Error mapping'; - DoMessage(ITXT_THREAD_ERROR, wparam(s), 0); - exit; - end; -end; - -procedure TImportThrd.DoUnMapFile; -begin - UnmapViewOfFile(pFileText); - pFileText := nil; - CloseHandle(hMapedFile); - CloseHandle(hFile); -end; - -procedure TryDetermContact(var DContact: TDestContact); -begin - if DContact.ProtoName <> '' then - begin - if DContact.ContactUID <> '' then - begin - DContact.hContact := GetContactByUID(DContact.ProtoName, DContact.ContactUID) - end - else if DContact.ContactNick <> '' then - begin - DContact.hContact := GetContactByNick(DContact.ProtoName, DContact.ContactNick); - end - else - DContact.hContact := INVALID_HANDLE_VALUE; - end - else - DContact.hContact := INVALID_HANDLE_VALUE; -end; - -procedure TImportThrd.TextImportProcedure; -var - PosCur, LenCur, PosNext: integer; - TextLength, h1, h2: integer; - PRN, ARN, j: DWORD; - msg_flag: integer; - DT: Longword; - TxtMsg: AnsiString; - s: WideString; - tempstr: PAnsiChar; - tempwstr: PWideChar; -begin - AddedMessages := 0; - Duplicates := 0; - Case WorkPattern.Charset of - inANSI: - begin - if WorkPattern.Codepage <> 0 then - tempstr := ANSIToUTF8(PAnsiChar(pFileText), tempstr, WorkPattern.Codepage) - else - tempstr := ANSIToUTF8(PAnsiChar(pFileText), tempstr, cp); - RegExpr.Subject := tempstr; - FreeMem(tempstr); - end; - inUTF8: - RegExpr.Subject := PAnsiChar(pFileText) + 3; - inUCS2: - begin - GetMem(tempwstr, FileLen + 2); - lstrcpynW(tempwstr, PWideChar(pFileText), FileLen); - tempwstr[FileLen div SizeOf(WideChar)] := #$0000; - // file is not ended dy #0000 - tempstr := WidetoUTF8(ChangeUnicode(tempwstr), tempstr); - RegExpr.Subject := tempstr; - FreeMem(tempstr); - FreeMem(tempwstr); - end; - end; // case - if (WorkPattern.UseHeader and 1) = 0 then - // If the information on a direction is not present that we will transform a line - begin - tempstr := ANSIToUTF8(PAnsiChar(WorkPattern.Msg.Incoming), tempstr, cp); - WorkPattern.Msg.Incoming := tempstr; - FreeMem(tempstr); - tempstr := ANSIToUTF8(PAnsiChar(WorkPattern.Msg.Outgoing), tempstr, cp); - WorkPattern.Msg.Outgoing := tempstr; - FreeMem(tempstr); - end; - if (WorkPattern.UseHeader > 0) then - begin - tempstr := ANSIToUTF8(PAnsiChar(WorkPattern.Header.Pattern), tempstr, cp); - RegExpr.RegEx := tempstr; - RegExpr.Options := [preMultiLine, preUTF8]; - FreeMem(tempstr); - if not RegExpr.Match then - begin - s := TranslateWideString('Header not found'); - DoMessage(ITXT_THREAD_ERROR, wparam(PWideChar(s)), 0); - exit; - end - else - begin - if (WorkPattern.UseHeader and 1) = 1 then - begin - WorkPattern.Msg.Incoming := RegExpr.SubExpressions[WorkPattern.Header.Incoming]; - WorkPattern.Msg.Outgoing := RegExpr.SubExpressions[WorkPattern.Header.Outgoing]; - end; - if (WorkPattern.UseHeader and 2) = 2 then - if (DContact.hContact = 0) or - (DContact.hContact = INVALID_HANDLE_VALUE) then - begin - if WorkPattern.Header.InUID <> 0 then - DContact.ContactUID := RegExpr.SubExpressions[WorkPattern.Header.InUID] - else - DContact.ContactUID := ''; - if WorkPattern.Header.InNick <> 0 then - DContact.ContactNick := RegExpr.SubExpressions[WorkPattern.Header.InNick] - else - DContact.ContactNick := ''; - TryDetermContact(DContact); - end; - end; - end; - // Whether if it has not turned out to define in header then we look it was defined in a file - 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 - DoMessage(ITXT_THREAD_DEST_CONTACT, DContact.hContact, 0); - DoMessage(ITXT_THREAD_START, 0, 0); - tempstr := ANSIToUTF8(PAnsiChar(WorkPattern.Msg.Pattern), tempstr, cp); - RegExpr.RegEx := tempstr; - RegExpr.Options := [preMultiLine, preUTF8]; - FreeMem(tempstr); - - TextLength := Length(RegExpr.Subject) - 1; // Position of last symbol - DoMessage(ITXT_THREAD_MAXPROGRESS, 0, TextLength); - RegExpr.State := [preNotEmpty]; - // search for regular expression - if not RegExpr.Match then - begin - s := TranslateWideString('No messages in this file'); - DoMessage(ITXT_THREAD_ERROR, wparam(PWideChar(s)), 0); - end - else - begin - PosCur := RegExpr.MatchedExpressionOffset; - // get the position of RegExpression - repeat - LenCur := RegExpr.MatchedExpressionLength; - // get the length of RegExpression - // Further we define a message direction (incoming or outgoing) - if RegExpr.SubExpressions[WorkPattern.Msg.Direction] = WorkPattern.Msg.Incoming then - msg_flag := DBEF_READ - else - msg_flag := DBEF_READ or DBEF_SENT; - msg_flag := msg_flag or DBEF_UTF; - // make timestamp - if WorkPattern.Msg.Seconds <> 0 then - DT := timestamp - (StrToInt(RegExpr.SubExpressions[WorkPattern.Msg.Year]), - StrToInt(RegExpr.SubExpressions[WorkPattern.Msg.Month]), - StrToInt(RegExpr.SubExpressions[WorkPattern.Msg.Day]), - StrToInt(RegExpr.SubExpressions[WorkPattern.Msg.Hours]), - StrToInt(RegExpr.SubExpressions[WorkPattern.Msg.Minutes]), - StrToInt(RegExpr.SubExpressions[WorkPattern.Msg.Seconds])) - else - DT := timestamp - (StrToInt(RegExpr.SubExpressions[WorkPattern.Msg.Year]), - StrToInt(RegExpr.SubExpressions[WorkPattern.Msg.Month]), - StrToInt(RegExpr.SubExpressions[WorkPattern.Msg.Day]), - StrToInt(RegExpr.SubExpressions[WorkPattern.Msg.Hours]), - StrToInt(RegExpr.SubExpressions[WorkPattern.Msg.Minutes]), 0); - - if RegExpr.MatchAgain then - PosNext := RegExpr.MatchedExpressionOffset - // search for next regexpr - else - PosNext := TextLength; // if not then end of file - h1 := PosCur + LenCur; // The message text beginning presumably - h2 := PosNext - PosCur - LenCur - 2; // its presumably message length - // working with message text - if WorkPattern.UsePreMsg then - PRN := DWORD(WorkPattern.PreMsg.PreRN) - else - PRN := DWORD(-1); - if PRN <> 0 then - begin - j := 1; - while ((RegExpr.Subject[h1] = Char($0D)) and - (RegExpr.Subject[h1 + 1] = Char($0A))) and (j <= PRN) do - begin - inc(h1, 2); - Dec(h2, 2); - inc(j); - end; // remove carriage return in the beginning - end; - if WorkPattern.UsePreMsg then - ARN := DWORD(WorkPattern.PreMsg.AfterRN) - else - ARN := DWORD(-1); - if ARN <> 0 then - begin - j := 1; - while ((RegExpr.Subject[h1 + h2] = Char($0D)) and - (RegExpr.Subject[h1 + h2 + 1] = Char($0A))) and (j <= ARN) do - begin - Dec(h2, 2); - inc(j) - end; // remove carriage return in the end - end; - // get the message text - TxtMsg := Copy(RegExpr.Subject, h1, h2 + 2); - // remove spaces if needs - if WorkPattern.UsePreMsg and - ((WorkPattern.PreMsg.PreSP <> 0) or - (WorkPattern.PreMsg.AfterSP <> 0)) then - PreMessageSP(TxtMsg, UTF8Len(PAnsiChar(RegExpr.MatchedExpression))); - AddMsgToDB(DContact.hContact, msg_flag, DT, TxtMsg, AddedMessages, - Duplicates); // adding in base - PosCur := PosNext; - DoMessage(ITXT_THREAD_PROGRESS, PosCur, 0); - until (PosNext = TextLength) or Terminated; - end; // RegExpr.Exec - end - else - begin - s := TranslateWideString('Can''t determine destination contact'); - DoMessage(ITXT_THREAD_ERROR, wparam(PWideChar(s)), 0); - end; -end; - -procedure TImportThrd.BinImportProcedure; -var - i: integer; - s: WideString; - tempstr: PAnsiChar; -var - dbei: TDBEVENTINFO; - evSize: integer; - proto: AnsiString; - pt: int_ptr; - fsz: cardinal; -{$DEFINE BIN_IMPORT_} -{$I BmContactIP.inc} -{$I BqhfIP.inc} -{$I BICQ6IP.inc} -{$I BICQ5IP.inc} -{$I BRMSIP.inc} -{$I BbayanIP.inc} -{$UNDEF BIN_IMPORT_} -begin - AddedMessages := 0; - Duplicates := 0; - case WorkPattern.BinProc of - 1: // mContactImport - {$I BmContactIP.inc} - 2: // QHF - {$I BqhfIP.inc} - 3: // ICQ6 - {$I BICQ6IP.inc} - 4: // ICQ5 - {$I BICQ5IP.inc} - 5: // Nokia midp-rms - {$I BRMSIP.inc} - 6: // BayanICQ - {$I BbayanIP.inc} - end; -end; - -procedure TImportThrd.Execute; -var - i: integer; - s1: WideString; - tempstr: PAnsiChar; -begin - DoMessage(ITXT_THREAD_ALLSTARTED, 0, 0); - FolderName := Copy(FileNames, 1, OffsetFileName - 1); - i := OffsetFileName; - while (FileNames[i + 1] <> #0) and not Terminated do - begin // - s1 := ''; - inc(i); - while FileNames[i] <> #0 do - begin - s1 := s1 + FileNames[i]; - inc(i); - end; - if (s1 <> '') and (s1 <> #0) then - begin // - FileName := FolderName + '\' + s1; - DoMessage(ITXT_THREAD_START_FILE, wparam(PWideChar(FileName)),0, smSend); - pFileText := nil; - hFile := INVALID_HANDLE_VALUE; - DContact.ProtoName := Destination.ProtoName; - fContact.hContact := INVALID_HANDLE_VALUE; - RegExpr := TPerlRegEx.Create; - // . - try - // - if WorkPattern.UseFileName then - if (DContact.hContact = 0) or - (DContact.hContact = INVALID_HANDLE_VALUE) then - begin - tempstr := WidetoUTF8(PWideChar(FileName), tempstr); - RegExpr.Subject := tempstr; - FreeMem(tempstr); - tempstr := ANSIToUTF8(PAnsiChar(WorkPattern.FName.Pattern),tempstr, cp); - RegExpr.RegEx := tempstr; - FreeMem(tempstr); - RegExpr.Options := [preUTF8]; - - if RegExpr.Match then - begin - fContact.ProtoName := Destination.ProtoName; - if WorkPattern.FName.InUID <> 0 then - fContact.ContactUID := RegExpr.SubExpressions[WorkPattern.FName.InUID] - else - fContact.ContactUID := ''; - if WorkPattern.FName.InNick <> 0 then - fContact.ContactNick := RegExpr.SubExpressions[WorkPattern.FName.InNick] - else - fContact.ContactNick := ''; - TryDetermContact(fContact); - end; - end; - - // - // [preMultiLine] - if DoMapFile then // - begin - db_set_safety_mode(0); - case WorkPattern.IType of - 1: TextImportProcedure; - 2: BinImportProcedure; - end; // case - end; // DoMapFile - finally - db_set_safety_mode(1); - DoMessage(ITXT_THREAD_FINISH, AddedMessages, Duplicates); - DoUnMapFile; - RegExpr.Free; - end; - DContact.hContact := INVALID_HANDLE_VALUE; - Sleep(10); // - end; // - end; // - DoMessage(ITXT_THREAD_ALLFINISHED, 0, 0); -end; - -end. diff --git a/plugins/ImportTXT/ImportTxtWiz.pas b/plugins/ImportTXT/ImportTxtWiz.pas deleted file mode 100644 index 25b5896892..0000000000 --- a/plugins/ImportTXT/ImportTxtWiz.pas +++ /dev/null @@ -1,390 +0,0 @@ -unit ImportTxtWiz; - -interface - -uses Windows, Messages, SysUtils, - m_api, - general, ImportTU, FileDlgs, - ImportThrd; - -{$R ImpTxtWiz.res} -{$I ImpWizRes.inc} - -function WizardIntroPageProc(hdlg: HWND; hMessage:uint; wParam:WPARAM; lParam:LPARAM): LongBool; stdcall; -function ImportTypePageProc(hdlg: HWND; hMessage:uint; wParam:WPARAM; lParam:LPARAM): LongBool; stdcall; -function WizardDlgProc(hdlg: HWND; hMessage:uint; wParam:WPARAM; lParam:LPARAM): LongBool; stdcall; -function ImportFilesPageProc(hdlg: HWND; hMessage:uint; wParam:WPARAM; lParam:LPARAM): LongBool; stdcall; -function ImportDestinationPageProc(hdlg: HWND; hMessage:uint; wParam:WPARAM; lParam:LPARAM): LongBool; stdcall; -function ImportProgressPageProc(hdlg: HWND; hMessage:uint; wParam:WPARAM; lParam:LPARAM): LongBool; stdcall; - -implementation - -const - WIZM_GOTOPAGE = (WM_USER + 10); // wParam=resource id, lParam=dlgproc - WIZM_DISABLEBUTTON = (WM_USER + 11); // wParam=0:back, 1:next, 2:cancel - WIZM_SETCANCELTEXT = (WM_USER + 12); // lParam=(char*)newText - WIZM_SETNEXTTEXT = (WM_USER + 13); // lParam=(char*)newText - WIZM_ENABLEBUTTON = (WM_USER + 14); // wParam=0:back, 1:next, 2:cancel - WIZM_ACCLISTCHANGED = (WM_USER + 15); // OnAccountListChanged - -var - hwndPage: HWND; - IndexOfPattern: integer; - ImportThrd: TImportThrd; - ProtoSelect: integer; - nFO: integer; - FilePath: WideString; - FileName: WideString; - FileNames: array of WideString; - StartTime, FinishTime: TDateTime; - -function MakeFileList(hdlg: HWND; param: WORD): boolean; -var - i: integer; - s1: WideString; -begin - result := false; - case param of - IDC_FILE: - FileName := OpenDialogExecute(hdlg, $0200, nFO, TxtPatterns[IndexOfPattern].DefExtension); - // OFN_ALLOWMULTISELECT = $00000200; - IDC_DIR: - FileName := FolderDialogExecute(hdlg, nFO, TxtPatterns[IndexOfPattern].DefExtension); - end; - if FileName <> '' then - begin - SendDlgItemMessageW(hdlg, IDC_LIST, LB_RESETCONTENT, 0, 0); - SendDlgItemMessageW(hdlg, IDC_PATH, WM_SETTEXT, 0, 0); - SetLength(FileNames, 0); - FilePath := Copy(FileName, 1, nFO - 1); - SendDlgItemMessageW(hdlg, IDC_PATH, WM_SETTEXT, 0, lparam(PWideChar(FilePath))); - i := nFO; - while FileName[i + 1] <> #0 do - begin - s1 := ''; - Inc(i); - while FileName[i] <> #0 do - begin - s1 := s1 + FileName[i]; - Inc(i); - end; - if (s1 <> '') and (s1 <> #0) then - begin - SetLength(FileNames, Length(FileNames) + 1); - FileNames[High(FileNames)] := s1; - SendDlgItemMessageW(hdlg, IDC_LIST, LB_ADDSTRING, 0, lparam(PWideChar(s1))); - end; - end; - end; - if High(FileNames) > -1 then - result := true; -end; - -procedure AddStatusMessage(hdlg: HWND; msg: WideString); -begin - SendDlgItemMessageW(hdlg, IDC_STATUS, LB_SETCURSEL, - SendDlgItemMessageW(hdlg, IDC_STATUS, LB_ADDSTRING, 0, lparam(PWideChar(msg))), 0); -end; - -procedure AccLstChngd; -begin - SendMessageW(hwndPage, WIZM_ACCLISTCHANGED, 0, 0); -end; - -function WizardIntroPageProc(hdlg: HWND; hMessage:uint; wParam:WPARAM; lParam:LPARAM): LongBool; stdcall; -begin - result := false; - case hMessage of - WM_INITDIALOG: - begin - TranslateDialogDefault(hdlg); - SendMessage(GetParent(hdlg), WIZM_DISABLEBUTTON, 0, 0); - IndexOfPattern := 0; - ProtoSelect := 0; - SetLength(FileNames, 0); - result := true; - end; - WM_COMMAND: - case LOWORD(wParam) of - IDOK: - PostMessage(GetParent(hdlg), WIZM_GOTOPAGE, IDD_IMPTYPE, tlparam(@ImportTypePageProc)); - IDCANCEL: - PostMessage(GetParent(hdlg), WM_CLOSE, 0, 0); - end; // Case wParam - end; // Case hMassege -end; - -function ImportTypePageProc(hdlg: HWND; hMessage:uint; wParam:WPARAM; lParam:LPARAM): LongBool; stdcall; -var - i: integer; -begin - result := false; - case hMessage of - WM_INITDIALOG: - begin - TranslateDialogDefault(hdlg); - ReadPatterns; - if Length(TxtPatterns) > 0 then - begin - For i := 0 to High(TxtPatterns) do - SendDlgItemMessage(hdlg, IDC_COMBO1, CB_ADDSTRING, 0, tlparam(PChar(TxtPatterns[i].Name))); - SendDlgItemMessage(hdlg, IDC_COMBO1, CB_SETCURSEL, GetLastPattern, 0); - IndexOfPattern := GetLastPattern; - end - else - SendMessage(GetParent(hdlg), WIZM_DISABLEBUTTON, 1, 0); - result := true; - end; - WM_COMMAND: - begin - if (HiWord(wParam) = CBN_SELCHANGE) and (LOWORD(wParam) = IDC_COMBO1) - then - IndexOfPattern := SendDlgItemMessage(hdlg, IDC_COMBO1, - CB_GETCURSEL, 0, 0); - Case LOWORD(wParam) of - IDC_BACK: - PostMessage(GetParent(hdlg), WIZM_GOTOPAGE, IDD_IMPWIZARDINTRO, tlparam(@WizardIntroPageProc)); - IDOK: - PostMessage(GetParent(hdlg), WIZM_GOTOPAGE, IDD_IMPFILES, tlparam(@ImportFilesPageProc)); - IDCANCEL: - PostMessage(GetParent(hdlg), WM_CLOSE, 0, 0); - end; // Case wParam - end; // WM_COMMAND - end; // Case hMassage -end; - -function ImportFilesPageProc(hdlg: HWND; hMessage:uint; wParam:WPARAM; lParam:LPARAM): LongBool; stdcall; -var - i: integer; -begin - result := false; - case hMessage of - WM_INITDIALOG: - begin - TranslateDialogDefault(hdlg); - if High(FileNames) < 0 then - SendMessage(GetParent(hdlg), WIZM_DISABLEBUTTON, 1, 0) - else - begin - SendDlgItemMessageW(hdlg, IDC_PATH, WM_SETTEXT, 0, tlparam(PWideChar(FilePath))); - for i := 0 to High(FileNames) do - SendDlgItemMessageW(hdlg, IDC_LIST, LB_ADDSTRING, 0, tlparam(PWideChar(FileNames[i]))); - end; - result := true; - end; - WM_COMMAND: - Case LOWORD(wParam) of - IDC_FILE, IDC_DIR: - if MakeFileList(hdlg, LOWORD(wParam)) then - SendMessage(GetParent(hdlg), WIZM_ENABLEBUTTON, 1, 0) - else - SendMessage(GetParent(hdlg), WIZM_DISABLEBUTTON, 1, 0); - IDC_BACK: - PostMessage(GetParent(hdlg), WIZM_GOTOPAGE, IDD_IMPTYPE, tlparam(@ImportTypePageProc)); - IDOK: - PostMessage(GetParent(hdlg), WIZM_GOTOPAGE, IDD_IMPDEST, tlparam(@ImportDestinationPageProc)); - IDCANCEL: - PostMessage(GetParent(hdlg), WM_CLOSE, 0, 0); - end; // Case wParam - end; // Case hMassage -end; - -function ImportDestinationPageProc(hdlg: HWND; hMessage:uint; wParam:WPARAM; lParam:LPARAM): LongBool; stdcall; -var - i: integer; - tempws: WideString; -begin - result := false; - case hMessage of - WM_INITDIALOG: - begin - TranslateDialogDefault(hdlg); - EnumProtocols; - for i := 0 to ProtoCount - 1 do - begin - tempws := Protocols[i].ProtoName + ' | '; - tempws := tempws + Protocols[i].ProtoUID + ' | ' + Protocols[i].ProtoNick; - SendDlgItemMessageW(hdlg, IDC_COMBO1, CB_ADDSTRING, 0, tlparam(PWideChar(tempws))); - end; - SendDlgItemMessage(hdlg, IDC_COMBO1, CB_SETCURSEL, 0, 0); - OnAccountListChange := AccLstChngd; - CheckDlgButton(hdlg, IDC_CHKDUPW, BST_CHECKED); - CheckForDuplicates := true; - CheckDlgButton(hdlg, IDC_SHOWDUPW, BST_UNCHECKED); - CheckForDuplicates := false; - result := true; - end; - WM_COMMAND: - begin - if (HiWord(wParam) = CBN_SELCHANGE) and (LOWORD(wParam) = IDC_COMBO1) - then - ProtoSelect := SendDlgItemMessage(hdlg, IDC_COMBO1, CB_GETCURSEL, 0, 0); - - if (HiWord(wParam) = BN_CLICKED) and (LOWORD(wParam) = IDC_CHKDUPW) then - EnableWindow(GetDlgItem(hdlg, IDC_SHOWDUPW), - IsDlgButtonChecked(hdlg, IDC_CHKDUPW)<>BST_UNCHECKED); - - Case LOWORD(wParam) of - IDC_BACK: - PostMessage(GetParent(hdlg), WIZM_GOTOPAGE, IDD_IMPFILES, tlparam(@ImportFilesPageProc)); - IDOK: - begin - CheckForDuplicates := LongBool(IsDlgButtonChecked(hdlg, IDC_CHKDUPW)); - ShowDuplicates := LongBool(IsDlgButtonChecked(hdlg, IDC_SHOWDUPW)); - PostMessage(GetParent(hdlg), WIZM_GOTOPAGE, IDD_PROGRESS, tlparam(@ImportProgressPageProc)); - end; - IDCANCEL: - PostMessage(GetParent(hdlg), WM_CLOSE, 0, 0); - end; // Case wParam - end; // WM_COMMAND - WIZM_ACCLISTCHANGED: - begin - ProtoSelect := SendDlgItemMessage(hdlg, IDC_COMBO1, CB_GETCURSEL, 0, 0); - SendDlgItemMessageW(hdlg, IDC_COMBO1, CB_RESETCONTENT, 0, 0); - for i := 0 to ProtoCount - 1 do - begin - tempws := Protocols[i].ProtoName + ' | '; - tempws := tempws + Protocols[i].ProtoUID + ' | ' + Protocols[i].ProtoNick; - SendDlgItemMessageW(hdlg, IDC_COMBO1, CB_ADDSTRING, 0, tlparam(PWideChar(tempws))); - end; - if ProtoSelect < ProtoCount - 1 then - SendDlgItemMessage(hdlg, IDC_COMBO1, CB_SETCURSEL, ProtoSelect, 0) - else - SendDlgItemMessage(hdlg, IDC_COMBO1, CB_SETCURSEL, ProtoCount - 1, 0); - end; // WIZM_... - end; // Case hMassage -end; - -function ImportProgressPageProc(hdlg: HWND; hMessage:uint; wParam:WPARAM; lParam:LPARAM): LongBool; stdcall; -var - H, Mi, sec, ms: WORD; - s: WideString; -begin - result := false; - case hMessage of - WM_INITDIALOG: - begin - TranslateDialogDefault(hdlg); - SendMessage(GetParent(hdlg), WIZM_DISABLEBUTTON, 0, 0); - SendMessage(GetParent(hdlg), WIZM_DISABLEBUTTON, 1, 0); - SendMessage(GetParent(hdlg), WIZM_DISABLEBUTTON, 2, 0); - SendMessage(GetParent(hdlg), WIZM_SETCANCELTEXT, 0, tlparam(TranslateW('Finish'))); - // START THREAD - ImportThrd := TImportThrd.Create(true); - ImportThrd.FreeOnTerminate := true; - ImportThrd.DContact.hContact := 0; - ImportThrd.Destination := Protocols[ProtoSelect]; - ImportThrd.FileNames := FileName + #0 + #0; - ImportThrd.OffsetFileName := nFO; - ImportThrd.WorkPattern := TxtPatterns[IndexOfPattern]; - ImportThrd.ParentHWND := hdlg; - ImportThrd.Resume; - result := true; - end; - WM_COMMAND: - Case LOWORD(wParam) of - IDCANCEL: - PostMessage(GetParent(hdlg), WM_CLOSE, 0, 0); - end; // Case wParam - // - // - ITXT_THREAD_ALLSTARTED: - StartTime := Time; - ITXT_THREAD_START: - begin - AddStatusMessage(hdlg, TranslateWideString('Import started...')); - end; - // - ITXT_THREAD_MAXPROGRESS: - SendDlgItemMessage(hdlg, IDC_PROGRESS, PBM_SETRANGE, 0, MakeLParam(0, lParam)); - // ... - ITXT_THREAD_PROGRESS: - SendDlgItemMessage(hdlg, IDC_PROGRESS, PBM_SETPOS, wParam, 0); - // - ITXT_THREAD_ERROR: - AddStatusMessage(hdlg, TranslateWideString(PWideChar(wParam))); - // - ITXT_THREAD_FINISH: - begin - AddStatusMessage(hdlg, WideFormat(TranslateWideString('Added: %d messages'), [wParam])); - AddStatusMessage(hdlg, WideFormat(TranslateWideString('Duplicates: %d messages'), [lParam])); - end; - // - ITXT_THREAD_START_FILE: - AddStatusMessage(hdlg, WideFormat(TranslateWideString('File: %s'), [PWideChar(wParam)])); - // - ITXT_THREAD_DEST_CONTACT: - begin - s := GetContactID(wParam, '', true) + ' | ' + GetContactNick(wParam, '', true); - AddStatusMessage(hdlg, WideFormat(TranslateWideString('To: %s'), [s])); - end; - ITXT_THREAD_ALLFINISHED: - begin - FinishTime := Time; - DecodeTime(FinishTime - StartTime, H, Mi, sec, ms); - AddStatusMessage(hdlg, WideFormat(TranslateWideString('In: %d:%d:%d'), [H, Mi, sec])); - SendMessage(GetParent(hdlg), WIZM_ENABLEBUTTON, 2, 0); - end; - end; // Case hMessage -end; - -function WizardDlgProc(hdlg: HWND; hMessage:uint; wParam:WPARAM; lParam:LPARAM): LongBool; stdcall; -begin - result := false; - case hMessage of - WM_DESTROY: - SetLastPattern(IndexOfPattern); - WM_INITDIALOG: - begin - TranslateDialogDefault(hdlg); - hwndPage := CreateDialog(hInstance, MAKEINTRESOURCE(IDD_IMPWIZARDINTRO), - hdlg, @WizardIntroPageProc); - SetWindowPos(hwndPage, 0, 0, 0, 0, 0, SWP_NOZORDER or SWP_NOSIZE); - ShowWindow(hwndPage, SW_SHOW); - ShowWindow(hdlg, SW_SHOW); - SendMessage(hdlg, WM_SETICON, ICON_BIG, LoadIcon(hInstance, MAKEINTRESOURCE(110))); - result := true; - end; - WIZM_GOTOPAGE: - begin - DestroyWindow(hwndPage); - EnableWindow(GetDlgItem(hdlg, IDC_BACK), true); - EnableWindow(GetDlgItem(hdlg, IDOK), true); - EnableWindow(GetDlgItem(hdlg, IDCANCEL), true); - SetDlgItemTextW(hdlg, IDCANCEL, TranslateW('Cancel')); - hwndPage := CreateDialog(hInstance, MAKEINTRESOURCE(wParam), hdlg, Pointer(lParam)); - SetWindowPos(hwndPage, 0, 0, 0, 0, 0, SWP_NOZORDER or SWP_NOSIZE); - ShowWindow(hwndPage, SW_SHOW); - end; - WIZM_DISABLEBUTTON: - begin - case wParam of - 0: EnableWindow(GetDlgItem(hdlg, IDC_BACK), false); - 1: EnableWindow(GetDlgItem(hdlg, IDOK), false); - 2: EnableWindow(GetDlgItem(hdlg, IDCANCEL), false); - end; // Case wParam - end; - WIZM_ENABLEBUTTON: - begin - case wParam of - 0: EnableWindow(GetDlgItem(hdlg, IDC_BACK), true); - 1: EnableWindow(GetDlgItem(hdlg, IDOK), true); - 2: EnableWindow(GetDlgItem(hdlg, IDCANCEL), true); - end; // Case wParam - end; - WIZM_SETCANCELTEXT: - SetDlgItemTextW(hdlg, IDCANCEL, PWideChar(lParam)); - WIZM_SETNEXTTEXT: - SetDlgItemTextW(hdlg, IDOK, PWideChar(lParam)); - WM_COMMAND: - SendMessage(hwndPage, WM_COMMAND, wParam, lParam); - WM_CLOSE: - begin - OnAccountListChange := nil; - DestroyWindow(hwndPage); - DestroyWindow(hdlg); - end; - end; // Case hMessage -end; - -end. diff --git a/plugins/ImportTXT/PerlRegEx.pas b/plugins/ImportTXT/PerlRegEx.pas deleted file mode 100644 index 617479fa91..0000000000 --- a/plugins/ImportTXT/PerlRegEx.pas +++ /dev/null @@ -1,447 +0,0 @@ -(********************************************************** -* * -* Perl Regular Expressions * -* * -* Delphi wrapper around PCRE - http://www.pcre.org * -* * -* Copyright (C) 1999-2006 Jan Goyvaerts * -* * -* Design & implementation Jan Goyvaerts 1999-2006 * -* * -* * -* Shorted and added partial ability for PCRE 7.0 * -* by Abyss * -**********************************************************) - -unit PerlRegEx; - -interface - - - -uses SysUtils; - -type - TPerlRegExOptions = set of ( - preCaseLess, // /i -> Case insensitive - preMultiLine, // /m -> ^ and $ also match before/after a newline, not just at the beginning and the end of the string - preSingleLine, // /s -> Dot matches any character, including \n (newline). Otherwise, it matches anything except \n - preExtended, // /x -> Allow regex to contain extra whitespace, newlines and Perl-style comments, all of which will be filtered out - preAnchored, // /A -> Successful match can only occur at the start of the subject or right after the previous match - preDollarEndOnly, // /E - preExtra, // /X - preUnGreedy, // Repeat operators (+, *, ?) are not greedy by default - // (i.e. they try to match the minimum number of characters instead of the maximum) - preUTF8 // UTF8 - ); -type - TPerlRegExState = set of ( - preNotBOL, // Not Beginning Of Line: ^ does not match at the start of Subject - preNotEOL, // Not End Of Line: $ does not match at the end of Subject - preNotEmpty // Empty matches not allowed - ); - -const - // Maximum number of subexpressions (backreferences) - // Subexpressions are created by placing round brackets in the regex, and are referenced by \1, \2, ... - // In Perl, they are available as $1, $2, ... after the regex matched; with TPerlRegEx, use the Subexpressions property - // You can also insert \1, \2, ... in the Replacement string; \0 is the complete matched expression - MAX_SUBEXPRESSIONS = 99; - - -type - TPerlRegEx = class - private // *** Property storage, getters and setters - FCompiled, FStudied: Boolean; - FOptions: TPerlRegExOptions; - FState: TPerlRegExState; - FRegEx, FSubject: string; - FStart, FStop: Integer; - function GetMatchedExpression: string; - function GetMatchedExpressionLength: Integer; - function GetMatchedExpressionOffset: Integer; - procedure SetOptions(Value: TPerlRegExOptions); - procedure SetRegEx(const Value: string); - function GetSubExpressionCount: Integer; - function GetSubExpressions(Index: Integer): string; - function GetSubExpressionLengths(Index: Integer): Integer; - function GetSubExpressionOffsets(Index: Integer): Integer; - procedure SetSubject(const Value: string); - procedure SetStart(const Value: Integer); - procedure SetStop(const Value: Integer); - function GetFoundMatch: Boolean; - private // *** Variables used by pcrelib.dll - Offsets: array[0..(MAX_SUBEXPRESSIONS+1)*3] of Integer; - OffsetCount: Integer; - pcreOptions: Integer; - pattern, hints, chartable: Pointer; - FSubjectPChar: PChar; - protected - procedure CleanUp; - // Dispose off whatever we created, so we can start over. Called automatically when needed, so it is not made public - public - constructor Create; - // Come to life - destructor Destroy; override; - // Clean up after ourselves - class function EscapeRegExChars(const S: string): string; - // Escapes regex characters in S so that the regex engine can be used to match S as plain text - procedure Compile; - // Compile the regex. Called automatically by Match - procedure Study; - // Study the regex. Studying takes time, but will make the execution of the regex a lot faster. - // Call study if you will be using the same regex many times - function Match: Boolean; - // Attempt to match the regex - function MatchAgain: Boolean; - // Attempt to match the regex to the remainder of the string after the previous match - // To avoid problems (when using ^ in the regex), call MatchAgain only after a succesful Match() - function NamedSubExpression(const SEName: string): Integer; - // Returns the index of the named group SEName - function Config (What: integer): Integer; - //This function makes it possible for a client program - // to find out which optional features are available in the - //version of the PCRE library it is using. - property Compiled: Boolean read FCompiled; - // True if the RegEx has already been compiled. - property FoundMatch: Boolean read GetFoundMatch; - // Returns True when MatchedExpression* and SubExpression* indicate a match - property Studied: Boolean read FStudied; - // True if the RegEx has already been studied - property MatchedExpression: string read GetMatchedExpression; - // The matched string - property MatchedExpressionLength: Integer read GetMatchedExpressionLength; - // Length of the matched string - property MatchedExpressionOffset: Integer read GetMatchedExpressionOffset; - // Character offset in the Subject string at which the matched substring starts - property Start: Integer read FStart write SetStart; - // Starting position in Subject from which MatchAgain begins - property Stop: Integer read FStop write SetStop; - // Last character in Subject that Match and MatchAgain search through - property State: TPerlRegExState read FState write FState; - // State of Subject - property SubExpressionCount: Integer read GetSubExpressionCount; - // Number of matched subexpressions - property SubExpressions[Index: Integer]: string read GetSubExpressions; - // Matched subexpressions after a regex has been matched - property SubExpressionLengths[Index: Integer]: Integer read GetSubExpressionLengths; - // Lengths of the subexpressions - property SubExpressionOffsets[Index: Integer]: Integer read GetSubExpressionOffsets; - // Character offsets in the Subject string of the subexpressions - property Subject: string read FSubject write SetSubject; - // The string on which Match() will try to match RegEx - published - property Options: TPerlRegExOptions read FOptions write SetOptions; - // Options - property RegEx: string read FRegEx write SetRegEx; - // The regular expression to be matched - end; - - - -implementation - - { ********* pcrelib.dll imports ********* } - -const - PCRE_CASELESS = $00000001; - PCRE_MULTILINE = $00000002; - PCRE_SINGLELINE = $00000004; - PCRE_EXTENDED = $00000008; - PCRE_ANCHORED = $00000010; - PCRE_DOLLAR_ENDONLY = $00000020; - PCRE_EXTRA = $00000040; - PCRE_NOTBOL = $00000080; - PCRE_NOTEOL = $00000100; - PCRE_UNGREEDY = $00000200; - PCRE_NOTEMPTY = $00000400; - PCRE_UTF8 = $00000800; - PCRE_NO_AUTO_CAPTURE = $00001000; - PCRE_NO_UTF8_CHECK = $00002000; - PCRE_AUTO_CALLOUT = $00004000; - PCRE_PARTIAL = $00008000; - PCRE_DFA_SHORTEST = $00010000; - PCRE_DFA_RESTART = $00020000; - PCRE_FIRSTLINE = $00040000; - PCRE_DUPNAMES = $00080000; - PCRE_NEWLINE_CR = $00100000; - PCRE_NEWLINE_LF = $00200000; - PCRE_NEWLINE_CRLF = $00300000; - PCRE_NEWLINE_ANY = $00400000; - - // Exec error codes - PCRE_ERROR_NOMATCH = -1; - PCRE_ERROR_NULL = -2; - PCRE_ERROR_BADOPTION = -3; - PCRE_ERROR_BADMAGIC = -4; - PCRE_ERROR_UNKNOWN_OPCODE = -5; - PCRE_ERROR_UNKNOWN_NODE = -5; // For backward compatibility - PCRE_ERROR_NOMEMORY = -6; - PCRE_ERROR_NOSUBSTRING = -7; - PCRE_ERROR_MATCHLIMIT = -8; - PCRE_ERROR_CALLOUT = -9; // Never used by PCRE itself - PCRE_ERROR_BADUTF8 =-10; - PCRE_ERROR_BADUTF8_OFFSET =-11; - PCRE_ERROR_PARTIAL =-12; - PCRE_ERROR_BADPARTIAL =-13; - PCRE_ERROR_INTERNAL =-14; - PCRE_ERROR_BADCOUNT =-15; - PCRE_ERROR_DFA_UITEM =-16; - PCRE_ERROR_DFA_UCOND =-17; - PCRE_ERROR_DFA_UMLIMIT =-18; - PCRE_ERROR_DFA_WSSIZE =-19; - PCRE_ERROR_DFA_RECURSE =-20; - PCRE_ERROR_RECURSIONLIMIT =-21; - PCRE_ERROR_NULLWSLIMIT =-22; - PCRE_ERROR_BADNEWLINE =-23; - -(* Request types for pcre_config(). Do not re-arrange, in order to remain compatible. *) - - PCRE_CONFIG_UTF8 = 0; - PCRE_CONFIG_NEWLINE = 1; - PCRE_CONFIG_LINK_SIZE = 2; - PCRE_CONFIG_POSIX_MALLOC_THRESHOLD = 3; - PCRE_CONFIG_MATCH_LIMIT = 4; - PCRE_CONFIG_STACKRECURSE = 5; - PCRE_CONFIG_UNICODE_PROPERTIES = 6; - PCRE_CONFIG_MATCH_LIMIT_RECURSION = 7; -type - PPChar = ^PChar; - PInt = ^Integer; - - - -// Functions we import from the PCRE library DLL -// Leading underscores gratuitously added by Borland C++Builder 6.0 -function pcre_maketables: PAnsiChar; cdecl; external 'pcre3.dll'; -function pcre_compile(const pattern: PChar; options: Integer; errorptr: PPChar; erroroffset: PInt; - const tables: PChar): Pointer; cdecl; external 'pcre3.dll'; -function pcre_exec(const pattern: Pointer; const hints: Pointer; const subject: PChar; length, startoffset: Integer; - options: Integer; offsets: PInt; offsetcount: Integer): Integer; cdecl; external 'pcre3.dll'; -function pcre_get_stringnumber(const pattern: Pointer; const Name: PChar): Integer; cdecl; external 'pcre3.dll'; -function pcre_study(const pattern: Pointer; options: Integer; errorptr: PPChar): Pointer; cdecl; external 'pcre3.dll'; -function pcre_fullinfo(const pattern: Pointer; const hints: Pointer; what: Integer; where: Pointer): Integer; cdecl; external 'pcre3.dll'; -function pcre_version: pchar; cdecl; external 'pcre3.dll'; -function pcre_config (what:integer; where:pointer):integer; cdecl; external 'pcre3.dll'; -//procedure pcre_free(ptr: Pointer); cdecl; external 'pcre3.dll'; - - - - - { ********* TPerlRegEx component ********* } - -procedure TPerlRegEx.CleanUp; -begin - FCompiled := False; FStudied := False; - pattern := nil; hints := nil; - OffsetCount := 0; -end; - -procedure TPerlRegEx.Compile; -var - Error: PChar; - ErrorOffset: Integer; -begin - if FRegEx = '' then raise Exception.Create('TPerlRegEx.Compile() - Please specify a regular expression in RegEx first'); - CleanUp; - Pattern := pcre_compile(PChar(FRegEx), pcreOptions, @Error, @ErrorOffset, chartable); - if Pattern = nil then - raise Exception.Create(Format('TPerlRegEx.Compile() - Error in regex at offset %d: %s', [ErrorOffset, AnsiString(Error)])); - FCompiled := True -end; - - -constructor TPerlRegEx.Create; -begin - inherited Create; - FState := [preNotEmpty]; - chartable := pcre_maketables; -end; - -destructor TPerlRegEx.Destroy; -begin - CleanUp; - inherited Destroy; -end; - -class function TPerlRegEx.EscapeRegExChars(const S: string): string; -var - I: Integer; -begin - Result := S; - I := Length(Result); - while I > 0 do begin - if Result[I] in ['.', '[', ']', '(', ')', '?', '*', '+', '{', '}', '^', '$', '|', '\'] then - Insert('\', Result, I) - else if Result[I] = #0 then begin - Result[I] := '0'; - Insert('\', Result, I); - end; - Dec(I); - end; -end; - -function TPerlRegEx.GetFoundMatch: Boolean; -begin - Result := OffsetCount > 0; -end; - -function TPerlRegEx.GetMatchedExpression: string; -begin - Assert(FoundMatch, 'REQUIRE: There must be a successful match first'); - Result := GetSubExpressions(0); -end; - -function TPerlRegEx.GetMatchedExpressionLength: Integer; -begin - Assert(FoundMatch, 'REQUIRE: There must be a successful match first'); - Result := GetSubExpressionLengths(0) -end; - -function TPerlRegEx.GetMatchedExpressionOffset: Integer; -begin - Assert(FoundMatch, 'REQUIRE: There must be a successful match first'); - Result := GetSubExpressionOffsets(0) -end; - -function TPerlRegEx.GetSubExpressionCount: Integer; -begin - Assert(FoundMatch, 'REQUIRE: There must be a successful match first'); - Result := OffsetCount-1 -end; - -function TPerlRegEx.GetSubExpressionLengths(Index: Integer): Integer; -begin - Assert(FoundMatch, 'REQUIRE: There must be a successful match first'); - Assert((Index >= 0) and (Index <= SubExpressionCount), 'REQUIRE: Index <= SubExpressionCount'); - Result := Offsets[Index*2+1]-Offsets[Index*2] -end; - -function TPerlRegEx.GetSubExpressionOffsets(Index: Integer): Integer; -begin - Assert(FoundMatch, 'REQUIRE: There must be a successful match first'); - Assert((Index >= 0) and (Index <= SubExpressionCount), 'REQUIRE: Index <= SubExpressionCount'); - Result := Offsets[Index*2] -end; - -function TPerlRegEx.GetSubExpressions(Index: Integer): string; -begin - Assert(FoundMatch, 'REQUIRE: There must be a successful match first'); - if Index > SubExpressionCount then Result := '' - else Result := Copy(FSubject, Offsets[Index*2], Offsets[Index*2+1]-Offsets[Index*2]); -end; - -function TPerlRegEx.Match: Boolean; -var - I, Opts: Integer; -begin - if not Compiled then Compile; - if preNotBOL in State then Opts := PCRE_NOTBOL else Opts := 0; - if preNotEOL in State then Opts := Opts or PCRE_NOTEOL; - if preNotEmpty in State then Opts := Opts or PCRE_NOTEMPTY; - if FStart > FStop then OffsetCount := -1 - else OffsetCount := pcre_exec(Pattern, Hints, FSubjectPChar, FStop, 0, Opts, @Offsets[0], High(Offsets)); - Result := OffsetCount > 0; - // Convert offsets into string indices - if Result then begin - for I := 0 to OffsetCount*2-1 do - Inc(Offsets[I]); - FStart := Offsets[1]; - if Offsets[0] = Offsets[1] then Inc(FStart); // Make sure we don't get stuck at the same position - end; -end; - -function TPerlRegEx.MatchAgain: Boolean; -var - I, Opts: Integer; -begin - if not Compiled then Compile; - if preNotBOL in State then Opts := PCRE_NOTBOL else Opts := 0; - if preNotEOL in State then Opts := Opts or PCRE_NOTEOL; - if preNotEmpty in State then Opts := Opts or PCRE_NOTEMPTY; - if FStart > FStop then OffsetCount := -1 - else OffsetCount := pcre_exec(Pattern, Hints, FSubjectPChar, FStop, FStart-1, Opts, @Offsets[0], High(Offsets)); - Result := OffsetCount > 0; - // Convert offsets into string indices - if Result then begin - for I := 0 to OffsetCount*2-1 do - Inc(Offsets[I]); - FStart := Offsets[1]; - if Offsets[0] = Offsets[1] then Inc(FStart); // Make sure we don't get stuck at the same position - end; -end; - -function TPerlRegEx.NamedSubExpression(const SEName: string): Integer; -begin - Result := pcre_get_stringnumber(Pattern, PChar(SEName)); -end; - -function TPerlRegEx.Config(What: integer):integer; -begin - result:=-1; - pcre_config(what, @result); -end; - - -procedure TPerlRegEx.SetOptions(Value: TPerlRegExOptions); -begin - if (FOptions <> Value) then begin - FOptions := Value; - pcreOptions := 0; - if (preCaseLess in Value) then pcreOptions := pcreOptions or PCRE_CASELESS; - if (preMultiLine in Value) then pcreOptions := pcreOptions or PCRE_MULTILINE; - if (preSingleLine in Value) then pcreOptions := pcreOptions or PCRE_SINGLELINE; - if (preExtended in Value) then pcreOptions := pcreOptions or PCRE_EXTENDED; - if (preAnchored in Value) then pcreOptions := pcreOptions or PCRE_ANCHORED; - if (preDollarEndOnly in Value) then pcreOptions := pcreOptions or PCRE_DOLLAR_ENDONLY; - if (preExtra in Value) then pcreOptions := pcreOptions or PCRE_EXTRA; - if (preUnGreedy in Value) then pcreOptions := pcreOptions or PCRE_UNGREEDY; - if (preUTF8 in Value) then pcreOptions := pcreOptions or PCRE_UTF8; - CleanUp - end -end; - -procedure TPerlRegEx.SetRegEx(const Value: string); -begin - if FRegEx <> Value then begin - FRegEx := Value; - CleanUp - end -end; - -procedure TPerlRegEx.SetStart(const Value: Integer); -begin - if Value < 1 then FStart := 1 - else FStart := Value; - // If FStart > Length(Subject), MatchAgain() will simply return False -end; - -procedure TPerlRegEx.SetStop(const Value: Integer); -begin - if Value > Length(Subject) then FStop := Length(Subject) - else FStop := Value; -end; - -procedure TPerlRegEx.SetSubject(const Value: string); -begin - FSubject := Value; - FSubjectPChar := PChar(Value); - FStart := 1; - FStop := Length(Subject); - OffsetCount := 0; -end; - - - -procedure TPerlRegEx.Study; -var - Error: PChar; -begin - if not FCompiled then Compile; - Hints := pcre_study(Pattern, 0, @Error); - if Error <> nil then raise Exception.Create('TPerlRegEx.Study() - Error studying the regex: ' + AnsiString(Error)); - FStudied := True -end; - - -end. \ No newline at end of file diff --git a/plugins/ImportTXT/doc/changelog_ru.txt b/plugins/ImportTXT/doc/changelog_ru.txt deleted file mode 100644 index 434eb38ca7..0000000000 --- a/plugins/ImportTXT/doc/changelog_ru.txt +++ /dev/null @@ -1,77 +0,0 @@ -v. 0.0.1.9 -* исправлено дублирование сообщения, если оно совпадает с первым в базе -* поддержка исправленного xml_api и поддержка плагина XML Driver (для седьмой ветки) - -v. 0.0.1.8 -* !важный фикс проверки дубликатов -+ добавлена возможность показывать дубликаты -+ автоскролл в окне сообщений -+ добавлена возможность отключить проверку на дубликаты -* баг с кривым выводом статусных сообщений -+ добавлен параметр Codepage в шаблон -- убрана возможность одновременного импорта -+ иконка в окне импорта -+ перечитывание шаблонов, при открытии окна и в Мастере -+ запоминание последнего шаблона -+ полностью переделан импорт из ICQ6 - -v. 0.0.1.7 -+ добавлен шаблон D[i]chat -+ добавлен импорт из ICQ6 -+ добавлен импорт из XML файлов ICQ5 - -v. 0.0.1.6 -* исправлена блокировка папки с импортируемыми файлами -+ добавлен шаблон Pigeon - -v. 0.0.1.5 -* исправлено расширение по умолчанию при выборе папки - -v. 0.0.1.4 -+ добавлена поддержка Updater -* когда не найден заголовок, не загоралась кнопка "завершить" -* исправлен шаблон mContacts - -v. 0.0.1.3 -+ добавлена поддержка бинарных файлов qhf - -v. 0.0.1.2 -+ добавлен параметр DefaultExtension в шаблон -+ добавлена поддержка бинарных файлов, пока только mContact - -v. 0.0.1.1 -+ добавлена возможность автостарта -* обновление списка аккаунтов при его изменении :) - -v. 0.0.1.0 -* пункт меню добавляется всем контактам -* добавлен мастер массового импорта - -v. 0.0.0.6 -* переработан формат файлов шаблона, теперь это ini файлы -* выделен обработчик сообщений перед импортом (удаление переводов строк и пробелов) -+ добавлена поддержка Message Export -* мелкие исправления - -v. 0.0.0.5 -* добавлена поддержка файлов с заголовком, с ником в заголовке сообщениия, но без направления - (History++) - -v. 0.0.0.4 -* добавлена поддержка мультиаккаунтности для 0.8+ -* пункт меню теперь добавляется для всех ICQ протоколов (если несколько копий DLL) - -v. 0.0.0.3 -* изменены процедуры преобразования кодировок -* убраны утечки памяти -+ добавлена собственная иконка - -v. 0.0.0.2 -* изменен способ работы с рег. выражениями (pcre3.dll) -+ сообщения импортируются в базу в UTF8 или ANSI в зависимости от версии Миранды -+ разные кодировки входных файлов -+ фикс перевода - - -v. 0.0.0.1 -+ первый релиз \ No newline at end of file diff --git a/plugins/ImportTXT/doc/examples_ru.txt b/plugins/ImportTXT/doc/examples_ru.txt deleted file mode 100644 index 9c71639cf4..0000000000 --- a/plugins/ImportTXT/doc/examples_ru.txt +++ /dev/null @@ -1,169 +0,0 @@ - -Пример файла: -************ - - История сообщений с Неизвестный (000000000) - Сохранено из Jimm 07.06.2008 11:49:17 - - ------------------------------------->>>- - Abyss (06.09.2007 17:52:51): -Привет! - -------------------------------------<<<- - Неизвестный (06.09.2007 18:03:09): -Хай - -************ - -Шаблон такой: - -[General] -Name=Jimm import pattern -Charset=ANSI -UseHeader=2 -UsePreMsg=1 -[Message] -Pattern=^------------------------------------(<<<|>>>)-\r\n\s([^\r\n]+?)\s\((\d\d?)\.(\d\d?)\.(\d\d\d?\d?)\s(\d\d?):(\d\d?):(\d\d?)\):$ -In=<<< -Out=>>> -Direction=1 -Day=3 -Month=4 -Year=5 -Hours=6 -Minutes=7 -Seconds=8 -[PreMessage] -PreRN=1 -AfterRN=2 -[Header] -Pattern=^\r\n\tИстория сообщений с ([^\r\n]+?)\s\((\d{5,})\)\r\n\tСохранено из Jimm\s[^\r\n]+?\r\n -InNick=1 -InUID=2 - -Коментарии: основные моменты содержаться в pattern_cfg, -Такие значения RN потому что: -считаем... - -Привет!{\r\n} Раз -{\r\n} два после -------------------------------------<<<- - Неизвестный (06.09.2007 18:03:09):{\r\n} Один до -Хай - -UseHeader=2 используем заголовок только для определения контакта назначения - - -==================================================================================================================================== -Для History++ -============= - -Пример файла -************ - -### -### Полная история -### Abyss (ICQ: 0000000) - Неизвестный (ICQ: 00000000) -### (создана модулем history++) -### - -[06.09.2007 17:52:51] Abyss: -Привет! - -[06.09.2007 18:03:09] Неизвестный: -Хай - -************ -Файл шаблона выглядит так: -************************** -[General] -Name=History++ pattern -Charset=UCS2 -UseHeader=3 -UsePreMsg=1 -[Message] -Pattern=^\[(\d\d?)\.(\d\d?)\.(\d\d\d?\d?)\s(\d\d?):(\d\d?):(\d\d?)\]\s([^\r\n]+?):$ -Direction=7 -Day=1 -Month=2 -Year=3 -Hours=4 -Minutes=5 -Seconds=6 -[Header] -Pattern=^###\r\n###\s[^\r\n]+?\r\n###\s([^\r\n]+?)\s\([^\r\n]+?:\s([^\r\n]+?)\)\s-\s([^\r\n]+?)\s\([^\r\n]+?:\s([^\r\n]+?)\)\r\n###\s[^\r\n]+?\r\n###\r\n -In=3 -Out=1 -InNick=3 -OutNick=1 -InUID=4 -OutUID=2 -[PreMessage] -PreRN=1 -AfterRN=2 -************************** - -Все аналогично только добавляется обработка заголовка, получаем ник для того чтобы потом его использовать в качестве маркера направления - -======================================================================================================================================== - -Для Message Export -================== -Файл: -***** ------------------------------------------------- - History for -User : Неизвестный -Protocol : ICQ -UIN : 00000000 -FirstName : Mister -LastName : X -Age : 0 -Gender : M -e-mail : -Nick : Неизвестный -City : -State : 66 -Phone : -Homepage : -- About - - ------------------------------------------------- -Abyss 06.09.2007 17:52:51 Привет - Как дела? -Неизвестный 06.09.2007 18:03:09 Хай, нормально - -******************* - -[General] -Name=Message export import pattern -Charset=UTF8 -UseHeader=3 -UsePreMsg=1 -[Message] -Pattern=^([^\r\n]+?)[\s]+?(\d\d?)\.(\d\d?)\.(\d\d\d?\d?)\s(\d\d?):(\d\d?):(\d\d?)\s -Direction=1 -Day=2 -Month=3 -Year=4 -Hours=5 -Minutes=6 -Seconds=7 -[Header] -Pattern=^------------------------------------------------\r\n[\s]+?History for\r\nUser[\s]+?:\s([^\r\n]+?)\r\n(.*\r\n)+?Nick[\s]+?:\s([^\r\n]+?)\s\r\n(.*\r\n)+?^------------------------------------------------$ -In=1 -InNick=3 -[PreMessage] -PreRN=0 -AfterRN=1 -PreSP=-2 -********************* - - -Добавлено удаление пробелов в многострочных сообщениях PreSP=-2 - -С этим форматом сообщений бардак: 1) если протокол НЕ ICQ то UID мы не увидим, тоесть ни JID ни что-то там еще не сохраняются - приходится использовать Ник, что не есть гуд - 2) Ник! Зачем писать в файлы пробел после ника???? - Все строчки (Potocol, User, email) нормальные, а после ника пробел. \ No newline at end of file diff --git a/plugins/ImportTXT/doc/pattern_cfg_ru.txt b/plugins/ImportTXT/doc/pattern_cfg_ru.txt deleted file mode 100644 index 28518d8b77..0000000000 --- a/plugins/ImportTXT/doc/pattern_cfg_ru.txt +++ /dev/null @@ -1,77 +0,0 @@ -Структура файла шаблона плагина importtxt начиная с версии 0.0.1.2 -Расширение файла .ini - -[General]* Общие параметры -Name=* Имя шаблона, выводится в списке -Type=* Тип импорта возможные значения - 1 - импорт из текстовых файлов - 2 - импорт из бинарных файлов -*******параметры для импорта текста********* -Charset=* кодировка ANSI, UTF8, UCS2 -Codepage= кодовая страница для ANSI -UseHeader= 0..3 - использовать заголовок - первый бит использовать заголовок для распознавания направления - второй бит использовать заголовок для распознования контакта назначения -UsePreMsg= 0 - не использовать предварительную обработку сообщений, - даже если не используется, то всё равно будут удаляться все переводы строки в конце и в начале - 1 - использовать предварительную обработку -*******параметры для бинарного импорта********* -BinProcedure= Используется для установки процедуры бинарного импорта (обязательна при Type=2) - Возможные значения: - 1 - mContacts - 2 - QHF - 3 - ICQ6 - 4 - ICQ5 -*******общие параметры********* -UseFileName= использовать имя файла для определения UID -DefaultExtension= Расширение файлов по умолчанию (если нет то txt) -*******параметры для импорта текста********* -[Message]* Сообщение -Pattern=* рег. выражение для разбора заголовка сообщения -In= варианты направления, если нет или пустые то используется из заголовка -Out= если UseHeader=0 и In пустой, то ошибка -Direction=* номер подвыражения определяющее направление сообщения (либо жестко заданное либо ник или уин) -Day=* номер подваражения дня -Month=* номер подваражения месяца -Year=* номер подваражения года -Hours=* номер подваражения часов -Minutes=* номер подваражения минут -Seconds= номер подваражения секунд (может быть 0, тогда при импорте принимается за 00) - -[Header] Заголовок файла -Pattern=* рег. выражение заголовка -In=* подвыражение определяющее то что сообщение входящее (Ник, Уин) -Out= подвыражение определяющее то что сообщение исходящее (Ник, Уин) - может быть 0 или отсутствовать, если при импорте Direction<>In тогда оно исходящее, такая случайная фишка, но очень помогающая -InNick=* Ник собеседника -OutNick= Ваш Ник //не используется -InUID=* UID собеседника -OutUID= ваш UID //не используется - -[PreMessage] Обработка сообщения перед импортом в базу -PreRN= удалить переводы строк в начале сообщения (целое число или -1 тогда все) -AfterRN= удалить переводы строк в конце сообщения (целое число или -1 тогда все) -PreSP= удалить пробелы в начале каждой строки сообщения -AfterSP= удалить пробелы в конце каждой строки сообщения - возможные значения: - целое число - -1 все - -2 кол-во равно длине распознаного шаблона заголовка сообщения (актуально для Message Export) - любой параметр может отсутствовать или быть равен нулю, тогда не используется - SP использовать только в случае крайней необходимости, потому что замедляется работа -*******общие параметры********* -[FileName] Имя файла -Pattern=* шаблон для распознования -InNick=* Ник собеседника -OutNick= Ваш Ник //не используется -InUID=* UID собеседника -OutUID= Ваш UID //не используется - - - * обязательная секция, если указаны UseHeader=1, а секции [Header] нет, то ошибка, аналогично с [PreMessage] и [FileName] - * обязательный параметр в секции, если параметр не обязателен то по умолчанию используется либо 0 для PS, либо -1 для RN , либо пустая строка - * если в UseHeader включен второй бит, то обязателен либо InUID, либо InNick, приоритетом распознавания является UID - * в Имени файла аналогично - - UID означает Уникальный ИДентификатор :) это может быть UIN, JID и т.д. - \ No newline at end of file diff --git a/plugins/ImportTXT/doc/readme_ru.txt b/plugins/ImportTXT/doc/readme_ru.txt deleted file mode 100644 index 36ced8f7d8..0000000000 --- a/plugins/ImportTXT/doc/readme_ru.txt +++ /dev/null @@ -1,78 +0,0 @@ -Import TXT plugin for Miranda IM -================================ -Плагин предоставляет возможность импортировать историю контактов -из других клиентов, хранящуюся в текстовых файлах. - -Copyright and License -=============================== - -Copyright (C) 2008 Andrey Kunitsyn (Abyss) All Rights Reserved -Some procedures are used written by Alexey Kulakov - -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . - - -Установка: -========== -1. Сделайте бэкап Базы Миранды -2. Скопируйте importtxt.dll, папку importtxt и всё её содержимое в папку Plugins каталога Миранды. -3. Скопируйте файл pcre3.dll в корень миранды или system32 -4. Содержимое файла importtxt_translate.txt добавьте в конец Лангпака -5. Запустите миранду -В меню контактов появится пункт "Import history..." ("Импортировать историю") -В главном меню появиться такой же пункт - это мастер импорта. - -Для автостарта мастера нужно прописать в базе ImportTXT/AutoStart значение 1 типа byte - -ВАЖНО: -====== -Обязательно сделайте бэкап базы! -Файлы шаблонов должны быть в кодировке ANSI. - - -Описание: -========= -Плагин написан с нацеленностью на универсальность, вы можете написать -свои правила разбора файлов и положить в папку importtxt. -НО есть некоторые ограничения: -1. Входные файлы могут быть в любой кодировке (ANSI, UTF8, UCS2) - (перекодирование происходит с кодовой страницей лангпака, если его нет то с системной) -2. Каждое сообщение в файле должно содержать заголовок с полной информацией о нем: - - направление (входящее или исходящее) - - таймштамп (полная дата, полное время (можно без секунд, но это должно быть обозначено в шаблоне) - - текст сообщения :) -3. Начиная с версии 0.0.0.5 поддерживаются входные файлы следующего вида: - в файле есть заголовок с никами переписывающихся , в заголовке каждого сообщения есть Ник, но нет направления сообщения - (под этот тип подходят файлы экспортируемые History++) -4. Для массового импорта необходима информация о контакте назначения (UID или Ник), в заголовке файла или имени файла. - -Начиная с версии 0.0.1.2 реализована поддержка некоторых бинарных файлов. -(каких именно смотрите pattern_cfg) -Начиная с версии 0.0.1.7 добавлен импорт из XML файлов ICQ5 (для импорта нужно ядро не ниже 0.8.0.21) - -Примерный алгоритм работы: -========================== -В файле ищется регулярное выражение описанное в шаблоне, при помощи подвыражений выделяется дата, время и тд. -Всё что находится после него и до следующего считается текстом сообщения. - -Дубликаты -========= -При импорте происходит простая проверка на дубликаты (направление, таймштамп, размер сообщения) как в import.dll - -Написание шаблона: -================== -Формат файлов шаблона описан в pattern_cfg -Примеры написания с комментариями в examples - -Подробнее о регулярных выражениях вы можете почитать в интернете ;). diff --git a/plugins/ImportTXT/ico/def_ico.ico b/plugins/ImportTXT/ico/def_ico.ico deleted file mode 100644 index 5d86592fee..0000000000 Binary files a/plugins/ImportTXT/ico/def_ico.ico and /dev/null differ diff --git a/plugins/ImportTXT/importtxt.dpr b/plugins/ImportTXT/importtxt.dpr deleted file mode 100644 index 353e5e82dd..0000000000 --- a/plugins/ImportTXT/importtxt.dpr +++ /dev/null @@ -1,155 +0,0 @@ -(* - ImportTXT plugin for Miranda IM: the free IM client for Microsoft* Windows* - - Copyright () 2008 Abyss - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -*) - -{$IMAGEBASE $2080000} -library importtxt; - -uses - Windows, - Messages, - SysUtils, - IniFiles, - m_api,// in '.\inc\m_api.pas', -{ ImportThrd - KOL in '.\kol\kol.pas', - err in '.\kol\err.pas', - KOLedb in '.\kol\KOLEdb.pas', -} - General in 'general.pas', - ImportT in 'ImportT.pas', - ImportTU in 'ImportTU.pas', - ImportThrd in 'ImportThrd.pas', - PerlRegEx in 'PerlRegEx.pas', - ImportTxtDlg in 'ImportTxtDlg.pas', - ImportTxtWiz in 'ImportTxtWiz.pas'; - -{$R version.res} - -const MIID_IMPORTTEXT:TGUID = '{6F376B33-D3F4-4c4f-A96B-77DA08043B06}'; - - -var - hwndWizard:HWND; - hwndDialog:HWND; - -function ContactMenuCommand(wParam: wParam; lParam: lParam): int_ptr; cdecl; -begin - result := 0; - if IsWindow(hwndDialog) then - begin - SetForegroundWindow(hwndDialog); - BringWindowToTop(hwndDialog); - end - else - hwndDialog := CreateDialogParamW(hInstance, MAKEINTRESOURCEW(IDD_IMPDIALOG), - 0, @IDMainWndProc, wParam); -end; - -function MainMenuCommand(wParam: wParam; lParam: lParam): int_ptr; cdecl; -begin - result := 0; - if (IsWindow(hwndWizard)) then - begin - SetForegroundWindow(hwndWizard); - BringWindowToTop(hwndWizard); - end - else - hwndWizard := CreateDialogW(hInstance, MAKEINTRESOURCEW(IDD_IMPWIZARD), 0, @WizardDlgProc); -end; - -function OnAccountChanged(wParam: wParam; lParam: lParam): int; cdecl; -begin - result := 0; - EnumProtocols; - if Assigned(OnAccountListChange) then - OnAccountListChange; -end; - -function OnModulesLoaded(wParam: wParam; lParam: lParam): int; cdecl; -begin - EnumProtocols; - // check for AutoStart - if (DBReadByte(0, IMPORT_TXT_MODULE, IMPORT_TXT_AS) = 1) and (ProtoCount > 0) then - begin - CallService(IMPORT_WIZ_SERVICE, 0, 0); - DBWriteByte(0, IMPORT_TXT_MODULE, IMPORT_TXT_AS, 0); - end; - result := 0; -end; - -function OnPreShutdown(wParam: wParam; lParam: lParam): int; cdecl; -begin - if IsWindow(hwndWizard) then - SendMessage(hwndWizard, WM_CLOSE, 0, 0); - if IsWindow(hwndDialog) then - SendMessage(hwndDialog, WM_CLOSE, 0, 0); - result := 0; -end; - -function Load(): int; cdecl; -var - mi:TMO_MenuItem; -begin - Langpack_register; - cp := Langpack_GetDefaultCodePage; - - CreateServiceFunction(IMPORT_TXT_SERVICE, @ContactMenuCommand); - CreateServiceFunction(IMPORT_WIZ_SERVICE, @MainMenuCommand); - - FillChar(mi, sizeof(mi), 0); - SET_UID(@mi, '5FC2C67E-A16B-47B7-A6A1-40BE922CCD93'); - mi.position := 1000090050; - mi.hIcon := LoadIcon(hInstance, MAKEINTRESOURCE(IDI_DEFAULT)); - mi.szName.a := 'Import history'; - mi.pszService := IMPORT_TXT_SERVICE; - Menu_AddContacTMenuItem(@mi); - - SET_UID(@mi, '0610209E-5BE0-4D57-AAE8-E1CCF1FB78B8'); - mi.position := 500050010; - mi.pszService := IMPORT_WIZ_SERVICE; - Menu_AddMainMenuItem(@mi); - - HookEvent(ME_SYSTEM_MODULESLOADED, @OnModulesLoaded); - HookEvent(ME_SYSTEM_PRESHUTDOWN, @OnPreShutdown); - HookEvent(ME_PROTO_ACCLISTCHANGED, @OnAccountChanged); - result := 0; -end; - -function Unload: int; cdecl; -begin - Result := 0; -end; - -exports - Load, Unload; - -begin - PluginInfo.cbSize :=sizeof(TPLUGININFOEX); - PluginInfo.shortName :='Import TXT'; - PluginInfo.version :=$0000010A; - PluginInfo.description:='Imports history saved in TXT files from other clients.'; - PluginInfo.author :='Abyss'; - PluginInfo.copyright :=' 2008 Abyss'; - PluginInfo.homepage :='https://miranda-ng.org/p/ImportTXT/'; - PluginInfo.flags :=UNICODE_AWARE; - PluginInfo.uuid :=MIID_IMPORTTEXT; - - DisableThreadLibraryCalls(hInstance); -end. diff --git a/plugins/ImportTXT/importtxt/ICQ5_p.ini b/plugins/ImportTXT/importtxt/ICQ5_p.ini deleted file mode 100644 index d2f468af7d..0000000000 --- a/plugins/ImportTXT/importtxt/ICQ5_p.ini +++ /dev/null @@ -1,9 +0,0 @@ -[General] -Name=ICQ5 xml files import -Type=2 -BinProcedure=4 -DefaultExtension=xml -UseFileName=1 -[FileName] -Pattern=^[^\r\n]+?\\(\d{5,})-(\d{4,})\.xml$ -InUID=1 \ No newline at end of file diff --git a/plugins/ImportTXT/importtxt/ICQ6_p.ini b/plugins/ImportTXT/importtxt/ICQ6_p.ini deleted file mode 100644 index 1d9984962a..0000000000 --- a/plugins/ImportTXT/importtxt/ICQ6_p.ini +++ /dev/null @@ -1,5 +0,0 @@ -[General] -Name=ICQ6 database -Type=2 -BinProcedure=3 -DefaultExtension=mdb \ No newline at end of file diff --git a/plugins/ImportTXT/importtxt/MAgent_p.ini b/plugins/ImportTXT/importtxt/MAgent_p.ini deleted file mode 100644 index 6b54883d78..0000000000 --- a/plugins/ImportTXT/importtxt/MAgent_p.ini +++ /dev/null @@ -1,23 +0,0 @@ -[General] -Name=MobileAgent import pattern -Type=1 -Charset=UCS2 -UsePreMsg=1 -UseFileName=1 -[Message] -Pattern=^---------------------------([<>])--\r\n([^\r\n]+?)\s\((\d\d?).(\d\d?).(\d\d\d?\d?)\s(\d\d?).(\d\d?).(\d\d?)\)$ -In=> -Out=< -Direction=1 -Day=3 -Month=4 -Year=5 -Hours=6 -Minutes=7 -Seconds=8 -[PreMessage] -PreRN=1 -AfterRN=2 -[FileName] -Pattern=^[^\r\n]+?\\(\d{5,})\.txt$ -InUID=1 diff --git a/plugins/ImportTXT/importtxt/QHF_p.ini b/plugins/ImportTXT/importtxt/QHF_p.ini deleted file mode 100644 index b6eb687502..0000000000 --- a/plugins/ImportTXT/importtxt/QHF_p.ini +++ /dev/null @@ -1,5 +0,0 @@ -[General] -Name=QHF files import pattern (QIP PDA and Infinum) -Type=2 -BinProcedure=2 -DefaultExtension=qhf \ No newline at end of file diff --git a/plugins/ImportTXT/importtxt/SEmidprms_p.ini b/plugins/ImportTXT/importtxt/SEmidprms_p.ini deleted file mode 100644 index ca0637d8f6..0000000000 --- a/plugins/ImportTXT/importtxt/SEmidprms_p.ini +++ /dev/null @@ -1,5 +0,0 @@ -[General] -Name=Jimm midp-rms SonyEricsson -Type=2 -BinProcedure=5 -DefaultExtension=d \ No newline at end of file diff --git a/plugins/ImportTXT/importtxt/bayanICQ_p.ini b/plugins/ImportTXT/importtxt/bayanICQ_p.ini deleted file mode 100644 index f85bb397e5..0000000000 --- a/plugins/ImportTXT/importtxt/bayanICQ_p.ini +++ /dev/null @@ -1,9 +0,0 @@ -[General] -Name=bayanICQ import pattern -Type=2 -BinProcedure=6 -DefaultExtension=hf -UseFileName=1 -[FileName] -Pattern=^[^\r\n]+?\\hist(\d{5,})\.hf$ -InUID=1 \ No newline at end of file diff --git a/plugins/ImportTXT/importtxt/dichat_p.ini b/plugins/ImportTXT/importtxt/dichat_p.ini deleted file mode 100644 index 3fd5c6a25e..0000000000 --- a/plugins/ImportTXT/importtxt/dichat_p.ini +++ /dev/null @@ -1,24 +0,0 @@ -[General] -Name=D[i]Chat import pattern -Type=1 -Charset=ANSI -UseHeader=2 -UsePreMsg=1 -[Message] -Pattern=^---(<<<|>>>)---\r\n\s([^\r\n]+?)\s\((\d\d?)\.(\d\d?)\.(\d\d\d?\d?)\s(\d\d?):(\d\d?):(\d\d?)\):$ -In=<<< -Out=>>> -Direction=1 -Day=3 -Month=4 -Year=5 -Hours=6 -Minutes=7 -Seconds=8 -[PreMessage] -PreRN=1 -AfterRN=2 -[Header] -Pattern=^\t ([^\r\n]+?)\s\((\d{5,})\)\r\n\t D\[i\]Chat\s[^\r\n]+?\r\n -InNick=1 -InUID=2 \ No newline at end of file diff --git a/plugins/ImportTXT/importtxt/historypp_p.ini b/plugins/ImportTXT/importtxt/historypp_p.ini deleted file mode 100644 index 7d5e353e48..0000000000 --- a/plugins/ImportTXT/importtxt/historypp_p.ini +++ /dev/null @@ -1 +0,0 @@ -[General] Name=History++ pattern Type=1 Charset=UCS2 UseHeader=3 UsePreMsg=1 [Message] Pattern=^\[(\d\d?)\.(\d\d?)\.(\d\d\d?\d?)\s(\d\d?):(\d\d?):(\d\d?)\]\s([^\r\n]+?):$ Direction=7 Day=1 Month=2 Year=3 Hours=4 Minutes=5 Seconds=6 [Header] Pattern=^###\r\n###\s[^\r\n]+?\r\n###\s([^\r\n]+?)\s\([^\r\n]+?:\s([^\r\n]+?)\)\s-\s([^\r\n]+?)\s\([^\r\n]+?:\s([^\r\n]+?)\)\r\n###\s[^\r\n]+?\r\n###\r\n In=3 Out=1 InNick=3 OutNick=1 InUID=4 OutUID=2 [PreMessage] PreRN=1 AfterRN=2 \ No newline at end of file diff --git a/plugins/ImportTXT/importtxt/jasmine.ini b/plugins/ImportTXT/importtxt/jasmine.ini deleted file mode 100644 index 0f79cafb31..0000000000 --- a/plugins/ImportTXT/importtxt/jasmine.ini +++ /dev/null @@ -1,23 +0,0 @@ -[General] -Name=Jasmine IM import pattern -Type=1 -Charset=UCS2 -UsePreMsg=1 -UseFileName=1 -[Message] -Pattern=^(?:-*\n)?(<<|>>):\s(\d\d?)\.(\d\d?)\.(\d\d\d?\d?)-(\d\d?):(\d\d?):(\d\d?):\n -In=>> -Out=<< -Direction=1 -Day=2 -Month=3 -Year=4 -Hours=5 -Minutes=6 -Seconds=7 -[PreMessage] -PreRN=1 -AfterRN=2 -[FileName] -Pattern=^[^\r\n]+?\\\[(.*)\]\.txt$ -InUID=1 \ No newline at end of file diff --git a/plugins/ImportTXT/importtxt/jimm_p.ini b/plugins/ImportTXT/importtxt/jimm_p.ini deleted file mode 100644 index 10d9ab2100..0000000000 --- a/plugins/ImportTXT/importtxt/jimm_p.ini +++ /dev/null @@ -1,24 +0,0 @@ -[General] -Name=Jimm import pattern -Type=1 -Charset=ANSI -UseHeader=2 -UsePreMsg=1 -[Message] -Pattern=^------------------------------------(<<<|>>>)-\r\n\s([^\r\n]+?)\s\((\d\d?)\.(\d\d?)\.(\d\d\d?\d?)\s(\d\d?):(\d\d?):(\d\d?)\):$ -In=<<< -Out=>>> -Direction=1 -Day=3 -Month=4 -Year=5 -Hours=6 -Minutes=7 -Seconds=8 -[PreMessage] -PreRN=1 -AfterRN=2 -[Header] -Pattern=^\r\n\t ([^\r\n]+?)\s\((\d{5,})\)\r\n\t Jimm\s[^\r\n]+?\r\n -InNick=1 -InUID=2 diff --git a/plugins/ImportTXT/importtxt/jimmws2_p.ini b/plugins/ImportTXT/importtxt/jimmws2_p.ini deleted file mode 100644 index 8f0baa9b1f..0000000000 --- a/plugins/ImportTXT/importtxt/jimmws2_p.ini +++ /dev/null @@ -1,22 +0,0 @@ -[General] -Name=Jimm import pattern(without seconds) modified -Type=1 -Charset=ANSI -UseHeader=3 -UsePreMsg=1 -[Message] -Pattern=([^\r\n]+?)\s\((\d\d?)\.(\d\d?)\.(\d\d\d?\d?)\s(\d\d?):(\d\d?)\):\r\n -Direction=1 -Day=2 -Month=3 -Year=4 -Hours=5 -Minutes=6 -[PreMessage] -PreRN=1 -AfterRN=2 -[Header] -Pattern=^\r\n\t ([^\r\n]+?)\s\((\d{5,})\)\r\n\t Jimm\s[^\r\n]+?\r\n -In=1 -InNick=1 -InUID=2 diff --git a/plugins/ImportTXT/importtxt/jimmws_p.ini b/plugins/ImportTXT/importtxt/jimmws_p.ini deleted file mode 100644 index 59c609fd50..0000000000 --- a/plugins/ImportTXT/importtxt/jimmws_p.ini +++ /dev/null @@ -1,23 +0,0 @@ -[General] -Name=Jimm import pattern(without seconds) -Type=1 -Charset=ANSI -UseHeader=2 -UsePreMsg=1 -[Message] -Pattern=^------------------------------------(<<<|>>>)-\r\n\s([^\r\n]+?)\s\((\d\d?)\.(\d\d?)\.(\d\d\d?\d?)\s(\d\d?):(\d\d?)\):$ -In=<<< -Out=>>> -Direction=1 -Day=3 -Month=4 -Year=5 -Hours=6 -Minutes=7 -[PreMessage] -PreRN=1 -AfterRN=2 -[Header] -Pattern=^\r\n\t ([^\r\n]+?)\s\((\d{5,})\)\r\n\t Jimm\s[^\r\n]+?\r\n -InNick=1 -InUID=2 diff --git a/plugins/ImportTXT/importtxt/mContact_p.ini b/plugins/ImportTXT/importtxt/mContact_p.ini deleted file mode 100644 index 925c712330..0000000000 --- a/plugins/ImportTXT/importtxt/mContact_p.ini +++ /dev/null @@ -1,9 +0,0 @@ -[General] -Name=mContact import pattern -Type=2 -BinProcedure=1 -UseFileName=1 -DefaultExtension=dat -[FileName] -Pattern=^[^\r\n]+?\\([^\r\n\\]+?)\.dat$ -InNick=1 \ No newline at end of file diff --git a/plugins/ImportTXT/importtxt/msgexport_p.ini b/plugins/ImportTXT/importtxt/msgexport_p.ini deleted file mode 100644 index 828c23f80b..0000000000 --- a/plugins/ImportTXT/importtxt/msgexport_p.ini +++ /dev/null @@ -1,23 +0,0 @@ -[General] -Name=Message export import pattern -Type=1 -Charset=UTF8 -UseHeader=3 -UsePreMsg=1 -[Message] -Pattern=^([^\r\n]+?)[\s]+?(\d\d?)\.(\d\d?)\.(\d\d\d?\d?)\s(\d\d?):(\d\d?):(\d\d?)\s -Direction=1 -Day=2 -Month=3 -Year=4 -Hours=5 -Minutes=6 -Seconds=7 -[Header] -Pattern=^------------------------------------------------\r\n[\s]+?History for\r\nUser[\s]+?:\s([^\r\n]+?)\r\n(.*\r\n)+?Nick[\s]+?:\s([^\r\n]+?)\r\n(.*\r\n)+?^------------------------------------------------$ -In=1 -InNick=3 -[PreMessage] -PreRN=0 -AfterRN=1 -PreSP=-2 \ No newline at end of file diff --git a/plugins/ImportTXT/importtxt/nokmidprms_p.ini b/plugins/ImportTXT/importtxt/nokmidprms_p.ini deleted file mode 100644 index d743b1a9df..0000000000 --- a/plugins/ImportTXT/importtxt/nokmidprms_p.ini +++ /dev/null @@ -1,9 +0,0 @@ -[General] -Name=Jimm midp-rms Nokia -Type=2 -BinProcedure=5 -DefaultExtension=rms -UseFileName=1 -[FileName] -Pattern=^[^\r\n]+?\\Jimm_m_hist(\d{5,})\.rms$ -InUID=1 \ No newline at end of file diff --git a/plugins/ImportTXT/importtxt/pigeon_p.ini b/plugins/ImportTXT/importtxt/pigeon_p.ini deleted file mode 100644 index 7487075089..0000000000 --- a/plugins/ImportTXT/importtxt/pigeon_p.ini +++ /dev/null @@ -1,23 +0,0 @@ -[General] -Name=Pigeon import pattern -Type=1 -Charset=ANSI -UsePreMsg=1 -UseFileName=1 -[Message] -Pattern=^\[(I|O)\s(\d\d?)\.(\d\d?)\.(\d\d\d?\d?)\s(\d\d?):(\d\d?):(\d\d?)\]$ -In=I -Out=O -Direction=1 -Day=2 -Month=3 -Year=4 -Hours=5 -Minutes=6 -Seconds=7 -[PreMessage] -PreRN=1 -AfterRN=2 -[FileName] -Pattern=^[^\r\n]+?\\msg_(\d{5,})\.txt$ -InUID=1 \ No newline at end of file diff --git a/plugins/ImportTXT/importtxt/qip_p.ini b/plugins/ImportTXT/importtxt/qip_p.ini deleted file mode 100644 index ddb112f8f5..0000000000 --- a/plugins/ImportTXT/importtxt/qip_p.ini +++ /dev/null @@ -1,23 +0,0 @@ -[General] -Name=QIP import pattern -Type=1 -Charset=ANSI -UsePreMsg=1 -UseFileName=1 -[Message] -Pattern=^--------------------------------------([<>])-\r\n([^\r\n]+?)\s\((\d\d?):(\d\d?):(\d\d?)\s(\d\d?)/(\d\d?)/(\d\d\d?\d?)\)$ -In=< -Out=> -Direction=1 -Day=6 -Month=7 -Year=8 -Hours=3 -Minutes=4 -Seconds=5 -[PreMessage] -PreRN=1 -AfterRN=2 -[FileName] -Pattern=^[^\r\n]+?\\(\d{5,})\.txt$ -InUID=1 diff --git a/plugins/ImportTXT/importtxt/rnq_p.ini b/plugins/ImportTXT/importtxt/rnq_p.ini deleted file mode 100644 index 1fe75ad7d6..0000000000 --- a/plugins/ImportTXT/importtxt/rnq_p.ini +++ /dev/null @@ -1,22 +0,0 @@ -[General] -Name=RnQ pattern -Type=1 -Charset=ANSI -UseHeader=3 -UsePreMsg=1 -[Header] -Pattern=^###\s([^\r\n]+)=([^\r\n]+)\s### -InUID=2 -In=1 -[Message] -Pattern=^ (\d\d?)\.(\d\d?)\.(\d\d\d?\d?)\s(\d\d?):(\d\d?):(\d\d?),\s([^\r\n]+?)$ -Direction=7 -Day=1 -Month=2 -Year=3 -Hours=4 -Minutes=5 -Seconds=6 -[PreMessage] -PreRN=1 -AfterRN=2 \ No newline at end of file diff --git a/plugins/ImportTXT/importtxt/smaper_p.ini b/plugins/ImportTXT/importtxt/smaper_p.ini deleted file mode 100644 index d02eedae78..0000000000 --- a/plugins/ImportTXT/importtxt/smaper_p.ini +++ /dev/null @@ -1,23 +0,0 @@ -[General] -Name=Smaper(vmICQ) import pattern -Type=1 -Charset=UCS2 -UsePreMsg=1 -UseFileName=1 -[Message] -Pattern=^(<-|->)\s\((\d\d?)\.(\d\d?)\.(\d\d\d?\d?)\s(\d\d?)\.(\d\d?)\.(\d\d?)\)$ -In=<- -Out=-> -Direction=1 -Day=2 -Month=3 -Year=4 -Hours=5 -Minutes=6 -Seconds=7 -[PreMessage] -PreRN=1 -AfterRN=2 -[FileName] -Pattern=^[^\r\n]+?\\(\d{5,})\.txt$ -InUID=1 \ No newline at end of file diff --git a/plugins/ImportTXT/importtxt/smapern_p.ini b/plugins/ImportTXT/importtxt/smapern_p.ini deleted file mode 100644 index cce53f048c..0000000000 --- a/plugins/ImportTXT/importtxt/smapern_p.ini +++ /dev/null @@ -1,23 +0,0 @@ -[General] -Name=Smaper (with Nick) import pattern -Type=1 -Charset=UCS2 -UsePreMsg=1 -UseFileName=1 -[Message] -Pattern=^(<-|->)\s[^\r\n]+?\s\((\d\d?)\.(\d\d?)\.(\d\d\d?\d?)\s(\d\d?)\.(\d\d?)\.(\d\d?)\)$ -In=<- -Out=-> -Direction=1 -Day=2 -Month=3 -Year=4 -Hours=5 -Minutes=6 -Seconds=7 -[PreMessage] -PreRN=1 -AfterRN=2 -[FileName] -Pattern=^[^\r\n]+?\\(\d{5,})\.txt$ -InUID=1 \ No newline at end of file diff --git a/plugins/ImportTXT/importtxtdlg.pas b/plugins/ImportTXT/importtxtdlg.pas deleted file mode 100644 index 3acb77f0a7..0000000000 --- a/plugins/ImportTXT/importtxtdlg.pas +++ /dev/null @@ -1,227 +0,0 @@ -unit ImportTxtDlg; - -interface - -uses - m_api, - Windows, Messages, SysUtils, CommDlg, IniFiles, - ImportThrd, general, ImportTU, FileDlgs; - - -{$I ImpDlgRes.inc} - -function IDMainWndProc(Dialog:HWnd; hMessage:uint;wParam:WPARAM;lParam:LPARAM):lresult; stdcall; - -implementation - -{$R ImpTxtDlg.res} - -type - TImpTxtDlgData = record - cbSize: integer; - CanStart: boolean; - ChoFile: boolean; - ChoPatt: boolean; - PattFError: boolean; - ITStarted: boolean; - ITFinished: boolean; - StartTime: TDateTime; - FinishTime: TDateTime; - IndexOfPattern: integer; - oFN: integer; - hContact: THandle; - ImportThrd: TImportThrd; - end; - -type PImpTxtDlgData = ^TImpTxtDlgData; - -var ITDD:TImpTxtDlgData; - -procedure AddStatusMessage(hDLG:HWND; msg:WideString); -begin - SendDlgItemMessageW(hDLG,IDC_STATUSLIST,LB_SETCURSEL, - SendDlgItemMessageW(hDLG,IDC_STATUSLIST,LB_ADDSTRING,0,lparam(PWideChar(msg))),0); -end; - -procedure FillComboBox(hDlg:hWnd); // -var - i:integer; -begin - ITDD.PattFError:=true; - ReadPatterns; - SendDlgItemMessage(hDLG, IDC_TYPECOMBO, CB_RESETCONTENT, 0, 0); - if Length(TxtPatterns) > 0 then - begin - For i := 0 to High(TxtPatterns) do - SendDlgItemMessage(hDLG, IDC_TYPECOMBO, CB_ADDSTRING, 0, lparam(PChar(TxtPatterns[i].Name))); - ITDD.PattFError := false; - end - else - begin - AddStatusMessage(hDLG, TranslateWideString('No Files Patterns Found')); - EnableWindow(GetDlgItem(hDLG, IDC_TYPECOMBO), false); - ITDD.ChoPatt := false; - end; -end; - -procedure MStart(hDLG: HWnd); // -begin - with ITDD do - begin - CanStart := ChoFile and ChoPatt and (not PattFError); - EnableWindow(GetDlgItem(hDLG, IDSTART), CanStart); - end; -end; - -function IDMainWndProc(Dialog:HWnd; hMessage:uint;wParam:WPARAM;lParam:LPARAM):lresult; stdcall; -// -var - s:WideString; - tempwstr:PWideChar; - H,Mi,sec,ms:word; - -begin - result:= 0; - case hMessage of - WM_DESTROY: - begin - if ITDD.ImportThrd <> Nil then - ITDD.ImportThrd.Terminate; - SetLastPattern(SendDlgItemMessage(Dialog, IDC_TYPECOMBO, CB_GETCURSEL, 0, 0)); - end; - - WM_INITDIALOG: - begin - TranslateDialogDefault(Dialog); - tempwstr := Clist_GetContactDisplayName(lParam,0); - s := WideFormat(TranslateWideString('Import history to %s (%s)'), [tempwstr, GetContactID(lParam)]); - SetWindowTextW(Dialog, PWideChar(s)); - SendMessage(Dialog, WM_SETICON, ICON_SMALL, LoadIcon(hInstance, MAKEINTRESOURCE(IDI_DEFAULT))); - FillChar(ITDD, SizeOf(TImpTxtDlgData), 0); - with ITDD do - begin - cbSize := SizeOf(TImpTxtDlgData); - hContact := lParam; - CanStart := false; - ChoFile := false; - ChoPatt := true; - PattFError := false; - ITStarted := false; - ITFinished := false; - end; - - FillComboBox(Dialog); - SendDlgItemMessage(Dialog, IDC_TYPECOMBO, CB_SETCURSEL, GetLastPattern, 0); - ITDD.IndexOfPattern := GetLastPattern; - MStart(Dialog); - CheckDlgButton(Dialog, IDC_CHKDUP, BST_CHECKED); - CheckForDuplicates := true; - CheckDlgButton(Dialog, IDC_SHOWDUP, BST_UNCHECKED); - CheckForDuplicates := false; - ShowWindow(Dialog, SW_NORMAL); - end; - - WM_COMMAND: - begin - if (HiWord(wParam) = CBN_SELCHANGE) and (LoWord(wParam) = IDC_TYPECOMBO) then // - begin - ITDD.ChoPatt := true; - ITDD.IndexOfPattern := SendDlgItemMessage(Dialog, IDC_TYPECOMBO, CB_GETCURSEL, 0, 0); - MStart(Dialog); - end; - - if (HiWord(wParam) = BN_CLICKED) and (LoWord(wParam) = IDC_CHKDUP) then - EnableWindow(GetDlgItem(Dialog, IDC_SHOWDUP), - IsDlgButtonChecked(Dialog, IDC_CHKDUP)<>BST_UNCHECKED); - - case LoWord(wParam) of - IDCLOSE: - DestroyWindow(Dialog); - IDC_BRWSBTN: - begin // "..." - s := OpenDialogExecute(Dialog, 0, ITDD.oFN, - TxtPatterns[ITDD.IndexOfPattern].DefExtension); - ITDD.ChoFile := s <> ''; - SendDlgItemMessageW(Dialog, IDC_FILENAME, WM_SETTEXT, 0, tlparam(PWideChar(s))); - MStart(Dialog); - end; - IDSTART: - begin // - with ITDD do - if CanStart then - begin - EnableWindow(GetDlgItem(Dialog, IDSTART), false); - EnableWindow(GetDlgItem(Dialog, IDCLOSE), false); - EnableWindow(GetDlgItem(Dialog, IDC_TYPECOMBO), false); - EnableWindow(GetDlgItem(Dialog, IDC_BRWSBTN), false); - ImportThrd := TImportThrd.Create(true); - ImportThrd.FreeOnTerminate := true; - ImportThrd.DContact.hContact := hContact; - CheckForDuplicates := LongBool(IsDlgButtonChecked(Dialog, IDC_CHKDUP)); - ShowDuplicates := LongBool(IsDlgButtonChecked(Dialog, IDC_SHOWDUP)); - H := SendDlgItemMessageW(Dialog, IDC_FILENAME, WM_GETTEXTLENGTH, 0, 0) + 1; - SetLength(s, H); - SendDlgItemMessageW(Dialog, IDC_FILENAME, WM_GETTEXT, H, tlparam(PWideChar(s))); - ImportThrd.FileNames := s + #0 + #0; - ImportThrd.OffsetFileName := oFN; - ImportThrd.WorkPattern := TxtPatterns[IndexOfPattern]; - ImportThrd.ParentHWND := Dialog; - ImportThrd.Resume; - end; - end; - end; - end; - WM_CLOSE: - begin - DestroyWindow(Dialog); - end; - // - // - ITXT_THREAD_ALLSTARTED: - begin - ITDD.ITStarted := true; - ITDD.StartTime := Time; - end; - ITXT_THREAD_START: - begin - AddStatusMessage(Dialog, TranslateWideString('Import started...')); - end; - // - ITXT_THREAD_MAXPROGRESS: - SendDlgItemMessage(Dialog, IDC_PROGRESS, PBM_SETRANGE, 0, MakeLParam(0, lParam)); - // ... - ITXT_THREAD_PROGRESS: - SendDlgItemMessage(Dialog, IDC_PROGRESS, PBM_SETPOS, wParam, 0); - // - ITXT_THREAD_ERROR: - AddStatusMessage(Dialog, TranslateWideString(PWideChar(wParam))); - // - ITXT_THREAD_FINISH: - begin - ITDD.ITFinished := true; - ITDD.FinishTime := Time; - DecodeTime(ITDD.FinishTime - ITDD.StartTime, H, Mi, sec, ms); - AddStatusMessage(Dialog, WideFormat(TranslateWideString('Added: %d messages'), [wParam])); - AddStatusMessage(Dialog, WideFormat(TranslateWideString('Duplicates: %d messages'), [lParam])); - AddStatusMessage(Dialog, WideFormat(TranslateWideString('In: %d:%d:%d'), [H, Mi, sec])); - AddStatusMessage(Dialog, ''); - SendDlgItemMessageW(Dialog, IDC_FILENAME, WM_SETTEXT, 0, 0); - ITDD.ChoFile := false; - EnableWindow(GetDlgItem(Dialog, IDC_TYPECOMBO), true); - EnableWindow(GetDlgItem(Dialog, IDC_BRWSBTN), true); - EnableWindow(GetDlgItem(Dialog, IDCLOSE), true); - end; - // - ITXT_THREAD_START_FILE: - AddStatusMessage(Dialog, WideFormat(TranslateWideString('File: %s'), [PWideChar(wParam)])); - // - ITXT_THREAD_DEST_CONTACT: - begin - s := GetContactID(wParam, '', true) + ' | ' + GetContactNick(wParam, '', true); - - AddStatusMessage(Dialog, WideFormat(TranslateWideString('To: %s'), [s])); - end; - end; -end; - -end. diff --git a/plugins/ImportTXT/make.bat b/plugins/ImportTXT/make.bat deleted file mode 100644 index 397b13ed7d..0000000000 --- a/plugins/ImportTXT/make.bat +++ /dev/null @@ -1,30 +0,0 @@ -@echo off -set p1=%1 -set p2=%2 -if "%p1%" == "" (echo "please specify target platform by adding 'fpc' or 'fpc64 parameter to command line!'"&&pause&&goto :EOF) -if "%p2%" == "" (echo "please specify target output directory by adding 15 for bin15 to command line!'"&&pause&&goto :EOF) -if /i '%1' == 'fpc' ( - set OUTDIR="..\..\bin%2\Release\Plugins" - set FPCBIN=fpc.exe -) else if /i '%1' == 'fpc64' ( - set OUTDIR="..\..\bin%2\Release64\Plugins" - set FPCBIN=ppcrossx64.exe -) -set PROJECT=ImportTXT - -if not exist %OUTDIR% mkdir %OUTDIR% -md tmp - -rem brcc32 -foImpTxt_Ver.res ImpTxt_Ver.rc -rem brcc32 -foImpTxtDlg.res ImpTxtDlg.rc -rem brcc32 -foImpTxtWiz.res ImpTxtWiz.rc -rc version.rc - -%FPCBIN% @..\Utils.pas\fpc.cfg %PROJECT%.dpr %3 %4 %5 %6 %7 %8 %9 -if errorlevel 1 exit /b 1 - -move .\tmp\%PROJECT%.dll %OUTDIR% -move .\tmp\%PROJECT%.map . -del /Q tmp\* -rd tmp -exit /b 0 diff --git a/plugins/ImportTXT/version.rc b/plugins/ImportTXT/version.rc deleted file mode 100644 index e1cede5c9b..0000000000 --- a/plugins/ImportTXT/version.rc +++ /dev/null @@ -1,51 +0,0 @@ -// Microsoft Visual C++ generated resource script. -// -#ifdef APSTUDIO_INVOKED -#error this file is not editable by Microsoft Visual C++ -#endif //APSTUDIO_INVOKED - -#include "..\..\include\m_version.h" - ///////////////////////////////////////////////////////////////////////////// -// English (U.S.) resources - -#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) -#ifdef _WIN32 -#pragma code_page(1252) -#endif //_WIN32 - -VS_VERSION_INFO VERSIONINFO - FILEVERSION 0,0,1,12 - PRODUCTVERSION MIRANDA_VERSION_COREVERSION - FILEFLAGSMASK 0x17L -#ifdef _DEBUG - FILEFLAGS 0x1L -#else - FILEFLAGS 0x0L -#endif - FILEOS 0x4L - FILETYPE 0x2L - FILESUBTYPE 0x0L -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "000004b0" - BEGIN - VALUE "CompanyName", "Miranda Open Source Project" - VALUE "FileDescription", "ImportTXT plugin for Miranda NG" - VALUE "FileVersion", "0.0.1.12" - VALUE "InternalName", "importtxt" - VALUE "LegalCopyright", " 2008 Abyss" - VALUE "LegalTrademarks", "Gnu General Public License V2" - VALUE "OriginalFilename", "importtxt.dll" - VALUE "ProductName", "Import TXT Module" - VALUE "ProductVersion", "0.0.1.12" - VALUE "Comments", "Imports history saved in TXT files from other clients" END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x0, 1200 - END -END - -#endif // English (U.S.) resources -///////////////////////////////////////////////////////////////////////////// diff --git a/plugins/QuickSearch/version.RES b/plugins/QuickSearch/version.RES new file mode 100644 index 0000000000..ac94f5ecf9 Binary files /dev/null and b/plugins/QuickSearch/version.RES differ diff --git a/plugins/Watrack/version.RES b/plugins/Watrack/version.RES new file mode 100644 index 0000000000..3c8432b9e9 Binary files /dev/null and b/plugins/Watrack/version.RES differ diff --git a/plugins/mRadio/version.RES b/plugins/mRadio/version.RES new file mode 100644 index 0000000000..b130578b35 Binary files /dev/null and b/plugins/mRadio/version.RES differ -- cgit v1.2.3