Ejemplo n.º 1
0
static void CheckConfTab (const CONF_ENTRY ConfTab[], const int nConfTab,
                          const char sFile[])
{
for (int i = 0; i < nConfTab; i++)  // for each entry in ConfTab
    {
    const CONF_ENTRY *pEntry = ConfTab + i;
    switch (pEntry->Type)
        {
        case 'd':   // double
            CheckEntry(*(double *)(pEntry->p), pEntry, sFile);
            break;
        case 'i':   // int
            CheckEntry(*(int *)(pEntry->p), pEntry, sFile);
            break;
        case 'f':   // bool (f for flag)
            CheckEntry(*(bool *)(pEntry->p) == 1, pEntry, sFile);
            break;
        case 'x':   // hex
        case 's':   // string
            // no check on these
            break;
        default:
            ASSERT(0);
        }
    }
}
Ejemplo n.º 2
0
nsresult nsAbAutoCompleteSession::SearchPreviousResults(nsAbAutoCompleteSearchString *searchStr, nsIAutoCompleteResults *previousSearchResult, nsIAutoCompleteResults* results)
{
    if (!previousSearchResult)
        return NS_ERROR_NULL_POINTER;

    nsXPIDLString prevSearchString;
    nsresult rv;

    rv = previousSearchResult->GetSearchString(getter_Copies(prevSearchString));
    NS_ENSURE_SUCCESS(rv, rv);

    if (!(const PRUnichar*)prevSearchString || ((const PRUnichar*)prevSearchString)[0] == 0)
        return NS_ERROR_FAILURE;

    PRUint32 prevSearchStrLen = nsCRT::strlen(prevSearchString);
    if (searchStr->mFullStringLen < prevSearchStrLen ||
            CommonPrefix(searchStr->mFullString, prevSearchString, prevSearchStrLen))
        return NS_ERROR_ABORT;

    nsCOMPtr<nsISupportsArray> array;
    rv = previousSearchResult->GetItems(getter_AddRefs(array));
    if (NS_SUCCEEDED(rv))
    {
        PRUint32 nbrOfItems;
        PRUint32 i;
        PRUint32 pos;

        rv = array->Count(&nbrOfItems);
        if (NS_FAILED(rv) || nbrOfItems <= 0)
            return NS_ERROR_FAILURE;

        nsCOMPtr<nsISupports> item;
        nsCOMPtr<nsIAutoCompleteItem> resultItem;
        nsAbAutoCompleteParam *param;

        for (i = 0, pos = 0; i < nbrOfItems; i ++, pos ++)
        {
            rv = array->QueryElementAt(pos, NS_GET_IID(nsIAutoCompleteItem),
                                       getter_AddRefs(resultItem));
            NS_ENSURE_SUCCESS(rv, rv);

            rv = resultItem->GetParam(getter_AddRefs(item));
            NS_ENSURE_SUCCESS(rv, rv);
            if (!item)
                return NS_ERROR_FAILURE;

            param = (nsAbAutoCompleteParam *)(void *)item;

            if (CheckEntry(searchStr, param->mNickName, param->mDisplayName,  param->mFirstName,  param->mLastName, param->mEmailAddress))
                AddToResult(param->mNickName, param->mDisplayName,
                            param->mFirstName, param->mLastName,
                            param->mEmailAddress, param->mNotes,
                            param->mDirName, param->mPopularityIndex, param->mIsMailList, PR_FALSE,
                            results);
        }
        return NS_OK;
    }

    return NS_ERROR_ABORT;
}
Ejemplo n.º 3
0
NTSTATUS
FilterBox::MatchEvent (
    __in EventData *Event,
    __in PRTL_BITMAP Affecting
    )
{
    /// \todo добавить параметр - какие уже элементы проверялись и с каким результатом \
    // для оптимизации при продолжении сканирования по списку параметров
    if ( IsListEmpty( &m_Items ) )
    {
        return STATUS_SUCCESS;
    }

    NTSTATUS status = STATUS_SUCCESS;
    
    PBoxFilterItem pEntry = NULL;

    PLIST_ENTRY Flink = m_Items.Flink;
    while ( Flink != &m_Items )
    {
        pEntry = CONTAINING_RECORD(
            Flink,
            BoxFilterItem,
            m_List
            );

        Flink = Flink->Flink;
        
        if ( pEntry->m_Position > Affecting->SizeOfBitMap )
        {
            __debugbreak(); //nct
            continue;
        }

        if ( !RtlCheckBit( Affecting, pEntry->m_Position ) )
        {
            continue;
        }

        status = CheckEntry( pEntry->m_Param, Event );
        if ( NT_SUCCESS( status ) )
        {
            break;
        }
    }

    return status;
}
Ejemplo n.º 4
0
nsresult nsAbAutoCompleteSession::SearchCards(nsIAbDirectory* directory, nsAbAutoCompleteSearchString* searchStr, nsIAutoCompleteResults* results)
{
    nsresult rv;
    nsCOMPtr<nsIEnumerator> cardsEnumerator;
    nsCOMPtr<nsIAbCard> card;
    PRInt32 i;

    rv = directory->GetChildCards(getter_AddRefs(cardsEnumerator));
    if (NS_SUCCEEDED(rv) && cardsEnumerator)
    {
        nsCOMPtr<nsISupports> item;
        for (rv = cardsEnumerator->First(); NS_SUCCEEDED(rv); rv = cardsEnumerator->Next())
        {
            rv = cardsEnumerator->CurrentItem(getter_AddRefs(item));
            if (NS_SUCCEEDED(rv))
            {
                card = do_QueryInterface(item, &rv);
                if (NS_SUCCEEDED(rv))
                {
                    // Skip if it's not a normal card (ie, they can't be added as members).
                    PRBool isNormal;
                    rv = card->GetIsANormalCard(&isNormal);
                    if (NS_FAILED(rv) || !isNormal)
                        continue;

                    nsXPIDLString pEmailStr[MAX_NUMBER_OF_EMAIL_ADDRESSES]; //[0]=primary email, [1]=secondary email (no available with mailing list)
                    nsXPIDLString pDisplayNameStr;
                    nsXPIDLString pFirstNameStr;
                    nsXPIDLString pLastNameStr;
                    nsXPIDLString pNickNameStr;
                    nsXPIDLString pNotesStr;
                    PRUint32 popularityIndex = 0;
                    PRBool bIsMailList;

                    rv = card->GetIsMailList(&bIsMailList);
                    if (NS_FAILED(rv))
                        continue;
                    if (bIsMailList)
                    {
                        rv = card->GetNotes(getter_Copies(pNotesStr));
                        if (NS_FAILED(rv))
                            continue;
                    }
                    else
                    {
                        for (i = 0 ; i < MAX_NUMBER_OF_EMAIL_ADDRESSES; i ++)
                        {
                            switch (i)
                            {
                            case 0:
                                rv = card->GetPrimaryEmail(getter_Copies(pEmailStr[i]));
                                break;
                            case 1:
                                rv = card->GetSecondEmail(getter_Copies(pEmailStr[i]));
                                break;
                            default:
                                return NS_ERROR_FAILURE;
                            }
                            if (NS_FAILED(rv))
                                continue;

                            // Don't bother with card without an email address
                            if (pEmailStr[i].IsEmpty())
                                continue;

                            //...and does it looks like a valid address?
                            if (pEmailStr[i].FindChar('@') <= 0)
                                pEmailStr[i].SetLength(0);
                        }
                        if (pEmailStr[0].IsEmpty() && pEmailStr[1].IsEmpty())
                            continue;
                    }

                    //Now, retrive the user name and nickname
                    rv = card->GetDisplayName(getter_Copies(pDisplayNameStr));
                    if (NS_FAILED(rv))
                        continue;
                    rv = card->GetFirstName(getter_Copies(pFirstNameStr));
                    if (NS_FAILED(rv))
                        continue;
                    rv = card->GetLastName(getter_Copies(pLastNameStr));
                    if (NS_FAILED(rv))
                        continue;
                    rv = card->GetNickName(getter_Copies(pNickNameStr));
                    if (NS_FAILED(rv))
                        continue;

                    (void) card->GetPopularityIndex(&popularityIndex);

                    // in the address book a mailing list does not have an email address field. However,
                    // we do "fix up" mailing lists in the UI sometimes to look like "My List <My List>"
                    // if we are looking up an address and we are comparing it to a mailing list to see if it is a match
                    // instead of just looking for an exact match on "My List", hijack the unused email address field
                    // and use that to test against "My List <My List>"
                    if (bIsMailList)
                        mParser->MakeFullAddressWString (pDisplayNameStr, pDisplayNameStr, getter_Copies(pEmailStr[0]));

                    for (i = 0 ; i < MAX_NUMBER_OF_EMAIL_ADDRESSES; i ++)
                    {
                        if (!bIsMailList && pEmailStr[i].IsEmpty())
                            continue;

                        if (CheckEntry(searchStr, pNickNameStr.get(),
                                       pDisplayNameStr.get(),
                                       pFirstNameStr.get(),
                                       pLastNameStr.get(), pEmailStr[i].get()))
                        {
                            nsXPIDLString pDirName;
                            if (mAutoCompleteCommentColumn == 1)
                            {
                                rv = directory->GetDirName(getter_Copies(pDirName));
                                if (NS_FAILED(rv))
                                    continue;
                            }

                            AddToResult(pNickNameStr.get(), pDisplayNameStr.get(),
                                        pFirstNameStr.get(), pLastNameStr.get(),
                                        pEmailStr[i].get(), pNotesStr.get(),
                                        pDirName.get(), popularityIndex, bIsMailList, PR_FALSE, results);
                        }
                    }
                }
            }
        }
    }

    return NS_OK;
}