Example #1
0
NS_IMETHODIMP ImportAddressImpl::GetSampleData(PRInt32 index, bool *pFound, PRUnichar **pStr)
{
  NS_PRECONDITION(pFound != nsnull, "null ptr");
  NS_PRECONDITION(pStr != nsnull, "null ptr");
  if (!pFound || !pStr)
    return NS_ERROR_NULL_POINTER;

  if (!m_fileLoc) {
    IMPORT_LOG0("*** Error, called GetSampleData before SetSampleLocation\n");
    return NS_ERROR_FAILURE;
  }

  nsresult rv;
  *pStr = nsnull;
  PRUnichar term = 0;

  if (!m_haveDelim) {
    rv = m_text.DetermineDelim(m_fileLoc);
    NS_ENSURE_SUCCESS(rv, rv);
    m_haveDelim = true;
    m_delim = m_text.GetDelim();
  }

  bool fileExists;
  rv = m_fileLoc->Exists(&fileExists);
  NS_ENSURE_SUCCESS(rv, rv);

  if (!fileExists) {
    *pFound = false;
    *pStr = NS_strdup(&term);
    return NS_OK;
  }

  nsCString line;
  rv = nsTextAddress::ReadRecordNumber(m_fileLoc, line, index);
  if (NS_SUCCEEDED(rv)) {
    nsString str;
    nsCString field;
    nsString uField;
    PRInt32 fNum = 0;
    while (nsTextAddress::GetField(line.get(), line.Length(), fNum, field, m_delim)) {
      if (fNum)
        str.Append(PRUnichar('\n'));
      SanitizeSampleData(field);
      rv = nsMsgI18NConvertToUnicode(nsMsgI18NFileSystemCharset(),
                                     field, uField);

      str.Append(uField);
      fNum++;
      field.Truncate();
    }

    *pStr = ToNewUnicode(str);
    *pFound = true;

    /* IMPORT_LOG1("Sample data: %S\n", str.get()); */
  }
  else {
    *pFound = false;
    *pStr = NS_strdup(&term);
  }

  return NS_OK;
}
Example #2
0
NS_IMETHODIMP ImportAddressImpl::GetSampleData( PRInt32 index, PRBool *pFound, PRUnichar **pStr)
{
    NS_PRECONDITION(pFound != nsnull, "null ptr");
    NS_PRECONDITION(pStr != nsnull, "null ptr");
    if (!pFound || !pStr)
        return( NS_ERROR_NULL_POINTER);

    if (!m_fileLoc) {
        IMPORT_LOG0( "*** Error, called GetSampleData before SetSampleLocation\n");
        return( NS_ERROR_FAILURE);
    }

    nsresult	rv;
    *pStr = nsnull;
    PRBool		open = PR_FALSE;
    PRUnichar	term = 0;

    if (!m_haveDelim) {
        rv = m_fileLoc->IsStreamOpen( &open);
        if (open) {
            m_fileLoc->CloseStream();
            open = PR_FALSE;
        }
        rv = m_text.DetermineDelim( m_fileLoc);
        if (NS_FAILED( rv))
            return( rv);
        m_haveDelim = PR_TRUE;
        m_delim = m_text.GetDelim();
    }
    else {
        rv = m_fileLoc->IsStreamOpen( &open);
    }

    if (!open) {
        rv = m_fileLoc->OpenStreamForReading();
        if (NS_FAILED( rv)) {
            *pFound = PR_FALSE;
            *pStr = nsCRT::strdup( &term);
            return( NS_OK);
        }
    }

    PRInt32	lineLen;
    PRInt32	bufSz = 10240;
    char	*pLine = new char[bufSz];

    nsCOMPtr<nsIImportService> impSvc(do_GetService(NS_IMPORTSERVICE_CONTRACTID, &rv));

    rv = nsTextAddress::ReadRecordNumber( m_fileLoc, pLine, bufSz, m_delim, &lineLen, index);
    if (NS_SUCCEEDED( rv)) {
        nsString	str;
        nsCString	field;
        nsString	uField;
        PRInt32		fNum = 0;
        while (nsTextAddress::GetField( pLine, lineLen, fNum, field, m_delim)) {
            if (fNum)
                str.AppendLiteral("\n");
            SanitizeSampleData( field);
            if (impSvc)
                impSvc->SystemStringToUnicode( field.get(), uField);
            else
                uField.AssignWithConversion( field.get());

            str.Append( uField);
            fNum++;
            field.Truncate();
        }

        *pStr = nsCRT::strdup( str.get());
        *pFound = PR_TRUE;

        /* IMPORT_LOG1( "Sample data: %S\n", str.get()); */
    }
    else {
        *pFound = PR_FALSE;
        *pStr = nsCRT::strdup( &term);
    }

    delete [] pLine;

    return( NS_OK);
}