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; }
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); }