void SMTPMessage::ReplaceAliases ( JPtrArray<JString>& names ) { JPtrArray<JString> aliases(JPtrArrayT::kForgetAll); aliases.SetCompareFunction(JCompareStringsCaseSensitive); JSize i = 1; while (i <= names.GetElementCount()) { JString& name = *(names.NthElement(i)); JString alias; JString fcc; if (GGetAddressBookMgr()->NameIsAlias(name, alias, fcc)) { JIndex findex; if (!aliases.SearchSorted(&name, JOrderedSetT::kAnyMatch, &findex)) { GParseNameList(alias, names); aliases.InsertSorted(names.NthElement(i)); names.RemoveElement(i); } else { names.DeleteElement(i); } // GParseNameList(fcc, names); } else { i++; } } aliases.DeleteAll(); }
void GAddressBookMgr::AddAddressBook ( const JCharacter* name, JTree* tree ) { if (!JFileExists(name)) { return; } JDirEntry* dirEntry = new JDirEntry(name); assert(dirEntry != NULL); JTreeNode* jbase = tree->GetRoot(); JNamedTreeNode* base = dynamic_cast<JNamedTreeNode*>(jbase); assert(base != NULL); GAddressBookTreeNode* book = new GAddressBookTreeNode(dirEntry, base, dirEntry->GetName()); assert(book != NULL); std::ifstream is(name); while (is.good()) { JString line = JReadLine(is); GAddressBookEntry* entry = new GAddressBookEntry(); assert( entry != NULL ); JString name; if (GetNextRecord(line, name, is)) { GetNextRecord(line, entry->fullname, is); if (GetNextRecord(line, entry->address, is)) { GetNextRecord(line, entry->fcc, is); GetNextRecord(line, entry->comment, is); itsAddresses->SetElement(name, entry, JPtrArrayT::kDelete); GAddressEntryTreeNode* aEntry = new GAddressEntryTreeNode(book, entry->fullname); assert(aEntry != NULL); GAddressItemTreeNode* item = new GAddressItemTreeNode(GAddressItemTreeNode::kName, aEntry, name, kJFalse); assert(item != NULL); JString address = entry->address; if (address.BeginsWith("(") && address.GetLength() > 2) { address = address.GetSubstring(2, address.GetLength() - 1); JPtrArray<JString> list(JPtrArrayT::kForgetAll); GParseNameList(address, list); const JSize count = list.GetElementCount(); for (JSize i = count; i >= 1; i--) { item = new GAddressItemTreeNode(GAddressItemTreeNode::kEMail, aEntry, *(list.NthElement(i)), kJFalse); assert(item != NULL); } list.DeleteAll(); } else { item = new GAddressItemTreeNode(GAddressItemTreeNode::kEMail, aEntry, address, kJFalse); } if (!entry->comment.IsEmpty()) { item = new GAddressItemTreeNode(GAddressItemTreeNode::kComment, aEntry, entry->comment, kJFalse); assert(item != NULL); } if (!entry->fcc.IsEmpty()) { item = new GAddressItemTreeNode(GAddressItemTreeNode::kFcc, aEntry, entry->fcc, kJFalse); assert(item != NULL); } book->InsertSorted(aEntry); continue; } } delete entry; } }
void SMTPMessage::HandleAddresses() { JPtrArray<JString> names(JPtrArrayT::kForgetAll); GParseNameList(*itsTo, names); ReplaceAliases(names); while (!names.IsEmpty()) { JString* str = names.GetFirstElement(); if (!str->BeginsWith("<")) { str->Prepend("<"); str->Append(">"); } if (itsToNames->InsertSorted(str,kJFalse)) { names.RemoveElement(1); } else { names.DeleteElement(1); } } GParseNameList(*itsCC, names); ReplaceAliases(names); while (!names.IsEmpty()) { JString* str = names.GetFirstElement(); if (!str->BeginsWith("<")) { str->Prepend("<"); str->Append(">"); } JIndex findex; if (itsToNames->SearchSorted(str, JOrderedSetT::kFirstMatch, &findex)) { names.DeleteElement(1); } else { if (itsCcNames->InsertSorted(str,kJFalse)) { names.RemoveElement(1); } else { names.DeleteElement(1); } } } GParseNameList(*itsBCC, names); ReplaceAliases(names); while (!names.IsEmpty()) { JString* str = names.GetFirstElement(); if (!str->BeginsWith("<")) { str->Prepend("<"); str->Append(">"); } JIndex findex; if (itsToNames->SearchSorted(str, JOrderedSetT::kFirstMatch, &findex)) { names.DeleteElement(1); } else { if (itsCcNames->SearchSorted(str, JOrderedSetT::kFirstMatch, &findex)) { names.DeleteElement(1); } else { if (itsBccNames->InsertSorted(str,kJFalse)) { names.RemoveElement(1); } else { names.DeleteElement(1); } } } } }