Esempio n. 1
0
BOOL CMMyInfo::UpheadPhoto(const char* filename)
{
    if(!m_pSession)
        m_pSession = new CMSession(this);
    if(m_pSession->IsRunning())
        return FALSE;
    
    CMList<FormData> list;
    
    FormData data;
    
    if(filename && strlen(filename) > 0)
    {
        data.key = CMString("pic");
        data.value = CMString(filename);
        data.dataType = 2;
        list.push_back(data);
    }
    else
    {
        return FALSE;
    }
    
    m_pSession->CommandPost(SERVICE_UPHEADPHTHO, "", list, SEQUENCE_NORMAL);
    
    return TRUE;
}
Esempio n. 2
0
static void DecodeHTML(CMString& str)
{
	if (str.Find('&') != -1) {
		str = _TPattern::replace(CMString(_T("&lt;")), str, CMString(_T("<")));
		str = _TPattern::replace(CMString(_T("&gt;")), str, CMString(_T(">")));
	}
}
BOOL CMQuestionUpload::AnswerQuestion(const char* sQuestionID, int nAnonymous, const char* sAnswer,const char* filename)
{
    
    if(!m_pSession)
		m_pSession = new CMSession(this);
	if(m_pSession->IsRunning())
		return FALSE;
    
	char param[640];
	snprintf(param,sizeof(param),"&questionid=%s&anonymous=%d", sQuestionID, nAnonymous);
    //构造form数据
    CMList<FormData>* list= new CMList<FormData>;
	//加入文本内容
    FormData data;

    if(filename!=NULL&&strlen(filename)!=0)
    {
        data.key=CMString("pic");
        data.value=CMString(filename);
        data.dataType=2;
        list->push_back(data);
    }

    data.key=CMString("content");
    data.value=CMString(sAnswer);
    data.dataType=1;
    list->push_back(data);

    m_pSession->CommandPost(SERVICE_ANSWERQUESTION, param,*list);
    SAFEDELETE(list);
    
    return TRUE;
}
Esempio n. 4
0
CMString __stdcall GetWord(const TCHAR* text, int index)
{
    if ( text && *text ) {
        TCHAR* p1 = (TCHAR*)text;
        TCHAR* p2 = NULL;

        while (*p1 == ' ')
            p1++;

        if (*p1 != '\0') {
            for (int i =0; i < index; i++) {
                p2 = _tcschr( p1, ' ' );
                if ( !p2 )
                    p2 = _tcschr( p1, '\0' );
                else
                    while ( *p2 == ' ' )
                        p2++;

                p1 = p2;
            }

            p2 = _tcschr(p1, ' ');
            if( !p2 )
                p2 = _tcschr(p1, '\0');

            if (p1 != p2)
                return CMString( p1, p2-p1 );
        }
    }

    return CMString();
}
BOOL CMQuestionUpload::AskQuestion(const char* sCategoryID, int nAnonymous, int nValue, const char* sQuestion,const char* filename)
{
    if(!m_pSession)
		m_pSession = new CMSession(this);
	if(m_pSession->IsRunning())
		return FALSE;
    
    char param[640];
    //构造url
	snprintf(param,sizeof(param),"&categoryid=%s&anonymous=%d&value=%d", sCategoryID, nAnonymous, nValue);
    //构造form数据
    CMList<FormData>* list= new CMList<FormData>;
    //加入文件
    FormData data;
    if(filename!=NULL&&strlen(filename)!=0)
    {
        data.key=CMString("pic");
        data.value=CMString(filename);
        data.dataType=2;
        list->push_back(data);
    }
    //加入文本内容
    data.key=CMString("content");
    data.value=sQuestion;
    data.dataType=1;
    list->push_back(data);

    m_pSession->CommandPost(SERVICE_NEWQUESTION, param,*list);
    SAFEDELETE(list);

    return TRUE;
}
Esempio n. 6
0
void CMSession::CommandPost(UINT32 nCmdID, const CHAR* sParams, const CHAR* pData, INT32 nLen)
{
    if (CMGlobal::TheOne().IsOffline())
    {
        if(m_pNotify)
            m_pNotify->OnSessionCmd(nCmdID, MERN_OFFLINE, NULL);
        return;
    }

    m_bRun = TRUE;

    if (m_nCurCmd != 0)
    {
        m_bRun = FALSE;
        if(m_pNotify)
            m_pNotify->OnSessionCmd(nCmdID, MERE_NOT_ENOUGH_RESOURCE, NULL);
        return;
    }

    m_nCurCmd = nCmdID;
    m_sParams = sParams;
    m_bPost = TRUE;

    m_req.Clean();
    m_req.SetType(CMHTTPReqHeader::POST);
    m_req.CreateDefault();
    m_req.AddValue(HH_ATYPE, CMString(L"text/html,application/xml"));
    m_req.AddValue(HH_CTYPE,CMString(L"multipart/form-data"));
    m_req.AddValue(HH_ACHARSET, CMString(L"utf-8"));
    m_req.SetPostData(pData, nLen);

    Command();
}
Esempio n. 7
0
void CVkProto::RetrieveUsersInfo(bool flag)
{
	debugLogA("CVkProto::RetrieveUsersInfo");
	if (!IsOnline())
		return;

	CMString userIDs, code;
	for (MCONTACT hContact = db_find_first(m_szModuleName); hContact; hContact = db_find_next(hContact, m_szModuleName)) {
		LONG userID = getDword(hContact, "ID", -1);
		if (userID == -1 || userID == VK_FEED_USER)
			continue;
		if (!userIDs.IsEmpty())
			userIDs.AppendChar(',');
		userIDs.AppendFormat(_T("%i"), userID);
	}

	CMString codeformat("var userIDs=\"%s\";");

	if (m_bNeedSendOnline)
		codeformat += _T("API.account.setOnline();");
	
	if (flag)
		codeformat += CMString("var US=API.users.get({\"user_ids\":userIDs,\"fields\":\"%s\",\"name_case\":\"nom\"});"
			"var res=[];var index=US.length;while(index >0){index=index-1;if(US[index].online==1){res.unshift(US[index]);};};"
			"return{\"freeoffline\":1,\"users\":res,\"requests\":API.friends.getRequests({\"extended\":0,\"need_mutual\":0,\"out\":0})};");
	else
		codeformat += CMString("var res=API.users.get({\"user_ids\":userIDs,\"fields\":\"%s\",\"name_case\":\"nom\"});"
			"return{\"freeoffline\":0,\"users\":res};");
	code.AppendFormat(codeformat, userIDs, CMString(flag ? "online,status" : fieldsName));

	Push(new AsyncHttpRequest(this, REQUEST_POST, "/method/execute.json", true, &CVkProto::OnReceiveUserInfo)
		<< TCHAR_PARAM("code", code)
		<< VER_API);
}
void CMPlayerUtility::OpenUrl(CMString sUrl, const UINT32 nMode/* = EMode_3mv*/, const char* coursewareID )
{
    
    string path = CMCourseDownload::GetInstance()->GetLocalFilePath(coursewareID);
    
    //先检查本地文件在不在
    if(path.size() !=0 && CMFile::FileExist(CMString(path.c_str())))
    {
    	OpenFile(CMString(path.c_str()), nMode);
    	return;
    }
    
	CMPath tmpPath(CMPath::DOWNLOAD_PATH);
    CMString sOrgUrl;

    INT32 pos = sUrl.ReverseFind(L"?sid=");
    if(pos < 0)
    	pos = sUrl.ReverseFind(L"&sid=");
    if(pos > 0)
    	sOrgUrl = sUrl.Left(pos);
    else
    	sOrgUrl = sUrl;
    
    
    CMString filename = tmpPath.String()+CMFile::GetTempFileName(sOrgUrl, "");
	if(CMFile::FileExist(filename))
    {
    	OpenFile(filename, nMode);
    	return;
    }
    //本地无此文件,去数据库读取
    if(m_nState == EReady)
    {
        m_bDataCompleted = FALSE;
        SAFEDELETE(m_pMediaData);
        m_bOnlyAudio = nMode != EMode_3mv;
        if(nMode == EMode_3mv || nMode == EMode_3ma)
            m_pMediaData = new CMNetDataSource;
		else if(nMode == EMode_aac)
			 m_pMediaData = new CMAACDataSource;
		else
			return;
        BOOL ret = FALSE;
        
//        sUrl = CMString("http://42.96.138.63/Upload/Files/root/CourseWareFile/201401/201401101233202695248e5b93f75f4685af/201401161429192546803cd48b08aa3daf7f_(960x640).3mv");
        printf("surl:%s \n",(const CHAR*)sUrl);
        
        if(m_pMediaData && m_pMediaData->Init(this, m_pStreamBuffer))
            ret = m_pMediaData->Open(sUrl, NET_VOD);
        if(ret)
        {
            m_pMediaData->Start();
            m_PlayerObserver.StateChange(m_UserData, EOpening, m_nState);
            m_nState = EOpening;
        }
        else
            SAFEDELETE(m_pMediaData);
    }
}
Esempio n. 9
0
CMString CSkypeProto::ChangeTopicForm()
{
	CMString caption(FORMAT, _T("[%s] %s"), _A2T(m_szModuleName), TranslateT("Enter new chatroom topic"));
	ENTER_STRING pForm = { sizeof(pForm) };
	pForm.type = ESF_MULTILINE;
	pForm.caption = caption;
	pForm.ptszInitVal = NULL;
	pForm.szModuleName = m_szModuleName;
	return (!EnterString(&pForm)) ? CMString() : CMString(ptrT(pForm.ptszResult));
}
Esempio n. 10
0
void CMVArray::read_body(wistream& s)
{
	CMString str,token,token2;
	int nr=0,nc=0;

	token=GetAssociation(L"rows");
	nr = _wtoi(token.c_str());
	token=GetAssociation(L"columns");
	nc = _wtoi(token.c_str());
	
	SetSize(nr,nc);

	nr=0;
	while(!s.eof()) {
		str.read_line(s);
		str=stripends(str);
		if (str.is_null() || str[0] == L'*')
			continue;
		if (str(0,wcslen(vardef_end)) == vardef_end)
			break;
		wchar_t* ptr = (wchar_t*)str.c_str();
		nc = 0;
		while (1) {
			while (*ptr <= L' ' && *ptr != 0) ptr++;
			if (*ptr == 0)
				break;
			int j=0;
			wchar_t* ptr2 = ptr;
			if (*ptr == L'{') {
				int bracketindex = 1;
				ptr++;
				ptr2++;
				for (;*ptr2!=0 && bracketindex;j++,ptr2++) {
					if (*ptr2==L'{') bracketindex++;
					else if (*ptr2==L'}') bracketindex--;
				}
				token = (CMString((const wchar_t*)ptr))(0, j - 1);
			}
			else {
				while (*ptr2 > L' ') {
					ptr2++;
					j++;
				}
				token = (CMString((const wchar_t*)ptr))(0, j);
			}
			ptr += j;
			Set(nr,nc++,token);
		}
		nr++;
	}
	if (nc != _ncols)
		ReportError(XIncorrectNumColumns);
	if (nr != _nrows)
		ReportError(XIncorrectNumRows);
}
Esempio n. 11
0
void CIrcProto::AddToJTemp(TCHAR op, CMString& sCommand)
{
    CMString res;

    int pos = 0;
    for ( ;; ) {
        CMString tmp = sCommand.Tokenize( _T(","), pos );
        if ( pos == -1 )
            break;

        tmp = op + tmp;
        if ( res.IsEmpty() )
            res = tmp;
        else
            res += _T(" ") + tmp;
    }

    DBVARIANT dbv;
    if ( !getTString( "JTemp", &dbv )) {
        res = CMString(dbv.ptszVal) + _T(" ") + res;
        DBFreeVariant( &dbv );
    }

    setTString("JTemp", res.c_str());
}
Esempio n. 12
0
static void sttPreviewSkin(MODERNOPTOBJECT *obj, TCHAR *fn, LPDRAWITEMSTRUCT lps)
{
	if (!fn) return;

	if (ProtoServiceExists(obj->lpzThemeModuleName, TS_SKIN_PREVIEW)) {
		CallProtoService(obj->lpzThemeModuleName, TS_SKIN_PREVIEW, (WPARAM)lps, (LPARAM)fn);
		return;
	}

	HBITMAP hbmPreview = Bitmap_Load(CMString(fn) + _T(".png"));
	if (!hbmPreview)
		return;

	BITMAP bmp;
	GetObject(hbmPreview, sizeof(bmp), &bmp);

	SIZE szDst = { abs(bmp.bmWidth), abs(bmp.bmHeight) };
	if ((szDst.cx > lps->rcItem.right - lps->rcItem.left) || (szDst.cy > lps->rcItem.bottom - lps->rcItem.top)) {
		float q = min(
			float(lps->rcItem.right - lps->rcItem.left) / szDst.cx,
			float(lps->rcItem.bottom - lps->rcItem.top) / szDst.cy);
		szDst.cx *= q;
		szDst.cy *= q;
	}
	POINT ptDst = {
		(lps->rcItem.left + lps->rcItem.right - szDst.cx) / 2,
		(lps->rcItem.top + lps->rcItem.bottom - szDst.cy) / 2 };

	HDC hdc = CreateCompatibleDC(lps->hDC);
	SelectObject(hdc, hbmPreview);
	SetStretchBltMode(hdc, HALFTONE);
	StretchBlt(lps->hDC, ptDst.x, ptDst.y, szDst.cx, szDst.cy, hdc, 0, 0, abs(bmp.bmWidth), abs(bmp.bmHeight), SRCCOPY);
	DeleteDC(hdc);
	DeleteObject(hbmPreview);
}
Esempio n. 13
0
void CMNode::set_association(CMVariableOrConstant& vc, const wchar_t* varstr)
{
   if (vmain && varstr)
		vc.Set(vmain->GetAssociation(CMString(varstr)));
   else
   	vc.Set(0);
}
Esempio n. 14
0
CMString CIrcProto::PeekAtReasons( int type )
{
    switch ( type ) {
    case 1:
        if (!vUserhostReasons.getCount())
            return CMString();
        return vUserhostReasons[0];

    case 2:
        if (!vWhoInProgress.getCount())
            return CMString();
        return vWhoInProgress[0];

    }
    return CMString();
}
Esempio n. 15
0
void CVkProto::AppendChatMessage(int id, JSONNODE *pMsg, bool bIsHistory)
{
	CVkChatInfo *cc = AppendChat(id, NULL);
	if (cc == NULL)
		return;

	int mid = json_as_int(json_get(pMsg, "mid"));
	int isOut = json_as_int(json_get(pMsg, "out"));
	int uid = json_as_int(json_get(pMsg, "uid"));

	int msgTime = json_as_int(json_get(pMsg, "date"));
	time_t now = time(NULL);
	if (!msgTime || msgTime > now)
		msgTime = now;

	ptrT tszBody(json_as_string(json_get(pMsg, "body")));
	JSONNODE *pAttachments = json_get(pMsg, "attachments");
	if (pAttachments != NULL)
		tszBody = mir_tstrdup(CMString(tszBody) + GetAttachmentDescr(pAttachments));

	if (cc->m_bHistoryRead)
		AppendChatMessage(cc, mid, uid, msgTime, tszBody, bIsHistory);
	else {
		CVkChatMessage *cm = cc->m_msgs.find((CVkChatMessage *)&mid);
		if (cm == NULL)
			cc->m_msgs.insert(cm = new CVkChatMessage(mid));

		cm->m_uid = uid;
		cm->m_date = msgTime;
		cm->m_tszBody = tszBody.detouch();
		cm->m_bHistory = bIsHistory;
	}
}
Esempio n. 16
0
CMString WCPattern::classCreateRange(wchar_t low, wchar_t hi)    const
{
	wchar_t out[300];
	int ind = 0;
	while (low != hi) out[ind++] = low++;
	out[ind++] = low;
	return CMString(out, ind);
}
Esempio n. 17
0
void CMSession::LogIn(int nLoginType)
{
    const CHAR* pEid = CMGlobal::TheOne().Encode(sCustomer);
    const CHAR* pName = CMGlobal::TheOne().Encode(sUsername);

    const CHAR* pPass = NULL;

//    sPassword[99]='\0';
//    memset(sPassword, 0, 100);
    //当美信跳转 =2 pwd无需加密
    if(nLoginType == 1)
    {
        char* buf = DesEncrypt::doEncrypt(sPassword, kDesSecret);
        strcpy(sPassword, buf);
        SAFEDELETE(buf);
    }

    pPass = CMGlobal::TheOne().Encode(sPassword);
    const CHAR* pUid = CMGlobal::TheOne().Encode(sUserid);

    CMSystemInfo& sysinfo = CMGlobal::TheOne().SystemInfo();
    char sUrl[1024] = {0};

    snprintf(sUrl,sizeof(sUrl),"%s?no=%d&os=%d&ver=%d&wh=%dX%d&eid=%s&logintype=%d&loginname=%s&pwd=%s&userid=%s&lang=%s&accept=%s",(const char*)SETTING.GetCenterServerUrl() ,
             SERVICE_LOGIN, CMVersion::SystemVersion().Platform, MLPAYER_VER, sysinfo.ScreenWidth, sysinfo.ScreenHeight, pEid, nLoginType, pName,
             pPass,pUid,sysinfo.CurrLang, sysinfo.AcceptType);

    SAFEDELETE(pEid);
    SAFEDELETE(pName);
    SAFEDELETE(pPass);
    SAFEDELETE(pUid);

    m_req.Clean();
    m_req.SetType(CMHTTPReqHeader::GET);
    m_req.CreateDefault();
    m_req.AddValue(HH_ATYPE, CMString(L"text/html,application/xml"));
    m_req.AddValue(HH_ACHARSET, CMString(L"utf-8"));

    m_req.SetUrl(sUrl);

    m_pHttp->Request(m_req);
}
Esempio n. 18
0
void CVkProto::RetrieveUserInfo(LONG userID)
{
	debugLogA("CVkProto::RetrieveUserInfo (%d)", userID);
	if (userID == VK_FEED_USER || !IsOnline())
		return;

	CMString code(FORMAT, _T("var userIDs=\"%i\";var res=API.users.get({\"user_ids\":userIDs,\"fields\":\"%s\",\"name_case\":\"nom\"});return{\"freeoffline\":0,\"norepeat\":1,\"usercount\":res.length,\"users\":res};"),
		userID, CMString(fieldsName));
	Push(new AsyncHttpRequest(this, REQUEST_POST, "/method/execute.json", true, &CVkProto::OnReceiveUserInfo)
		<< TCHAR_PARAM("code", code)
		<< VER_API);
}
Esempio n. 19
0
//Post form数据的命令
void CMSession::CommandPost(UINT32 nCmdID,const CHAR* sParams, CMList<FormData> lstForm, const CHAR* sSequence)
{
    if (CMGlobal::TheOne().IsOffline())
    {
        if(m_pNotify)
            m_pNotify->OnSessionCmd(nCmdID, MERN_OFFLINE, NULL);
        return;
    }

    m_bRun = TRUE;

    if (m_nCurCmd != 0)
    {
        m_bRun = FALSE;
        if(m_pNotify)
            m_pNotify->OnSessionCmd(nCmdID, MERE_NOT_ENOUGH_RESOURCE, NULL);
        return;
    }

    m_nCurCmd = nCmdID;
    m_sParams = sParams;
    m_bPost = TRUE;

    m_req.Clean();
    m_req.SetType(CMHTTPReqHeader::POST);
    m_req.CreateDefault();
    m_req.AddValue(HH_ATYPE, CMString(L"text/html,application/xml"));
    m_req.AddValue(HH_ACHARSET, CMString(L"utf-8"));
    m_req.SetFormPostData(lstForm);

    if (strlen(sSequence) > 0)
    {
        m_sSequence = sSequence;
        CMSessionSequence::GetInstance()->Append(this);
    }
    else
        Command();
}
BOOL CMQuestionUpload::UpheadPhtho(const char* filename)
{
    if(!m_pSession)
		m_pSession = new CMSession(this);
	if(m_pSession->IsRunning())
		return FALSE;

    //构造form数据
    CMList<FormData>* list= new CMList<FormData>;
    //加入filename
    FormData data;
    if(filename!=NULL&&strlen(filename)!=0)
    {
        data.key=CMString("pic");
        data.value=CMString(filename);
        data.dataType=2;
        list->push_back(data);
    }

    m_pSession->CommandPost(SERVICE_UPHEADPHTHO,"",*list);
    SAFEDELETE(list);

    return TRUE;
}
Esempio n. 21
0
CMString CIrcProto::GetNextUserhostReason(int type)
{
    CMString reason = _T("");
    switch( type ) {
    case 1:
        if ( !vUserhostReasons.getCount())
            return CMString();

        // Get reason
        reason = vUserhostReasons[0];
        vUserhostReasons.remove( 0 );
        break;
    case 2:
        if ( !vWhoInProgress.getCount())
            return CMString();

        // Get reason
        reason = vWhoInProgress[0];
        vWhoInProgress.remove( 0 );
        break;
    }

    return reason;
}
Esempio n. 22
0
CMString CMSaveSimulationAscii::get_aggregation_string()
{
	wchar_t buffer[128];
   wchar_t tmbuffer[32];
   int oldformat = CMTime::SetOutputFormat(simincunits);
   outbeg.GetString(tmbuffer, 32);
	if (state & rCalendarAggregation)
		swprintf_s(buffer, 128, L"%s beginning %s",CMTime::TimeUnitToString(outincunits).c_str(),tmbuffer);
	else if (outincsteps > 1)
		swprintf_s(buffer, 128, L"%d %ss beginning %s",outincsteps,CMTime::TimeUnitToString(simincunits).c_str(),tmbuffer);
	else
     	swprintf_s(buffer, 128, L"T = %s",tmbuffer);
   CMTime::SetOutputFormat(oldformat);
   return CMString(buffer);
}
Esempio n. 23
0
	virtual void OnInitDialog()
	{
		int numSlots = GetNumberOfSlots();
		if (numSlots < (int)registeredExtraIcons.getCount()) {
			HWND label = GetDlgItem(m_hwnd, IDC_MAX_ICONS_L);
			SetWindowText(label, CMString(FORMAT, TranslateT("*only the first %d icons will be shown"), numSlots));
			ShowWindow(label, SW_SHOW);
		}

		int cx = g_iIconSX;
		HIMAGELIST hImageList = ImageList_Create(cx, cx, ILC_COLOR32 | ILC_MASK, 2, 2);

		HICON hBlankIcon = (HICON)LoadImage(g_hInst, MAKEINTRESOURCE(IDI_BLANK), IMAGE_ICON, cx, cx, 0);
		ImageList_AddIcon(hImageList, hBlankIcon);

		for (int i = 0; i < registeredExtraIcons.getCount(); i++) {
			ExtraIcon *extra = registeredExtraIcons[i];

			HICON hIcon = IcoLib_GetIcon(extra->getDescIcon());
			if (hIcon == NULL)
				ImageList_AddIcon(hImageList, hBlankIcon);
			else {
				ImageList_AddIcon(hImageList, hIcon);
				IcoLib_ReleaseIcon(hIcon);
			}
		}
		m_tree.SetImageList(hImageList, TVSIL_NORMAL);
		DestroyIcon(hBlankIcon);

		for (int k = 0; k < extraIconsBySlot.getCount(); k++) {
			ExtraIcon *extra = extraIconsBySlot[k];

			if (extra->getType() == EXTRAICON_TYPE_GROUP) {
				ExtraIconGroup *group = (ExtraIconGroup *)extra;
				intlist ids;
				for (int j = 0; j < group->m_items.getCount(); j++)
					ids.add(group->m_items[j]->getID());
				Tree_AddExtraIconGroup(ids, extra->isEnabled());
			}
			else Tree_AddExtraIcon((BaseExtraIcon *)extra, extra->isEnabled());
		}

		TVSORTCB sort = { 0 };
		sort.hParent = NULL;
		sort.lParam = 0;
		sort.lpfnCompare = CompareFunc;
		m_tree.SortChildrenCB(&sort, 0);
	}
