From f04d64869f3b1de54fb343f28f955584780001b8 Mon Sep 17 00:00:00 2001 From: mataes2007 Date: Sat, 26 Nov 2011 15:41:10 +0000 Subject: Project folders rename part 3 git-svn-id: http://miranda-plugins.googlecode.com/svn/trunk@215 e753b5eb-9565-29b2-b5c5-2cc6f99dfbcb --- Dbx_mmap_SA/Import_SA/mirandahistory.c | 208 +++++++++++++++++++++++++++++++++ 1 file changed, 208 insertions(+) create mode 100644 Dbx_mmap_SA/Import_SA/mirandahistory.c (limited to 'Dbx_mmap_SA/Import_SA/mirandahistory.c') diff --git a/Dbx_mmap_SA/Import_SA/mirandahistory.c b/Dbx_mmap_SA/Import_SA/mirandahistory.c new file mode 100644 index 0000000..232d295 --- /dev/null +++ b/Dbx_mmap_SA/Import_SA/mirandahistory.c @@ -0,0 +1,208 @@ +/* +Miranda ICQ: the free icq client for MS Windows +Copyright (C) 2000-2 Richard Hughes, Roland Rabien & Tristan Van de Vreede + +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. +*/ +#include +#include +#include +#include "resource.h" +#include "import.h" + +BOOL CALLBACK MirandaPageProc(HWND hdlg,UINT message,WPARAM wParam,LPARAM lParam); +BOOL CALLBACK FinishedPageProc(HWND hdlg,UINT message,WPARAM wParam,LPARAM lParam); +BOOL CALLBACK ProgressPageProc(HWND hdlg,UINT message,WPARAM wParam,LPARAM lParam); +extern char importFile[MAX_PATH]; +extern void (*DoImport)(HWND); +static void OldMirandaHistoryImport(HWND hdlgProgress); +HANDLE HContactFromUIN(DWORD uin); +HANDLE HistoryImportFindContact(HWND hdlgProgress,DWORD uin,int addUnknown); +static DWORD importOptions; + +BOOL CALLBACK MirandaHistoryPageProc(HWND hdlg,UINT message,WPARAM wParam,LPARAM lParam) +{ + switch(message) { + case WM_INITDIALOG: + CheckDlgButton(hdlg,IDC_ADDUNKNOWN,BST_CHECKED); + CheckDlgButton(hdlg,IDC_MSGRECV,BST_CHECKED); + CheckDlgButton(hdlg,IDC_MSGSENT,BST_CHECKED); + CheckDlgButton(hdlg,IDC_URLRECV,BST_CHECKED); + CheckDlgButton(hdlg,IDC_URLSENT,BST_CHECKED); + CheckDlgButton(hdlg,IDC_AUTHREQ,BST_CHECKED); + CheckDlgButton(hdlg,IDC_ADDED,BST_CHECKED); + return TRUE; + case WM_COMMAND: + switch(LOWORD(wParam)) { + case IDC_BACK: + PostMessage(GetParent(hdlg),WIZM_GOTOPAGE,IDD_MIRANDADB,(LPARAM)MirandaPageProc); + break; + case IDOK: + importOptions=0; + if(IsDlgButtonChecked(hdlg,IDC_ADDUNKNOWN)) importOptions|=IOPT_ADDUNKNOWN; + if(IsDlgButtonChecked(hdlg,IDC_MSGSENT)) importOptions|=IOPT_MSGSENT; + if(IsDlgButtonChecked(hdlg,IDC_MSGRECV)) importOptions|=IOPT_MSGRECV; + if(IsDlgButtonChecked(hdlg,IDC_URLSENT)) importOptions|=IOPT_URLSENT; + if(IsDlgButtonChecked(hdlg,IDC_URLRECV)) importOptions|=IOPT_URLRECV; + if(IsDlgButtonChecked(hdlg,IDC_AUTHREQ)) importOptions|=IOPT_AUTHREQ; + if(IsDlgButtonChecked(hdlg,IDC_ADDED)) importOptions|=IOPT_ADDED; + DoImport=OldMirandaHistoryImport; + PostMessage(GetParent(hdlg),WIZM_GOTOPAGE,IDD_PROGRESS,(LPARAM)ProgressPageProc); + break; + case IDCANCEL: + PostMessage(GetParent(hdlg),WM_CLOSE,0,0); + break; + } + break; + } + return FALSE; +} + +#define HISTORY_MSGRECV 1 +#define HISTORY_MSGSEND 2 +#define HISTORY_URLRECV 3 +#define HISTORY_URLSEND 4 +#define HISTORY_AUTHREQ 5 +#define HISTORY_ADDED 6 +#define issent(t) ((t)==HISTORY_MSGSEND || (t)==HISTORY_URLSEND) +static int historyTypeToOption[]={0,IOPT_MSGRECV,IOPT_MSGSENT,IOPT_URLRECV,IOPT_URLSENT,IOPT_AUTHREQ,IOPT_ADDED}; + +static PBYTE ReadHistoryLines(FILE *fp,int *cbBlob) +{ + char str[2048]; + char *blob; + int ofs; + *cbBlob=0; + blob=NULL; + while(fgets(str,sizeof(str),fp) && lstrcmp(str,"\xEE\xEE\xEE\xEE\r\n")) { + ofs=*cbBlob; + *cbBlob+=lstrlen(str); + blob=(char*)realloc(blob,*cbBlob+1); + lstrcpy(blob+ofs,str); + } + if(*cbBlob) { + (*cbBlob)--; + blob[*cbBlob-1]=0; + } + else { + *cbBlob=1; + blob=(char*)malloc(1); + blob[0]=0; + } + return (PBYTE)blob; +} + +static void OldMirandaHistoryImport(HWND hdlgProgress) +{ + int fileSize; + FILE *fp; + char str[2048],*eol,*timeofs; + HANDLE hContact; + int type; + DWORD uin; + struct tm tmEventTime; + DBEVENTINFO dbei; + + AddMessage("Old Miranda history import routines initialised"); + fp=fopen(importFile,"rb"); + AddMessage("Calibrating status support functions"); + fseek(fp,0,SEEK_END); + fileSize=ftell(fp); + fseek(fp,0,SEEK_SET); + SetProgress(0); + + ZeroMemory(&dbei,sizeof(dbei)); + dbei.cbSize=sizeof(dbei); + dbei.szModule=ICQOSCPROTONAME; + + while(!feof(fp)) { + SetProgress(100*ftell(fp)/fileSize); + if(fgets(str,sizeof(str),fp)==NULL) break; + eol=str+lstrlen(str)-1; + + while(*eol=='\r' || *eol=='\n' && eol!=str-1) + *(eol--)=0; + + if(lstrlen(str)<20) continue; + type=*eol; + uin=strtoul(str,NULL,10); + if(uin==0) continue; //skip MSN + timeofs=str+lstrlen(str)-20; + tmEventTime.tm_hour=atoi(timeofs); + timeofs=strchr(timeofs,':'); + if(timeofs==NULL) continue; + tmEventTime.tm_min=atoi(timeofs+1); + tmEventTime.tm_sec=0; + tmEventTime.tm_isdst=-1; + tmEventTime.tm_mday=atoi(timeofs+7); + tmEventTime.tm_mon=atoi(timeofs+10)-1; + tmEventTime.tm_year=atoi(timeofs+13)-1900; + dbei.timestamp=mktime(&tmEventTime)+_timezone; + if(!(importOptions&historyTypeToOption[type])) continue; + hContact=HistoryImportFindContact(hdlgProgress,uin,importOptions&IOPT_ADDUNKNOWN); + if(hContact==INVALID_HANDLE_VALUE) break; + dbei.flags=issent(type)?DBEF_SENT:DBEF_READ; + switch(type) { + case HISTORY_MSGRECV: + case HISTORY_MSGSEND: + dbei.eventType=EVENTTYPE_MESSAGE; + dbei.pBlob=ReadHistoryLines(fp,&dbei.cbBlob); + CallService(MS_DB_EVENT_ADD,(WPARAM)hContact,(LPARAM)&dbei); + break; + case HISTORY_URLRECV: + case HISTORY_URLSEND: + dbei.eventType=EVENTTYPE_URL; + dbei.pBlob=ReadHistoryLines(fp,&dbei.cbBlob); + { char *endOfUrl; + endOfUrl=strchr(dbei.pBlob,'\r'); + if(endOfUrl!=NULL) { + *endOfUrl=0; + dbei.cbBlob--; + MoveMemory(endOfUrl+1,endOfUrl+2,dbei.cbBlob-(endOfUrl-dbei.pBlob)); + } + } + CallService(MS_DB_EVENT_ADD,(WPARAM)hContact,(LPARAM)&dbei); + break; + case HISTORY_AUTHREQ: + dbei.eventType=EVENTTYPE_AUTHREQUEST; + dbei.pBlob=ReadHistoryLines(fp,&dbei.cbBlob); + dbei.pBlob=(PBYTE)realloc(dbei.pBlob,dbei.cbBlob+8); + MoveMemory(dbei.pBlob+8,dbei.pBlob,dbei.cbBlob); + *(PDWORD)dbei.pBlob=uin; + *(char*)(dbei.pBlob+4)=0; //leave nick, first, last, email blank + *(char*)(dbei.pBlob+5)=0; + *(char*)(dbei.pBlob+6)=0; + *(char*)(dbei.pBlob+7)=0; + dbei.cbBlob+=8; + CallService(MS_DB_EVENT_ADD,(WPARAM)(HANDLE)NULL,(LPARAM)&dbei); + break; + case HISTORY_ADDED: + dbei.eventType=EVENTTYPE_ADDED; + dbei.pBlob=(PBYTE)malloc(8); + dbei.cbBlob=8; + *(PDWORD)dbei.pBlob=uin; + *(char*)(dbei.pBlob+4)=0; //leave nick, first, last, email blank + *(char*)(dbei.pBlob+5)=0; + *(char*)(dbei.pBlob+6)=0; + *(char*)(dbei.pBlob+7)=0; + CallService(MS_DB_EVENT_ADD,(WPARAM)(HANDLE)NULL,(LPARAM)&dbei); + break; + } + } + AddMessage("Terminating cached I/O access"); + fclose(fp); + AddMessage("Import completed successfully"); + SetProgress(100); +} \ No newline at end of file -- cgit v1.2.3