/** Set contact as MetaContact default * * Set the given contact to be the default one for the metacontact to which it is linked. * * @param wParam : \c HANDLE to the MetaContact to be set as default * @param lParam : \c HWND to the clist window (This means the function has been called via the contact menu). */ INT_PTR Meta_Default(WPARAM wParam,LPARAM lParam) { HANDLE hMeta; // the wParam is a subcontact if ((hMeta = (HANDLE)db_get_dw((HANDLE)wParam, META_PROTO, "Handle",0)) != 0) { db_set_dw(hMeta, META_PROTO, "Default", (DWORD)Meta_GetContactNumber((HANDLE)wParam)); NotifyEventHooks(hEventDefaultChanged, (WPARAM)hMeta, (LPARAM)(HANDLE)wParam); } return 0; }
INT_PTR AddSimpleMessage(WPARAM wParam, LPARAM lParam) { MCONTACT hContact = wParam; TCHAR* message = (TCHAR*)lParam; db_set_ws(hContact, modname, "PounceMsg", message); db_set_w(hContact, modname, "SendIfMyStatusIsFLAG", (WORD)db_get_w(NULL, modname, "SendIfMyStatusIsFLAG",1)); db_set_w(hContact, modname, "SendIfTheirStatusIsFLAG", (WORD)db_get_w(NULL, modname, "SendIfTheirStatusIsFLAG",1)); db_set_b(hContact, modname, "Reuse", (BYTE)db_get_b(NULL, modname, "Reuse",0)); db_set_b(hContact, modname, "GiveUpDays", (BYTE)db_get_b(NULL, modname, "GiveUpDays",0)); db_set_dw(hContact, modname, "GiveUpDate", (DWORD)(db_get_b(hContact, modname, "GiveUpDays",0)*SECONDSINADAY)); return 0; }
static void SaveItemMask(HWND hwndList, MCONTACT hContact, HANDLE hItem, const char *pszSetting) { DWORD mask; int i, iImage; for (i=0, mask=0; i < IGNOREEVENT_MAX; i++) { iImage = SendMessage(hwndList, CLM_GETEXTRAIMAGE, (WPARAM)hItem, MAKELPARAM(i, 0)); if(iImage && iImage != EMPTY_EXTRA_ICON) mask |= 1<<i; } db_set_dw(hContact, KEYBDMODULE, pszSetting, mask); }
//sets the default contact, using the subcontact's contact number //wParam=(HANDLE)hMetaContact //lParam=(DWORD)contact number //returns 0 on success INT_PTR MetaAPI_SetDefaultContactNum(WPARAM wParam, LPARAM lParam) { DWORD num_contacts = db_get_dw((HANDLE)wParam, META_PROTO, "NumContacts", -1); if (num_contacts == -1) return 1; if ((DWORD)lParam >= num_contacts || (DWORD)lParam < 0) return 1; if (db_set_dw((HANDLE)wParam, META_PROTO, "Default", (DWORD)lParam)) return 1; NotifyEventHooks(hEventDefaultChanged, wParam, (LPARAM)Meta_GetContactHandle((HANDLE)wParam, (int)lParam)); return 0; }
void SaveContactsPos() { for (int i = 0; i < thumbList.getCount(); ++i) { SetLastError(0); RECT rc; thumbList[i].GetThumbRect(&rc); if (0 == GetLastError()) db_set_dw(thumbList[i].hContact, MODULE, "ThumbsPos", DB_POS_MAKE_XY(rc.left, rc.top)); } }
void save_settings() { db_set_b(NULL, PlugName, "local_only", g_settings.local_only); db_set_b(NULL, PlugName, "debug_messages", g_settings.debug_messages); db_set_b(NULL, PlugName, "log_to_file", g_settings.log_to_file); db_set_b(NULL, PlugName, "beep", g_settings.sound); db_set_b(NULL, PlugName, "use_pcspeaker", g_settings.use_pcspeaker); db_set_b(NULL, PlugName, "allow_execute", g_settings.allow_execute); db_set_dw(NULL, PlugName, "port", g_settings.port); db_set_ts(NULL, PlugName, "password", g_settings.password.c_str()); db_set_ts(NULL, PlugName, "log_filename", g_settings.log_filename.c_str()); }
void RenameModule(HANDLE hContact, const char* pszOldName, const char* pszNewName) { SettingsList settingsList; DBCONTACTENUMSETTINGS dbces = {0}; dbces.szModule = pszOldName; dbces.lParam = (LPARAM)&settingsList; dbces.pfnEnumProc = EnumSettingsProc2; int nResult = ::CallService(MS_DB_CONTACT_ENUMSETTINGS, (WPARAM)hContact, (LPARAM)&dbces); if (nResult != -1) { DBVARIANT dbv; for(unsigned i=0; i<settingsList.size(); i++) { const char* pszSetting = settingsList[i]; if (!GetSetting(hContact, pszOldName, pszSetting, &dbv)) { switch (dbv.type) { case DBVT_BYTE: db_set_b(hContact, pszNewName, pszSetting, dbv.bVal); break; case DBVT_WORD: db_set_w(hContact, pszNewName, pszSetting, dbv.wVal); break; case DBVT_DWORD: db_set_dw(hContact, pszNewName, pszSetting, dbv.dVal); break; case DBVT_ASCIIZ: db_set_s(hContact, pszNewName, pszSetting, dbv.pszVal); break; case DBVT_UTF8: db_set_utf(hContact, pszNewName, pszSetting, dbv.pszVal); break; default: assert(0); break; } db_unset(hContact, pszOldName, pszSetting); db_free(&dbv); } free((char*)settingsList[i]); } } }
INT_PTR Meta_Convert(WPARAM wParam, LPARAM lParam) { DBVARIANT dbv; char *group = 0; // Get some information about the selected contact. if ( !db_get_utf((HANDLE)wParam, "CList", "Group", &dbv)) { group = _strdup(dbv.pszVal); db_free(&dbv); } // Create a new metacontact HANDLE hMetaContact = (HANDLE)CallService(MS_DB_CONTACT_ADD,0,0); if (hMetaContact) { db_set_dw(hMetaContact, META_PROTO, META_ID,nextMetaID); db_set_dw(hMetaContact, META_PROTO, "NumContacts",0); db_set_dw(NULL, META_PROTO, "NextMetaID", ++nextMetaID); // Add the MetaContact protocol to the new meta contact CallService(MS_PROTO_ADDTOCONTACT, (WPARAM)hMetaContact, (LPARAM)META_PROTO); if (group) db_set_utf(hMetaContact, "CList", "Group", group); // Assign the contact to the MetaContact just created (and make default). if ( !Meta_Assign((HANDLE)wParam, hMetaContact, TRUE)) { MessageBox(0, TranslateT("There was a problem in assigning the contact to the MetaContact"), TranslateT("Error"), MB_ICONEXCLAMATION); CallService(MS_DB_CONTACT_DELETE, (WPARAM)hMetaContact, 0); return 0; } // hide the contact if clist groups disabled (shouldn't create one anyway since menus disabled) if ( !Meta_IsEnabled()) db_set_b(hMetaContact, "CList", "Hidden", 1); } free(group); return (INT_PTR)hMetaContact; }
void SaveOptions() { db_set_dw(NULL, PLUG, "PingPeriod", options.ping_period); db_set_dw(NULL, PLUG, "PingTimeout", options.ping_timeout); CallService(PLUG "/SetPingTimeout", (WPARAM)options.ping_timeout, 0); db_set_b(NULL, PLUG, "ShowPopup", options.show_popup ? 1 : 0); db_set_b(NULL, PLUG, "ShowPopup2", options.show_popup2 ? 1 : 0); db_set_b(NULL, PLUG, "BlockReps", options.block_reps ? 1 : 0); db_set_b(NULL, PLUG, "LoggingEnabled", options.logging ? 1 : 0); db_set_b(NULL, PLUG, "NoTestStatus", options.no_test_icon ? 1 : 0); db_set_w(NULL, PLUG, "Indent", options.indent); db_set_w(NULL, PLUG, "RowHeight", options.row_height); db_set_dw(NULL, PLUG, "Retries", (DWORD)options.retries); CallService(PLUG "/SetLogFilename", (WPARAM)MAX_PATH, (LPARAM)options.log_filename); ICMP::get_instance()->set_timeout(options.ping_timeout * 1000); db_set_b(NULL, PLUG, "AttachToClist", options.attach_to_clist ? 1 : 0); db_set_b(NULL, PLUG, "LogCSV", options.log_csv ? 1 : 0); }
void LoadSettings() { Enabled = db_get_b(NULL, MODULE_NAME, EnabledComp, 0); delay = db_get_dw(NULL, MODULE_NAME, DelayComp, 0); PopUp = db_get_b(NULL, MODULE_NAME, PopUpComp, 0); PopUpTime = db_get_dw(NULL, MODULE_NAME, PopUpTimeComp, 0); MenuItem = db_get_b(NULL, MODULE_NAME, MenuitemComp, 0); TTBButtons = db_get_b(NULL, MODULE_NAME, TTBButtonsComp, 0); DefSound = db_get_b(NULL, MODULE_NAME, DefSoundComp, 0); DefPopup = db_get_b(NULL, MODULE_NAME, DefPopupComp, 0); DefEnabled = db_get_b(NULL, MODULE_NAME, DefEnabledComp, 0); NonStatusAllow = db_get_b(NULL, MODULE_NAME, NonStatusAllowComp, 0); if (PopUpTime < 1) PopUpTime = (DWORD)1; if (PopUpTime > 30) PopUpTime = (DWORD)30; if (delay < 10) delay = (DWORD)10; if (delay > 300) delay = (DWORD)300; db_set_dw(NULL, MODULE_NAME, DelayComp, delay); db_set_dw(NULL, MODULE_NAME, PopUpTimeComp, PopUpTime); }
void CSametimeProto::SetAllOffline() { debugLog(_T("SetAllOffline() start")); for (MCONTACT hContact = db_find_first(m_szModuleName); hContact; hContact = db_find_next(hContact, m_szModuleName)) { if (db_get_b(hContact, m_szModuleName, "ChatRoom", 0)) { CallService(MS_DB_CONTACT_DELETE, (WPARAM)hContact, 0); continue; } db_set_w(hContact, m_szModuleName, "Status", ID_STATUS_OFFLINE); db_set_dw(hContact, m_szModuleName, "IdleTS", 0); } }
int ModulesLoaded(WPARAM wParam, LPARAM lParam) { LPCTSTR ptszEmptySting = _T(""); // Заполняем конфигурационные строки из базы. Если их там нет - генерируем. for (int i = 0; i < bLayNum; i++) { LPTSTR ptszCurrLayout = GenerateLayoutString(hklLayouts[i]); LPSTR ptszTemp = GetNameOfLayout(hklLayouts[i]); ptrT tszValue(db_get_tsa(NULL, ModuleName, ptszTemp)); if (tszValue == 0) ptszLayStrings[i] = ptszCurrLayout; else if (!_tcscmp(tszValue, ptszEmptySting)) ptszLayStrings[i] = ptszCurrLayout; else { ptszLayStrings[i] = tszValue.detouch(); if (!_tcscmp(ptszCurrLayout, ptszLayStrings[i])) db_unset(NULL, ModuleName, ptszTemp); mir_free(ptszCurrLayout); } mir_free(ptszTemp); } // Прочитаем основные настройки ReadMainOptions(); // Прочитаем настройки попапов ReadPopupOptions(); // Зарегим звук SkinAddNewSoundEx(SND_ChangeLayout, ModuleName, LPGEN("Changing Layout")); SkinAddNewSoundEx(SND_ChangeCase, ModuleName, LPGEN("Changing Case")); // Хук на нажатие клавиши kbHook_All = SetWindowsHookEx(WH_KEYBOARD, (HOOKPROC)Keyboard_Hook, NULL, GetCurrentThreadId()); hChangeLayout = CreateServiceFunction(MS_CKL_CHANGELAYOUT, APIChangeLayout); hGetLayoutOfText = CreateServiceFunction(MS_CKL_GETLAYOUTOFTEXT, APIGetLayoutOfText); hChangeTextLayout = CreateServiceFunction(MS_CKL_CHANGETEXTLAYOUT, APIChangeTextLayout); // IcoLib support Icon_Register(hInst, ModuleName, iconList, SIZEOF(iconList)); HookEvent(ME_SKIN2_ICONSCHANGED, OnIconsChanged); OnIconsChanged(0, 0); RegPopupActions(); db_set_dw(NULL, ModuleName, "CurrentVer", PLUGIN_MAKE_VERSION(__MAJOR_VERSION, __MINOR_VERSION, __RELEASE_NUM, __BUILD_NUM)); return 0; }
extern "C" __declspec(dllexport) int Load(void) { mir_getLP(&pluginInfo); RECT WorkArea; SystemParametersInfo(SPI_GETWORKAREA, 0, &WorkArea, 0); BYTE clEnableTop = db_get_b(NULL, MODULE_NAME, "CLEnableTop", 1); BYTE clEnableBottom = db_get_b(NULL, MODULE_NAME, "CLEnableBottom", 0); BYTE clEnableSide = db_get_b(NULL, MODULE_NAME, "CLEnableSide", 1); BYTE clEnableWidth = db_get_b(NULL, MODULE_NAME, "CLEnableWidth", 0); DWORD clTop = db_get_dw(NULL, MODULE_NAME, "CLpixelsTop", 3); DWORD clBottom = db_get_dw(NULL, MODULE_NAME, "CLpixelsBottom", 3); DWORD clSide = db_get_dw(NULL, MODULE_NAME, "CLpixelsSide", 3); BYTE clAlign = db_get_b(NULL, MODULE_NAME, "CLAlign", RIGHT); DWORD clWidth = db_get_dw(NULL, MODULE_NAME, "CLWidth", 180); BYTE clEnableState = db_get_b(NULL, MODULE_NAME, "CLEnableState", 0); BYTE clState = db_get_b(NULL, MODULE_NAME, "CLState", 2); if(clEnableState) db_set_b(NULL,"CList", "State", (BYTE)clState); if(clEnableWidth) { if(clWidth > 0) db_set_dw(NULL, "CList", "Width", clWidth); } else { clWidth = db_get_dw(NULL, "CList", "Width", 180); } if(clEnableTop || clEnableBottom || clEnableSide) db_set_b(NULL,"CList", "Docked", 0); if(clEnableTop) db_set_dw(NULL, "CList", "y", clTop); //thx ValeraVi if(clEnableBottom) { if(clEnableTop) db_set_dw(NULL, "CList", "Height", (WorkArea.bottom - WorkArea.top - clTop - clBottom)); else db_set_dw(NULL, "CList", "y", (WorkArea.bottom - clBottom - (int)db_get_dw(NULL, "CList", "Height", 0))); } if(clEnableSide) { if(clAlign == LEFT) db_set_dw(NULL, "CList", "x", (WorkArea.left + clSide)); else db_set_dw(NULL, "CList", "x", (WorkArea.right - clWidth - clSide)); } HookEvent(ME_OPT_INITIALISE, OptInit); return 0; }
// clean database entries for a persistent job (currently: manual send later jobs) // void CSendLaterJob::cleanDB() { if (isPersistentJob()) { char szKey[100]; db_unset(hContact, "SendLater", szId); int iCount = db_get_dw(hContact, "SendLater", "count", 0); if (iCount) iCount--; db_set_dw(hContact, "SendLater", "count", iCount); // delete flags mir_snprintf(szKey, 100, "$%s", szId); db_unset(hContact, "SendLater", szKey); } }
void DoCheck(int iFlag) { if (hCheckThread != NULL) { Title = TranslateT("Pack Updater"); Text = TranslateT("Update checking already started!"); if (ServiceExists(MS_POPUP_ADDPOPUPT) && db_get_b(NULL, "Popup", "ModuleIsEnabled", 1) && db_get_b(NULL, MODNAME, "Popups2", DEFAULT_POPUP_ENABLED)) { Number = 2; show_popup(0, Title, Text, Number, 0); } else if (db_get_b(NULL, MODNAME, "Popups2M", DEFAULT_MESSAGE_ENABLED)) MessageBox(NULL, Text, Title, MB_ICONINFORMATION); } else if (iFlag) { hCheckThread = mir_forkthread(CheckUpdates, 0); db_set_dw(NULL, MODNAME, "LastUpdate", time(NULL)); } }
INT_PTR Meta_ForceDefault(WPARAM wParam,LPARAM lParam) { // the wParam is a MetaContact if (db_get_dw((HANDLE)wParam, META_PROTO, META_ID, (DWORD)-1) != (DWORD)-1) { BOOL current = db_get_b((HANDLE)wParam, META_PROTO, "ForceDefault", 0); current = !current; db_set_b((HANDLE)wParam, META_PROTO, "ForceDefault", (BYTE)current); db_set_dw((HANDLE)wParam, META_PROTO, "ForceSend", 0); if (current) NotifyEventHooks(hEventForceSend, wParam, (LPARAM)Meta_GetContactHandle((HANDLE)wParam, db_get_dw((HANDLE)wParam, META_PROTO, "Default", -1))); else NotifyEventHooks(hEventUnforceSend, wParam, 0); } return 0; }
void RenewPseudocontactHandles() { int count = 0; PROTOACCOUNT **protos; ProtoEnumAccounts(&count, &protos); for (int i = 0; i < count; i++) { db_unset(0, protos[i]->szModuleName, PSEUDOCONTACT_LINK); db_unset(0, protos[i]->szModuleName, "GMailExtNotifyContact"); // remove this } for (HANDLE hContact = db_find_first(); hContact; hContact = db_find_next(hContact)) { if (db_get_b(hContact, SHORT_PLUGIN_NAME, PSEUDOCONTACT_FLAG, 0)) { LPCSTR proto = (LPCSTR)GetContactProto(hContact); db_set_dw(NULL, proto, PSEUDOCONTACT_LINK, (DWORD)hContact); } } }
/** * This method writes the combobox's item * * @param hContact - HANDLE of the contact * @param pszProto - the contact's protocol * * @return nothing **/ void CCombo::OnApply(HANDLE hContact, LPCSTR pszProto) { if (_Flags.B.hasChanged) { LPCSTR pszModule = hContact ? USERINFO : pszProto; if ((_Flags.B.hasCustom || !hContact) && (_curSel != CB_ERR)) { LPIDSTRLIST pd; pd = (LPIDSTRLIST)SendMessage(_hwnd, CB_GETITEMDATA, _curSel, 0); if (pd != NULL) { switch (_bDataType) { case DBVT_BYTE: db_set_b(hContact, pszModule, _pszSetting, pd->nID); break; case DBVT_WORD: db_set_w(hContact, pszModule, _pszSetting, pd->nID); break; case DBVT_DWORD: db_set_dw(hContact, pszModule, _pszSetting, pd->nID); break; case DBVT_ASCIIZ: case DBVT_WCHAR: db_set_s(hContact, pszModule, _pszSetting, (LPSTR)pd->pszText); } if (!hContact) { _Flags.B.hasCustom = 0; _Flags.B.hasProto = 1; } _Flags.B.hasChanged = 0; } } if (_Flags.B.hasChanged) { db_unset(hContact, pszModule, _pszSetting); _Flags.B.hasChanged = 0; OnInfoChanged(hContact, pszProto); } InvalidateRect(_hwnd, NULL, TRUE); } }
static INT_PTR CALLBACK icqOptionsDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { DBVARIANT dbv; char str[128]; switch (msg) { case WM_INITDIALOG: TranslateDialogDefault(hWnd); SetDlgItemInt(hWnd, IDC_OPT_UIN, db_get_dw(NULL, protoName, "UIN", 0), FALSE); if (!db_get(NULL, protoName, "Password", &dbv)) { SetDlgItemText(hWnd, IDC_OPT_PASSWORD, dbv.pszVal); db_free(&dbv); } if(!db_get(NULL, protoName, "Server", &dbv)) { SetDlgItemText(hWnd, IDC_OPT_SERVER, dbv.pszVal); db_free(&dbv); } SetDlgItemInt(hWnd, IDC_OPT_PORT, db_get_w(NULL, protoName, "Port", 4000), FALSE); ShowWindow(GetDlgItem(hWnd, IDC_OPT_RECONNECT), SW_HIDE); return TRUE; case WM_NOTIFY: switch (((LPNMHDR)lParam)->code) { case PSN_APPLY: db_set_dw(NULL, protoName, "UIN", (DWORD)GetDlgItemInt(hWnd, IDC_OPT_UIN, NULL, FALSE)); GetDlgItemText(hWnd, IDC_OPT_PASSWORD, str, sizeof(str)); db_set_s(NULL, protoName, "Password", str); GetDlgItemText(hWnd, IDC_OPT_SERVER, str, sizeof(str)); db_set_s(NULL, protoName, "Server", str); db_set_w(NULL, protoName, "Port", (WORD)GetDlgItemInt(hWnd, IDC_OPT_PORT, NULL, FALSE)); return TRUE; } break; case WM_COMMAND: if ((LOWORD(wParam) == IDC_OPT_UIN || LOWORD(wParam) == IDC_OPT_PASSWORD || LOWORD(wParam) == IDC_OPT_SERVER || LOWORD(wParam) == IDC_OPT_PORT) && (HIWORD(wParam) != EN_CHANGE || (HWND)lParam != GetFocus())) return 0; SendMessage(GetParent(hWnd), PSM_CHANGED, 0, 0); break; } return FALSE; }
int setNumericValue(MCONTACT hContact, const char *module, const char *setting, DWORD value, int type) { switch (type) { case DBVT_BYTE: if (value <= 0xFF) return !db_set_b(hContact, module, setting, (BYTE)value); break; case DBVT_WORD: if (value <= 0xFFFF) return !db_set_w(hContact, module, setting, (WORD)value); break; case DBVT_DWORD: return !db_set_dw(hContact, module, setting, value); } return 0; }
void ExtraIconGroup::applyIcon(MCONTACT hContact) { if (!isEnabled() || hContact == NULL) return; m_setValidExtraIcon = false; m_insideApply = true; int i; for (i = 0; i < m_items.getCount(); i++) { m_items[i]->applyIcon(hContact); if (m_setValidExtraIcon) break; } m_insideApply = false; db_set_dw(hContact, MODULE_NAME, m_szName, m_setValidExtraIcon ? m_items[i]->getID() : 0); }
DWORD isSeen(MCONTACT hcontact, SYSTEMTIME *st) { FILETIME ft; ULONGLONG ll; DWORD res = db_get_dw(hcontact, S_MOD, "seenTS", 0); if (res) { if (st) { ll = UInt32x32To64(TimeZone_ToLocal(res), 10000000) + NUM100NANOSEC; ft.dwLowDateTime = (DWORD)ll; ft.dwHighDateTime = (DWORD)(ll >> 32); FileTimeToSystemTime(&ft, st); } return res; } SYSTEMTIME lst; memset(&lst, 0, sizeof(lst)); if (lst.wYear = db_get_w(hcontact, S_MOD, "Year", 0)) { if (lst.wMonth = db_get_w(hcontact, S_MOD, "Month", 0)) { if (lst.wDay = db_get_w(hcontact, S_MOD, "Day", 0)) { lst.wDayOfWeek = db_get_w(hcontact, S_MOD, "WeekDay", 0); lst.wHour = db_get_w(hcontact, S_MOD, "Hours", 0); lst.wMinute = db_get_w(hcontact, S_MOD, "Minutes", 0); lst.wSecond = db_get_w(hcontact, S_MOD, "Seconds", 0); if (SystemTimeToFileTime(&lst, &ft)) { ll = ((LONGLONG)ft.dwHighDateTime << 32) | ((LONGLONG)ft.dwLowDateTime); ll -= NUM100NANOSEC; ll /= 10000000; //perform LOCALTOTIMESTAMP res = (DWORD)ll - TimeZone_ToLocal(0); //nevel look for Year/Month/Day/Hour/Minute/Second again db_set_dw(hcontact, S_MOD, "seenTS", res); } } } } if (st) memcpy(st, &lst, sizeof(SYSTEMTIME)); return res; }
void CSkypeProto::LoadContactsAuth(const NETLIBHTTPREQUEST *response) { if (response == NULL) return; JSONNode root = JSONNode::parse(response->pData); if (!root) return; const JSONNode &items = root.as_array(); for (size_t i = 0; i < items.size(); i++) { const JSONNode &item = items.at(i); if (!item) break; std::string skypename = item["sender"].as_string(); std::string reason = item["greeting"].as_string(); time_t eventTime = IsoToUnixTime(item["event_time_iso"].as_string().c_str()); MCONTACT hContact = AddContact(skypename.c_str()); if (hContact) { time_t lastEventTime = db_get_dw(hContact, m_szModuleName, "LastAuthRequestTime", 0); if (lastEventTime < eventTime) { db_set_dw(hContact, m_szModuleName, "LastAuthRequestTime", eventTime); delSetting(hContact, "Auth"); DB_AUTH_BLOB blob(hContact, NULL, NULL, NULL, skypename.c_str(), reason.c_str()); PROTORECVEVENT pre = { 0 }; pre.timestamp = time(NULL); pre.lParam = blob.size(); pre.szMessage = blob; ProtoChainRecv(hContact, PSR_AUTH, 0, (LPARAM)&pre); } } } }
static MCONTACT HistoryImportFindContact(HWND hdlgProgress, char* szModuleName, DWORD uin, int addUnknown) { MCONTACT hContact = HContactFromNumericID(szModuleName, "UIN", uin); if (hContact == NULL) { AddMessage( LPGENT("Ignored event from/to self")); return INVALID_CONTACT_ID; } if (hContact != INVALID_CONTACT_ID) return hContact; if (!addUnknown) return INVALID_CONTACT_ID; hContact = (MCONTACT)CallService(MS_DB_CONTACT_ADD, 0, 0); CallService(MS_PROTO_ADDTOCONTACT, hContact, (LPARAM)szModuleName); db_set_dw((MCONTACT)hContact, szModuleName, "UIN", uin); AddMessage( LPGENT("Added contact %u (found in history)"), uin ); return hContact; }
// do saveN("A","B","C","D") A is module, B is setting, c is value, D is type 0/b 1/w 2/d 3/s void checkStringForSaveN(CMStringA &str) { if (!strstr(str, "saveN(\"")) return; char *A, *B, *C, *D, *copyOfStr = NEWSTR_ALLOCA(str.c_str()); unsigned int i, j = 0, s = str.GetLength(); CMStringA tmp; for (i = 0; i < s; i++) { if (!strncmp(str.c_str()+i, "saveN(\"", mir_strlen("saveN(\""))) { i += (int)mir_strlen("saveN(\""); A = strtok(©OfStr[i], "\",\""); B = strtok(NULL, ",\""); C = strtok(NULL, ",\""); D = strtok(NULL, ",\")"); j = D - ©OfStr[i] + (int)mir_strlen(D) + 1; if (A && B && C && D) { switch (D[0]) { case '0': case 'b': db_set_b(NULL, A, B, (BYTE)atoi(C)); break; case '1': case 'w': db_set_w(NULL, A, B, (WORD)atoi(C)); break; case '2': case 'd': db_set_dw(NULL, A, B, (DWORD)atoi(C)); break; case '3': case 's': db_set_s(NULL, A, B, C); break; } } else tmp.Append(str.c_str()+i, j); i += j; } else tmp.AppendChar(copyOfStr[i]); } str = tmp; }
static void SetAvatar(TlenProtocol *proto, HANDLE hContact, TLEN_LIST_ITEM *item, char *data, int len, DWORD format) { TCHAR filename[MAX_PATH]; char md5[33]; mir_md5_state_t ctx; DWORD digest[4]; if (format == PA_FORMAT_UNKNOWN && len > 4) format = ProtoGetBufferFormat(data); mir_md5_init( &ctx ); mir_md5_append( &ctx, ( BYTE* )data, len); mir_md5_finish( &ctx, ( BYTE* )digest ); sprintf( md5, "%08x%08x%08x%08x", (int)htonl(digest[0]), (int)htonl(digest[1]), (int)htonl(digest[2]), (int)htonl(digest[3])); //!!!!!!!!!!!!!! if (item != NULL) { char *hash = item->avatarHash; item->avatarFormat = format; item->avatarHash = mir_strdup(md5); mir_free(hash); } else { proto->threadData->avatarFormat = format; strcpy(proto->threadData->avatarHash, md5); } TlenGetAvatarFileName(proto, item, filename, sizeof filename ); DeleteFile(filename); FILE *out = _tfopen(filename, TEXT("wb") ); if (out != NULL) { fwrite(data, len, 1, out); fclose(out); db_set_ts(hContact, "ContactPhoto", "File", filename ); db_set_s(hContact, proto->m_szModuleName, "AvatarHash", md5); db_set_dw(hContact, proto->m_szModuleName, "AvatarFormat", format); } else { TCHAR buffer[128]; mir_sntprintf(buffer, SIZEOF(buffer), TranslateT("Can not save new avatar file \"%s\" Error:\n\t%s (Error: %d)"), filename, _tcserror(errno), errno); PUShowMessageT(buffer, SM_WARNING); proto->debugLog(buffer); return; } ProtoBroadcastAck( proto->m_szModuleName, hContact, ACKTYPE_AVATAR, ACKRESULT_STATUS, NULL , 0); }
static void SaveBranch(HWND hwndTree, branch_t *branch, int nValues) { TVITEM tvi = { 0 }; BYTE bChecked; DWORD iState = 0; for (int i = 0; i < nValues; i++) { tvi.mask = TVIF_HANDLE | TVIF_IMAGE; tvi.hItem = branch[i].hItem; TreeView_GetItem(hwndTree, &tvi); bChecked = ((tvi.iImage == IMG_CHECK) ? 1 : 0); if (branch[i].iMode) { if (bChecked) iState |= branch[i].iMode; if (iState & GC_EVENT_ADDSTATUS) iState |= GC_EVENT_REMOVESTATUS; db_set_dw(0, CHAT_MODULE, branch[i].szDBName, iState); } else db_set_b(0, CHAT_MODULE, branch[i].szDBName, bChecked); } }
void renameModule(char* oldName, char* newName, HANDLE hContact) { DBVARIANT dbv; ModuleSettingLL settinglist; ModSetLinkLinkItem *setting; if (!EnumSettings(hContact, oldName, &settinglist)) { msg(Translate("Error Loading Setting List"), modFullname); return; } setting = settinglist.first; while (setting) { if (!GetSetting(hContact, oldName, setting->name, &dbv)) { switch (dbv.type) { case DBVT_BYTE: db_set_b(hContact, newName, setting->name, dbv.bVal); break; case DBVT_WORD: db_set_w(hContact, newName, setting->name, dbv.wVal); break; case DBVT_DWORD: db_set_dw(hContact, newName, setting->name, dbv.dVal); break; case DBVT_ASCIIZ: db_set_s(hContact, newName, setting->name, dbv.pszVal); break; case DBVT_UTF8: db_set_utf(hContact, newName, setting->name, dbv.pszVal); break; case DBVT_BLOB: db_set_blob(hContact, newName, setting->name, dbv.pbVal, dbv.cpbVal); break; } db_unset(hContact, oldName, setting->name); } db_free(&dbv); setting = (ModSetLinkLinkItem *)setting->next; } FreeModuleSettingLL(&settinglist); }
extern "C" int __declspec(dllexport) Load(void) { mir_getLP(&pluginInfo); mir_getCLI(); InitOptions(); hContactReturnedAction = CreateServiceFunction("BuddyExpectator/actionReturned", ContactReturnedAction); hContactStillAbsentAction = CreateServiceFunction("BuddyExpectator/actionStillAbsent", ContactStillAbsentAction); hMissYouAction = CreateServiceFunction("BuddyExpectator/actionMissYou", MissYouAction); hMenuMissYouClick = CreateServiceFunction("BuddyExpectator/actionMissYouClick", MenuMissYouClick); HookEvent(ME_DB_CONTACT_SETTINGCHANGED, SettingChanged); HookEvent(ME_SYSTEM_MODULESLOADED, ModulesLoaded); HookEvent(ME_SYSTEM_PRESHUTDOWN, onShutdown); HookEvent(ME_DB_CONTACT_ADDED, ContactAdded); // ensure all contacts are timestamped DBVARIANT dbv; DWORD current_time = (DWORD)time(0); for (MCONTACT hContact = db_find_first(); hContact; hContact = db_find_next(hContact)) { if (!db_get(hContact, MODULE_NAME, "CreationTime", &dbv)) db_free(&dbv); else db_set_dw(hContact, MODULE_NAME, "CreationTime", current_time); } Icon_Register(hInst, "BuddyExpectator", iconList, _countof(iconList)); HookEvent(ME_SKIN2_ICONSCHANGED, onIconsChanged); onIconsChanged(0, 0); hExtraIcon = ExtraIcon_RegisterIcolib("buddy_exp", LPGEN("Buddy Expectator"), "enabled_icon"); return 0; }
// call with list_cs locked void write_ping_addresses() { int index = 0; for (pinglist_it i = list_items.begin(); i != list_items.end(); ++i, index++) { i->index = index; write_ping_address(*i); } // mark further destinations in the DB as invalid char buff[16]; bool found; do { found = false; mir_snprintf(buff, "PING_DEST_%d", index++); if (db_get_dw(0, buff, "Id", 0) != 0) { found = true; db_set_dw(0, buff, "Id", 0); } } while (found); }