Esempio n. 24
0
void CMNode::ResetAggregateVariables(bool bCreateNew)
{
	aggregates.Reset(1);

	if (!bCreateNew)
		return;

	naggregates = CMVariableTypes::AggNamesCount();
   nregions = CMRegions::RegionCount();

	const wchar_t* name;
	for (unsigned short i=0;(name=CMVariableTypes::AggStringFromInt(i))!=0;i++) {
		aggregates.AddAt(i,CMVariable::Find(name));
		for (unsigned short j=0;j<nregions;j++)
			aggregates.AddAt((j+1)*naggregates+i,CMVariable::Find(CMString(name) + L"." + CMRegions::GetRegionName(j)));
	}
}
Esempio n. 25
0
static TCHAR *parseGetParent(ARGUMENTSINFO *ai)
{
	if (ai->argc != 2)
		return NULL;

	MCONTACT hContact = NULL;

	CONTACTSINFO ci = { sizeof(ci) };
	ci.tszContact = ai->targv[1];
	ci.flags = 0xFFFFFFFF ^ (CI_TCHAR == 0 ? CI_UNICODE : 0);
	int count = getContactFromString(&ci);
	if (count == 1 && ci.hContacts != NULL) {
		hContact = ci.hContacts[0];
		mir_free(ci.hContacts);
	}
	else {
		mir_free(ci.hContacts);
		return NULL;
	}

	hContact = db_mc_getMeta(hContact);
	if (hContact == NULL)
		return NULL;

	ptrT szUniqueID;
	char* szProto = GetContactProto(hContact);
	if (szProto != NULL)
		szUniqueID = getContactInfoT(CNF_UNIQUEID, hContact);

	if (szUniqueID == NULL) {
		szProto = PROTOID_HANDLE;
		TCHAR tszID[40];
		mir_sntprintf(tszID, SIZEOF(tszID), _T("%p"), hContact);
		szUniqueID = mir_tstrdup(tszID);
	}

	if (szUniqueID == NULL)
		return NULL;

	return mir_tstrdup(CMString(FORMAT, _T("<%S:%s>"), szProto, szUniqueID));
}
Esempio n. 26
0
static TCHAR* parseSpecialContact(ARGUMENTSINFO *ai)
{
	if (ai->argc != 1 || ai->fi->hContact == NULL)
		return NULL;

	ai->flags |= AIF_DONTPARSE;
	ptrT szUniqueID;
	char *szProto = GetContactProto(ai->fi->hContact);
	if (szProto != NULL)
		szUniqueID = getContactInfoT(CNF_UNIQUEID, ai->fi->hContact);

	if (szUniqueID == NULL) {
		szProto = PROTOID_HANDLE;
		szUniqueID = (TCHAR*)mir_alloc(40);
		if (szUniqueID == NULL)
			return NULL;
		mir_sntprintf(szUniqueID, 20, _T("%p"), ai->fi->hContact);
	}

	if (szUniqueID == NULL)
		return NULL;

	return CMString(FORMAT, _T("<%S:%s>"), szProto, szUniqueID).Detach();
}
Esempio n. 27
0
int CMPolynomial::translate_next_token(wchar_t*& ptr, int& tok, CMString& str, int& n, CMVSmallArray<CMString>& args)
{
	int i;
	int err=-1;

	str.resize(0);
	args.Reset(0);

	if (!skipwhite(ptr)) {
		tok = NoToken;
		return -1;
	}

	if (isnumber(*ptr)) {
		while (isnumber(*ptr))
			str.append(*ptr++);
		tok = Constant;
		return -1;
	}

	// check to see if item is #IF
	if (!_wcsnicmp(ptr,L"@IF",3)) {
		n=1;
		args.AddAt(0,CMString());
		tok = If;
		ptr += 3;
		skipwhite(ptr);
		int symb = *ptr++;
		if (!(symb==L'(' || symb==L'{'))
			return XMissingLPar;
		if (get_to_stop_symbol(L")}",ptr,args[0])>=0)
			return XIllegalCondition;
		skipwhite(ptr);
		if (!_wcsnicmp(ptr, L"@THEN", 5)) {
			ptr+=5;
			skipwhite(ptr);
		}
		symb = *ptr++;
		args.AddAt(1,CMString());
		n=2;
		if (!(symb==L'(' || symb==L'{'))
			return XIllegalCondition;
		if (get_to_stop_symbol(L"})",ptr,args[1])>=0)
			return XIllegalCondition;
		skipwhite(ptr);
		if (!_wcsnicmp(ptr, L"@ELSE", 5)) {
			n=3;
			args.AddAt(2,CMString());
			ptr+=5;
			skipwhite(ptr);
			symb = *ptr++;
			if (!(symb==L'(' || symb==L'{'))
				return XIllegalCondition;
			if (get_to_stop_symbol(L"})",ptr,args[2])>=0)
				return XIllegalCondition;
		}
		return -1;
	}

	// check to see if item is a bad operation
	for (i = 0; badops[i] != NULL; i++) {
		if (!wcsncmp(ptr, badops[i], wcslen(badops[i])))
			return XUnrecognizedOperator;
	}

	// check to see if item is an operation
	for (i=0;ops[i]!=NULL;i++) {
		if (!wcsncmp(ptr, ops[i], wcslen(ops[i]))) {
			tok = FirstOp+i;
			if ((tok==LPar) || (tok==LBracket))
				index++;
			else if ((tok==RPar) || (tok==RBracket))
				index--;
			ptr += wcslen(ops[i]);
			return -1;
		}
	}

	// not a number or operation, so must be a special function,function or variable
	// first check to see if first symbol is allowed
	if (!(iswalpha(*ptr) || *ptr == L'_'))
		return XUndefinedSymbol;

	// check to see if this is a definition

	/* Definitions are now incorporated into variables
	const wchar_t* defname;
	sdebug << ptr << ENDL;
	for (i=0;(defname=CMDefinitions::GetDefinitionName(i))!=0;i++) {
		len = wcslen(defname);
		sdebug << L"   " << defname << L" " << len << ENDL;
		if (_wcsnicmp(defname, ptr, len)==0) {
			sdebug << L"FOUND " << defname << ENDL;
			// if it is in the list of definitions and the next symbol is not
			// a letter or '_' (implying a variable name that happens to begin
			// with the same letters as a special symbol), then add the 'special'
			// token to the CMString.
			if (!(iswalnum(*(ptr+len))) && *(ptr+len) != L'_') {
				tok = Definition;
				n = i;
				ptr += len;
				return -1;
			}
			break;
		}
	}
	*/

	// check to see if item is a special function
	for (i=0;special_funcs[i]!=NULL;i++) {
		if (!wcsncmp(ptr, special_funcs[i], wcslen(special_funcs[i]))) {
			tok = FirstSpecialFunc+i;
			ptr += wcslen(special_funcs[i]);
			skipwhite(ptr);
			if (*ptr++ != L'(')
				return XMissingArgument;
			CMString arglist;
			if (get_to_stop_symbol(L")",ptr,arglist)>=0)
				return XBadArgumentList;
			arglist += L',';
			wchar_t* argptr = (wchar_t*)arglist.c_str();
			for (n=0;*argptr && err<0;n++) {
				args.AddAt(n,CMString());
				if (get_to_stop_symbol(L",:",argptr,args[n])>=0)
					err = XBadArgumentList;
			}
			return err;
      }
	}

	// check to see if it is a function
	const wchar_t* func;
	if ((func=CMFunction::FindFunction(ptr))!=0) {
		tok = Function;
		str = func;
		ptr += wcslen(func);
		skipwhite(ptr);
		if (*ptr++ != L'(')
			return XMissingArgument;
		CMString arglist;
		if (get_to_stop_symbol(L")",ptr,arglist)>=0)
			return XBadArgumentList;
		arglist += L',';
		wchar_t* argptr = (wchar_t*)arglist.c_str();
		for (n=0;*argptr && err<0;n++) {
			args.AddAt(n,CMString());
			if (get_to_stop_symbol(L",:",argptr,args[n])>=0)
				err = XBadArgumentList;
		}
		return err;
	}

	// Not a number, operation, or pre-defined function
	// so must be a variable

	while (iswalnum(*ptr) || (*ptr == L'_') || (*ptr == L'@') || (*ptr == L'.') )
		str.append(*ptr++);

	CMString indexstr;
	n = 0;
	tok = Variable;
	while (skipwhite(ptr) && err<0) {
		if (*ptr == L'~') {
			tok = VariableOrig;
			ptr++;
		}
		if (*ptr == L'[') {
			args.AddAt(n,CMString());
			if (n < 4)
				err =	get_to_stop_symbol(L"]",++ptr,args[n++]);
			else
				err = XTooManyIndexes;
		}
		else
			break;
	}

	return err;
}
Esempio n. 28
0
CMString CIrcProto::MakeWndID(const TCHAR* sWindow)
{
    TCHAR buf[200];
    mir_sntprintf( buf, SIZEOF(buf), _T("%s - %s"), sWindow, (IsConnected()) ? m_info.sNetwork.c_str() : TranslateT("Offline"));
    return CMString(buf);
}
Esempio n. 29
0
void CVkProto::OnReceiveChatInfo(NETLIBHTTPREQUEST *reply, AsyncHttpRequest *pReq)
{
	debugLogA("CVkProto::OnReceiveChatInfo %d", reply->resultCode);
	if (reply->resultCode != 200)
		return;

	JSONROOT pRoot;
	JSONNODE *pResponse = CheckJsonResponse(pReq, reply, pRoot);
	if (pResponse == NULL)
		return;

	CVkChatInfo *cc = (CVkChatInfo*)pReq->pUserInfo;
	if (m_chats.indexOf(cc) == -1)
		return;

	JSONNODE *info = json_get(pResponse, "info");
	if (info != NULL) {
		ptrT tszTitle(json_as_string(json_get(info, "title")));
		if (lstrcmp(tszTitle, cc->m_tszTopic)) {
			cc->m_tszTopic = mir_tstrdup(tszTitle);
			setTString(cc->m_hContact, "Nick", tszTitle);

			GCDEST gcd = { m_szModuleName, cc->m_tszId, GC_EVENT_CHANGESESSIONAME };
			GCEVENT gce = { sizeof(GCEVENT), &gcd };
			gce.ptszText = tszTitle;
			CallServiceSync(MS_GC_EVENT, 0, (LPARAM)&gce);
		}
		
		cc->m_admin_id = json_as_int(json_get(info, "admin_id"));
	}

	JSONNODE *users = json_as_array(json_get(pResponse, "users"));
	if (users != NULL) {
		for (int i = 0; i < cc->m_users.getCount(); i++)
			cc->m_users[i].m_bDel = true;

		for (int i = 0;; i++) {
			JSONNODE *pUser = json_at(users, i);
			if (pUser == NULL)
				break;

			int uid = json_as_int(json_get(pUser, "uid"));
			TCHAR tszId[20];
			_itot(uid, tszId, 10);

			bool bNew;
			CVkChatUser *cu = cc->m_users.find((CVkChatUser*)&uid);
			if (cu == NULL) {
				cc->m_users.insert(cu = new CVkChatUser(uid));
				bNew = true;
			}
			else bNew = cu->m_bUnknown;
			cu->m_bDel = false;

			ptrT fName(json_as_string(json_get(pUser, "first_name")));
			ptrT lName(json_as_string(json_get(pUser, "last_name")));
			CMString tszNick = CMString(fName).Trim() + _T(" ") + CMString(lName).Trim();
			cu->m_tszNick = mir_tstrdup(tszNick);
			cu->m_bUnknown = false;
			
			if (bNew) {
				GCDEST gcd = { m_szModuleName, cc->m_tszId, GC_EVENT_JOIN };
				GCEVENT gce = { sizeof(GCEVENT), &gcd };
				gce.bIsMe = uid == m_myUserId;
				gce.ptszUID = tszId;
				gce.ptszNick = tszNick;
				gce.ptszStatus = TranslateTS(sttStatuses[uid == cc->m_admin_id]);
				gce.dwItemData = (INT_PTR)cu;
				CallServiceSync(MS_GC_EVENT, 0, (LPARAM)&gce);
			}
		}

		for (int i = cc->m_users.getCount() - 1; i >= 0; i--) {
			CVkChatUser &cu = cc->m_users[i];
			if (!cu.m_bDel)
				continue;

			TCHAR tszId[20];
			_itot(cu.m_uid, tszId, 10);

			GCDEST gcd = { m_szModuleName, cc->m_tszId, GC_EVENT_PART };
			GCEVENT gce = { sizeof(GCEVENT), &gcd };
			gce.ptszUID = tszId;
			CallServiceSync(MS_GC_EVENT, 0, (LPARAM)&gce);

			cc->m_users.remove(i);
		}
	}

	JSONNODE *msgs = json_as_array(json_get(pResponse, "msgs"));
	if (msgs != NULL) {
		for (int i = 1;; i++) {
			JSONNODE *pMsg = json_at(msgs, i);
			if (pMsg == NULL)
				break;

			AppendChatMessage(cc->m_chatid, pMsg, true);
		}
		cc->m_bHistoryRead = true;
	}

	for (int j = 0; j < cc->m_msgs.getCount(); j++) {
		CVkChatMessage &p = cc->m_msgs[j];
		AppendChatMessage(cc, p.m_mid, p.m_uid, p.m_date, p.m_tszBody, p.m_bHistory);
	}
	cc->m_msgs.destroy();
}
Esempio n. 30
0
	void OnInitDialog()
	{
		char szUin[10];
		Window_SetSkinIcon_IcoLib(m_hwnd, SKINICON_OTHER_ADDCONTACT);
		if (m_acs.handleType == HANDLE_EVENT) {
			DWORD dwUin;
			DBEVENTINFO dbei = { sizeof(dbei) };
			dbei.cbBlob = sizeof(DWORD);
			dbei.pBlob = (PBYTE)&dwUin;
			db_event_get(m_acs.hDbEvent, &dbei);
			_ltoa(dwUin, szUin, 10);
			m_acs.szProto = dbei.szModule;
		}

		MCONTACT hContact;
		TCHAR *szName = NULL, *tmpStr = NULL;
		if (m_acs.handleType == HANDLE_CONTACT)
			szName = cli.pfnGetContactDisplayName(hContact = m_acs.hContact, 0);
		else {
			int isSet = 0;
			hContact = 0;

			if (m_acs.handleType == HANDLE_EVENT) {
				DBEVENTINFO dbei = { sizeof(dbei) };
				dbei.cbBlob = db_event_getBlobSize(m_acs.hDbEvent);
				dbei.pBlob = (PBYTE)mir_alloc(dbei.cbBlob);
				db_event_get(m_acs.hDbEvent, &dbei);
				hContact = *(MCONTACT*)(dbei.pBlob + sizeof(DWORD));
				mir_free(dbei.pBlob);
				if (hContact != INVALID_CONTACT_ID) {
					szName = cli.pfnGetContactDisplayName(hContact, 0);
					isSet = 1;
				}
			}
			if (!isSet)
			{
				if (m_acs.handleType == HANDLE_EVENT)
					szName = mir_a2t(szUin);
				else
				{
					szName = sttDecodeString(m_acs.psr->flags, m_acs.psr->id);
					if (!szName)
						szName = sttDecodeString(m_acs.psr->flags, m_acs.psr->nick);
				}
			}
		}

		if (szName && szName[0])
			SetCaption(CMString(FORMAT, TranslateT("Add %s"), szName));
		else
			SetCaption(TranslateT("Add contact"));
		mir_free(tmpStr);

		if (m_acs.handleType == HANDLE_CONTACT && m_acs.hContact)
			if (m_acs.szProto == NULL || (m_acs.szProto != NULL && *m_acs.szProto == 0))
				m_acs.szProto = GetContactProto(m_acs.hContact);

		int groupSel = 0;
		ptrT tszGroup(db_get_tsa(hContact, "CList", "Group"));
		TCHAR *grpName;
		for (int groupId = 1; (grpName = Clist_GroupGetName(groupId, NULL)) != NULL; groupId++) {
			int id = m_group.AddString(grpName, groupId);
			if (!mir_tstrcmpi(tszGroup, grpName))
				groupSel = id;
		}

		m_group.InsertString(TranslateT("None"), 0);
		m_group.SetCurSel(groupSel);

		// By default check both checkboxes
		m_chkAdded.SetState(true);
		m_chkAuth.SetState(true);

		// Set last choice
		if (db_get_b(NULL, "Miranda", "AuthOpenWindow", 1))
			m_chkOpen.SetState(true);

		DWORD flags = (m_acs.szProto) ? CallProtoServiceInt(NULL, m_acs.szProto, PS_GETCAPS, PFLAGNUM_4, 0) : 0;
		if (flags & PF4_FORCEADDED)  // force you were added requests for this protocol
			m_chkAdded.Enable(false);

		if (flags & PF4_FORCEAUTH)  // force auth requests for this protocol
			m_chkAuth.Enable(false);

		if (flags & PF4_NOCUSTOMAUTH)
			m_authReq.Enable(false);
		else {
			m_authReq.Enable(m_chkAuth.Enabled());
			m_authReq.SetText(TranslateT("Please authorize my request and add me to your contact list."));
		}
	}