void MSN_FreeVariant(DBVARIANT* dbv) { DBFreeVariant(dbv); }
static INT_PTR GetContactInfo(WPARAM, LPARAM lParam) { DBVARIANT dbv; CONTACTINFO *ci = (CONTACTINFO*)lParam; if (ci==NULL) return 1; if (ci->szProto==NULL) ci->szProto = (char*)CallService(MS_PROTO_GETCONTACTBASEACCOUNT,(WPARAM)ci->hContact,0); if (ci->szProto==NULL) return 1; ci->type = 0; switch(ci->dwFlag & 0x7F) { case CNF_FIRSTNAME: return ProcessDatabaseValueDefault( ci, "FirstName" ); case CNF_LASTNAME: return ProcessDatabaseValueDefault( ci, "LastName" ); case CNF_NICK: return ProcessDatabaseValueDefault( ci, "Nick" ); case CNF_EMAIL: return ProcessDatabaseValueDefault( ci, "e-mail" ); case CNF_CITY: return ProcessDatabaseValueDefault( ci, "City" ); case CNF_STATE: return ProcessDatabaseValueDefault( ci, "State" ); case CNF_PHONE: return ProcessDatabaseValueDefault( ci, "Phone" ); case CNF_HOMEPAGE: return ProcessDatabaseValueDefault( ci, "Homepage" ); case CNF_ABOUT: return ProcessDatabaseValueDefault( ci, "About" ); case CNF_AGE: return ProcessDatabaseValueDefault( ci, "Age" ); case CNF_GENDER: return ProcessDatabaseValueDefault( ci, "Gender" ); case CNF_FAX: return ProcessDatabaseValueDefault( ci, "Fax" ); case CNF_CELLULAR: return ProcessDatabaseValueDefault( ci, "Cellular" ); case CNF_BIRTHDAY: return ProcessDatabaseValueDefault( ci, "BirthDay" ); case CNF_BIRTHMONTH: return ProcessDatabaseValueDefault( ci, "BirthMonth" ); case CNF_BIRTHYEAR: return ProcessDatabaseValueDefault( ci, "BirthYear" ); case CNF_STREET: return ProcessDatabaseValueDefault( ci, "Street" ); case CNF_ZIP: return ProcessDatabaseValueDefault( ci, "ZIP" ); case CNF_LANGUAGE1: return ProcessDatabaseValueDefault( ci, "Language1" ); case CNF_LANGUAGE2: return ProcessDatabaseValueDefault( ci, "Language2" ); case CNF_LANGUAGE3: return ProcessDatabaseValueDefault( ci, "Language3" ); case CNF_CONAME: return ProcessDatabaseValueDefault( ci, "Company" ); case CNF_CODEPT: return ProcessDatabaseValueDefault( ci, "CompanyDepartment" ); case CNF_COPOSITION: return ProcessDatabaseValueDefault( ci, "CompanyPosition" ); case CNF_COSTREET: return ProcessDatabaseValueDefault( ci, "CompanyStreet" ); case CNF_COCITY: return ProcessDatabaseValueDefault( ci, "CompanyCity" ); case CNF_COSTATE: return ProcessDatabaseValueDefault( ci, "CompanyState" ); case CNF_COZIP: return ProcessDatabaseValueDefault( ci, "CompanyZIP" ); case CNF_COHOMEPAGE: return ProcessDatabaseValueDefault( ci, "CompanyHomepage" ); case CNF_CUSTOMNICK: { char* saveProto = ci->szProto; ci->szProto = "CList"; if ( ci->hContact != NULL && !ProcessDatabaseValueDefault( ci, "MyHandle" )) { ci->szProto = saveProto; return 0; } ci->szProto = saveProto; break; } case CNF_COUNTRY: case CNF_COCOUNTRY: if ( !GetDatabaseString( ci, (ci->dwFlag & 0x7F) == CNF_COUNTRY ? "CountryName" : "CompanyCountryName", &dbv )) return 0; if ( !DBGetContactSetting( ci->hContact, ci->szProto, (ci->dwFlag & 0x7F)==CNF_COUNTRY ? "Country" : "CompanyCountry", &dbv )) { if ( dbv.type == DBVT_WORD ) { int i,countryCount; struct CountryListEntry *countries; CallService(MS_UTILS_GETCOUNTRYLIST,(WPARAM)&countryCount,(LPARAM)&countries); for(i=0;i<countryCount;i++) { if(countries[i].id!=dbv.wVal) continue; if ( ci->dwFlag & CNF_UNICODE ) { int cbLen = MultiByteToWideChar( CP_ACP, 0, ( LPCSTR )countries[i].szName, -1, NULL, 0 ); WCHAR* buf = ( WCHAR* )mir_alloc( sizeof( WCHAR )*(cbLen+1) ); if ( buf != NULL ) MultiByteToWideChar( CP_ACP, 0, ( LPCSTR )countries[i].szName, -1, buf, cbLen ); ci->pszVal = ( TCHAR* )buf; } else ci->pszVal = ( TCHAR* )mir_strdup(countries[i].szName); ci->type = CNFT_ASCIIZ; DBFreeVariant(&dbv); return 0; } } else return ProcessDatabaseValueDefault( ci, (ci->dwFlag & 0x7F)==CNF_COUNTRY ? "Country" : "CompanyCountry" ); DBFreeVariant(&dbv); } break; case CNF_FIRSTLAST: if( !GetDatabaseString( ci, "FirstName", &dbv )) { DBVARIANT dbv2; if(!GetDatabaseString(ci,"LastName",&dbv2)) { ci->type = CNFT_ASCIIZ; if ( ci->dwFlag & CNF_UNICODE ) { size_t len = wcslen(dbv.pwszVal) + wcslen(dbv2.pwszVal) + 2; WCHAR* buf = ( WCHAR* )mir_alloc( sizeof( WCHAR )*len ); if ( buf != NULL ) wcscat( wcscat( wcscpy( buf, dbv.pwszVal ), L" " ), dbv2.pwszVal ); ci->pszVal = ( TCHAR* )buf; } else { size_t len = strlen(dbv.pszVal) + strlen(dbv2.pszVal) + 2; char* buf = ( char* )mir_alloc( len ); if ( buf != NULL ) strcat( strcat( strcpy( buf, dbv.pszVal ), " " ), dbv2.pszVal ); ci->pszVal = ( TCHAR* )buf; } DBFreeVariant( &dbv ); DBFreeVariant( &dbv2 ); return 0; } DBFreeVariant( &dbv ); } break; case CNF_UNIQUEID: { char *uid = (char*)CallProtoService(ci->szProto,PS_GETCAPS,PFLAG_UNIQUEIDSETTING,0); if ((INT_PTR)uid!=CALLSERVICE_NOTFOUND&&uid) if (!ProcessDatabaseValueDefault(ci,uid)) return 0; break; } case CNF_DISPLAYUID: { if (!ProcessDatabaseValueDefault(ci, "display_uid")) return 0; char *uid = (char*)CallProtoService(ci->szProto,PS_GETCAPS,PFLAG_UNIQUEIDSETTING,0); if ((INT_PTR)uid!=CALLSERVICE_NOTFOUND&&uid) if (!ProcessDatabaseValueDefault(ci,uid)) return 0; break; } case CNF_DISPLAYNC: case CNF_DISPLAY: { int i; for( i=0; i < NAMEORDERCOUNT; i++ ) { switch(nameOrder[i]) { case 0: // custom name { // make sure we aren't in CNF_DISPLAYNC mode // don't get custom name for NULL contact char* saveProto = ci->szProto; ci->szProto = "CList"; if (ci->hContact!=NULL && (ci->dwFlag&0x7F)==CNF_DISPLAY && !ProcessDatabaseValueDefault(ci,"MyHandle")) { ci->szProto = saveProto; return 0; } ci->szProto = saveProto; break; } case 1: if ( !ProcessDatabaseValueDefault( ci, "Nick" )) // nick return 0; break; case 2: if ( !ProcessDatabaseValueDefault( ci, "FirstName" )) // First Name return 0; break; case 3: if ( !ProcessDatabaseValueDefault( ci, "e-mail" )) // E-mail return 0; break; case 4: if ( !ProcessDatabaseValueDefault( ci, "LastName" )) // Last Name return 0; break; case 5: // Unique id { // protocol must define a PFLAG_UNIQUEIDSETTING char *uid = (char*)CallProtoService(ci->szProto,PS_GETCAPS,PFLAG_UNIQUEIDSETTING,0); if ((INT_PTR)uid!=CALLSERVICE_NOTFOUND&&uid) { if (!GetDatabaseString(ci,uid,&dbv)) { if ( dbv.type == DBVT_BYTE || dbv.type == DBVT_WORD || dbv.type == DBVT_DWORD ) { long value = (dbv.type == DBVT_BYTE) ? dbv.bVal:(dbv.type==DBVT_WORD ? dbv.wVal : dbv.dVal); if ( ci->dwFlag & CNF_UNICODE ) { WCHAR buf[ 40 ]; _ltow( value, buf, 10 ); ci->pszVal = ( TCHAR* )mir_wstrdup( buf ); } else { char buf[ 40 ]; _ltoa( value, buf, 10 ); ci->pszVal = ( TCHAR* )mir_strdup(buf); } ci->type = CNFT_ASCIIZ; return 0; } if (dbv.type == DBVT_ASCIIZ && !(ci->dwFlag & CNF_UNICODE)) { ci->type = CNFT_ASCIIZ; ci->pszVal = dbv.ptszVal; return 0; } if (dbv.type == DBVT_WCHAR && (ci->dwFlag & CNF_UNICODE)) { ci->type = CNFT_ASCIIZ; ci->pszVal = dbv.ptszVal; return 0; } } } break; } case 6: // first + last name if(!GetDatabaseString(ci,"FirstName",&dbv)) { DBVARIANT dbv2; if(!GetDatabaseString(ci,"LastName",&dbv2)) { ci->type = CNFT_ASCIIZ; if ( ci->dwFlag & CNF_UNICODE ) { size_t len = wcslen(dbv.pwszVal) + wcslen(dbv2.pwszVal) + 2; WCHAR* buf = ( WCHAR* )mir_alloc( sizeof( WCHAR )*len ); if ( buf != NULL ) wcscat( wcscat( wcscpy( buf, dbv.pwszVal ), L" " ), dbv2.pwszVal ); ci->pszVal = ( TCHAR* )buf; } else { size_t len = strlen(dbv.pszVal) + strlen(dbv2.pszVal) + 2; char* buf = ( char* )mir_alloc( len ); if ( buf != NULL ) strcat( strcat( strcpy( buf, dbv.pszVal ), " " ), dbv2.pszVal ); ci->pszVal = ( TCHAR* )buf; } DBFreeVariant( &dbv ); DBFreeVariant( &dbv2 ); return 0; } DBFreeVariant( &dbv ); } break; case 7: if ( ci->dwFlag & CNF_UNICODE ) ci->pszVal = ( TCHAR* )mir_wstrdup( TranslateW( L"'(Unknown Contact)'" )); else ci->pszVal = ( TCHAR* )mir_strdup( Translate("'(Unknown Contact)'")); ci->type = CNFT_ASCIIZ; return 0; } } } break; case CNF_TIMEZONE: { HANDLE hTz = tmi.createByContact(ci->hContact, TZF_KNOWNONLY); if (hTz) { LPTIME_ZONE_INFORMATION tzi = tmi.getTzi(hTz); int offset = tzi->Bias + tzi->StandardBias; char str[80]; mir_snprintf(str, SIZEOF(str), offset ? "UTC%+d:%02d" : "UTC", offset / -60, abs(offset % 60)); ci->pszVal = ci->dwFlag & CNF_UNICODE ? (TCHAR*)mir_a2u(str) : (TCHAR*)mir_strdup(str); ci->type = CNFT_ASCIIZ; return 0; } break; } case CNF_MYNOTES: { char* saveProto = ci->szProto; ci->szProto = "UserInfo"; if (!ProcessDatabaseValueDefault(ci,"MyNotes")) { ci->szProto = saveProto; return 0; } ci->szProto = saveProto; break; } } return 1; }
static INT_PTR CALLBACK AccFormDlgProc(HWND hwndDlg,UINT message, WPARAM wParam, LPARAM lParam) { switch( message ) { case WM_INITDIALOG: TranslateDialogDefault(hwndDlg); { PROTOCOLDESCRIPTOR** proto; int protoCount, i, cnt = 0; Proto_EnumProtocols(( WPARAM )&protoCount, ( LPARAM )&proto ); for ( i=0; i < protoCount; i++ ) { PROTOCOLDESCRIPTOR* pd = proto[i]; if ( pd->type == PROTOTYPE_PROTOCOL && pd->cbSize == sizeof( *pd )) { SendDlgItemMessageA( hwndDlg, IDC_PROTOTYPECOMBO, CB_ADDSTRING, 0, (LPARAM)proto[i]->szName ); ++cnt; } } SendDlgItemMessage( hwndDlg, IDC_PROTOTYPECOMBO, CB_SETCURSEL, 0, 0 ); EnableWindow( GetDlgItem( hwndDlg, IDOK ), cnt != 0 ); SetWindowLongPtr( hwndDlg, GWLP_USERDATA, lParam ); AccFormDlgParam* param = ( AccFormDlgParam* )lParam; if ( param->action == PRAC_ADDED ) // new account SetWindowText( hwndDlg, TranslateT( "Create new account" )); else { TCHAR str[200]; if ( param->action == PRAC_CHANGED ) { // update EnableWindow( GetDlgItem( hwndDlg, IDC_PROTOTYPECOMBO ), FALSE ); mir_sntprintf( str, SIZEOF(str), _T("%s: %s"), TranslateT( "Editing account" ), param->pa->tszAccountName ); } else mir_sntprintf( str, SIZEOF(str), _T("%s: %s"), TranslateT( "Upgrading account" ), param->pa->tszAccountName ); SetWindowText( hwndDlg, str ); SetDlgItemText( hwndDlg, IDC_ACCNAME, param->pa->tszAccountName ); SetDlgItemTextA( hwndDlg, IDC_ACCINTERNALNAME, param->pa->szModuleName ); SendDlgItemMessageA( hwndDlg, IDC_PROTOTYPECOMBO, CB_SELECTSTRING, -1, (LPARAM)param->pa->szProtoName ); EnableWindow( GetDlgItem( hwndDlg, IDC_ACCINTERNALNAME ), FALSE ); } SendDlgItemMessage( hwndDlg, IDC_ACCINTERNALNAME, EM_LIMITTEXT, 40, 0 ); } return TRUE; case WM_COMMAND: switch( LOWORD(wParam)) { case IDOK: { AccFormDlgParam* param = ( AccFormDlgParam* )GetWindowLongPtr( hwndDlg, GWLP_USERDATA ); PROTOACCOUNT* pa = param->pa; if ( param->action == PRAC_ADDED ) { char buf[200]; GetDlgItemTextA( hwndDlg, IDC_ACCINTERNALNAME, buf, SIZEOF( buf )); rtrim( buf ); if ( buf[0] ) { for (int i = 0; i < accounts.getCount(); ++i) if (_stricmp(buf, accounts[i]->szModuleName) == 0) return FALSE; } } switch( param->action ) { case PRAC_UPGRADED: { int idx; BOOL oldProto = pa->bOldProto; TCHAR szPlugin[MAX_PATH]; mir_sntprintf(szPlugin, SIZEOF(szPlugin), _T("%s.dll"), StrConvT(pa->szProtoName)); idx = accounts.getIndex(pa); UnloadAccount(pa, false, false); accounts.remove(idx); if (oldProto && UnloadPlugin(szPlugin, SIZEOF(szPlugin))) { TCHAR szNewName[MAX_PATH]; mir_sntprintf(szNewName, SIZEOF(szNewName), _T("%s~"), szPlugin); MoveFile(szPlugin, szNewName); } } // fall through case PRAC_ADDED: pa = (PROTOACCOUNT*)mir_calloc( sizeof( PROTOACCOUNT )); pa->cbSize = sizeof( PROTOACCOUNT ); pa->bIsEnabled = TRUE; pa->bIsVisible = TRUE; pa->iOrder = accounts.getCount(); pa->type = PROTOTYPE_PROTOCOL; break; } { TCHAR buf[256]; GetDlgItemText( hwndDlg, IDC_ACCNAME, buf, SIZEOF( buf )); mir_free(pa->tszAccountName); pa->tszAccountName = mir_tstrdup( buf ); } if ( param->action == PRAC_ADDED || param->action == PRAC_UPGRADED ) { char buf[200]; GetDlgItemTextA( hwndDlg, IDC_PROTOTYPECOMBO, buf, SIZEOF( buf )); pa->szProtoName = mir_strdup( buf ); GetDlgItemTextA( hwndDlg, IDC_ACCINTERNALNAME, buf, SIZEOF( buf )); rtrim( buf ); if ( buf[0] == 0 ) { int count = 1; for( ;; ) { DBVARIANT dbv; mir_snprintf( buf, SIZEOF(buf), "%s_%d", pa->szProtoName, count++ ); if ( DBGetContactSettingString( NULL, buf, "AM_BaseProto", &dbv )) break; DBFreeVariant( &dbv ); } } pa->szModuleName = mir_strdup( buf ); if ( !pa->tszAccountName[0] ) { mir_free(pa->tszAccountName); pa->tszAccountName = mir_a2t(buf); } DBWriteContactSettingString( NULL, pa->szModuleName, "AM_BaseProto", pa->szProtoName ); accounts.insert( pa ); if ( ActivateAccount( pa )) { pa->ppro->OnEvent( EV_PROTO_ONLOAD, 0, 0 ); if (!DBGetContactSettingByte(NULL, "CList", "MoveProtoMenus", FALSE)) pa->ppro->OnEvent( EV_PROTO_ONMENU, 0, 0 ); } else pa->type = PROTOTYPE_DISPROTO; } WriteDbAccounts(); NotifyEventHooks( hAccListChanged, param->action, ( LPARAM )pa ); SendMessage( GetParent(hwndDlg), WM_MY_REFRESH, 0, 0 ); } EndDialog( hwndDlg, TRUE ); break; case IDCANCEL: EndDialog( hwndDlg, FALSE ); break; } } return FALSE; }
void JabberIqResultSetSearch(XmlNode *iqNode, void *userdata) { XmlNode *queryNode, *itemNode, *n; char *type, *jid, *str; int id, i, found; JABBER_SEARCH_RESULT jsr; DBVARIANT dbv; found = 0; // JabberLog("<iq/> iqIdGetSearch"); if ((type=JabberXmlGetAttrValue(iqNode, "type")) == NULL) return; if ((str=JabberXmlGetAttrValue(iqNode, "id")) == NULL) return; id = atoi(str+strlen(JABBER_IQID)); if (!strcmp(type, "result")) { if ((queryNode=JabberXmlGetChild(iqNode, "query")) == NULL) return; if (!DBGetContactSetting(NULL, jabberProtoName, "LoginServer", &dbv)) { jsr.hdr.cbSize = sizeof(JABBER_SEARCH_RESULT); for (i=0; i<queryNode->numChild; i++) { itemNode = queryNode->child[i]; if (!strcmp(itemNode->name, "item")) { if ((jid=JabberXmlGetAttrValue(itemNode, "jid")) != NULL) { _snprintf(jsr.jid, sizeof(jsr.jid), "%s@%s", jid, dbv.pszVal); jsr.jid[sizeof(jsr.jid)-1] = '\0'; if ((n=JabberXmlGetChild(itemNode, "nick"))!=NULL && n->text!=NULL) jsr.hdr.nick = JabberTextDecode(n->text); else jsr.hdr.nick = mir_strdup(""); if ((n=JabberXmlGetChild(itemNode, "first"))!=NULL && n->text!=NULL) jsr.hdr.firstName = JabberTextDecode(n->text); else jsr.hdr.firstName = mir_strdup(""); if ((n=JabberXmlGetChild(itemNode, "last"))!=NULL && n->text!=NULL) jsr.hdr.lastName = JabberTextDecode(n->text); else jsr.hdr.lastName = mir_strdup(""); if ((n=JabberXmlGetChild(itemNode, "email"))!=NULL && n->text!=NULL) jsr.hdr.email = JabberTextDecode(n->text); else jsr.hdr.email = mir_strdup(""); ProtoBroadcastAck(jabberProtoName, NULL, ACKTYPE_SEARCH, ACKRESULT_DATA, (HANDLE) id, (LPARAM) &jsr); found = 1; mir_free(jsr.hdr.nick); mir_free(jsr.hdr.firstName); mir_free(jsr.hdr.lastName); mir_free(jsr.hdr.email); } } } if (searchJID!=NULL) { if (!found) { _snprintf(jsr.jid, sizeof(jsr.jid), "%s@%s", searchJID, dbv.pszVal); jsr.jid[sizeof(jsr.jid)-1] = '\0'; jsr.hdr.nick = mir_strdup(""); jsr.hdr.firstName = mir_strdup(""); jsr.hdr.lastName = mir_strdup(""); jsr.hdr.email = mir_strdup(""); ProtoBroadcastAck(jabberProtoName, NULL, ACKTYPE_SEARCH, ACKRESULT_DATA, (HANDLE) id, (LPARAM) &jsr); mir_free(jsr.hdr.nick); mir_free(jsr.hdr.firstName); mir_free(jsr.hdr.lastName); mir_free(jsr.hdr.email); } mir_free(searchJID); searchJID = NULL; } DBFreeVariant(&dbv); } ProtoBroadcastAck(jabberProtoName, NULL, ACKTYPE_SEARCH, ACKRESULT_SUCCESS, (HANDLE) id, 0); } else if (!strcmp(type, "error")) { // ProtoBroadcastAck(jabberProtoName, NULL, ACKTYPE_SEARCH, ACKRESULT_FAILED, (HANDLE) id, 0); // There is no ACKRESULT_FAILED for ACKTYPE_SEARCH :) look at findadd.c // So we will just send a SUCCESS ProtoBroadcastAck(jabberProtoName, NULL, ACKTYPE_SEARCH, ACKRESULT_SUCCESS, (HANDLE) id, 0); } }
static TCHAR* GetWindowTitle(HANDLE *hContact, const char *szProto) { DBVARIANT dbv; int isTemplate; int len, contactNameLen = 0, statusLen = 0, statusMsgLen = 0, protocolLen = 0; TCHAR *p, *tmplt, *szContactName = NULL, *szStatus = NULL, *szStatusMsg = NULL, *szProtocol = NULL, *title; TCHAR *pszNewTitleEnd = _tcsdup(TranslateT("Message Session")); isTemplate = 0; if (hContact && szProto) { szContactName = GetNickname(hContact, szProto); contactNameLen = lstrlen(szContactName); szStatus = strToWcs((char *) CallService(MS_CLIST_GETSTATUSMODEDESCRIPTION, szProto == NULL ? ID_STATUS_OFFLINE : DBGetContactSettingWord(hContact, szProto, "Status", ID_STATUS_OFFLINE), 0), -1, CP_ACP); statusLen = lstrlen(szStatus); if (!DBGetContactSetting(hContact, "CList", "StatusMsg",&dbv)) { if (strlen(dbv.pszVal) > 0) { int i, j; szStatusMsg = strToWcs(dbv.pszVal, -1, CP_ACP); statusMsgLen = lstrlen(szStatusMsg); for (i = j = 0; i < statusMsgLen; i++) { if (szStatusMsg[i] == '\r') { continue; } else if (szStatusMsg[i] == '\n') { szStatusMsg[j++] = ' '; } else { szStatusMsg[j++] = szStatusMsg[i]; } } szStatusMsg[j] = '\0'; statusMsgLen = j; } DBFreeVariant(&dbv); } if (!DBGetContactSetting(NULL, SRMMMOD, SRMSGSET_WINDOWTITLE, &dbv)) { isTemplate = 1; tmplt = strToWcs(dbv.pszVal, -1, CP_ACP); DBFreeVariant(&dbv); } else { int statusIcon = DBGetContactSettingByte(NULL, SRMMMOD, SRMSGSET_STATUSICON, SRMSGDEFSET_STATUSICON); if (statusIcon) { tmplt = _T("%name% - "); } else { tmplt = _T("%name% (%status%) : "); } } } else { tmplt = _T(""); } for (len = 0, p = tmplt; *p; p++) { if (*p == '%') { if (!_tcsncmp(p, _T("%name%"), 6)) { len += contactNameLen; p += 5; continue; } else if (!_tcsncmp(p, _T("%status%"), 8)) { len += statusLen; p += 7; continue; } else if (!_tcsncmp(p, _T("%statusmsg%"), 11)) { len += statusMsgLen; p += 10; continue; } } len++; } if (!isTemplate) { len += lstrlen(pszNewTitleEnd); } title = (TCHAR *)malloc(sizeof(TCHAR) * (len + 1)); for (len = 0, p = tmplt; *p; p++) { if (*p == '%') { if (!_tcsncmp(p, _T("%name%"), 6)) { memcpy(title+len, szContactName, sizeof(TCHAR) * contactNameLen); len += contactNameLen; p += 5; continue; } else if (!_tcsncmp(p, _T("%status%"), 8)) { memcpy(title+len, szStatus, sizeof(TCHAR) * statusLen); len += statusLen; p += 7; continue; } else if (!_tcsncmp(p, _T("%statusmsg%"), 11)) { memcpy(title+len, szStatusMsg, sizeof(TCHAR) * statusMsgLen); len += statusMsgLen; p += 10; continue; } } title[len++] = *p; } if (!isTemplate) { memcpy(title+len, pszNewTitleEnd, sizeof(TCHAR) * lstrlen(pszNewTitleEnd)); len += lstrlen(pszNewTitleEnd); } title[len] = '\0'; if (isTemplate) { free(tmplt); } free(szContactName); free(szStatus); free(pszNewTitleEnd); return title; }
void TrayIconUpdateBase(const char *szChangedProto) { int i,count,netProtoCount,changed = -1; PROTOACCOUNT **accs; int averageMode = 0; HWND hwnd = pcli->hwndContactList; if (pcli->cycleTimerId) KillTimer(NULL, pcli->cycleTimerId); pcli->cycleTimerId = 0; ProtoEnumAccounts( &count, &accs ); for (i = 0,netProtoCount = 0; i < count; i++) { if ( !pcli->pfnGetProtocolVisibility( accs[i]->szModuleName )) continue; netProtoCount++; if (!lstrcmpA(szChangedProto, accs[i]->szModuleName )) pcli->cycleStep = i; if (averageMode == 0) averageMode = CallProtoService( accs[i]->szModuleName, PS_GETSTATUS, 0, 0); else if (averageMode != CallProtoService( accs[i]->szModuleName, PS_GETSTATUS, 0, 0)) { averageMode = -1; break; } } if (netProtoCount > 1) { if (averageMode > 0) { if (cfg::getByte("CList", "TrayIcon", SETTING_TRAYICON_DEFAULT) == SETTING_TRAYICON_MULTI) { if (cfg::getByte("CList", "AlwaysMulti", SETTING_ALWAYSMULTI_DEFAULT)) { HICON hIcon = 0; int iIcon = IconFromStatusMode(szChangedProto, averageMode, 0, &hIcon); if(hIcon) changed = pcli->pfnTrayIconSetBaseInfo(CopyIcon(hIcon), szChangedProto); else changed = pcli->pfnTrayIconSetBaseInfo(ImageList_GetIcon(hCListImages, iIcon, ILD_NORMAL), szChangedProto); } else if (pcli->trayIcon && pcli->trayIcon[0].szProto != NULL) { pcli->pfnTrayIconDestroy(hwnd); pcli->pfnTrayIconInit(hwnd); } else { HICON hIcon = 0; int iIcon = IconFromStatusMode(NULL, averageMode, 0, &hIcon); if(hIcon) changed = pcli->pfnTrayIconSetBaseInfo(CopyIcon(hIcon), NULL); else changed = pcli->pfnTrayIconSetBaseInfo(ImageList_GetIcon(hCListImages, iIcon, ILD_NORMAL), NULL); } } else { HICON hIcon = 0; int iIcon = IconFromStatusMode(NULL, averageMode, 0, &hIcon); if(hIcon) changed = pcli->pfnTrayIconSetBaseInfo(CopyIcon(hIcon), NULL); else changed = pcli->pfnTrayIconSetBaseInfo(ImageList_GetIcon(hCListImages, iIcon, ILD_NORMAL), NULL); } } else { switch (cfg::getByte("CList", "TrayIcon", SETTING_TRAYICON_DEFAULT)) { case SETTING_TRAYICON_SINGLE: { DBVARIANT dbv = {DBVT_DELETED}; int iIcon = 0; HICON hIcon = 0; char *szProto; if (cfg::getString(NULL, "CList", "PrimaryStatus", &dbv)) szProto = NULL; else szProto = dbv.pszVal; iIcon = IconFromStatusMode(szProto, szProto ? CallProtoService(szProto, PS_GETSTATUS, 0, 0) : CallService(MS_CLIST_GETSTATUSMODE, 0, 0), 0, &hIcon); if(hIcon) changed = pcli->pfnTrayIconSetBaseInfo(CopyIcon(hIcon), NULL); else changed = pcli->pfnTrayIconSetBaseInfo(ImageList_GetIcon(hCListImages, iIcon, ILD_NORMAL), NULL); DBFreeVariant(&dbv); break; } case SETTING_TRAYICON_CYCLE: { HICON hIcon = 0; int iIcon = IconFromStatusMode(szChangedProto, CallProtoService(szChangedProto, PS_GETSTATUS, 0, 0), 0, &hIcon); pcli->cycleTimerId = SetTimer(NULL, 0, cfg::getWord("CList", "CycleTime", SETTING_CYCLETIME_DEFAULT) * 1000, pcli->pfnTrayCycleTimerProc); if(hIcon) changed = pcli->pfnTrayIconSetBaseInfo(CopyIcon(hIcon), NULL); else changed = pcli->pfnTrayIconSetBaseInfo(ImageList_GetIcon(hCListImages, iIcon, ILD_NORMAL), NULL); break; } case SETTING_TRAYICON_MULTI: if ( !pcli->trayIcon ) pcli->pfnTrayIconRemove(NULL, NULL); else if (cfg::getByte("CList", "AlwaysMulti", SETTING_ALWAYSMULTI_DEFAULT)) { HICON hIcon = 0; int iIcon = IconFromStatusMode(szChangedProto, CallProtoService(szChangedProto, PS_GETSTATUS, 0, 0), 0, &hIcon); if(hIcon) changed = pcli->pfnTrayIconSetBaseInfo(CopyIcon(hIcon), szChangedProto); else changed = pcli->pfnTrayIconSetBaseInfo(ImageList_GetIcon(hCListImages, iIcon, ILD_NORMAL), szChangedProto); } else { pcli->pfnTrayIconDestroy(hwnd); pcli->pfnTrayIconInit(hwnd); } break; } } } else { HICON hIcon = 0; int iIcon = IconFromStatusMode(NULL, averageMode, 0, &hIcon); if ( hIcon ) changed = pcli->pfnTrayIconSetBaseInfo(CopyIcon(hIcon), NULL); else changed = pcli->pfnTrayIconSetBaseInfo(ImageList_GetIcon(hCListImages, iIcon, ILD_NORMAL), NULL); } if (changed != -1 && pcli->trayIcon[changed].isBase) pcli->pfnTrayIconUpdate( pcli->trayIcon[changed].hBaseIcon, NULL, pcli->trayIcon[changed].szProto, 1); }
// Return 0 if not changed, 1 if changed, 2 if removed int TrackChange(HANDLE hContact, DBCONTACTWRITESETTING *cws_new, BOOL ignore_remove) { char current_setting[256]; mir_snprintf(current_setting, MAX_REGS(current_setting), "%sCurrent", cws_new->szSetting); int ret = 0; DBVARIANT dbv = {0}; #ifdef UNICODE BOOL found_current = (DBGetContactSettingW(hContact, cws_new->szModule, current_setting, &dbv) == 0); #else BOOL found_current = (DBGetContactSetting(hContact, cws_new->szModule, current_setting, &dbv) == 0); #endif if (!found_current) { // Current value does not exist if (cws_new->value.type == DBVT_DELETED) { ret = 0; } else if (cws_new->value.type == DBVT_ASCIIZ) { ret = CheckStr(cws_new->value.pszVal, 1, 0); } #ifdef UNICODE else if (cws_new->value.type == DBVT_UTF8) { ret = CheckStr(cws_new->value.pszVal, 1, 0); } else if (cws_new->value.type == DBVT_WCHAR) { ret = CheckStr(cws_new->value.pwszVal, 1, 0); } #endif else { ret = 1; } } else { // Current value exist if (cws_new->value.type == DBVT_DELETED) { if (dbv.type == DBVT_ASCIIZ) { ret = CheckStr(dbv.pszVal, 2, 0); } #ifdef UNICODE else if (dbv.type == DBVT_UTF8) { ret = CheckStr(dbv.pszVal, 2, 0); } else if (dbv.type == DBVT_WCHAR) { ret = CheckStr(dbv.pwszVal, 2, 0); } #endif else { ret = 2; } } else if (dbv.type != cws_new->value.type) { #ifdef UNICODE if ( (cws_new->value.type == DBVT_UTF8 || cws_new->value.type == DBVT_ASCIIZ || cws_new->value.type == DBVT_WCHAR) && (dbv.type == DBVT_UTF8 || dbv.type == DBVT_ASCIIZ || dbv.type == DBVT_WCHAR)) { WCHAR tmp_cws_new[1024] = L""; if (cws_new->value.type == DBVT_ASCIIZ) MultiByteToWideChar(CP_ACP, 0, cws_new->value.pszVal, -1, tmp_cws_new, MAX_REGS(tmp_cws_new)); else if (cws_new->value.type == DBVT_UTF8) MultiByteToWideChar(CP_UTF8, 0, cws_new->value.pszVal, -1, tmp_cws_new, MAX_REGS(tmp_cws_new)); else if (cws_new->value.type == DBVT_WCHAR) lstrcpyn(tmp_cws_new, cws_new->value.pwszVal, MAX_REGS(tmp_cws_new)); WCHAR tmp_dbv[1024] = L""; if (dbv.type == DBVT_ASCIIZ) MultiByteToWideChar(CP_ACP, 0, dbv.pszVal, -1, tmp_dbv, MAX_REGS(tmp_dbv)); else if (dbv.type == DBVT_UTF8) MultiByteToWideChar(CP_UTF8, 0, dbv.pszVal, -1, tmp_dbv, MAX_REGS(tmp_dbv)); else if (dbv.type == DBVT_WCHAR) lstrcpyn(tmp_dbv, dbv.pwszVal, MAX_REGS(tmp_dbv)); ret = (lstrcmpW(tmp_cws_new, tmp_dbv) ? CheckStr(tmp_cws_new, 1, 2) : 0); } else #endif { ret = 1; } } else if (dbv.type == DBVT_BYTE) { ret = (cws_new->value.bVal != dbv.bVal ? 1 : 0); } else if (dbv.type == DBVT_WORD) { ret = (cws_new->value.wVal != dbv.wVal ? 1 : 0); } else if (dbv.type == DBVT_DWORD) { ret = (cws_new->value.dVal != dbv.dVal ? 1 : 0); } else if (dbv.type == DBVT_ASCIIZ) { ret = (strcmp(cws_new->value.pszVal, dbv.pszVal) ? CheckStr(cws_new->value.pszVal, 1, 2) : 0); } #ifdef UNICODE else if (dbv.type == DBVT_UTF8) { ret = (strcmp(cws_new->value.pszVal, dbv.pszVal) ? CheckStr(cws_new->value.pszVal, 1, 2) : 0); } else if (dbv.type == DBVT_WCHAR) { ret = (lstrcmp(cws_new->value.pwszVal, dbv.pwszVal) ? CheckStr(cws_new->value.pwszVal, 1, 2) : 0); } #endif } if (ret == 1 || (ret == 2 && !ignore_remove)) { // Copy current to old char old_setting[256]; mir_snprintf(old_setting, MAX_REGS(old_setting), "%sOld", cws_new->szSetting); if (dbv.type == DBVT_DELETED) { DBDeleteContactSetting(hContact, cws_new->szModule, old_setting); } else { DBCONTACTWRITESETTING cws_old; cws_old.szModule = cws_new->szModule; cws_old.szSetting = old_setting; cws_old.value = dbv; CallService(MS_DB_CONTACT_WRITESETTING, (WPARAM)hContact, (LPARAM)&cws_old); } // Copy new to current if (cws_new->value.type == DBVT_DELETED) { DBDeleteContactSetting(hContact, cws_new->szModule, current_setting); } else { DBCONTACTWRITESETTING cws_old; cws_old.szModule = cws_new->szModule; cws_old.szSetting = current_setting; cws_old.value = cws_new->value; CallService(MS_DB_CONTACT_WRITESETTING, (WPARAM)hContact, (LPARAM)&cws_old); } } if (found_current) DBFreeVariant(&dbv); return ret; }
int __cdecl ModernDBFreeVariant(DBVARIANT *dbv) { return DBFreeVariant( dbv ); }
void TemplateHTMLBuilder::appendEvent(IEView *view, IEVIEWEVENT *event) { DBVARIANT dbv; CONTACTINFO ci; char szBase[1024]; char szNoAvatar[1024]; char szCID[32]; char *szName = NULL; char *szNameIn = NULL; char *szNameOut = NULL; char *szAvatar = NULL; char *szAvatarIn = NULL; char *szAvatarOut = NULL; char *szText = NULL; char *szProto = NULL; const char *tmpltName[2]; bool isGrouping = false; int cp = CP_ACP; if (event->cbSize == sizeof(IEVIEWEVENT)) { cp = event->codepage; } szProto = Utils::dupString((char *)CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM) event->hContact, 0)); szBase[0]='\0'; TemplateMap *tmpm = (event->dwFlags & IEEF_RTL) ? TemplateMap::getTemplateMap("default_rtl") : TemplateMap::getTemplateMap("default"); if (tmpm!=NULL) { strcpy(szBase, tmpm->getFilename()); char* pathrun = szBase + strlen(szBase); while ((*pathrun != '\\' && *pathrun != '/') && (pathrun > szBase)) pathrun--; pathrun++; *pathrun = '\0'; isGrouping = tmpm->isGrouping(); } sprintf(szNoAvatar, "%snoavatar.jpg", szBase); if (Options::getTemplatesFlags() & Options::LOG_SHOW_NICKNAMES) { ZeroMemory(&ci, sizeof(ci)); ci.cbSize = sizeof(ci); ci.hContact = NULL; ci.szProto = szProto; ci.dwFlag = CNF_DISPLAY; if (!CallService(MS_CONTACT_GETCONTACTINFO, 0, (LPARAM) & ci)) { szNameOut = encodeUTF8(ci.pszVal, NULL, false); } szNameIn = encodeUTF8((char *) CallService(MS_CLIST_GETCONTACTDISPLAYNAME, (WPARAM) event->hContact, 0), NULL, false); } else { szNameOut = Utils::dupString(" "); szNameIn = Utils::dupString(" "); } if (!DBGetContactSetting(event->hContact, "ContactPhoto", "File",&dbv)) { if (strlen(dbv.pszVal) > 0) { szAvatarIn = Utils::dupString(dbv.pszVal); Utils::convertPath(szAvatarIn); } DBFreeVariant(&dbv); } if (szAvatarIn == NULL) { szAvatarIn = Utils::dupString(szNoAvatar); } if (!DBGetContactSetting(NULL, "ContactPhoto", "File",&dbv)) { if (strlen(dbv.pszVal) > 0) { szAvatarOut = Utils::dupString(dbv.pszVal); Utils::convertPath(szAvatarOut); } DBFreeVariant(&dbv); } if (szAvatarOut == NULL) { szAvatarOut = Utils::dupString(szNoAvatar); } HANDLE hDbEvent = event->hDbEventFirst; event->hDbEventFirst = NULL; for (int eventIdx = 0; hDbEvent!=NULL && (eventIdx < event->count || event->count==-1); eventIdx++) { int outputSize; char *output; DBEVENTINFO dbei = { 0 }; dbei.cbSize = sizeof(dbei); dbei.cbBlob = CallService(MS_DB_EVENT_GETBLOBSIZE, (WPARAM) hDbEvent, 0); if (dbei.cbBlob == 0xFFFFFFFF) { return; } dbei.pBlob = (PBYTE) malloc(dbei.cbBlob); CallService(MS_DB_EVENT_GET, (WPARAM) hDbEvent, (LPARAM) & dbei); if (!(dbei.flags & DBEF_SENT) && (dbei.eventType == EVENTTYPE_MESSAGE )) { CallService(MS_DB_EVENT_MARKREAD, (WPARAM) event->hContact, (LPARAM) hDbEvent); CallService(MS_CLIST_REMOVEEVENT, (WPARAM) event->hContact, (LPARAM) hDbEvent); } else if (dbei.eventType == EVENTTYPE_STATUSCHANGE) { CallService(MS_DB_EVENT_MARKREAD, (WPARAM) event->hContact, (LPARAM) hDbEvent); } HANDLE hCurDbEvent = hDbEvent; hDbEvent = (HANDLE) CallService(MS_DB_EVENT_FINDNEXT, (WPARAM) hDbEvent, 0); if (!isDbEventShown(0, &dbei)) { free(dbei.pBlob); continue; } output = NULL; if (dbei.eventType == EVENTTYPE_MESSAGE || dbei.eventType == EVENTTYPE_STATUSCHANGE || dbei.eventType == EVENTTYPE_FILE || dbei.eventType == EVENTTYPE_URL) { int isSent = (dbei.flags & DBEF_SENT); int isHistory = (dbei.timestamp < (DWORD)getStartedTime() && (dbei.flags & DBEF_READ || dbei.flags & DBEF_SENT)); int isGroupBreak = TRUE; if ((Options::getTemplatesFlags() & Options::LOG_GROUP_MESSAGES) && dbei.flags == LOWORD(getLastEventType()) && dbei.eventType == EVENTTYPE_MESSAGE && HIWORD(getLastEventType()) == EVENTTYPE_MESSAGE && ((dbei.timestamp - getLastEventTime()) < 86400)) { isGroupBreak = FALSE; } if (isSent) { szName = szNameOut; szAvatar = szAvatarOut; sprintf(szCID, "%d", 0); } else { szName = szNameIn; szAvatar = szAvatarIn; sprintf(szCID, "%d", (int)event->hContact); } tmpltName[0] = groupTemplate; tmpltName[1] = NULL; groupTemplate = NULL; if (dbei.eventType == EVENTTYPE_MESSAGE) { DWORD aLen = strlen((char *)dbei.pBlob)+1; if (dbei.cbBlob > aLen && !(event->dwFlags & IEEF_NO_UNICODE)) { DWORD wlen = Utils::safe_wcslen((wchar_t *)&dbei.pBlob[aLen], (dbei.cbBlob - aLen) / 2); if (wlen > 0 && wlen < aLen) { szText = encodeUTF8((wchar_t *)&dbei.pBlob[aLen], szProto, true); } else { szText = encodeUTF8((char *)dbei.pBlob, cp, szProto, true); } } else { szText = encodeUTF8((char *)dbei.pBlob, cp, szProto, true); } if (isGrouping && (Options::getTemplatesFlags() & Options::LOG_GROUP_MESSAGES)) { if (isGroupBreak) { tmpltName[1] = isHistory ? isSent ? "hMessageOutGroupStart" : "hMessageInGroupStart" : isSent ? "MessageOutGroupStart" : "MessageInGroupStart"; } else { tmpltName[0] = isHistory ? isSent ? "hMessageOutGroupInner" : "hMessageInGroupInner" : isSent ? "MessageOutGroupInner" : "MessageInGroupInner"; } groupTemplate = isHistory ? isSent ? "hMessageOutGroupEnd" : "hMessageInGroupEnd" : isSent ? "MessageOutGroupEnd" : "MessageInGroupEnd"; } else { tmpltName[1] = isHistory ? isSent ? "hMessageOut" : "hMessageIn" : isSent ? "MessageOut" : "MessageIn"; } } else if (dbei.eventType == EVENTTYPE_FILE) { szText = encodeUTF8((char *)dbei.pBlob + sizeof(DWORD), NULL, false); tmpltName[1] = isHistory ? "hFile" : "File"; } else if (dbei.eventType == EVENTTYPE_URL) { szText = encodeUTF8((char *)dbei.pBlob, NULL, false); tmpltName[1] = isHistory ? "hURL" : "URL"; } else if (dbei.eventType == EVENTTYPE_STATUSCHANGE) { szText = encodeUTF8((char *)dbei.pBlob, NULL, false); tmpltName[1] = isHistory ? "hStatus" : "Status"; } /* template-specific formatting */ for (int i=0;i<2;i++) { Template *tmplt; if (tmpltName[i] == NULL) continue; tmplt = (event->dwFlags & IEEF_RTL) ? TemplateMap::getTemplate("default_rtl", tmpltName[i]) : TemplateMap::getTemplate("default", tmpltName[i]); if (tmplt == NULL) continue; for (Token *token = tmplt->getTokens();token!=NULL;token=token->getNext()) { const char *tokenVal; tokenVal = NULL; switch (token->getType()) { case Token::PLAIN: tokenVal = token->getText(); break; case Token::NAME: tokenVal = szName; break; case Token::TIME: if (Options::getTemplatesFlags() & Options::LOG_SHOW_TIME) { tokenVal = timestampToString(dbei.timestamp, 1); } else { tokenVal = " "; } break; case Token::DATE: if (Options::getTemplatesFlags() & Options::LOG_SHOW_DATE) { tokenVal = timestampToString(dbei.timestamp, 0); } else { tokenVal = " "; } break; case Token::TEXT: tokenVal = szText; break; case Token::AVATAR: tokenVal = szAvatar; break; case Token::CID: tokenVal = szCID; break; case Token::BASE: tokenVal = szBase; break; case Token::NAMEIN: tokenVal = szNameIn; break; case Token::NAMEOUT: tokenVal = szNameOut; break; case Token::AVATARIN: tokenVal = szAvatarIn; break; case Token::AVATAROUT: tokenVal = szAvatarOut; break; case Token::PROTO: tokenVal = szProto; break; } if (tokenVal != NULL) { Utils::appendText(&output, &outputSize, "%s", tokenVal); } } } event->hDbEventFirst = hCurDbEvent; setLastEventType(MAKELONG(dbei.flags, dbei.eventType)); setLastEventTime(dbei.timestamp); if (szText!=NULL) delete szText; } if (output != NULL) { view->write(output); free(output); } free(dbei.pBlob); } if (szProto!=NULL) delete szProto; if (szAvatarIn!=NULL) delete szAvatarIn; if (szAvatarOut!=NULL) delete szAvatarOut; if (szNameIn!=NULL) delete szNameIn; if (szNameOut!=NULL) delete szNameOut; view->scrollToBottom(); }
static INT_PTR CALLBACK DlgProcOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) { HWND hw; int sel; DBVARIANT dbv; switch ( msg ) { case WM_INITDIALOG: { TranslateDialogDefault( hwndDlg ); SendMessage(GetDlgItem(hwndDlg, IDC_SPIN1), UDM_SETRANGE, 0, (LPARAM)MAKELONG(50, 5)); if(!DBGetContactSetting(NULL,"WorldTime","FontSize",&dbv) || !DBGetContactSetting(NULL,"CLC","Font0Size",&dbv)) { SendMessage(GetDlgItem(hwndDlg, IDC_SPIN1), UDM_SETPOS, 0, dbv.bVal); } SendMessage(GetDlgItem(hwndDlg, IDC_SP_INDENT), UDM_SETRANGE, 0, (LPARAM)MAKELONG(500, 0)); SendMessage(GetDlgItem(hwndDlg, IDC_SP_INDENT), UDM_SETPOS, 0, DBGetContactSettingWord(NULL, "WorldTime", "Indent", 0)); SendMessage(GetDlgItem(hwndDlg, IDC_SP_ROWHEIGHT), UDM_SETRANGE, 0, (LPARAM)MAKELONG(500, 6)); SendMessage(GetDlgItem(hwndDlg, IDC_SP_ROWHEIGHT), UDM_SETPOS, 0, DBGetContactSettingWord(NULL, "WorldTime", "RowHeight", GetSystemMetrics(SM_CYSMICON))); copy_listbox_items(temp_listbox_items, listbox_items); hw = GetDlgItem(hwndDlg, IDC_LIST_TIMES2); for(int ili = 0; ili < temp_listbox_items.getCount(); ili++) { sel = SendMessage(hw, LB_INSERTSTRING, (WPARAM)-1, (LPARAM)&temp_listbox_items[ili].pszText); } if(!ServiceExists(MS_CLIST_FRAMES_ADDFRAME)) { bool minmax = (DBGetContactSettingByte(NULL, "WorldTime", "MinMax", DEFAULT_MINMAX ? 1 : 0) == 1); CheckDlgButton(hwndDlg, IDC_CHK_MINMAX, minmax); bool hide_menu = (DBGetContactSettingByte(NULL, "WorldTime", "HideMenu", 0) == 1); CheckDlgButton(hwndDlg, IDC_CHK_HIDEMENU, hide_menu ? 1 : 0); } else { CheckDlgButton(hwndDlg, IDC_CHK_HIDEMENU, TRUE); EnableWindow(GetDlgItem(hwndDlg, IDC_CHK_HIDEMENU), FALSE); EnableWindow(GetDlgItem(hwndDlg, IDC_BTN_SHOW), FALSE); EnableWindow(GetDlgItem(hwndDlg, IDC_CHK_MINMAX), FALSE); } bool set_format = (DBGetContactSettingByte(NULL, "WorldTime", "EnableTimeFormat", 0) == 1); CheckDlgButton(hwndDlg, IDC_CHK_FORMAT, set_format ? 1 : 0); bool show_icons = (DBGetContactSettingByte(NULL, "WorldTime", "ShowIcons", 1) == 1); CheckDlgButton(hwndDlg, IDC_CHK_ICONS, show_icons ? 1 : 0); DBVARIANT dbv; if(!DBGetContactSettingTString(NULL, "WorldTime", "TimeFormat", &dbv)) _tcscpy(format_string, dbv.ptszVal); DBFreeVariant(&dbv); SetDlgItemText(hwndDlg, IDC_ED_FORMAT, format_string); if(!DBGetContactSettingTString(NULL, "WorldTime", "DateFormat", &dbv)) _tcscpy(date_format_string, dbv.ptszVal); DBFreeVariant(&dbv); SetDlgItemText(hwndDlg, IDC_ED_DATE_FORMAT, date_format_string); if(!set_format) { hw = GetDlgItem(hwndDlg, IDC_ED_FORMAT); EnableWindow(hw, FALSE); hw = GetDlgItem(hwndDlg, IDC_ED_DATE_FORMAT); EnableWindow(hw, FALSE); } SendDlgItemMessage(hwndDlg, IDC_TEXTCOL, CPM_SETCOLOUR, 0, DBGetContactSettingDword(NULL, "WorldTime", "FontCol", GetSysColor(COLOR_WINDOWTEXT))); SendDlgItemMessage(hwndDlg, IDC_BGCOL, CPM_SETCOLOUR, 0, DBGetContactSettingDword(NULL, "WorldTime", "BgColour", GetSysColor(COLOR_3DFACE))); if(ServiceExists(MS_FONT_REGISTERT)) { ShowWindow(GetDlgItem(hwndDlg, IDC_STATICH), SW_HIDE); ShowWindow(GetDlgItem(hwndDlg, IDC_STATICH2), SW_HIDE); ShowWindow(GetDlgItem(hwndDlg, IDC_SPIN1), SW_HIDE); ShowWindow(GetDlgItem(hwndDlg, IDC_ED_FSIZE), SW_HIDE); ShowWindow(GetDlgItem(hwndDlg, IDC_TEXTCOL), SW_HIDE); ShowWindow(GetDlgItem(hwndDlg, IDC_STATFS), SW_SHOW); } //return TRUE; return FALSE; } case WM_COMMAND: if ( HIWORD( wParam ) == EN_CHANGE && ( HWND )lParam == GetFocus()) { switch( LOWORD( wParam )) { case IDC_ED_FORMAT: case IDC_ED_DATE_FORMAT: SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); } } if (HIWORD( wParam ) == LBN_SELCHANGE && LOWORD(wParam) == IDC_LIST_TIMES2) { hw = GetDlgItem(hwndDlg, IDC_LIST_TIMES2); sel = SendMessage(hw, LB_GETCURSEL, 0, 0); if(sel != LB_ERR) { hw = GetDlgItem(hwndDlg, IDC_BTN_REM); EnableWindow(hw, sel != -1); hw = GetDlgItem(hwndDlg, IDC_BTN_EDIT); EnableWindow(hw, sel != -1); hw = GetDlgItem(hwndDlg, IDC_BTN_UP); EnableWindow(hw, (sel > 0)); hw = GetDlgItem(hwndDlg, IDC_LIST_TIMES2); int count = SendMessage(hw, LB_GETCOUNT, 0, 0); hw = GetDlgItem(hwndDlg, IDC_BTN_DOWN); EnableWindow(hw, (sel < count - 1)); } } if ( HIWORD( wParam ) == BN_CLICKED ) { switch( LOWORD( wParam )) { case IDC_BTN_SHOW: ShowWindow(pluginwind, SW_SHOW); break; case IDC_BTN_EDIT: hw = GetDlgItem(hwndDlg, IDC_LIST_TIMES2); sel = SendMessage(hw, LB_GETCURSEL, 0, 0); if(sel != LB_ERR && sel != -1) { add_edit_item = temp_listbox_items[sel]; if(DialogBox(hInst, MAKEINTRESOURCE(IDD_DIALOG2), hwndDlg, DlgProcOpts2) == IDOK) { temp_listbox_items[sel] = add_edit_item; SendMessage(hw, LB_DELETESTRING, (WPARAM)sel, (LPARAM)0); SendMessage(hw, LB_INSERTSTRING, (WPARAM)sel, (LPARAM)add_edit_item.pszText); SendMessage(hw, LB_SETCURSEL, (WPARAM)sel, 0); SendMessage( GetParent( hwndDlg ), PSM_CHANGED, 0, 0 ); } } break; case IDC_BTN_ADD: add_edit_item.pszText[0] = '\0'; add_edit_item.timezone_list_index = -1; if(DialogBox(hInst, MAKEINTRESOURCE(IDD_DIALOG2), hwndDlg, DlgProcOpts2) == IDOK) { temp_listbox_items.insert(new LISTITEM(add_edit_item)); hw = GetDlgItem(hwndDlg, IDC_LIST_TIMES2); sel = SendMessage(hw, LB_INSERTSTRING, (WPARAM)-1, (LPARAM)add_edit_item.pszText); SendMessage(hw, LB_SETCURSEL, (WPARAM)sel, 0); hw = GetDlgItem(hwndDlg, IDC_BTN_REM); EnableWindow(hw, TRUE); hw = GetDlgItem(hwndDlg, IDC_BTN_EDIT); EnableWindow(hw, TRUE); sel = temp_listbox_items.getCount() - 1; hw = GetDlgItem(hwndDlg, IDC_BTN_UP); EnableWindow(hw, (sel > 0)); hw = GetDlgItem(hwndDlg, IDC_LIST_TIMES2); int count = SendMessage(hw, LB_GETCOUNT, 0, 0); hw = GetDlgItem(hwndDlg, IDC_BTN_DOWN); EnableWindow(hw, (sel < count - 1)); SendMessage( GetParent( hwndDlg ), PSM_CHANGED, 0, 0 ); } break; case IDC_BTN_REM: hw = GetDlgItem(hwndDlg, IDC_LIST_TIMES2); sel = SendMessage(hw, LB_GETCURSEL, 0, 0); if(sel != LB_ERR) { SendMessage(hw, LB_DELETESTRING, (WPARAM)sel, 0); temp_listbox_items.remove(sel); hw = GetDlgItem(hwndDlg, IDC_BTN_REM); EnableWindow(hw, FALSE); hw = GetDlgItem(hwndDlg, IDC_BTN_EDIT); EnableWindow(hw, FALSE); hw = GetDlgItem(hwndDlg, IDC_BTN_UP); EnableWindow(hw, FALSE); hw = GetDlgItem(hwndDlg, IDC_BTN_DOWN); EnableWindow(hw, FALSE); SendMessage( GetParent( hwndDlg ), PSM_CHANGED, 0, 0 ); } break; case IDC_BTN_DOWN: { hw = GetDlgItem(hwndDlg, IDC_LIST_TIMES2); int sel2 = SendMessage(hw, LB_GETCURSEL, 0, 0); if(sel2 != LB_ERR) { add_edit_item = temp_listbox_items[sel2]; temp_listbox_items[sel2] = temp_listbox_items[sel2 + 1]; temp_listbox_items[sel2 + 1] = add_edit_item; SendMessage(hw, LB_DELETESTRING, (WPARAM)sel2, (LPARAM)0); SendMessage(hw, LB_INSERTSTRING, (WPARAM)sel2, (LPARAM)temp_listbox_items[sel2].pszText); SendMessage(hw, LB_DELETESTRING, (WPARAM)(sel2 + 1), (LPARAM)0); SendMessage(hw, LB_INSERTSTRING, (WPARAM)(sel2 + 1), (LPARAM)temp_listbox_items[sel2 + 1].pszText); SendMessage(hw, LB_SETCURSEL, (WPARAM)(sel2 + 1), 0); hw = GetDlgItem(hwndDlg, IDC_BTN_UP); EnableWindow(hw, (sel2 + 1 > 0)); hw = GetDlgItem(hwndDlg, IDC_LIST_TIMES2); int count = SendMessage(hw, LB_GETCOUNT, 0, 0); hw = GetDlgItem(hwndDlg, IDC_BTN_DOWN); EnableWindow(hw, (sel2 + 1 < count - 1)); SendMessage( GetParent( hwndDlg ), PSM_CHANGED, 0, 0 ); } } break; case IDC_BTN_UP: { hw = GetDlgItem(hwndDlg, IDC_LIST_TIMES2); int sel2 = SendMessage(hw, LB_GETCURSEL, 0, 0); if(sel2 != LB_ERR) { add_edit_item = temp_listbox_items[sel2]; temp_listbox_items[sel2] = temp_listbox_items[sel2 - 1]; temp_listbox_items[sel2 - 1] = add_edit_item; SendMessage(hw, LB_DELETESTRING, (WPARAM)sel2, (LPARAM)0); SendMessage(hw, LB_INSERTSTRING, (WPARAM)sel2, (LPARAM)temp_listbox_items[sel2].pszText); SendMessage(hw, LB_DELETESTRING, (WPARAM)(sel2 - 1), (LPARAM)0); SendMessage(hw, LB_INSERTSTRING, (WPARAM)(sel2 - 1), (LPARAM)temp_listbox_items[sel2 - 1].pszText); SendMessage(hw, LB_SETCURSEL, (WPARAM)(sel2 - 1), 0); hw = GetDlgItem(hwndDlg, IDC_BTN_UP); EnableWindow(hw, (sel2 - 1 > 0)); hw = GetDlgItem(hwndDlg, IDC_LIST_TIMES2); int count = SendMessage(hw, LB_GETCOUNT, 0, 0); hw = GetDlgItem(hwndDlg, IDC_BTN_DOWN); EnableWindow(hw, (sel2 - 1 < count - 1)); SendMessage( GetParent( hwndDlg ), PSM_CHANGED, 0, 0 ); } } break; case IDC_CHK_ICONS: case IDC_CHK_MINMAX: SendMessage( GetParent( hwndDlg ), PSM_CHANGED, 0, 0 ); break; case IDC_CHK_HIDEMENU: SendMessage( GetParent( hwndDlg ), PSM_CHANGED, 0, 0 ); break; case IDC_CHK_FORMAT: hw = GetDlgItem(hwndDlg, IDC_ED_FORMAT); EnableWindow(hw, IsDlgButtonChecked(hwndDlg, IDC_CHK_FORMAT)); hw = GetDlgItem(hwndDlg, IDC_ED_DATE_FORMAT); EnableWindow(hw, IsDlgButtonChecked(hwndDlg, IDC_CHK_FORMAT)); SendMessage( GetParent( hwndDlg ), PSM_CHANGED, 0, 0 ); break; } } if(LOWORD(wParam) == IDC_TEXTCOL || LOWORD(wParam) == IDC_BGCOL || LOWORD(wParam) == IDC_SPIN1 || LOWORD(wParam) == IDC_SP_INDENT || LOWORD(wParam) == IDC_SP_ROWHEIGHT) { SendMessage( GetParent( hwndDlg ), PSM_CHANGED, 0, 0 ); } break; case WM_NOTIFY: if(((LPNMHDR)lParam)->code == UDN_DELTAPOS ) { SendMessage( GetParent( hwndDlg ), PSM_CHANGED, 0, 0 ); } if(((LPNMHDR)lParam)->code == PSN_APPLY ) { bool new_minmax = IsDlgButtonChecked(hwndDlg, IDC_CHK_MINMAX) == BST_CHECKED; DBWriteContactSettingByte(NULL, "WorldTime", "MinMax", new_minmax ? 1 : 0); set_minmax(new_minmax); bool new_set_format = IsDlgButtonChecked(hwndDlg, IDC_CHK_FORMAT) == BST_CHECKED; DBWriteContactSettingByte(NULL, "WorldTime", "EnableTimeFormat", new_set_format ? 1 : 0); set_set_format(new_set_format); bool new_show_icons = IsDlgButtonChecked(hwndDlg, IDC_CHK_ICONS) == BST_CHECKED; DBWriteContactSettingByte(NULL, "WorldTime", "ShowIcons", new_show_icons ? 1 : 0); set_show_icons(new_show_icons); bool new_hide_menu = IsDlgButtonChecked(hwndDlg, IDC_CHK_HIDEMENU) == BST_CHECKED; DBWriteContactSettingByte(NULL, "WorldTime", "HideMenu", new_hide_menu ? 1 : 0); set_hide_menu(new_hide_menu); TCHAR buf[512]; GetDlgItemText(hwndDlg, IDC_ED_FORMAT, buf, 512); DBWriteContactSettingTString(NULL, "WorldTime", "TimeFormat", buf); set_time_format(buf); GetDlgItemText(hwndDlg, IDC_ED_DATE_FORMAT, buf, 512); DBWriteContactSettingTString(NULL, "WorldTime", "DateFormat", buf); set_date_format(buf); copy_listbox_items(listbox_items, temp_listbox_items); save_listbox_items(); if(!ServiceExists(MS_FONT_REGISTERT)) { DBWriteContactSettingDword(NULL, "WorldTime", "FontCol", ContactFontColour = SendDlgItemMessage(hwndDlg, IDC_TEXTCOL, CPM_GETCOLOUR, 0, 0)); DBWriteContactSettingByte(0, "WorldTime", "FontSize", (BYTE)SendMessage(GetDlgItem(hwndDlg, IDC_SPIN1), UDM_GETPOS, 0, 0) & 255); } DBWriteContactSettingDword(NULL, "WorldTime", "BgColour", SendDlgItemMessage(hwndDlg, IDC_BGCOL, CPM_GETCOLOUR, 0, 0)); DBWriteContactSettingWord(0, "WorldTime", "Indent", (WORD)SendMessage(GetDlgItem(hwndDlg, IDC_SP_INDENT), UDM_GETPOS, 0, 0)); DBWriteContactSettingWord(0, "WorldTime", "RowHeight", (WORD)SendMessage(GetDlgItem(hwndDlg, IDC_SP_ROWHEIGHT), UDM_GETPOS, 0, 0)); DeleteObject(ContactFont); ContactFont = (HFONT)GetFont(); if(pluginwind) { /* RECT r; SIZE textSize; GetWindowRect(pluginwind, &r); HFONT hOldFont = (HFONT)SelectObject(GetDC(pluginwind), ContactFont); GetTextExtentPoint32(GetDC(pluginwind),"X",1,&textSize); SelectObject(GetDC(pluginwind), hOldFont); SetWindowPos(pluginwind, 0, 0, 0, r.right - r.left, textSize.cy * listbox_items.size(), SWP_NOZORDER | SWP_NOMOVE); if(Frameid != -1) { CallService(MS_CLIST_FRAMES_SETFRAMEOPTIONS, (WPARAM)MAKELONG(FO_HEIGHT, Frameid), (LPARAM)DBGetContactSettingByte(0, "WorldTime", "FontSize", 10) * listbox_items.size()); } */ FillList(0, 0); } return TRUE; } break; } return FALSE; }
void ShowPopup(XSTATUSCHANGE *xsc) { DBVARIANT dbv; char szSetting[64]; POPUPDATAT ppd = {0}; ppd.lchContact = xsc->hContact; switch(xsc->type) { case TYPE_JABBER_MOOD: case TYPE_JABBER_ACTIVITY: { mir_snprintf(szSetting, SIZEOF(szSetting), "%s/%s/%s", xsc->szProto, (xsc->type == TYPE_JABBER_MOOD) ? "mood" : "activity", "icon"); if (!DBGetContactSettingString(xsc->hContact, "AdvStatus", szSetting, &dbv)) { ppd.lchIcon = (HICON)CallService(MS_SKIN2_GETICON, 0, (LPARAM)dbv.pszVal); DBFreeVariant(&dbv); } break; } case TYPE_ICQ_XSTATUS: { int statusId = DBGetContactSettingByte(xsc->hContact, xsc->szProto, "XStatusId", 0); ppd.lchIcon = (HICON)CallProtoService(xsc->szProto, PS_ICQ_GETCUSTOMSTATUSICON, statusId, LR_SHARED); } } if (ppd.lchIcon == NULL) ppd.lchIcon = LoadSkinnedProtoIcon(xsc->szProto, DBGetContactSettingWord(xsc->hContact, xsc->szProto, "Status", ID_STATUS_ONLINE)); switch (opt.Colors) { case POPUP_COLOR_OWN: ppd.colorBack = DBGetContactSettingDword(0, MODULE, "40081bg", COLOR_BG_AVAILDEFAULT); ppd.colorText = DBGetContactSettingDword(0, MODULE, "40081tx", COLOR_TX_DEFAULT); break; case POPUP_COLOR_WINDOWS: ppd.colorBack = GetSysColor(COLOR_BTNFACE); ppd.colorText = GetSysColor(COLOR_WINDOWTEXT); break; case POPUP_COLOR_POPUP: ppd.colorBack = ppd.colorText = 0; break; } _tcscpy(ppd.lptzContactName, (TCHAR *)CallService(MS_CLIST_GETCONTACTDISPLAYNAME, (WPARAM)xsc->hContact, GSMDF_TCHAR)); if (opt.ShowGroup) //add group name to popup title { if (!DBGetContactSettingTString(xsc->hContact, "CList", "Group", &dbv)) { _tcscat(ppd.lptzContactName, _T(" (")); _tcscat(ppd.lptzContactName, dbv.ptszVal); _tcscat(ppd.lptzContactName, _T(")")); DBFreeVariant(&dbv); } } // cut message if needed if (opt.PTruncateMsg && (opt.PMsgLen > 0) && xsc->stzText && (_tcslen(xsc->stzText) > opt.PMsgLen)) { TCHAR buff[MAX_TEXT_LEN + 3]; _tcsncpy(buff, xsc->stzText, opt.PMsgLen); buff[opt.PMsgLen] = 0; _tcscat(buff, _T("...")); mir_free(xsc->stzText); xsc->stzText = mir_tstrdup(buff); } TCHAR *Template; switch (xsc->action) { case NOTIFY_NEW_XSTATUS: Template = templates.PopupNewXstatus; break; case NOTIFY_NEW_MESSAGE: Template = templates.PopupNewMsg; break; case NOTIFY_REMOVE: Template = templates.PopupRemove; break; } TCHAR stzPopupText[2*MAX_TEXT_LEN]; ReplaceVars(xsc, Template, templates.PopupDelimiter, stzPopupText); _tcsncpy(ppd.lptzText, stzPopupText, SIZEOF(ppd.lptzText)); ppd.lptzText[SIZEOF(ppd.lptzText) - 1] = 0; ppd.PluginWindowProc = (WNDPROC)PopupDlgProc; ppd.iSeconds = opt.PopupTimeout; PUAddPopUpT(&ppd); }
INT_PTR CALLBACK SelectContainerDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) { HWND hwndMsgDlg = 0; hwndMsgDlg = (HWND) GetWindowLongPtr(hwndDlg, GWLP_USERDATA); switch (msg) { case WM_INITDIALOG: { TCHAR szNewTitle[128]; RECT rc, rcParent; struct TContainerData *pContainer = 0; SetWindowLongPtr(hwndDlg, GWLP_USERDATA, (LONG_PTR) lParam); hwndMsgDlg = (HWND) lParam; TranslateDialogDefault(hwndDlg); if (lParam) { struct TWindowData *dat = (struct TWindowData *)GetWindowLongPtr((HWND)lParam, GWLP_USERDATA); if (dat) { mir_sntprintf(szNewTitle, safe_sizeof(szNewTitle), CTranslator::get(CTranslator::CNT_SELECT_FOR), dat->cache->getNick()); SetWindowText(hwndDlg, szNewTitle); } } SendMessage(hwndDlg, DM_SC_BUILDLIST, 0, 0); SendDlgItemMessage(hwndDlg, IDC_NEWCONTAINERNAME, EM_LIMITTEXT, (WPARAM)CONTAINER_NAMELEN, 0); SendDlgItemMessage(hwndDlg, IDC_NEWCONTAINER, EM_LIMITTEXT, (WPARAM)CONTAINER_NAMELEN, 0); GetWindowRect(hwndDlg, &rc); GetWindowRect(GetParent(hwndDlg), &rcParent); SetWindowPos(hwndDlg, 0, (rcParent.left + rcParent.right - (rc.right - rc.left)) / 2, (rcParent.top + rcParent.bottom - (rc.bottom - rc.top)) / 2, 0, 0, SWP_NOSIZE | SWP_SHOWWINDOW); return TRUE; } case WM_COMMAND: switch (LOWORD(wParam)) { case IDOK: { TCHAR szName[CONTAINER_NAMELEN]; LRESULT iItem; if ((iItem = SendDlgItemMessage(hwndDlg, IDC_CNTLIST, LB_GETCURSEL, 0, 0)) != LB_ERR) { SendDlgItemMessage(hwndDlg, IDC_CNTLIST, LB_GETTEXT, (WPARAM) iItem, (LPARAM) szName); if (IsWindow(hwndMsgDlg)) SendMessage(hwndMsgDlg, DM_CONTAINERSELECTED, 0, (LPARAM) szName); } if (IsWindow(hwndDlg)) DestroyWindow(hwndDlg); break; } case IDCANCEL: DestroyWindow(hwndDlg); break; case IDC_DELETECONTAINER: { TCHAR szName[CONTAINER_NAMELEN + 1]; LRESULT iItem; if ((iItem = SendDlgItemMessage(hwndDlg, IDC_CNTLIST, LB_GETCURSEL, 0, 0)) != LB_ERR) { SendDlgItemMessage(hwndDlg, IDC_CNTLIST, LB_GETTEXT, (WPARAM) iItem, (LPARAM) szName); if (!_tcsncmp(szName, _T("default"), CONTAINER_NAMELEN) || !_tcsncmp(szName, CTranslator::get(CTranslator::GEN_DEFAULT_CONTAINER_NAME), CONTAINER_NAMELEN)) MessageBox(hwndDlg, CTranslator::get(CTranslator::CNT_SELECT_DELETEERROR), _T("Error"), MB_OK | MB_ICONERROR); else { int iIndex = SendDlgItemMessage(hwndDlg, IDC_CNTLIST, LB_GETITEMDATA, (WPARAM)iItem, 0); DeleteContainer(iIndex); SendDlgItemMessage(hwndDlg, IDC_CNTLIST, LB_RESETCONTENT, 0, 0); SendMessage(hwndDlg, DM_SC_BUILDLIST, 0, 0); BuildContainerMenu(); } } break; } case IDC_RENAMECONTAINER: { TCHAR szNewName[CONTAINER_NAMELEN], szName[CONTAINER_NAMELEN + 1]; int iLen, iItem; struct TContainerData *pCurrent = pFirstContainer; iLen = GetWindowTextLength(GetDlgItem(hwndDlg, IDC_NEWCONTAINERNAME)); if (iLen) { GetWindowText(GetDlgItem(hwndDlg, IDC_NEWCONTAINERNAME), szNewName, CONTAINER_NAMELEN); if(!_tcsncmp(szNewName, CGlobals::m_default_container_name, CONTAINER_NAMELEN) || !_tcsncmp(szNewName, CTranslator::get(CTranslator::GEN_DEFAULT_CONTAINER_NAME), CONTAINER_NAMELEN)) { MessageBox(hwndDlg, CTranslator::get(CTranslator::CNT_SELECT_RENAMEERROR), _T("Error"), MB_OK | MB_ICONERROR); break; } iItem = SendDlgItemMessage(hwndDlg, IDC_CNTLIST, LB_FINDSTRING, (WPARAM) - 1, (LPARAM) szNewName); if (iItem != LB_ERR) { TCHAR szOldName[CONTAINER_NAMELEN + 1]; SendDlgItemMessage(hwndDlg, IDC_CNTLIST, LB_GETTEXT, (WPARAM) iItem, (LPARAM) szOldName); if (lstrlen(szOldName) == lstrlen(szNewName)) { MessageBox(0, CTranslator::get(CTranslator::CNT_SELECT_INUSE), _T("Error"), MB_OK | MB_ICONERROR); SetFocus(GetDlgItem(hwndDlg, IDC_NEWCONTAINERNAME)); break; } } if ((iItem = SendDlgItemMessage(hwndDlg, IDC_CNTLIST, LB_GETCURSEL, 0, 0)) != LB_ERR) { SendDlgItemMessage(hwndDlg, IDC_CNTLIST, LB_GETTEXT, (WPARAM) iItem, (LPARAM) szName); if (!_tcsncmp(szName, _T("default"), CONTAINER_NAMELEN) || !_tcsncmp(szName, CTranslator::get(CTranslator::GEN_DEFAULT_CONTAINER_NAME), CONTAINER_NAMELEN)) MessageBox(hwndDlg, CTranslator::get(CTranslator::CNT_SELECT_RENAMEERROR), _T("Error"), MB_OK | MB_ICONERROR); else { int iIndex = SendDlgItemMessage(hwndDlg, IDC_CNTLIST, LB_GETITEMDATA, (WPARAM)iItem, 0); RenameContainer(iIndex, szNewName); SendDlgItemMessage(hwndDlg, IDC_CNTLIST, LB_RESETCONTENT, 0, 0); while (pCurrent) { if (!_tcsncmp(pCurrent->szName, szName, CONTAINER_NAMELEN) && lstrlen(pCurrent->szName) == lstrlen(szName)) { _tcsncpy(pCurrent->szName, szNewName, CONTAINER_NAMELEN); SendMessage(pCurrent->hwnd, DM_CONFIGURECONTAINER, 0, 0); } pCurrent = pCurrent->pNextContainer; } SendMessage(hwndDlg, DM_SC_BUILDLIST, 0, 0); BuildContainerMenu(); } } } break; } case IDC_CREATENEW: { int iLen, iItem; TCHAR szNewName[CONTAINER_NAMELEN], szName[CONTAINER_NAMELEN + 1]; iLen = GetWindowTextLength(GetDlgItem(hwndDlg, IDC_NEWCONTAINER)); if (iLen) { GetWindowText(GetDlgItem(hwndDlg, IDC_NEWCONTAINER), szNewName, CONTAINER_NAMELEN); iItem = SendDlgItemMessage(hwndDlg, IDC_CNTLIST, LB_FINDSTRING, (WPARAM) - 1, (LPARAM) szNewName); if (iItem != LB_ERR || !_tcsncmp(szNewName, CGlobals::m_default_container_name, CONTAINER_NAMELEN)) { SendDlgItemMessage(hwndDlg, IDC_CNTLIST, LB_GETTEXT, (WPARAM)iItem, (LPARAM)szName); if (lstrlen(szName) == lstrlen(szNewName) || !_tcsncmp(szNewName, CGlobals::m_default_container_name, CONTAINER_NAMELEN)) { MessageBox(0, CTranslator::get(CTranslator::CNT_SELECT_INUSE), _T("Error"), MB_OK | MB_ICONERROR); SetFocus(GetDlgItem(hwndDlg, IDC_NEWCONTAINER)); break; } } if (IsWindow(hwndMsgDlg)) { SendMessage(hwndMsgDlg, DM_CONTAINERSELECTED, 0, (LPARAM) szNewName); if (IsWindow(hwndDlg)) DestroyWindow(hwndDlg); } } break; } case IDC_CNTLIST: if (HIWORD(wParam) == LBN_DBLCLK) SendMessage(hwndDlg, WM_COMMAND, IDOK, 0); break; } break; /* * fill the list box... */ case DM_SC_BUILDLIST: { DBVARIANT dbv; int iCounter = 0, iItemNew; char *szKey = "TAB_ContainersW"; char szValue[10]; struct TContainerData *pContainer = 0; do { _snprintf(szValue, 8, "%d", iCounter); if (M->GetTString(NULL, szKey, szValue, &dbv)) break; // end of list if (dbv.type == DBVT_ASCIIZ || dbv.type == DBVT_WCHAR) { if (_tcsncmp(dbv.ptszVal, _T("**free**"), CONTAINER_NAMELEN)) { iItemNew = SendDlgItemMessage(hwndDlg, IDC_CNTLIST, LB_ADDSTRING, 0, (LPARAM)(!_tcscmp(dbv.ptszVal, _T("default")) ? CTranslator::get(CTranslator::GEN_DEFAULT_CONTAINER_NAME) : dbv.ptszVal)); if (iItemNew != LB_ERR) SendDlgItemMessage(hwndDlg, IDC_CNTLIST, LB_SETITEMDATA, (WPARAM)iItemNew, (LPARAM)iCounter); } DBFreeVariant(&dbv); } } while (++iCounter); /* * highlight the name of the container to which the message window currently is assigned */ SendMessage(hwndMsgDlg, DM_QUERYCONTAINER, 0, (LPARAM)&pContainer); if (pContainer) { LRESULT iItem; iItem = SendDlgItemMessage(hwndDlg, IDC_CNTLIST, LB_FINDSTRING, (WPARAM) - 1, (LPARAM)(!_tcscmp(pContainer->szName, _T("default")) ? CTranslator::get(CTranslator::GEN_DEFAULT_CONTAINER_NAME) : pContainer->szName)); if (iItem != LB_ERR) SendDlgItemMessage(hwndDlg, IDC_CNTLIST, LB_SETCURSEL, (WPARAM) iItem, 0); } } break; } return FALSE; }
//===== Load ===== //Initializes the services provided and the link to those needed //Called when the plugin is loaded into Miranda MIRAPI int Load(PLUGINLINK *link) { char ver[1024]; pluginLink=link; g_popup.isOsUnicode = (GetVersion() & 0x80000000) == 0; CallService(MS_SYSTEM_GETVERSIONTEXT, (WPARAM) sizeof(ver), (LPARAM) ver); g_popup.isMirUnicode = strstr(ver, "Unicode") != NULL; hGetStatus = CreateServiceFunction(MS_POPUP_GETSTATUS, GetStatus); DuplicateHandle(GetCurrentProcess(), GetCurrentThread(), GetCurrentProcess(), &hMainThread, THREAD_SET_CONTEXT, FALSE, 0); mir_getLI (&li); mir_getMMI (&mmi); mir_getUTFI (&utfi); mir_getMTI (&MText); mir_getLP(&pluginInfoEx); #if defined(_DEBUG) PopUpOptions.debug = DBGetContactSettingByte(NULL, MODULNAME, "debug", FALSE); #else PopUpOptions.debug = false; #endif LoadGDIPlus(); //Transparent and animation routines OSVERSIONINFO osvi = { 0 }; BOOL bResult = FALSE; osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); bResult = GetVersionEx(&osvi); // MLU layer for ansi release #if !defined(_UNICODE) MySetLayeredWindowAttributes = 0; MyUpdateLayeredWindow = 0; MyAnimateWindow = 0; MyDrawTextW = 0; MyDrawTextExW = 0; MySetWindowTextW = 0; MySendMessageW = 0; MyCallWindowProcW = 0; MyCreateWindowExW = 0; MyGetMonitorInfo = 0; MyMonitorFromWindow = 0; hUserDll = LoadLibrary(_T("user32.dll")); if (hUserDll) { MySetLayeredWindowAttributes = (BOOL (WINAPI *)(HWND,COLORREF,BYTE,DWORD))GetProcAddress(hUserDll, "SetLayeredWindowAttributes"); MyUpdateLayeredWindow = (BOOL (WINAPI *)(HWND, HDC, POINT *, SIZE *, HDC, POINT *, COLORREF, BLENDFUNCTION *, DWORD))GetProcAddress(hUserDll, "UpdateLayeredWindow"); MyAnimateWindow = (BOOL (WINAPI*)(HWND,DWORD,DWORD))GetProcAddress(hUserDll,"AnimateWindow"); MyDrawTextW = (int (WINAPI *)(HDC, LPCWSTR, int, LPRECT, UINT))GetProcAddress(hUserDll,"DrawTextW"); MyDrawTextExW = (int (WINAPI*)(HDC,LPCWSTR,int,LPRECT,UINT,LPDRAWTEXTPARAMS))GetProcAddress(hUserDll,"DrawTextExW"); MySetWindowTextW = (BOOL (WINAPI*)(HWND, LPCWSTR))GetProcAddress(hUserDll,"SetWindowTextW"); MySendMessageW = (LRESULT (WINAPI *)(HWND, UINT, WPARAM, LPARAM))GetProcAddress(hUserDll,"SendMessageW"); MyCallWindowProcW = (LRESULT (WINAPI *)(WNDPROC, HWND, UINT, WPARAM, LPARAM))GetProcAddress(hUserDll,"CallWindowProcW"); MyCreateWindowExW = (HWND (WINAPI*)(DWORD, LPCWSTR, LPCWSTR, DWORD, int, int, int, int, HWND, HMENU, HINSTANCE, LPVOID))GetProcAddress(hUserDll,"CreateWindowExW"); if (LOWORD(GetVersion())!=4) { //Windows 98, ME, 2000, XP, and later support multimonitor configuration. if (bResult) { if (osvi.dwPlatformId == VER_PLATFORM_WIN32_NT) { //2000 or XP #ifdef UNICODE MyGetMonitorInfo = (BOOL (WINAPI*)(HMONITOR,LPMONITORINFO))GetProcAddress(hUserDll,("GetMonitorInfoW")); #else MyGetMonitorInfo = (BOOL (WINAPI*)(HMONITOR,LPMONITORINFO))GetProcAddress(hUserDll,("GetMonitorInfoA")); #endif //UNICODE } else { //98 or ME // attempt to fix multimonitor on 9x MyGetMonitorInfo = (BOOL (WINAPI*)(HMONITOR,LPMONITORINFO))GetProcAddress(hUserDll,("GetMonitorInfoA")); if (!MyGetMonitorInfo) MyGetMonitorInfo = (BOOL (WINAPI*)(HMONITOR,LPMONITORINFO))GetProcAddress(hUserDll,("GetMonitorInfo")); } } //There's no need for an else branch. if (MyGetMonitorInfo) MyMonitorFromWindow = (HMONITOR (WINAPI*)(HWND,DWORD))GetProcAddress(hUserDll, ("MonitorFromWindow")); } } hGdiDll = LoadLibrary(_T("gdi32.dll")); if (hGdiDll) { MyGetTextExtentPoint32W = (BOOL (WINAPI *)(HDC, LPCWSTR, int, LPSIZE))GetProcAddress(hGdiDll,"GetTextExtentPoint32W"); } else{ MyGetTextExtentPoint32W = 0; } hMsimgDll = LoadLibrary(_T("msimg32.dll")); MyAlphaBlend = 0; MyTransparentBlt = 0; if (hMsimgDll) { MyTransparentBlt = (BOOL (WINAPI *)(HDC, int, int, int, int, HDC, int, int, int, int, UINT)) GetProcAddress(hMsimgDll, "TransparentBlt"); MyAlphaBlend = (BOOL (WINAPI *)(HDC, int, int, int, int, HDC, int, int, int, int, BLENDFUNCTION)) GetProcAddress(hMsimgDll, "AlphaBlend"); } #endif hDwmapiDll = LoadLibrary(_T("dwmapi.dll")); MyDwmEnableBlurBehindWindow = 0; if (hDwmapiDll) { MyDwmEnableBlurBehindWindow = (HRESULT (WINAPI *)(HWND, DWM_BLURBEHIND *)) GetProcAddress(hDwmapiDll, "DwmEnableBlurBehindWindow"); } PopupHistoryLoad(); LoadPopupThread(); if (!LoadPopupWnd2()) { MessageBox(0, TranslateTS( _T("Error: I could not register the PopUp Window class.\r\n") _T("The plugin will not operate.") ), _T(MODULNAME_LONG), MB_ICONSTOP|MB_OK); return 0; //We couldn't register our Window Class, don't hook any event: the plugin will act as if it was disabled. } RegisterOptPrevBox(); // Register in DBEditor++ DBVARIANT dbv; if (DBGetContactSetting(NULL, "KnownModules", MODULNAME, &dbv)) DBWriteContactSettingString(NULL, "KnownModules", pluginInfoEx.shortName, MODULNAME); DBFreeVariant(&dbv); hModulesLoaded = HookEvent(ME_SYSTEM_MODULESLOADED, ModulesLoaded); hOptionsInitialize = HookEvent(ME_OPT_INITIALISE, OptionsInitialize); hOkToExit = HookEvent(ME_SYSTEM_OKTOEXIT, OkToExit); // hEventStatusChanged = HookEvent(ME_CLIST_STATUSMODECHANGE,StatusModeChanged); hbmNoAvatar = LoadBitmap(hInst, MAKEINTRESOURCE(IDB_NOAVATAR)); if(!OptionLoaded){ LoadOptions(); } //Service Functions for (int i = SIZEOF(popupServices); i--; ) popupServices[i].handle = CreateServiceFunction(popupServices[i].name, popupServices[i].func); //load icons / create hook InitIcons(); hIconsChanged = HookEvent(ME_SKIN2_ICONSCHANGED,IconsChanged); //add menu items InitMenuItems(); return 0; }
/** Initializes the services provided and the link to those needed * Called when the plugin is loaded into Miranda */ int __declspec(dllexport)Load(PLUGINLINK *link) { PROTOCOLDESCRIPTOR pd; DBVARIANT dbv; pluginLink=link; mir_getMMI(&mmi); mir_getLP(&pluginInfo); os_unicode_enabled = IsUnicodeOS(); if(ServiceExists(MS_DB_SETSETTINGRESIDENT)) { // 0.6+ CallService(MS_DB_SETSETTINGRESIDENT, TRUE, (LPARAM)(META_PROTO "/Status")); CallService(MS_DB_SETSETTINGRESIDENT, TRUE, (LPARAM)(META_PROTO "/IdleTS")); CallService(MS_DB_SETSETTINGRESIDENT, TRUE, (LPARAM)(META_PROTO "/ContactCountCheck")); CallService(MS_DB_SETSETTINGRESIDENT, TRUE, (LPARAM)(META_PROTO "/Handle")); CallService(MS_DB_SETSETTINGRESIDENT, TRUE, (LPARAM)(META_PROTO "/WindowOpen")); } //set all contacts to 'offline', and initialize subcontact counter for db consistency check { HANDLE hContact = (HANDLE)CallService( MS_DB_CONTACT_FINDFIRST, 0, 0); char *proto; while(hContact != NULL) { //proto = (char *)CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM)hContact, 0); if(!DBGetContactSetting(hContact, "Protocol", "p", &dbv)) { proto = dbv.pszVal; if (proto && !lstrcmp( META_PROTO, proto)) { DBWriteContactSettingWord(hContact, META_PROTO, "Status", ID_STATUS_OFFLINE); DBWriteContactSettingDword(hContact, META_PROTO, "IdleTS", 0); DBWriteContactSettingByte(hContact, META_PROTO, "ContactCountCheck", 0); // restore any saved defaults that might have remained if miranda was closed or crashed while a convo was happening if(DBGetContactSettingDword(hContact, META_PROTO, "SavedDefault", (DWORD)-1) != (DWORD)-1) { DBWriteContactSettingDword(hContact, META_PROTO, "Default", DBGetContactSettingDword(hContact, META_PROTO, "SavedDefault", 0)); DBWriteContactSettingDword(hContact, META_PROTO, "SavedDefault", (DWORD)-1); } } DBFreeVariant(&dbv); } hContact = ( HANDLE )CallService( MS_DB_CONTACT_FINDNEXT,( WPARAM )hContact, 0 ); } } Meta_ReadOptions(&options); // sets subcontact handles to metacontacts, and metacontact handles to subcontacts // (since these handles are not necessarily the same from run to run of miranda) // also verifies that subcontacts: have metacontacts, and that contact numbers are reasonable, // that metacontacts: have the correct number of subcontacts, and have reasonable defaults if(Meta_SetHandles()) { // error - db corruption if(!DBGetContactSettingByte(0, META_PROTO, "DisabledMessageShown", 0)) { MessageBox(0, Translate("Error - Database corruption.\nPlugin disabled."), Translate("MetaContacts"), MB_OK | MB_ICONERROR); DBWriteContactSettingByte(0, META_PROTO, "DisabledMessageShown", 1); } //Meta_HideMetaContacts(TRUE); return 1; } DBDeleteContactSetting(0, META_PROTO, "DisabledMessageShown"); // add our modules to the KnownModules list { DBVARIANT dbv; if (DBGetContactSetting(NULL, "KnownModules", META_PROTO, &dbv)) DBWriteContactSettingString(NULL, "KnownModules", META_PROTO, META_PROTO); else DBFreeVariant(&dbv); } ZeroMemory(&pd,sizeof(pd)); pd.cbSize=PROTOCOLDESCRIPTOR_V3_SIZE;//sizeof(pd); pd.szName=META_FILTER; pd.type=PROTOTYPE_FILTER; CallService(MS_PROTO_REGISTERMODULE,0,(LPARAM)&pd); ZeroMemory(&pd,sizeof(pd)); pd.cbSize=PROTOCOLDESCRIPTOR_V3_SIZE;//sizeof(pd); pd.szName=META_PROTO; pd.type = PROTOTYPE_PROTOCOL; CallService(MS_PROTO_REGISTERMODULE,0,(LPARAM)&pd); // further db setup done in modules loaded (nick [protocol string required] & clist display name) Meta_InitServices(); // moved to 'modules loaded' event handler (in meta_services.c) because we need to // check protocol for jabber hack, and the proto modules must be loaded //Meta_HideLinkedContactsAndSetHandles(); if(ServiceExists(MS_MSG_GETWINDOWAPI)) { message_window_api_enabled = TRUE; } // for clist_meta_mw - write hidden group name to DB DBWriteContactSettingString(0, META_PROTO, "HiddenGroupName", META_HIDDEN_GROUP); return 0; }
void TemplateHTMLBuilder::appendEventTemplate(IEView *view, IEVIEWEVENT *event, ProtocolSettings* protoSettings) { DBVARIANT dbv; CONTACTINFO ci; HANDLE hRealContact; char *szRealProto = NULL; char tempBase[1024]; char *szBase=NULL; char tempStr[1024]; char *szNoAvatar=NULL; char szCID[32]; char *szName = NULL; char *szNameIn = NULL; char *szNameOut = NULL; char *szUIN = NULL; char *szUINIn = NULL; char *szUINOut = NULL; char *szNickIn = NULL; char *szNickOut = NULL; char *szStatusMsg = NULL; char *szAvatar = NULL; char *szAvatarIn = NULL; char *szAvatarOut = NULL; char *szText = NULL; char *szProto = NULL; char *szFileDesc = NULL; const char *tmpltName[2]; bool isGrouping = false; // DWORD today = (DWORD)time(NULL); // today = today - today % 86400; if (protoSettings == NULL) { return; } hRealContact = getRealContact(event->hContact); szRealProto = getProto(hRealContact); szProto = getProto(event->pszProto, event->hContact); tempBase[0]='\0'; TemplateMap *tmpm = getTemplateMap(protoSettings); if (tmpm!=NULL) { strcpy(tempBase, "file://"); strcat(tempBase, tmpm->getFilename()); char* pathrun = tempBase + strlen(tempBase); while ((*pathrun != '\\' && *pathrun != '/') && (pathrun > tempBase)) pathrun--; pathrun++; *pathrun = '\0'; isGrouping = tmpm->isGrouping(); } szBase = Utils::UTF8Encode(tempBase); if (event->hContact != NULL) { getUINs(event->hContact, szUINIn, szUINOut); } if (event->hContact != NULL) { szNameOut = getEncodedContactName(NULL, szProto, szRealProto); szNameIn = getEncodedContactName(event->hContact, szProto, szRealProto); } else { szNameOut = Utils::dupString(" "); szNameIn = Utils::dupString(" "); } sprintf(tempStr, "%snoavatar.jpg", tempBase); szNoAvatar = Utils::UTF8Encode(tempStr); if(event->hContact != NULL) { szAvatarIn = getAvatar(event->hContact, szRealProto); } if (szAvatarIn == NULL) { szAvatarIn = Utils::dupString(szNoAvatar); } szAvatarOut = getAvatar(NULL, szRealProto); if (szAvatarOut == NULL) { szAvatarOut = Utils::dupString(szNoAvatar); } if(event->hContact != NULL) { if (!DBGetContactSetting(event->hContact, "CList", "StatusMsg",&dbv)) { if (strlen(dbv.pszVal) > 0) { szStatusMsg = Utils::UTF8Encode(dbv.pszVal); } DBFreeVariant(&dbv); } } ZeroMemory(&ci, sizeof(ci)); ci.cbSize = sizeof(ci); ci.hContact = event->hContact; ci.szProto = szProto; ci.dwFlag = CNF_NICK | CNF_TCHAR; if (!CallService(MS_CONTACT_GETCONTACTINFO, 0, (LPARAM) & ci)) { szNickIn = encodeUTF8(event->hContact, szRealProto, ci.pszVal, ENF_NAMESMILEYS, true); } ZeroMemory(&ci, sizeof(ci)); ci.cbSize = sizeof(ci); ci.hContact = NULL; ci.szProto = szProto; ci.dwFlag = CNF_NICK | CNF_TCHAR; if (!CallService(MS_CONTACT_GETCONTACTINFO, 0, (LPARAM) & ci)) { szNickOut = encodeUTF8(event->hContact, szRealProto, ci.pszVal, ENF_NAMESMILEYS, true); } IEVIEWEVENTDATA* eventData = event->eventData; for (int eventIdx = 0; eventData!=NULL && (eventIdx < event->count || event->count==-1); eventData = eventData->next, eventIdx++) { int outputSize; char *output; output = NULL; if (eventData->iType == IEED_EVENT_MESSAGE || eventData->iType == IEED_EVENT_STATUSCHANGE || eventData->iType == IEED_EVENT_FILE || eventData->iType == IEED_EVENT_URL || eventData->iType == IEED_EVENT_SYSTEM) { int isSent = (eventData->dwFlags & IEEDF_SENT); int isRTL = (eventData->dwFlags & IEEDF_RTL) && tmpm->isRTL(); int isHistory = (eventData->time < (DWORD)getStartedTime() && (eventData->dwFlags & IEEDF_READ || eventData->dwFlags & IEEDF_SENT)); int isGroupBreak = TRUE; if ((getFlags(protoSettings) & Options::LOG_GROUP_MESSAGES) && eventData->dwFlags == LOWORD(getLastEventType()) && eventData->iType == IEED_EVENT_MESSAGE && HIWORD(getLastEventType()) == IEED_EVENT_MESSAGE && (isSameDate(eventData->time, getLastEventTime())) // && ((eventData->time < today) == (getLastEventTime() < today)) && (((eventData->time < (DWORD)startedTime) == (getLastEventTime() < (DWORD)startedTime)) || !(eventData->dwFlags & IEEDF_READ))) { isGroupBreak = FALSE; } if (isSent) { szAvatar = szAvatarOut; szUIN = szUINOut; sprintf(szCID, "%d", 0); } else { szAvatar = szAvatarIn; szUIN = szUINIn; sprintf(szCID, "%d", (int)event->hContact); } tmpltName[0] = groupTemplate; tmpltName[1] = NULL; groupTemplate = NULL; szName = NULL; szText = NULL; szFileDesc = NULL; if (event->eventData->dwFlags & IEEDF_UNICODE_NICK) { szName = encodeUTF8(event->hContact, szRealProto, eventData->pszNickW, ENF_NAMESMILEYS, true); } else { szName = encodeUTF8(event->hContact, szRealProto, eventData->pszNick, ENF_NAMESMILEYS, true); } if (eventData->dwFlags & IEEDF_UNICODE_TEXT) { szText = encodeUTF8(event->hContact, szRealProto, eventData->pszTextW, eventData->iType == IEED_EVENT_MESSAGE ? ENF_ALL : 0, isSent); } else { szText = encodeUTF8(event->hContact, szRealProto, eventData->pszText, event->codepage, eventData->iType == IEED_EVENT_MESSAGE ? ENF_ALL : 0, isSent); } if (eventData->dwFlags & IEEDF_UNICODE_TEXT2) { szFileDesc = encodeUTF8(event->hContact, szRealProto, eventData->pszText2W, 0, isSent); } else { szFileDesc = encodeUTF8(event->hContact, szRealProto, eventData->pszText2, event->codepage, 0, isSent); } if ((eventData->iType == IEED_EVENT_MESSAGE)) { if (!isRTL) { if (isGrouping && (getFlags(protoSettings) & Options::LOG_GROUP_MESSAGES)) { if (isGroupBreak) { tmpltName[1] = isHistory ? isSent ? "hMessageOutGroupStart" : "hMessageInGroupStart" : isSent ? "MessageOutGroupStart" : "MessageInGroupStart"; } else { tmpltName[0] = isHistory ? isSent ? "hMessageOutGroupInner" : "hMessageInGroupInner" : isSent ? "MessageOutGroupInner" : "MessageInGroupInner"; } groupTemplate = isHistory ? isSent ? "hMessageOutGroupEnd" : "hMessageInGroupEnd" : isSent ? "MessageOutGroupEnd" : "MessageInGroupEnd"; } else { tmpltName[1] = isHistory ? isSent ? "hMessageOut" : "hMessageIn" : isSent ? "MessageOut" : "MessageIn"; } } else { if (isGrouping && (getFlags(protoSettings) & Options::LOG_GROUP_MESSAGES)) { if (isGroupBreak) { tmpltName[1] = isHistory ? isSent ? "hMessageOutGroupStartRTL" : "hMessageInGroupStartRTL" : isSent ? "MessageOutGroupStartRTL" : "MessageInGroupStartRTL"; } else { tmpltName[0] = isHistory ? isSent ? "hMessageOutGroupInnerRTL" : "hMessageInGroupInnerRTL" : isSent ? "MessageOutGroupInnerRTL" : "MessageInGroupInnerRTL"; } groupTemplate = isHistory ? isSent ? "hMessageOutGroupEndRTL" : "hMessageInGroupEndRTL" : isSent ? "MessageOutGroupEndRTL" : "MessageInGroupEndRTL"; } else { tmpltName[1] = isHistory ? isSent ? "hMessageOutRTL" : "hMessageInRTL" : isSent ? "MessageOutRTL" : "MessageInRTL"; } } } else if (eventData->iType == IEED_EVENT_FILE) { tmpltName[1] = isHistory ? isSent ? "hFileOut" : "hFileIn" : isSent ? "FileOut" : "FileIn"; Template *tmplt = tmpm->getTemplate(tmpltName[1]); if (tmplt == NULL) { tmpltName[1] = isHistory ? "hFile" : "File"; } } else if (eventData->iType == IEED_EVENT_URL) { tmpltName[1] = isHistory ? isSent ? "hURLOut" : "hURLIn" : isSent ? "URLOut" : "URLIn"; Template *tmplt = tmpm->getTemplate(tmpltName[1]); if (tmplt == NULL) { tmpltName[1] = isHistory ? "hURL" : "URL"; } } else if (eventData->iType == IEED_EVENT_STATUSCHANGE || (eventData->iType == IEED_EVENT_SYSTEM)) { tmpltName[1] = isHistory ? "hStatus" : "Status"; } /* template-specific formatting */ for (int i=0;i<2;i++) { Template *tmplt; if (tmpltName[i] == NULL) continue; tmplt = tmpm->getTemplate(tmpltName[i]); if (tmplt == NULL) continue; for (Token *token = tmplt->getTokens();token!=NULL;token=token->getNext()) { const char *tokenVal; tokenVal = NULL; switch (token->getType()) { case Token::PLAIN: tokenVal = token->getText(); break; case Token::NAME: if (getFlags(protoSettings) & Options::LOG_SHOW_NICKNAMES) { tokenVal = szName; } else { tokenVal = " "; } break; case Token::TIME: if (getFlags(protoSettings) & Options::LOG_SHOW_TIME) { tokenVal = timestampToString(getFlags(protoSettings), eventData->time, 1); } else { tokenVal = " "; } break; case Token::DATE: if (getFlags(protoSettings) & Options::LOG_SHOW_DATE) { tokenVal = timestampToString(getFlags(protoSettings), eventData->time, 0); } else { tokenVal = " "; } break; case Token::TEXT: tokenVal = szText; break; case Token::AVATAR: tokenVal = szAvatar; break; case Token::CID: tokenVal = szCID; break; case Token::BASE: tokenVal = szBase; break; case Token::NAMEIN: if (getFlags(protoSettings) & Options::LOG_SHOW_NICKNAMES) { if (event->hContact != NULL) { tokenVal = szNameIn; } else { tokenVal = szName; } } else { tokenVal = " "; } break; case Token::NAMEOUT: if (getFlags(protoSettings) & Options::LOG_SHOW_NICKNAMES) { if (event->hContact != NULL) { tokenVal = szNameOut; } else { tokenVal = szName; } } else { tokenVal = " "; } break; case Token::AVATARIN: tokenVal = szAvatarIn; break; case Token::AVATAROUT: tokenVal = szAvatarOut; break; case Token::PROTO: tokenVal = szRealProto; break; case Token::UIN: tokenVal = szUIN; break; case Token::UININ: tokenVal = szUINIn; break; case Token::UINOUT: tokenVal = szUINOut; break; case Token::STATUSMSG: tokenVal = szStatusMsg; break; case Token::NICKIN: tokenVal = szNickIn; break; case Token::NICKOUT: tokenVal = szNickOut; break; case Token::FILEDESC: tokenVal = szFileDesc; break; } if (tokenVal != NULL) { if (token->getEscape()) { char *escapedToken = Utils::escapeString(tokenVal); Utils::appendText(&output, &outputSize, "%s", escapedToken); delete escapedToken; } else { Utils::appendText(&output, &outputSize, "%s", tokenVal); } } } } setLastEventType(MAKELONG(eventData->dwFlags, eventData->iType)); setLastEventTime(eventData->time); if (szName!=NULL) delete szName; if (szText!=NULL) delete szText; if (szFileDesc!=NULL) delete szFileDesc; } if (output != NULL) { view->write(output); free(output); } } if (szBase!=NULL) delete szBase; if (szRealProto!=NULL) delete szRealProto; if (szProto!=NULL) delete szProto; if (szUINIn!=NULL) delete szUINIn; if (szUINOut!=NULL) delete szUINOut; if (szNoAvatar!=NULL) delete szNoAvatar; if (szAvatarIn!=NULL) delete szAvatarIn; if (szAvatarOut!=NULL) delete szAvatarOut; if (szNameIn!=NULL) delete szNameIn; if (szNameOut!=NULL) delete szNameOut; if (szNickIn!=NULL) delete szNickIn; if (szNickOut!=NULL) delete szNickOut; if (szStatusMsg!=NULL) delete szStatusMsg; view->documentClose(); }
void TemplateHTMLBuilder::buildHead(IEView *view, IEVIEWEVENT *event) { DBVARIANT dbv; CONTACTINFO ci; char szBase[1024]; char szNoAvatar[1024]; char *szProto = NULL; char *szNameIn = NULL; char *szNameOut = NULL; char *szAvatarIn = NULL; char *szAvatarOut = NULL; int outputSize; char *output; output = NULL; szProto = Utils::dupString((char *)CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM) event->hContact, 0)); szBase[0]='\0'; TemplateMap *tmpm = (event->dwFlags & IEEF_RTL) ? TemplateMap::getTemplateMap("default_rtl") : TemplateMap::getTemplateMap("default"); if (tmpm!=NULL) { strcpy(szBase, tmpm->getFilename()); char* pathrun = szBase + strlen(szBase); while ((*pathrun != '\\' && *pathrun != '/') && (pathrun > szBase)) pathrun--; pathrun++; *pathrun = '\0'; } sprintf(szNoAvatar, "%snoavatar.jpg", szBase); if (Options::getTemplatesFlags() & Options::LOG_SHOW_NICKNAMES) { ZeroMemory(&ci, sizeof(ci)); ci.cbSize = sizeof(ci); ci.hContact = NULL; ci.szProto = szProto; ci.dwFlag = CNF_DISPLAY; if (!CallService(MS_CONTACT_GETCONTACTINFO, 0, (LPARAM) & ci)) { szNameOut = encodeUTF8(ci.pszVal, NULL, false); } szNameIn = encodeUTF8((char *) CallService(MS_CLIST_GETCONTACTDISPLAYNAME, (WPARAM) event->hContact, 0), NULL, false); } else { szNameOut = Utils::dupString(" "); szNameIn = Utils::dupString(" "); } if (!DBGetContactSetting(event->hContact, "ContactPhoto", "File",&dbv)) { if (strlen(dbv.pszVal) > 0) { szAvatarIn = Utils::dupString(dbv.pszVal); Utils::convertPath(szAvatarIn); } DBFreeVariant(&dbv); } if (szAvatarIn == NULL) { szAvatarIn = Utils::dupString(szNoAvatar); } if (!DBGetContactSetting(NULL, "ContactPhoto", "File",&dbv)) { if (strlen(dbv.pszVal) > 0) { szAvatarOut = Utils::dupString(dbv.pszVal); Utils::convertPath(szAvatarOut); } DBFreeVariant(&dbv); } if (szAvatarOut == NULL) { szAvatarOut = Utils::dupString(szNoAvatar); } Template *tmplt = (event->dwFlags & IEEF_RTL) ? TemplateMap::getTemplate("default_rtl", "HTMLStart") : TemplateMap::getTemplate("default", "HTMLStart"); if (tmplt!=NULL) { for (Token *token = tmplt->getTokens();token!=NULL;token=token->getNext()) { const char *tokenVal; tokenVal = NULL; switch (token->getType()) { case Token::PLAIN: tokenVal = token->getText(); break; case Token::BASE: tokenVal = szBase; break; case Token::NAMEIN: tokenVal = szNameIn; break; case Token::NAMEOUT: tokenVal = szNameOut; break; case Token::AVATARIN: tokenVal = szAvatarIn; break; case Token::AVATAROUT: tokenVal = szAvatarOut; break; case Token::PROTO: tokenVal = szProto; break; } if (tokenVal != NULL) { Utils::appendText(&output, &outputSize, "%s", tokenVal); } } } if (output != NULL) { view->write(output); free(output); } if (szProto!=NULL) delete szProto; if (szAvatarIn!=NULL) delete szAvatarIn; if (szAvatarOut!=NULL) delete szAvatarOut; if (szNameIn!=NULL) delete szNameIn; if (szNameOut!=NULL) delete szNameOut; view->scrollToBottom(); groupTemplate = NULL; iLastEventType = -1; }
static INT_PTR CALLBACK YahooUserInfoDlgProc( HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam ) { switch ( msg ) { case WM_INITDIALOG: // lParam is hContact TranslateDialogDefault( hwndDlg ); //SendMessage(hwndDlg, WM_SETICON, ICON_BIG, (LPARAM)LoadSkinnedIcon(SKINICON_OTHER_USERDETAILS)); break; case WM_NOTIFY: if (( ( LPNMHDR )lParam )->idFrom == 0 ) { switch (( ( LPNMHDR )lParam )->code ) { case PSN_PARAMCHANGED: SetWindowLongPtr(hwndDlg, GWLP_USERDATA, (( PSHNOTIFY* )lParam )->lParam ); break; case PSN_INFOCHANGED: { CYahooProto* ppro = (CYahooProto*)GetWindowLongPtr(hwndDlg, GWLP_USERDATA); if (!ppro) break; char* szProto; HANDLE hContact = (HANDLE)((LPPSHNOTIFY)lParam)->lParam; if (hContact == NULL) { szProto = ppro->m_szModuleName; } else { szProto = (char*)CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM)hContact, 0); } if (!szProto) break; if (hContact) { DBVARIANT dbv; char z[128]; if (ppro->GetString( hContact, YAHOO_LOGINID, &dbv ) == 0) { strcpy(z, dbv.pszVal); DBFreeVariant( &dbv ); } else { strcpy(z, "???"); } SetDlgItemTextA(hwndDlg, IDC_SEARCH_ID, z); if (ppro->GetString( hContact, "Transport", &dbv ) == 0) { strcpy(z, dbv.pszVal); DBFreeVariant( &dbv ); } else { strcpy(z, "Yahoo"); } SetDlgItemTextA(hwndDlg, IDC_SEARCH_PROTOCOL, z); if (ppro->GetString( hContact, "MirVer", &dbv ) == 0) { strcpy(z, dbv.pszVal); DBFreeVariant( &dbv ); } else { strcpy(z, "???"); } SetDlgItemTextA(hwndDlg, IDC_NFO_CLIENT, z); } else { } } break; } } break; case WM_CLOSE: DestroyWindow(hwndDlg); break; case WM_DESTROY: break; } return FALSE; }
static BOOL CALLBACK TlenUserInfoDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) { switch (msg) { case WM_INITDIALOG: // lParam is hContact TranslateDialogDefault(hwndDlg); SetWindowLong(hwndDlg, GWL_USERDATA, (LONG)(HANDLE) lParam); InitComboBox(GetDlgItem(hwndDlg, IDC_GENDER), tlenFieldGender); InitComboBox(GetDlgItem(hwndDlg, IDC_OCCUPATION), tlenFieldOccupation); InitComboBox(GetDlgItem(hwndDlg, IDC_LOOKFOR), tlenFieldLookfor); SendMessage(hwndDlg, WM_JABBER_REFRESH, 0, 0); return TRUE; case WM_JABBER_REFRESH: { DBVARIANT dbv; HANDLE hContact; char *jid; int i; JABBER_LIST_ITEM *item; JabberLog("refresh"); SetDlgItemText(hwndDlg, IDC_INFO_JID, ""); SetDlgItemText(hwndDlg, IDC_SUBSCRIPTION, ""); SetFocus(GetDlgItem(hwndDlg, IDC_STATIC)); hContact = (HANDLE) GetWindowLong(hwndDlg, GWL_USERDATA); if (!DBGetContactSetting(hContact, jabberProtoName, "FirstName", &dbv)) { SetDlgItemText(hwndDlg, IDC_FIRSTNAME, dbv.pszVal); DBFreeVariant(&dbv); } else SetDlgItemText(hwndDlg, IDC_FIRSTNAME, ""); if (!DBGetContactSetting(hContact, jabberProtoName, "LastName", &dbv)) { SetDlgItemText(hwndDlg, IDC_LASTNAME, dbv.pszVal); DBFreeVariant(&dbv); } else SetDlgItemText(hwndDlg, IDC_LASTNAME, ""); if (!DBGetContactSetting(hContact, jabberProtoName, "Nick", &dbv)) { SetDlgItemText(hwndDlg, IDC_NICKNAME, dbv.pszVal); DBFreeVariant(&dbv); } else SetDlgItemText(hwndDlg, IDC_NICKNAME, ""); if (!DBGetContactSetting(hContact, jabberProtoName, "e-mail", &dbv)) { SetDlgItemText(hwndDlg, IDC_EMAIL, dbv.pszVal); DBFreeVariant(&dbv); } else SetDlgItemText(hwndDlg, IDC_EMAIL, ""); if (!DBGetContactSetting(hContact, jabberProtoName, "Age", &dbv)) { SetDlgItemInt(hwndDlg, IDC_AGE, dbv.wVal, FALSE); DBFreeVariant(&dbv); } else SetDlgItemText(hwndDlg, IDC_AGE, ""); if (!DBGetContactSetting(hContact, jabberProtoName, "City", &dbv)) { SetDlgItemText(hwndDlg, IDC_CITY, dbv.pszVal); DBFreeVariant(&dbv); } else SetDlgItemText(hwndDlg, IDC_CITY, ""); if (!DBGetContactSetting(hContact, jabberProtoName, "School", &dbv)) { SetDlgItemText(hwndDlg, IDC_SCHOOL, dbv.pszVal); DBFreeVariant(&dbv); } else SetDlgItemText(hwndDlg, IDC_SCHOOL, ""); switch (DBGetContactSettingByte(hContact, jabberProtoName, "Gender", '?')) { case 'M': SendDlgItemMessage(hwndDlg, IDC_GENDER, CB_SETCURSEL, 1, 0); SetDlgItemText(hwndDlg, IDC_GENDER_TEXT, Translate(tlenFieldGender[0].name)); break; case 'F': SendDlgItemMessage(hwndDlg, IDC_GENDER, CB_SETCURSEL, 2, 0); SetDlgItemText(hwndDlg, IDC_GENDER_TEXT, Translate(tlenFieldGender[1].name)); break; default: SendDlgItemMessage(hwndDlg, IDC_GENDER, CB_SETCURSEL, 0, 0); SetDlgItemText(hwndDlg, IDC_GENDER_TEXT, ""); break; } i = DBGetContactSettingWord(hContact, jabberProtoName, "Occupation", 0); if (i>0 && i<13) { SetDlgItemText(hwndDlg, IDC_OCCUPATION_TEXT, Translate(tlenFieldOccupation[i-1].name)); SendDlgItemMessage(hwndDlg, IDC_OCCUPATION, CB_SETCURSEL, i, 0); } else { SetDlgItemText(hwndDlg, IDC_OCCUPATION_TEXT, ""); SendDlgItemMessage(hwndDlg, IDC_OCCUPATION, CB_SETCURSEL, 0, 0); } i = DBGetContactSettingWord(hContact, jabberProtoName, "LookingFor", 0); if (i>0 && i<6) { SetDlgItemText(hwndDlg, IDC_LOOKFOR_TEXT, Translate(tlenFieldLookfor[i-1].name)); SendDlgItemMessage(hwndDlg, IDC_LOOKFOR, CB_SETCURSEL, i, 0); } else { SetDlgItemText(hwndDlg, IDC_LOOKFOR_TEXT, ""); SendDlgItemMessage(hwndDlg, IDC_LOOKFOR, CB_SETCURSEL, 0, 0); } i = DBGetContactSettingWord(hContact, jabberProtoName, "VoiceChat", 0); CheckDlgButton(hwndDlg, IDC_VOICECONVERSATIONS, i); i = DBGetContactSettingWord(hContact, jabberProtoName, "PublicStatus", 0); CheckDlgButton(hwndDlg, IDC_PUBLICSTATUS, i); if (!DBGetContactSetting(hContact, jabberProtoName, "jid", &dbv)) { jid = JabberTextDecode(dbv.pszVal); SetDlgItemText(hwndDlg, IDC_INFO_JID, jid); free(jid); jid = dbv.pszVal; if (jabberOnline) { if ((item=JabberListGetItemPtr(LIST_ROSTER, jid)) != NULL) { switch (item->subscription) { case SUB_BOTH: SetDlgItemText(hwndDlg, IDC_SUBSCRIPTION, Translate("both")); break; case SUB_TO: SetDlgItemText(hwndDlg, IDC_SUBSCRIPTION, Translate("to")); break; case SUB_FROM: SetDlgItemText(hwndDlg, IDC_SUBSCRIPTION, Translate("from")); break; default: SetDlgItemText(hwndDlg, IDC_SUBSCRIPTION, Translate("none")); break; } SetDlgItemTextA(hwndDlg, IDC_SOFTWARE, item->software); SetDlgItemTextA(hwndDlg, IDC_VERSION, item->version); SetDlgItemTextA(hwndDlg, IDC_SYSTEM, item->system); } else { SetDlgItemText(hwndDlg, IDC_SUBSCRIPTION, Translate("not on roster")); } } DBFreeVariant(&dbv); } } break; case WM_NOTIFY: switch (((LPNMHDR)lParam)->idFrom) { case 0: switch (((LPNMHDR)lParam)->code) { case PSN_INFOCHANGED: { HANDLE hContact = (HANDLE) ((LPPSHNOTIFY) lParam)->lParam; SendMessage(hwndDlg, WM_JABBER_REFRESH, 0, (LPARAM) hContact); } break; } break; } break; case WM_COMMAND: if (LOWORD(wParam)==IDC_SAVE && HIWORD(wParam)==BN_CLICKED) { char *str = NULL; int strSize; CCSDATA ccs = {0}; JabberStringAppend(&str, &strSize, "<iq type='set' id='"JABBER_IQID"%d' to='tuba'><query xmlns='jabber:iq:register'>", JabberSerialNext()); FetchField(hwndDlg, IDC_FIRSTNAME, "first", &str, &strSize); FetchField(hwndDlg, IDC_LASTNAME, "last", &str, &strSize); FetchField(hwndDlg, IDC_NICKNAME, "nick", &str, &strSize); FetchField(hwndDlg, IDC_EMAIL, "email", &str, &strSize); FetchCombo(hwndDlg, IDC_GENDER, "s", &str, &strSize); FetchField(hwndDlg, IDC_AGE, "b", &str, &strSize); FetchField(hwndDlg, IDC_CITY, "c", &str, &strSize); FetchCombo(hwndDlg, IDC_OCCUPATION, "j", &str, &strSize); FetchField(hwndDlg, IDC_SCHOOL, "e", &str, &strSize); FetchCombo(hwndDlg, IDC_LOOKFOR, "r", &str, &strSize); JabberStringAppend(&str, &strSize, "<g>%d</g>", IsDlgButtonChecked(hwndDlg, IDC_VOICECONVERSATIONS) ? 1 : 0); JabberStringAppend(&str, &strSize, "<v>%d</v>", IsDlgButtonChecked(hwndDlg, IDC_PUBLICSTATUS) ? 1 : 0); JabberStringAppend(&str, &strSize, "</query></iq>"); JabberLog(str); JabberSend(jabberThreadInfo->s, "%s", str); free(str); JabberGetInfo(0, (LPARAM) &ccs); } break; } return FALSE; }
INT_PTR CALLBACK DlgProcOptsCondition(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) { switch (msg) { case WM_INITDIALOG: { DBVARIANT dbv; DWORD conditionID; TranslateDialogDefault(hwndDlg); conditionID = (DWORD)lParam; if (!DBGetConditionSettingTString(conditionID, NULL, MODULENAME, SETTING_PARSESTRING, &dbv)) { SetDlgItemText(hwndDlg, IDC_PARSESTRING, dbv.ptszVal); DBFreeVariant(&dbv); } break; } case WM_COMMAND: switch(LOWORD(wParam)) { case IDC_SHOWHELP: { int flags; VARHELPINFO vhi; TRIGGERINFO ti; ZeroMemory(&vhi, sizeof(VARHELPINFO)); vhi.cbSize = sizeof(VARHELPINFO); ZeroMemory(&ti, sizeof(TRIGGERINFO)); SendMessage(GetParent(hwndDlg), TM_GETTRIGGERINFO, 0, (LPARAM)&ti); vhi.flags = VHF_INPUT; if (ti.dFlags&DF_TEXT) { vhi.flags |= VHF_EXTRATEXT; vhi.szExtraTextDesc = "TriggerData: Text"; } else { flags |= VHF_HIDEEXTRATEXTTOKEN; } if (ti.dFlags&DF_CONTACT) { flags |= VHF_SUBJECT; vhi.szSubjectDesc = "TriggerData: Contact"; } else { flags |= VHF_HIDESUBJECTTOKEN; } vhi.hwndCtrl = GetDlgItem(hwndDlg, IDC_PARSESTRING); CallService(MS_VARS_SHOWHELPEX, (WPARAM)hwndDlg, (LPARAM)&vhi); break; } } break; case TM_ADDCONDITION: { DWORD conditionID; TCHAR *tszText; conditionID = (DWORD)wParam; tszText = Hlp_GetDlgItemText(hwndDlg, IDC_PARSESTRING); if (tszText != NULL) { DBWriteConditionSettingTString(conditionID, NULL, MODULENAME, SETTING_PARSESTRING, tszText); free(tszText); } break; } case WM_DESTROY: break; } return FALSE; }
// returns true if any downloaded dll is active bool DownloadUpdates(UpdateList &todo, FilenameMap *map, bool dlls_only) { bool dll_enabled_or_langpack = false; bool use_popup = options.popup_notify && ArePopupsEnabled(); // iterate through the updates we need to check if (use_popup) { ShowPopup(0, TranslateT("Downloading Updates"), _T(""), POPFLAG_SAVEHWND, -1); } else { CreateProgressWindow(); SendMessage(hwndProgress, WM_SETTEXT, 0, (LPARAM)TranslateT("Progress - Downloading updates...")); SendMessage(hwndProgress, WMU_SETMESSAGE, (WPARAM)TranslateT("Downloading"), 0); } TCHAR msg[512]; TCHAR *temp_str; bool a_download_succeeded = false; for (int index = 0; index < todo.getCount(); index++) { // remember if the user has decided not to install this version char stored_setting[256]; mir_snprintf(stored_setting, SIZEOF(stored_setting), "DisabledVer%s", todo[index].update.szComponentName); DBVARIANT dbv; bool download = todo[index].update_options.enabled; if(!DBGetContactSettingString(0, "Updater", stored_setting, &dbv)) { if(dbv.pszVal && strcmp(dbv.pszVal, todo[index].newVersion) == 0) download = false; else DBDeleteContactSetting(0, "Updater", stored_setting); DBFreeVariant(&dbv); } if(download) { mir_sntprintf(msg, SIZEOF(msg), TranslateT("Downloading plugin: %s"), (temp_str = GetTString(todo[index].update.szComponentName))); mir_free(temp_str); } else { mir_sntprintf(msg, SIZEOF(msg), TranslateT("Skipping plugin: %s"), (temp_str = GetTString(todo[index].update.szComponentName))); mir_free(temp_str); } if (!use_popup) { SendMessage(hwndProgress, WMU_SETMESSAGE, (WPARAM)msg, 0); PostMessage(hwndProgress, WMU_SETPROGRESS, (WPARAM)(int)(index * 100.0 / todo.getCount()), 0); } //else if(hwndPop) // disabled - just annoying //ChangePopupText(hwndPop, msg); if (download) { bool got_file = false; if(todo[index].update_options.use_beta) { // download from i->update.szBetaUpdateURL to temp folder got_file = GetFile(todo[index].update.szBetaUpdateURL, options.temp_folder, todo[index].update.szComponentName, todo[index].newVersion, dlls_only); } else { got_file = GetFile(todo[index].update.szUpdateURL, options.temp_folder, todo[index].update.szComponentName, todo[index].newVersion, dlls_only); } if(got_file) { a_download_succeeded = true; if (todo[index].file_id != -1) { FileNameStruct* fns = map->find((FileNameStruct*)&todo[index].file_id); if (todo[index].cat == MC_PLUGINS || todo[index].cat == MC_UNKNOWN) dll_enabled_or_langpack |= RearrangeDlls(todo[index].shortName, fns->list); else if(todo[index].cat == MC_LOCALIZATION) { RearrangeLangpacks(todo[index].shortName, fns->list); dll_enabled_or_langpack = true; } } else { dll_enabled_or_langpack = true; } } } if (!use_popup && hwndProgress == 0) { RemoveFolder(options.temp_folder); break; // user closed progress window - cancel } } ProgressWindowDone(); // postmessage here causes a lockup on exit! bah popups!! //if(hwndPop) PostMessage(hwndPop, WMU_CLOSEPOP, 0, 0); if (hwndPop) SendMessage(hwndPop, WMU_CLOSEPOP, 0, 0); if(!a_download_succeeded) { for(int i = 0; i < todo.getCount(); ++i) free(todo[i].newVersion); todo.destroy(); } return dll_enabled_or_langpack; }
// Tlen actually use jabber:iq:search for other users vCard or jabber:iq:register for own vCard void TlenIqResultGetVcard(XmlNode *iqNode, void *userdata) { XmlNode *queryNode, *itemNode, *n; char *type, *jid; char text[128]; HANDLE hContact; char *nText; // JabberLog("<iq/> iqIdGetVcard (tlen)"); if ((type=JabberXmlGetAttrValue(iqNode, "type")) == NULL) return; if (!strcmp(type, "result")) { BOOL hasFirst, hasLast, hasNick, hasEmail, hasCity, hasAge, hasGender, hasSchool, hasLookFor, hasOccupation; DBVARIANT dbv; int i; if ((queryNode=JabberXmlGetChild(iqNode, "query")) == NULL) return; if ((itemNode=JabberXmlGetChild(queryNode, "item")) == NULL) return; if ((jid=JabberXmlGetAttrValue(itemNode, "jid")) != NULL) { if (DBGetContactSetting(NULL, jabberProtoName, "LoginServer", &dbv)) return; sprintf(text, "%s@%s", jid, dbv.pszVal); // Add @tlen.pl DBFreeVariant(&dbv); if ((hContact=JabberHContactFromJID(text)) == NULL) { if (DBGetContactSetting(NULL, jabberProtoName, "LoginName", &dbv)) return; if (strcmp(dbv.pszVal, jid)) { DBFreeVariant(&dbv); return; } DBFreeVariant(&dbv); } } else { hContact = NULL; } hasFirst = hasLast = hasNick = hasEmail = hasCity = hasAge = hasGender = hasOccupation = hasLookFor = hasSchool = FALSE; for (i=0; i<itemNode->numChild; i++) { n = itemNode->child[i]; if (n==NULL || n->name==NULL) continue; if (!strcmp(n->name, "first")) { if (n->text != NULL) { hasFirst = TRUE; nText = JabberTextDecode(n->text); DBWriteContactSettingString(hContact, jabberProtoName, "FirstName", nText); mir_free(nText); } } else if (!strcmp(n->name, "last")) { if (n->text != NULL) { hasLast = TRUE; nText = JabberTextDecode(n->text); DBWriteContactSettingString(hContact, jabberProtoName, "LastName", nText); mir_free(nText); } } else if (!strcmp(n->name, "nick")) { if (n->text != NULL) { hasNick = TRUE; nText = JabberTextDecode(n->text); DBWriteContactSettingString(hContact, jabberProtoName, "Nick", nText); mir_free(nText); } } else if (!strcmp(n->name, "email")) { if (n->text != NULL) { hasEmail = TRUE; nText = JabberTextDecode(n->text); DBWriteContactSettingString(hContact, jabberProtoName, "e-mail", nText); mir_free(nText); } } else if (!strcmp(n->name, "c")) { if (n->text != NULL) { hasCity = TRUE; nText = JabberTextDecode(n->text); DBWriteContactSettingString(hContact, jabberProtoName, "City", nText); mir_free(nText); } } else if (!strcmp(n->name, "b")) { if (n->text != NULL) { WORD nAge; hasAge = TRUE; nAge = atoi(n->text); DBWriteContactSettingWord(hContact, jabberProtoName, "Age", nAge); } } else if (!strcmp(n->name, "s")) { if (n->text!=NULL && n->text[1]=='\0' && (n->text[0]=='1' || n->text[0]=='2')) { hasGender = TRUE; DBWriteContactSettingByte(hContact, jabberProtoName, "Gender", (BYTE) (n->text[0]=='1'?'M':'F')); } } else if (!strcmp(n->name, "e")) { if (n->text != NULL) { hasSchool = TRUE; nText = JabberTextDecode(n->text); DBWriteContactSettingString(hContact, jabberProtoName, "School", nText); mir_free(nText); } } else if (!strcmp(n->name, "j")) { if (n->text != NULL) { WORD nOccupation; hasOccupation = TRUE; nOccupation = atoi(n->text); DBWriteContactSettingWord(hContact, jabberProtoName, "Occupation", nOccupation); } } else if (!strcmp(n->name, "r")) { if (n->text != NULL) { WORD nLookFor; hasLookFor = TRUE; nLookFor = atoi(n->text); DBWriteContactSettingWord(hContact, jabberProtoName, "LookingFor", nLookFor); } } else if (!strcmp(n->name, "g")) { // voice chat enabled if (n->text != NULL) { BYTE bVoice; bVoice = atoi(n->text); DBWriteContactSettingWord(hContact, jabberProtoName, "VoiceChat", bVoice); } } else if (!strcmp(n->name, "v")) { // status visibility if (n->text != NULL) { BYTE bPublic; bPublic = atoi(n->text); DBWriteContactSettingWord(hContact, jabberProtoName, "PublicStatus", bPublic); } } } if (!hasFirst) DBDeleteContactSetting(hContact, jabberProtoName, "FirstName"); if (!hasLast) DBDeleteContactSetting(hContact, jabberProtoName, "LastName"); // We are not removing "Nick" // if (!hasNick) // DBDeleteContactSetting(hContact, jabberProtoName, "Nick"); if (!hasEmail) DBDeleteContactSetting(hContact, jabberProtoName, "e-mail"); if (!hasCity) DBDeleteContactSetting(hContact, jabberProtoName, "City"); if (!hasAge) DBDeleteContactSetting(hContact, jabberProtoName, "Age"); if (!hasGender) DBDeleteContactSetting(hContact, jabberProtoName, "Gender"); if (!hasSchool) DBDeleteContactSetting(hContact, jabberProtoName, "School"); if (!hasOccupation) DBDeleteContactSetting(hContact, jabberProtoName, "Occupation"); if (!hasLookFor) DBDeleteContactSetting(hContact, jabberProtoName, "LookingFor"); ProtoBroadcastAck(jabberProtoName, hContact, ACKTYPE_GETINFO, ACKRESULT_SUCCESS, (HANDLE) 1, 0); } }
void SetAllExtraIcons(HWND hwndList,HANDLE hContact) { HANDLE hItem; boolean hcontgiven=FALSE; char *szProto; char *ImgIndex[64]; int maxpr,count,i; PROTOACCOUNT **accs; pdisplayNameCacheEntry pdnce; int em,pr,sms,a1,a2,w1,c1; int tick=0; BOOL hasExtraIconsService; hcontgiven=(hContact!=0); if (pcli->hwndContactTree==0){return;}; tick=GetTickCount(); if (ImageCreated==FALSE) ReloadExtraIcons(); SetNewExtraColumnCount(); hasExtraIconsService = HasExtraIconsService(); if (!hasExtraIconsService) { em=ExtraToColumnNum(EXTRA_ICON_EMAIL); pr=ExtraToColumnNum(EXTRA_ICON_PROTO); sms=ExtraToColumnNum(EXTRA_ICON_SMS); a1=ExtraToColumnNum(EXTRA_ICON_ADV1); a2=ExtraToColumnNum(EXTRA_ICON_ADV2); w1=ExtraToColumnNum(EXTRA_ICON_WEB); c1=ExtraToColumnNum(EXTRA_ICON_CLIENT); memset(ImgIndex,0,sizeof(ImgIndex)); ProtoEnumAccounts( &count, &accs ); maxpr=0; //calc only needed protocols for( i=0; i < count; i++ ) { if ( !IsAccountEnabled( accs[i] ) || CallProtoService( accs[i]->szModuleName, PS_GETCAPS, PFLAGNUM_2, 0 ) == 0 ) continue; ImgIndex[maxpr] = accs[i]->szModuleName; maxpr++; } } if ( hContact == NULL ) hContact=(HANDLE)CallService(MS_DB_CONTACT_FINDFIRST,0,0); do { szProto=NULL; hItem=hContact; if (hItem==0){continue;}; pdnce=(pdisplayNameCacheEntry)pcli->pfnGetCacheEntry(hItem); if (pdnce==NULL) {continue;}; // szProto=(char*)CallService(MS_PROTO_GETCONTACTBASEPROTO,(WPARAM)hContact,0); szProto=pdnce->szProto; if (!hasExtraIconsService) { if (ExtraToColumnNum(EXTRA_ICON_WEB)!=-1) { boolean showweb=FALSE; if (szProto != NULL) { char *homepage; homepage=DBGetStringA(pdnce->hContact,"UserInfo", "Homepage"); if (!homepage) homepage=DBGetStringA(pdnce->hContact,pdnce->szProto, "Homepage"); if (homepage!=NULL) { showweb=TRUE; mir_free(homepage); } } SendMessage(hwndList,CLM_SETEXTRAIMAGE,(WPARAM)hItem,MAKELPARAM(ExtraToColumnNum(EXTRA_ICON_WEB),(showweb)?2:0xFF)); } if (ExtraToColumnNum(EXTRA_ICON_EMAIL)!=-1) { DBVARIANT dbv={0}; boolean showemail=TRUE; if (szProto == NULL || DBGetContactSettingString(hContact, szProto, "e-mail",&dbv)) { DBFreeVariant(&dbv); if (DBGetContactSettingString(hContact, "UserInfo", "Mye-mail0", &dbv)) showemail=FALSE; } DBFreeVariant(&dbv); SendMessage(hwndList,CLM_SETEXTRAIMAGE,(WPARAM)hItem,MAKELPARAM(ExtraToColumnNum(EXTRA_ICON_EMAIL),(showemail)?0:0xFF)); } if (ExtraToColumnNum(EXTRA_ICON_SMS)!=-1) { DBVARIANT dbv={0}; boolean showsms=TRUE; if (szProto == NULL || DBGetContactSettingString(hContact, szProto, "Cellular",&dbv)) { DBFreeVariant(&dbv); if (DBGetContactSettingString(hContact, "UserInfo", "MyPhone0", &dbv)) showsms=FALSE; } SendMessage(hwndList,CLM_SETEXTRAIMAGE,(WPARAM)hItem,MAKELPARAM(ExtraToColumnNum(EXTRA_ICON_SMS),(showsms)?1:0xFF)); DBFreeVariant(&dbv); } if(ExtraToColumnNum(EXTRA_ICON_PROTO)!=-1) { for (i=0;i<maxpr;i++) { if(!MyStrCmp(ImgIndex[i],szProto)) { SendMessage(hwndList,CLM_SETEXTRAIMAGE,(WPARAM)hItem,MAKELPARAM(ExtraToColumnNum(EXTRA_ICON_PROTO),i+3)); break; } } } } NotifyEventHooks(hExtraImageApplying,(WPARAM)hContact,0); if (hcontgiven) break; Sleep(0); } while(hContact=(HANDLE)CallService(MS_DB_CONTACT_FINDNEXT,(WPARAM)hContact,0)); tick=GetTickCount()-tick; InvalidateRect(hwndList,NULL,FALSE); Sleep(0); }
void JabberIqResultGetRoster(XmlNode *iqNode, void *userdata) { //struct ThreadData *info = (struct ThreadData *) userdata; XmlNode *queryNode; char *type; char *str; // RECVED: roster information // ACTION: populate LIST_ROSTER and create contact for any new rosters JabberLog("<iq/> iqIdGetRoster"); if ((type=JabberXmlGetAttrValue(iqNode, "type")) == NULL) return; if ((queryNode=JabberXmlGetChild(iqNode, "query")) == NULL) return; if (!strcmp(type, "result")) { str = JabberXmlGetAttrValue(queryNode, "xmlns"); if (str!=NULL && !strcmp(str, "jabber:iq:roster")) { DBVARIANT dbv; XmlNode *itemNode, *groupNode; JABBER_SUBSCRIPTION sub; JABBER_LIST_ITEM *item; HANDLE hContact; char *jid, *name, *nick; int i, oldStatus; for (i=0; i<queryNode->numChild; i++) { itemNode = queryNode->child[i]; if (!strcmp(itemNode->name, "item")) { str = JabberXmlGetAttrValue(itemNode, "subscription"); if (str==NULL) sub = SUB_NONE; else if (!strcmp(str, "both")) sub = SUB_BOTH; else if (!strcmp(str, "to")) sub = SUB_TO; else if (!strcmp(str, "from")) sub = SUB_FROM; else sub = SUB_NONE; //if (str!=NULL && (!strcmp(str, "to") || !strcmp(str, "both"))) { if ((jid=JabberXmlGetAttrValue(itemNode, "jid")) != NULL) { if ((name=JabberXmlGetAttrValue(itemNode, "name")) != NULL) { nick = JabberTextDecode(name); } else { nick = JabberLocalNickFromJID(jid); } if (nick != NULL) { item = JabberListAdd(LIST_ROSTER, jid); if (item->nick) mir_free(item->nick); item->nick = nick; item->subscription = sub; if ((hContact=JabberHContactFromJID(jid)) == NULL) { // Received roster has a new JID. // Add the jid (with empty resource) to Miranda contact list. hContact = JabberDBCreateContact(jid, nick, FALSE); } DBWriteContactSettingString(hContact, "CList", "MyHandle", nick); if (item->group) mir_free(item->group); if ((groupNode=JabberXmlGetChild(itemNode, "group"))!=NULL && groupNode->text!=NULL) { item->group = TlenGroupDecode(groupNode->text); JabberContactListCreateGroup(item->group); // Don't set group again if already correct, or Miranda may show wrong group count in some case if (!DBGetContactSetting(hContact, "CList", "Group", &dbv)) { if (strcmp(dbv.pszVal, item->group)) DBWriteContactSettingString(hContact, "CList", "Group", item->group); DBFreeVariant(&dbv); } else DBWriteContactSettingString(hContact, "CList", "Group", item->group); } else { item->group = NULL; DBDeleteContactSetting(hContact, "CList", "Group"); } if (!DBGetContactSetting(hContact, jabberProtoName, "AvatarHash", &dbv)) { if (item->newAvatarHash) mir_free(item->newAvatarHash); if (item->avatarHash) mir_free(item->avatarHash); item->avatarHash = mir_strdup(dbv.pszVal); item->newAvatarHash = mir_strdup(dbv.pszVal); DBFreeVariant(&dbv); } item->avatarFormat = DBGetContactSettingDword(hContact, jabberProtoName, "AvatarFormat", PA_FORMAT_UNKNOWN); } } } } // Delete orphaned contacts (if roster sync is enabled) if (DBGetContactSettingByte(NULL, jabberProtoName, "RosterSync", FALSE) == TRUE) { HANDLE *list; int listSize, listAllocSize; listSize = listAllocSize = 0; list = NULL; hContact = (HANDLE) CallService(MS_DB_CONTACT_FINDFIRST, 0, 0); while (hContact != NULL) { str = (char *) CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM) hContact, 0); if(str!=NULL && !strcmp(str, jabberProtoName)) { if (!DBGetContactSetting(hContact, jabberProtoName, "jid", &dbv)) { if (!JabberListExist(LIST_ROSTER, dbv.pszVal)) { JabberLog("Syncing roster: preparing to delete %s (hContact=0x%x)", dbv.pszVal, hContact); if (listSize >= listAllocSize) { listAllocSize = listSize + 100; if ((list=(HANDLE *) mir_realloc(list, listAllocSize)) == NULL) { listSize = 0; break; } } list[listSize++] = hContact; } DBFreeVariant(&dbv); } } hContact = (HANDLE) CallService(MS_DB_CONTACT_FINDNEXT, (WPARAM) hContact, 0); } for (i=0; i<listSize; i++) { JabberLog("Syncing roster: deleting 0x%x", list[i]); CallService(MS_DB_CONTACT_DELETE, (WPARAM) list[i], 0); } if (list != NULL) mir_free(list); } /////////////////////////////////////// { CLISTMENUITEM clmi; memset(&clmi, 0, sizeof(CLISTMENUITEM)); clmi.cbSize = sizeof(CLISTMENUITEM); clmi.flags = CMIM_FLAGS; CallService(MS_CLIST_MODIFYMENUITEM, (WPARAM) hMenuMUC, (LPARAM) &clmi); CallService(MS_CLIST_MODIFYMENUITEM, (WPARAM) hMenuChats, (LPARAM) &clmi); } jabberOnline = TRUE; JabberLog("Status changed via THREADSTART"); oldStatus = jabberStatus; JabberSendPresence(jabberDesiredStatus); ProtoBroadcastAck(jabberProtoName, NULL, ACKTYPE_STATUS, ACKRESULT_SUCCESS, (HANDLE) oldStatus, jabberStatus); ////////////////////////////////// } } }
/** Fills the list of contacts * * @param chg : Structure holding all the change info (See CHANGES). */ void FillContactList(HWND hWndDlg, CHANGES *chg) { HWND hList = GetDlgItem(hWndDlg, IDC_LST_CONTACTS); char *proto, *field, buff[256]; int i; LVITEM LvItem; DBVARIANT dbv; LVITEMW LvItemW; // for unicode nicks SendMessage(hList,LVM_DELETEALLITEMS,0,0); ZeroMemory(&LvItem, sizeof(LvItem)); LvItem.mask=LVIF_TEXT; // Text Style LvItem.cchTextMax = 256; // Max size of test ZeroMemory(&LvItemW, sizeof(LvItemW)); LvItemW.mask=LVIF_TEXT; // Text Style LvItemW.cchTextMax = 256; // Max size of test for(i = 0; i < chg->num_contacts; i++) { LvItem.iItem = i; LvItemW.iItem = i; { char *szCDN = (char *) CallService(MS_CLIST_GETCONTACTDISPLAYNAME, (WPARAM)chg->hContact[i], 0); if(os_unicode_enabled) { wchar_t *swzCDN = (wchar_t *) CallService(MS_CLIST_GETCONTACTDISPLAYNAME, (WPARAM)chg->hContact[i], GCDNF_UNICODE), *swzContactDisplayName; LvItemW.iSubItem = 0; // clist display name // detect if the clist provided unicode display name by comparing with non-unicode if(szCDN && swzCDN && strncmp(szCDN, (char *)swzCDN, strlen(szCDN)) != 0 && wcslen(swzCDN) >= strlen(szCDN)) { swzContactDisplayName = swzCDN; } else { // no? convert to unicode if(szCDN) { swzContactDisplayName = (wchar_t *) _malloca(sizeof(wchar_t) * (strlen(szCDN) + 1)); MultiByteToWideChar(CP_ACP, 0, (char *) szCDN, -1, swzContactDisplayName, (int)strlen((char *)szCDN) + 1); } else { swzContactDisplayName = TranslateW(L"(Unknown Contact)"); } } LvItemW.pszText = swzContactDisplayName; SendMessageW(hList, LVM_INSERTITEMW, (WPARAM)0, (LPARAM)&LvItemW); } else { LvItem.iSubItem = 0; // clist display name LvItem.pszText = szCDN; SendMessage(hList, LVM_INSERTITEM, (WPARAM)0, (LPARAM)&LvItem); } } LvItem.iSubItem = 1; // id proto = (char *)CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM)chg->hContact[i], 0); if(proto) { field = (char *)CallProtoService(proto,PS_GETCAPS,PFLAG_UNIQUEIDSETTING,0); DBGetContactSetting(chg->hContact[i],proto,field,&dbv); switch(dbv.type) { case DBVT_ASCIIZ: sprintf(buff,"%s",dbv.pszVal); break; case DBVT_BYTE: sprintf(buff,"%d",dbv.bVal); break; case DBVT_WORD: sprintf(buff,"%d",dbv.wVal); break; case DBVT_DWORD: sprintf(buff,"%d",(int)dbv.dVal); break; default: //sprintf(buff,""); buff[0] = 0; } DBFreeVariant(&dbv); LvItem.pszText = buff; SendMessage(hList,LVM_SETITEM,0,(LPARAM)&LvItem); // Enter text to SubItems LvItem.iSubItem = 2; // protocol LvItem.pszText = proto; SendMessage(hList,LVM_SETITEM,0,(LPARAM)&LvItem); // Enter text to SubItems } else { LvItem.pszText = "Unknown"; SendMessage(hList,LVM_SETITEM,0,(LPARAM)&LvItem); // Enter text to SubItems LvItem.iSubItem = 2; // protocol LvItem.pszText = "Unknown"; SendMessage(hList,LVM_SETITEM,0,(LPARAM)&LvItem); // Enter text to SubItems } LvItem.iSubItem = 3; // Default (Yes/No) LvItem.pszText = (chg->hContact[i] == chg->hDefaultContact ? Translate("Yes") : Translate("No")); SendMessage(hList,LVM_SETITEM,0,(LPARAM)&LvItem); // Enter text to SubItems LvItem.iSubItem = 4; // Offline (Yes/No) LvItem.pszText = (chg->hContact[i] == chg->hOfflineContact ? Translate("Yes") : Translate("No")); SendMessage(hList,LVM_SETITEM,0,(LPARAM)&LvItem); // Enter text to SubItems } }
BOOL CALLBACK DlgProcDestEdit(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) { HWND hw; int sel; char *strptr; switch ( msg ) { case WM_INITDIALOG: { bool selgroup = false; for(int i = ID_STATUS_OFFLINE; i <= ID_STATUS_OUTTOLUNCH; i++) { strptr = (char *)CallService(MS_CLIST_GETSTATUSMODEDESCRIPTION, (WPARAM)i, (LPARAM)0); hw = GetDlgItem(hwndDlg, IDC_COMBO_DESTSTAT); SendMessage(hw, CB_INSERTSTRING, (WPARAM)-1, (LPARAM)strptr); hw = GetDlgItem(hwndDlg, IDC_COMBO_DESTSTAT2); SendMessage(hw, CB_INSERTSTRING, (WPARAM)-1, (LPARAM)strptr); } hw = GetDlgItem(hwndDlg, IDC_COMBO_DESTSTAT); SendMessage(hw, CB_SETCURSEL, 1, 0); hw = GetDlgItem(hwndDlg, IDC_COMBO_DESTSTAT2); SendMessage(hw, CB_SETCURSEL, 0, 0); hw = GetDlgItem(hwndDlg, IDC_COMBO_GROUP); SendMessage(hw, CB_INSERTSTRING, (WPARAM)-1, (LPARAM)Translate("<none>")); DBVARIANT dbv; if(!DBGetContactSetting(0, PROTO, "DefaultPingGroup", &dbv)) selgroup = true; int gi = 1, selind = -1, selind_defgroup = -1; do { strptr = (char *)CallService(MS_CLIST_GROUPGETNAME2, (WPARAM)gi, 0); if(strptr) { SendMessage(hw, CB_INSERTSTRING, (WPARAM)-1, (LPARAM)strptr); if(!strncmp(strptr, add_edit_addr.pszCListGroup, MAX_PINGADDRESS_STRING_LENGTH)) selind = gi; if(selgroup && !strncmp(strptr, dbv.pszVal, MAX_PINGADDRESS_STRING_LENGTH)) selind_defgroup = gi; } gi++; } while(strptr != 0); if(selgroup) DBFreeVariant(&dbv); if(selind != -1) SendMessage(hw, CB_SETCURSEL, (WPARAM)selind, 0); else if(selind_defgroup != -1) SendMessage(hw, CB_SETCURSEL, (WPARAM)selind_defgroup, 0); else SendMessage(hw, CB_SETCURSEL, 0, 0); SetDlgItemText(hwndDlg, IDC_ED_DESTADDR, add_edit_addr.pszName); SetDlgItemText(hwndDlg, IDC_ED_DESTLAB, add_edit_addr.pszLabel); SetDlgItemText(hwndDlg, IDC_ED_COMMAND, add_edit_addr.pszCommand); SetDlgItemText(hwndDlg, IDC_ED_PARAMS, add_edit_addr.pszParams); CheckDlgButton(hwndDlg, IDC_CHK_DESTTCP, add_edit_addr.port != -1); if(add_edit_addr.port != -1) { hw = GetDlgItem(hwndDlg, IDC_ED_DESTPORT); EnableWindow(hw, TRUE); SetDlgItemInt(hwndDlg, IDC_ED_DESTPORT, add_edit_addr.port, FALSE); } { int num_protocols; PROTOCOLDESCRIPTOR **pppDesc; CallService(MS_PROTO_ENUMPROTOCOLS, (LPARAM)&num_protocols, (WPARAM)&pppDesc); hw = GetDlgItem(hwndDlg, IDC_COMBO_DESTPROTO); SendMessage(hw, CB_INSERTSTRING, (WPARAM)-1, (LPARAM)Translate("<none>")); SendMessage(hw, CB_INSERTSTRING, (WPARAM)-1, (LPARAM)Translate("<all>")); for(int i = 0; i < num_protocols; i++) { if(pppDesc[i]->type == PROTOTYPE_PROTOCOL) SendMessage(hw, CB_INSERTSTRING, (WPARAM)-1, (LPARAM)pppDesc[i]->szName); } if(add_edit_addr.pszProto[0] == '\0') { SendMessage(hw, CB_SETCURSEL, 0, 0); } else { SendMessage(hw, CB_SELECTSTRING, 0, (LPARAM)add_edit_addr.pszProto); hw = GetDlgItem(hwndDlg, IDC_COMBO_DESTSTAT); EnableWindow(hw, TRUE); SendMessage(hw, CB_SETCURSEL, (WPARAM)(add_edit_addr.set_status - ID_STATUS_OFFLINE), 0); hw = GetDlgItem(hwndDlg, IDC_COMBO_DESTSTAT2); EnableWindow(hw, TRUE); SendMessage(hw, CB_SETCURSEL, (WPARAM)(add_edit_addr.get_status - ID_STATUS_OFFLINE), 0); } } // ? doesn't work? ? hw = GetDlgItem(hwndDlg, IDC_ED_DESTADDR); SetFocus(hw); } return TRUE; case WM_COMMAND: if (HIWORD( wParam ) == LBN_SELCHANGE && LOWORD(wParam) == IDC_COMBO_DESTPROTO) { hw = GetDlgItem(hwndDlg, IDC_COMBO_DESTPROTO); sel = SendMessage(hw, CB_GETCURSEL, 0, 0); if(sel != CB_ERR) { hw = GetDlgItem(hwndDlg, IDC_COMBO_DESTSTAT); EnableWindow(hw, sel != 0); hw = GetDlgItem(hwndDlg, IDC_COMBO_DESTSTAT2); EnableWindow(hw, sel != 0); } } if ( HIWORD( wParam ) == BN_CLICKED ) { switch( LOWORD( wParam )) { case IDC_CHK_DESTTCP: hw = GetDlgItem(hwndDlg, IDC_ED_DESTPORT); EnableWindow(hw, IsDlgButtonChecked(hwndDlg, IDC_CHK_DESTTCP)); break; case IDOK: GetDlgItemText(hwndDlg, IDC_ED_DESTADDR, add_edit_addr.pszName, MAX_PINGADDRESS_STRING_LENGTH); GetDlgItemText(hwndDlg, IDC_ED_DESTLAB, add_edit_addr.pszLabel, MAX_PINGADDRESS_STRING_LENGTH); GetDlgItemText(hwndDlg, IDC_ED_COMMAND, add_edit_addr.pszCommand, MAX_PATH); GetDlgItemText(hwndDlg, IDC_ED_PARAMS, add_edit_addr.pszParams, MAX_PATH); hw = GetDlgItem(hwndDlg, IDC_COMBO_DESTPROTO); if(SendMessage(hw, CB_GETCURSEL, 0, 0) != -1) { GetDlgItemText(hwndDlg, IDC_COMBO_DESTPROTO, add_edit_addr.pszProto, MAX_PINGADDRESS_STRING_LENGTH); if(!strcmp(add_edit_addr.pszProto, Translate("<none>"))) add_edit_addr.pszProto[0] = '\0'; else { hw = GetDlgItem(hwndDlg, IDC_COMBO_DESTSTAT); sel = SendMessage(hw, CB_GETCURSEL, 0, 0); if(sel != -1) add_edit_addr.set_status = ID_STATUS_OFFLINE + sel; hw = GetDlgItem(hwndDlg, IDC_COMBO_DESTSTAT2); sel = SendMessage(hw, CB_GETCURSEL, 0, 0); if(sel != -1) add_edit_addr.get_status = ID_STATUS_OFFLINE + sel; } } else add_edit_addr.pszProto[0] = '\0'; hw = GetDlgItem(hwndDlg, IDC_COMBO_GROUP); GetDlgItemText(hwndDlg, IDC_COMBO_GROUP, add_edit_addr.pszCListGroup, MAX_PINGADDRESS_STRING_LENGTH); if(!strcmp(add_edit_addr.pszCListGroup, Translate("<none>"))) add_edit_addr.pszCListGroup[0] = '\0'; DBWriteContactSettingString(0, PROTO, "DefaultPingGroup", add_edit_addr.pszCListGroup); if(IsDlgButtonChecked(hwndDlg, IDC_CHK_DESTTCP)) { BOOL tr; int port = GetDlgItemInt(hwndDlg, IDC_ED_DESTPORT, &tr, FALSE); if(tr) add_edit_addr.port = port; else add_edit_addr.port = -1; } else add_edit_addr.port = -1; EndDialog(hwndDlg, IDOK); break; case IDCANCEL: EndDialog(hwndDlg, IDCANCEL); break; } } return TRUE; } return FALSE; }
static void JabberSendPresenceTo(TlenProtocol *proto, int status, char *to) { char *showBody, *statusMsg, *presenceType; char *ptr = NULL; if (!proto->isOnline) return; // Send <presence/> update for status (we won't handle ID_STATUS_OFFLINE here) // Note: jabberModeMsg is already encoded using JabberTextEncode() EnterCriticalSection(&proto->modeMsgMutex); showBody = NULL; statusMsg = NULL; presenceType = NULL; switch (status) { case ID_STATUS_ONLINE: showBody = "available"; statusMsg = proto->modeMsgs.szOnline; break; case ID_STATUS_AWAY: case ID_STATUS_ONTHEPHONE: case ID_STATUS_OUTTOLUNCH: showBody = "away"; statusMsg = proto->modeMsgs.szAway; break; case ID_STATUS_NA: showBody = "xa"; statusMsg = proto->modeMsgs.szNa; break; case ID_STATUS_DND: case ID_STATUS_OCCUPIED: showBody = "dnd"; statusMsg = proto->modeMsgs.szDnd; break; case ID_STATUS_FREECHAT: showBody = "chat"; statusMsg = proto->modeMsgs.szFreechat; break; case ID_STATUS_INVISIBLE: presenceType = "invisible"; statusMsg = proto->modeMsgs.szInvisible; break; case ID_STATUS_OFFLINE: presenceType = "unavailable"; if (DBGetContactSettingByte(NULL, proto->iface.m_szModuleName, "LeaveOfflineMessage", FALSE)) { int offlineMessageOption = DBGetContactSettingWord(NULL, proto->iface.m_szModuleName, "OfflineMessageOption", 0); if (offlineMessageOption == 0) { switch (proto->iface.m_iStatus) { case ID_STATUS_ONLINE: ptr = mir_strdup(proto->modeMsgs.szOnline); break; case ID_STATUS_AWAY: case ID_STATUS_ONTHEPHONE: case ID_STATUS_OUTTOLUNCH: ptr = mir_strdup(proto->modeMsgs.szAway); break; case ID_STATUS_NA: ptr = mir_strdup(proto->modeMsgs.szNa); break; case ID_STATUS_DND: case ID_STATUS_OCCUPIED: ptr = mir_strdup(proto->modeMsgs.szDnd); break; case ID_STATUS_FREECHAT: ptr = mir_strdup(proto->modeMsgs.szFreechat); break; case ID_STATUS_INVISIBLE: ptr = mir_strdup(proto->modeMsgs.szInvisible); break; } } else if (offlineMessageOption == 99) { } else if (offlineMessageOption < 7) { DBVARIANT dbv; const char *statusNames[] = {"OnDefault", "AwayDefault", "NaDefault", "DndDefault", "FreeChatDefault", "InvDefault"}; if (!DBGetContactSetting(NULL, "SRAway", statusNames[offlineMessageOption-1], &dbv)) { int i; char substituteStr[128]; ptr = mir_strdup(dbv.pszVal); DBFreeVariant(&dbv); for(i=0;ptr[i];i++) { if(ptr[i]!='%') continue; if(!_strnicmp(ptr+i,"%time%",6)) GetTimeFormatA(LOCALE_USER_DEFAULT,TIME_NOSECONDS,NULL,NULL,substituteStr,sizeof(substituteStr)); else if(!_strnicmp(ptr+i,"%date%",6)) GetDateFormatA(LOCALE_USER_DEFAULT,DATE_SHORTDATE,NULL,NULL,substituteStr,sizeof(substituteStr)); else continue; if(strlen(substituteStr)>6) ptr=(char*)mir_realloc(ptr,strlen(ptr)+1+strlen(substituteStr)-6); MoveMemory(ptr+i+strlen(substituteStr),ptr+i+6,strlen(ptr)-i-5); CopyMemory(ptr+i,substituteStr,strlen(substituteStr)); } } } } statusMsg = ptr; break; default: // Should not reach here break; } proto->iface.m_iStatus = status; if (presenceType) { if (statusMsg) JabberSend(proto, "<presence type='%s'><status>%s</status></presence>", presenceType, statusMsg); else JabberSend(proto, "<presence type='%s'></presence>", presenceType); } else { if (statusMsg) JabberSend(proto, "<presence><show>%s</show><status>%s</status></presence>", showBody, statusMsg); else JabberSend(proto, "<presence><show>%s</show></presence>", showBody); } if (ptr) { mir_free(ptr); } LeaveCriticalSection(&proto->modeMsgMutex); }
HANDLE JabberHContactFromJID(const char *jid) { HANDLE hContact, hContactMatched; DBVARIANT dbv; char *szProto; char *s, *p, *q; int len; char *s2; if (jid == NULL) return (HANDLE) NULL; s = _strdup(jid); _strlwr(s); // Strip resource name if any if ((p=strchr(s, '@')) != NULL) { if ((q=strchr(p, '/')) != NULL) *q = '\0'; } len = strlen(s); hContactMatched = NULL; hContact = (HANDLE) CallService(MS_DB_CONTACT_FINDFIRST, 0, 0); while (hContact != NULL) { szProto = (char *) CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM) hContact, 0); if (szProto!=NULL && !strcmp(jabberProtoName, szProto)) { if (!DBGetContactSetting(hContact, jabberProtoName, "jid", &dbv)) { if ((p=dbv.pszVal) != NULL) { if (!stricmp(p, jid)) { // exact match (node@domain/resource) hContactMatched = hContact; DBFreeVariant(&dbv); break; } // match only node@domain part if ((int)strlen(p)>=len && (p[len]=='\0'||p[len]=='/') && !strncmp(p, s, len)) { hContactMatched = hContact; } } DBFreeVariant(&dbv); } } hContact = (HANDLE) CallService(MS_DB_CONTACT_FINDNEXT, (WPARAM) hContact, 0); } if (hContactMatched != NULL) { free(s); return hContactMatched; } // The following is for the transition to storing JID and resource in UTF8 format. // If we can't find the particular JID, we ut8decode the JID and try again below. // If found, we update the JID using the utf8 format. s2 = JabberTextDecode(s); len = strlen(s2); hContact = (HANDLE) CallService(MS_DB_CONTACT_FINDFIRST, 0, 0); while (hContact != NULL) { szProto = (char *) CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM) hContact, 0); if (szProto!=NULL && !strcmp(jabberProtoName, szProto)) { if (!DBGetContactSetting(hContact, jabberProtoName, "jid", &dbv)) { p = dbv.pszVal; if (p && (int)strlen(p)>=len && (p[len]=='\0'||p[len]=='/') && !strncmp(p, s2, len)) { DBFreeVariant(&dbv); // Update with the utf8 format DBWriteContactSettingString(hContact, jabberProtoName, "jid", s); free(s); free(s2); return hContact; } DBFreeVariant(&dbv); } } hContact = (HANDLE) CallService(MS_DB_CONTACT_FINDNEXT, (WPARAM) hContact, 0); } free(s2); free(s); return NULL; }
void TemplateHTMLBuilder::buildHeadTemplate(IEView *view, IEVIEWEVENT *event, ProtocolSettings *protoSettings) { DBVARIANT dbv; CONTACTINFO ci; char tempBase[1024]; char tempStr[1024]; HANDLE hRealContact; char *szRealProto = NULL; char *szBase=NULL; char *szNoAvatar=NULL; char *szProto = NULL; char *szNameIn = NULL; char *szNameOut = NULL; char *szAvatarIn = NULL; char *szAvatarOut = NULL; char *szUINIn = NULL; char *szUINOut = NULL; char *szNickIn = NULL; char *szNickOut = NULL; char *szStatusMsg = NULL; int outputSize; char *output; output = NULL; hRealContact = getRealContact(event->hContact); szRealProto = getProto(hRealContact); szProto = getProto(event->pszProto, event->hContact); tempBase[0]='\0'; if (protoSettings == NULL) return; TemplateMap *tmpm = getTemplateMap(protoSettings); if (tmpm==NULL) return; strcpy(tempBase, "file://"); strcat(tempBase, tmpm->getFilename()); char* pathrun = tempBase + strlen(tempBase); while ((*pathrun != '\\' && *pathrun != '/') && (pathrun > tempBase)) pathrun--; pathrun++; *pathrun = '\0'; szBase = Utils::UTF8Encode(tempBase); getUINs(event->hContact, szUINIn, szUINOut); if (getFlags(protoSettings) & Options::LOG_SHOW_NICKNAMES) { szNameOut = getEncodedContactName(NULL, szProto, szRealProto); szNameIn = getEncodedContactName(event->hContact, szProto, szRealProto); } else { szNameOut = Utils::dupString(" "); szNameIn = Utils::dupString(" "); } sprintf(tempStr, "%snoavatar.jpg", tempBase); szNoAvatar = Utils::UTF8Encode(tempStr); szAvatarIn = getAvatar(event->hContact, szRealProto); if (szAvatarIn == NULL) { szAvatarIn = Utils::dupString(szNoAvatar); } szAvatarOut = getAvatar(NULL, szRealProto); if (szAvatarOut == NULL) { szAvatarOut = Utils::dupString(szNoAvatar); } if (!DBGetContactSetting(event->hContact, "CList", "StatusMsg",&dbv)) { if (strlen(dbv.pszVal) > 0) { szStatusMsg = Utils::UTF8Encode(dbv.pszVal); } DBFreeVariant(&dbv); } ZeroMemory(&ci, sizeof(ci)); ci.cbSize = sizeof(ci); ci.hContact = event->hContact; ci.szProto = szProto; ci.dwFlag = CNF_NICK | CNF_TCHAR; if (!CallService(MS_CONTACT_GETCONTACTINFO, 0, (LPARAM) & ci)) { szNickIn = encodeUTF8(event->hContact, szRealProto, ci.pszVal, ENF_NAMESMILEYS, true); } ZeroMemory(&ci, sizeof(ci)); ci.cbSize = sizeof(ci); ci.hContact = NULL; ci.szProto = szProto; ci.dwFlag = CNF_NICK | CNF_TCHAR; if (!CallService(MS_CONTACT_GETCONTACTINFO, 0, (LPARAM) & ci)) { szNickOut = encodeUTF8(event->hContact, szRealProto, ci.pszVal, ENF_NAMESMILEYS, true); } Template *tmplt = tmpm->getTemplate(((event->dwFlags & IEEF_RTL) && tmpm->isRTL()) ? "HTMLStartRTL" : "HTMLStart"); if (tmplt == NULL) { tmplt = tmpm->getTemplate("HTMLStart"); } if (tmplt!=NULL) { for (Token *token = tmplt->getTokens();token!=NULL;token=token->getNext()) { const char *tokenVal; tokenVal = NULL; switch (token->getType()) { case Token::PLAIN: tokenVal = token->getText(); break; case Token::BASE: tokenVal = szBase; break; case Token::NAMEIN: tokenVal = szNameIn; break; case Token::NAMEOUT: tokenVal = szNameOut; break; case Token::AVATARIN: tokenVal = szAvatarIn; break; case Token::AVATAROUT: tokenVal = szAvatarOut; break; case Token::PROTO: tokenVal = szRealProto; break; case Token::UININ: tokenVal = szUINIn; break; case Token::UINOUT: tokenVal = szUINOut; break; case Token::STATUSMSG: tokenVal = szStatusMsg; break; case Token::NICKIN: tokenVal = szNickIn; break; case Token::NICKOUT: tokenVal = szNickOut; break; } if (tokenVal != NULL) { if (token->getEscape()) { char *escapedToken = Utils::escapeString(tokenVal); Utils::appendText(&output, &outputSize, "%s", escapedToken); delete escapedToken; } else { Utils::appendText(&output, &outputSize, "%s", tokenVal); } } } } if (output != NULL) { view->write(output); free(output); } if (szBase!=NULL) delete szBase; if (szRealProto!=NULL) delete szRealProto; if (szProto!=NULL) delete szProto; if (szUINIn!=NULL) delete szUINIn; if (szUINOut!=NULL) delete szUINOut; if (szNoAvatar!=NULL) delete szNoAvatar; if (szAvatarIn!=NULL) delete szAvatarIn; if (szAvatarOut!=NULL) delete szAvatarOut; if (szNameIn!=NULL) delete szNameIn; if (szNameOut!=NULL) delete szNameOut; if (szNickIn!=NULL) delete szNickIn; if (szNickOut!=NULL) delete szNickOut; if (szStatusMsg!=NULL) delete szStatusMsg; //view->scrollToBottom(); groupTemplate = NULL; iLastEventType = -1; }
int LoadSkinIcons(void) { SKINICONDESC sid; int i, j = 0; char iconName[MAX_PATH], moduleName[MAX_PATH]; TCHAR modulePath[MAX_PATH]; DBVARIANT dbv; // // Perform "1st-time running import" for ( i = 0; i < SIZEOF(mainIcons); i++ ) { _itoa( mainIcons[i].id, moduleName, 10 ); if ( DBGetContactSettingTString( NULL, "Icons", moduleName, &dbv )) break; mir_snprintf( iconName, SIZEOF(iconName), "%s%d", mainIconsFmt, i ); DBWriteContactSettingTString( NULL, "SkinIcons", iconName, dbv.ptszVal ); DBFreeVariant( &dbv ); DBDeleteContactSetting( NULL, "Icons", moduleName ); } for ( ;; ) { // get the next protocol name moduleName[0] = 'p'; moduleName[1] = 0; _itoa( j++, moduleName+1, 100 ); if ( DBGetContactSettingTString( NULL, "Icons", moduleName, &dbv )) break; DBDeleteContactSetting( NULL, "Icons", moduleName ); // make old skinicons' prefix mir_snprintf( moduleName, SIZEOF(moduleName), TCHAR_STR_PARAM, dbv.ptszVal ); // make IcoLib's prefix mir_snprintf( iconName, SIZEOF(iconName), "%s" TCHAR_STR_PARAM, statusIconsFmt, dbv.ptszVal ); convertOneProtocol( moduleName, iconName ); DBFreeVariant( &dbv ); } moduleName[0] = 0; strcpy(iconName, "core_status_" GLOBAL_PROTO_NAME); convertOneProtocol( moduleName, iconName ); CreateServiceFunction( MS_SKIN_LOADICON, sttLoadSkinIcon ); CreateServiceFunction( MS_SKIN_LOADPROTOICON, sttLoadSkinProtoIcon ); CreateServiceFunction( MS_SKIN_LOADPROTOICONBIG, sttLoadSkinProtoIconBig ); ZeroMemory( &sid, sizeof(sid) ); sid.cbSize = sizeof(sid); GetModuleFileName(NULL, modulePath, SIZEOF(modulePath)); sid.ptszDefaultFile = modulePath; sid.flags = SIDF_PATH_TCHAR; sid.pszName = iconName; // // Add main icons to list // for ( i = 0; i < SIZEOF(mainIcons); i++ ) { mir_snprintf( iconName, SIZEOF(iconName), "%s%d", mainIconsFmt, i ); sid.pszSection = mainIcons[i].section == NULL ? "Main Icons" : (char*)mainIcons[i].section; sid.pszDescription = (char*)mainIcons[i].description; sid.iDefaultIndex = mainIcons[i].resource_id; hMainIcons[i] = IcoLib_AddNewIcon( &sid ); } // // Add global icons to list // sid.pszSection = PROTOCOLS_PREFIX "Global"; // // Asterisk is used, to avoid conflict with proto-plugins // 'coz users can't rename it to name with '*' for ( i = 0; i < SIZEOF(statusIcons); i++ ) { mir_snprintf( iconName, SIZEOF(iconName), "%s%s%d", statusIconsFmt, GLOBAL_PROTO_NAME, i ); sid.pszName = iconName; sid.pszDescription = (char*)statusIcons[i].description; sid.iDefaultIndex = statusIcons[i].resource_id; hStatusIcons[i] = IcoLib_AddNewIcon( &sid ); } return 0; }
HANDLE CList_AddRoom(const char* pszModule, const TCHAR* pszRoom, const TCHAR* pszDisplayName, int iType) { HANDLE hContact = CList_FindRoom(pszModule, pszRoom); DBVARIANT dbv; TCHAR pszGroup[50]; *pszGroup = '\0'; if ( !DBGetContactSettingTString( NULL, "Chat", "AddToGroup", &dbv )) { if ( lstrlen( dbv.ptszVal ) > 0 ) lstrcpyn( pszGroup, dbv.ptszVal, 50); DBFreeVariant(&dbv); } else lstrcpyn( pszGroup, _T("Chat rooms"), 50); if ( pszGroup[0] ) CList_CreateGroup(pszGroup); if ( hContact ) { //contact exist, make sure it is in the right group DBVARIANT dbv; DBVARIANT dbv2; char str[50]; int i; if ( pszGroup[0] ) { for (i = 0;; i++) { itoa(i, str, 10); if ( DBGetContactSettingTString( NULL, "CListGroups", str, &dbv )) { DBWriteContactSettingTString(hContact, "CList", "Group", pszGroup); goto END_GROUPLOOP; } if ( !DBGetContactSettingTString( hContact, "CList", "Group", &dbv2 )) { if ( dbv.ptszVal[0] != '\0' && dbv2.ptszVal[0] != '\0' && !lstrcmpi( dbv.ptszVal + 1, dbv2.ptszVal )) { DBFreeVariant(&dbv); DBFreeVariant(&dbv2); goto END_GROUPLOOP; } DBFreeVariant(&dbv2); } DBFreeVariant(&dbv); } } END_GROUPLOOP: DBWriteContactSettingWord(hContact, pszModule, "Status", ID_STATUS_OFFLINE); DBWriteContactSettingTString(hContact, pszModule, "Nick", pszDisplayName ); if(iType != GCW_SERVER) DBWriteContactSettingByte(hContact, "CList", "Hidden", 1); return hContact; } // here we create a new one since no one is to be found if (( hContact = (HANDLE) CallService(MS_DB_CONTACT_ADD, 0, 0)) == NULL ) return NULL; CallService(MS_PROTO_ADDTOCONTACT, (WPARAM) hContact, (LPARAM) pszModule); if ( pszGroup && lstrlen( pszGroup ) > 0 ) DBWriteContactSettingTString(hContact, "CList", "Group", pszGroup ); else DBDeleteContactSetting(hContact, "CList", "Group"); DBWriteContactSettingTString( hContact, pszModule, "Nick", pszDisplayName ); DBWriteContactSettingTString( hContact, pszModule, "ChatRoomID", pszRoom ); DBWriteContactSettingByte(hContact, pszModule, "ChatRoom", (BYTE)iType); DBWriteContactSettingWord(hContact, pszModule, "Status", ID_STATUS_OFFLINE); // if(iType == GCW_SERVER) DBWriteContactSettingByte(hContact, "CList", "Hidden", 1); return hContact; }