int replaceSetting(HWND hwnd, HANDLE hContact, const char *module, const char *setting, DBVARIANT *dbv, const char *find, const char *replace, int mode) { char *szSetting; ptrA myreplace; int count = 0; DBVARIANT dbv2; if (!dbv->type) return 0; if (mode & RW_FULL) szSetting = (char*)replace; else { myreplace = multiReplace(setting, find, replace, mode & RW_CASE); szSetting = myreplace; } if (szSetting[0] == 0) { ItemFound(hwnd, hContact, module, setting, NULL, FW_SETTINGNAME | FW_DELETED); db_unset(hContact, module, setting); return 1; } // check & write if (GetSetting(hContact, module, myreplace, &dbv2)) { if (!db_set(hContact, module, szSetting, &dbv2)) { count++; db_unset(hContact, module, setting); ItemFound(hwnd, hContact, module, szSetting, NULL, FW_SETTINGNAME | FW_REPLACED); } } else db_free(&dbv2); return count; }
int replaceSetting(HWND hwnd, HANDLE hContact, const char *module, const char *setting, DBVARIANT *dbv, const char *find, const char *replace, int mode) { DBCONTACTWRITESETTING cws; char *myreplace = NULL; int count = 0; DBVARIANT dbv2; if (!dbv->type) return 0; if (mode & RW_FULL) cws.szSetting = (char*)replace; else { myreplace = multiReplace(setting, find, replace, mode & RW_CASE); cws.szSetting = myreplace; } if (cws.szSetting[0]==0) { ItemFound(hwnd,hContact,module,setting,NULL,FW_SETTINGNAME|FW_DELETED); DBDeleteContactSetting(hContact,module,setting); mir_free(myreplace); return 1; } // check & write if (GetSetting(hContact, module, myreplace, &dbv2)) { cws.szModule=module; cws.value.type=dbv->type; cws.value.pszVal=dbv->pszVal; cws.value.bVal=dbv->bVal; cws.value.wVal=dbv->wVal; cws.value.dVal=dbv->dVal; cws.value.pbVal = dbv->pbVal; cws.value.cpbVal = dbv->cpbVal; if (!CallService(MS_DB_CONTACT_WRITESETTING,(WPARAM)hContact,(LPARAM)&cws)) { count++; DBDeleteContactSetting(hContact,module,setting); ItemFound(hwnd,hContact,module,cws.szSetting,NULL,FW_SETTINGNAME|FW_REPLACED); } } else DBFreeVariant(&dbv2); mir_free(myreplace); return count; }
int replaceModule(HWND hwnd, HANDLE hContact, const char *module, const char *find, const char *replace, int mode) { ModuleSettingLL msll; ModSetLinkLinkItem *setting; char *myreplace = NULL; char *newModule; int count = 0; if (mode & RW_FULL) newModule = (char*)replace; else { myreplace = multiReplace(module, find, replace, mode & RW_CASE); newModule = myreplace; } if (newModule[0] == 0) { ItemFound(hwnd, hContact, module, NULL, NULL, FW_MODULE | FW_DELETED); deleteModule((char*)module, hContact, 1); replaceTreeItem(GetDlgItem(hwnd2mainWindow, IDC_MODULES), hContact, module, NULL); mir_free(myreplace); return 1; } if (!IsModuleEmpty(hContact, newModule)) return 0; if (EnumSettings(hContact, (char*)module, &msll)) { setting = msll.first; while (setting) { DBVARIANT dbv; if (!GetSetting(hContact, module, setting->name, &dbv)) { switch (dbv.type) { case DBVT_BYTE: db_set_b(hContact, newModule, setting->name, dbv.bVal); break; case DBVT_WORD: db_set_w(hContact, newModule, setting->name, dbv.wVal); break; case DBVT_DWORD: db_set_dw(hContact, newModule, setting->name, dbv.dVal); break; case DBVT_ASCIIZ: db_set_s(hContact, newModule, setting->name, dbv.pszVal); break; case DBVT_UTF8: db_set_utf(hContact, newModule, setting->name, dbv.pszVal); break; case DBVT_BLOB: db_set_blob(hContact, newModule, setting->name, dbv.pbVal, dbv.cpbVal); break; } db_free(&dbv); db_unset(hContact, module, setting->name); } setting = setting->next; } FreeModuleSettingLL(&msll); replaceTreeItem(GetDlgItem(hwnd2mainWindow, IDC_MODULES), hContact, module, newModule); ItemFound(hwnd, hContact, newModule, NULL, NULL, FW_MODULE | FW_REPLACED); count++; } mir_free(myreplace); return count; }
int replaceValue(HWND hwnd, HANDLE hContact, const char *module, const char *setting, DBVARIANT *dbv, const char *find, const char *replace, int mode) { int count = 0; DWORD num = 0; BOOL write = 0; int isNumeric; char *myreplace = NULL; DBVARIANT val = { 0 }; if (!dbv->type || dbv->type == DBVT_BLOB) return 0; if (!replace[0]) isNumeric = 1; else isNumeric = sscanf(replace, "%d", &num); val.type = dbv->type; switch (dbv->type) { case DBVT_UTF8: case DBVT_ASCIIZ: if (mode & RW_FULL) val.pszVal = (char*)replace; else { myreplace = multiReplace(dbv->pszVal, find, replace, mode & RW_CASE); val.pszVal = myreplace; } break; case DBVT_BYTE: if (isNumeric && num < 0x100) val.bVal = (BYTE)num; else return 0; break; case DBVT_WORD: if (isNumeric && num < 0x10000) val.wVal = (WORD)num; else return 0; break; case DBVT_DWORD: if (isNumeric) val.dVal = num; else return 0; break; default: return 0; } if ((!val.pszVal && !replace[0]) || (val.pszVal && !val.pszVal[0])) { ItemFound(hwnd, hContact, module, setting, NULL, FW_SETTINGNAME | FW_DELETED); db_unset(hContact, module, setting); mir_free(myreplace); return 1; } if (!db_set(hContact, module, setting, &val)) { count++; ItemFound(hwnd, hContact, module, setting, myreplace ? myreplace : (char*)replace, FW_SETTINGVALUE | FW_REPLACED); } mir_free(myreplace); return count; }
int replaceValue(HWND hwnd, HANDLE hContact, const char *module, const char *setting, DBVARIANT *dbv, const char *find, const char *replace, int mode) { int count = 0; DWORD num = 0; BOOL write = 0; int isNumeric; char *myreplace = NULL; DBCONTACTWRITESETTING cws = {0}; if (!dbv->type || dbv->type == DBVT_BLOB) return 0; if (!replace[0]) isNumeric = 1; else isNumeric = sscanf(replace,"%d",&num); cws.szModule=module; cws.szSetting=setting; cws.value.type=dbv->type; switch(dbv->type) { case DBVT_UTF8: case DBVT_ASCIIZ: if (mode & RW_FULL) cws.value.pszVal = (char*)replace; else { myreplace = multiReplace(dbv->pszVal, find, replace, mode & RW_CASE); cws.value.pszVal=myreplace; } break; case DBVT_BYTE: if (isNumeric && num < 0x100) cws.value.bVal = (BYTE)num; else return 0; break; case DBVT_WORD: if (isNumeric && num < 0x10000) cws.value.wVal = (WORD)num; else return 0; break; case DBVT_DWORD: if (isNumeric) cws.value.dVal = num; else return 0; break; default: return 0; } if ((!cws.value.pszVal && !replace[0]) || (cws.value.pszVal && !cws.value.pszVal[0])) { ItemFound(hwnd,hContact,module,setting,NULL,FW_SETTINGNAME|FW_DELETED); DBDeleteContactSetting(hContact,module,setting); mir_free(myreplace); return 1; } if (!CallService(MS_DB_CONTACT_WRITESETTING,(WPARAM)hContact,(LPARAM)&cws)) { count++; ItemFound(hwnd,hContact,module,setting,myreplace?myreplace:(char*)replace,FW_SETTINGVALUE|FW_REPLACED); } mir_free(myreplace); return count; }