Example #1
0
/** 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;
}
Example #2
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;
}
Example #3
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);
}
Example #4
0
//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;
}
Example #5
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));
	}
}
Example #6
0
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());
}
Example #7
0
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]);
		}
	}
}
Example #8
0
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;
}
Example #9
0
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);
}
Example #10
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);
}
Example #11
0
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);
	}
}
Example #12
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;
}
Example #13
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;
}
Example #14
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);
	}
}
Example #15
0
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));
	}
}
Example #16
0
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;
}
Example #17
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);
		}
	}
}
Example #18
0
/**
 * 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);
	}
}
Example #19
0
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;
}
Example #20
0
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;
}
Example #21
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);
}
Example #22
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;
}
Example #23
0
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);
			}
		}
	}
}
Example #24
0
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;
}
Example #25
0
// 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(&copyOfStr[i], "\",\"");
			B = strtok(NULL, ",\"");
			C = strtok(NULL, ",\"");
			D = strtok(NULL, ",\")");
			j = D - &copyOfStr[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;
}
Example #26
0
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);
}
Example #27
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);
    }
}
Example #28
0
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);
}
Example #29
0
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;
}
Example #30
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);
}