ImapCommandItem* ImapCommands::MessageMarkAsSpam::GetExpandedQueue(IMAP4& protocol)
{
	const char* keyword_spam = "$Junk";
	const char* keyword_not_spam = "$NotJunk";

	OpAutoPtr<ImapCommands::Store> remove_keyword  (OP_NEW(ImapCommands::Store, (m_mailbox, 0, 0,
					ImapCommands::USE_UID | ImapCommands::Store::REMOVE_FLAGS | ImapCommands::Store::SILENT | ImapCommands::Store::KEYWORDS, m_mark_as_spam ? keyword_not_spam : keyword_spam)));

	OpAutoPtr<ImapCommands::Store> add_keyword (OP_NEW(ImapCommands::Store, (m_mailbox, 0, 0,
		ImapCommands::USE_UID | ImapCommands::Store::ADD_FLAGS | ImapCommands::Store::SILENT | ImapCommands::Store::KEYWORDS, m_mark_as_spam ? keyword_spam : keyword_not_spam)));

			
	if (!add_keyword.get() || !remove_keyword.get() || 
		OpStatus::IsError(remove_keyword->GetMessageSet().Copy(m_message_set)) || 
		OpStatus::IsError(add_keyword->GetMessageSet().Copy(m_message_set)))
		return NULL;

	add_keyword->DependsOn(remove_keyword.get(), protocol);

	if (m_to_folder)
	{
		ImapCommands::Move * move_to_folder = OP_NEW(ImapCommands::Move, (m_mailbox, m_to_folder, 0, 0));
		if (!move_to_folder || OpStatus::IsError(move_to_folder->GetMessageSet().Copy(m_message_set)))
		{
			OP_DELETE(move_to_folder);
			return NULL;
		}
		move_to_folder->DependsOn(add_keyword.get(), protocol);
	}

	add_keyword.release();
	return remove_keyword.release();
}
void remove_keywords(struct list_ustring* list,struct string_hash_ptr* keywords) {
while (list!=NULL) {
	remove_keyword(list->string,keywords);
	list=list->next;
}
}