#include "__IMAP_UNSUBSCRIBE.h" #include "__IMAP_SUBSCRIBE.h" #include "IMAPArgs.h" #include "IMAPServer.h" #include namespace mail { int __IMAP_UNSUBSCRIBE::processCommand(coreutils::ZString &request, IMAPSession &session, IMAPServer &server) { if (session.state == IMAPSession::NOT_AUTHENTICATED) { session.out << session.tag << " NO Not authenticated" << CRLF; return 1; } coreutils::ZString nameArg = IMAPArgs::nextArgument(request); std::string folderName = IMAPArgs::normalizeFolderName(IMAPArgs::unwrap(nameArg)); coreutils::ZString userNameZ(session.userName); std::string mailboxPath = server.mailFileSystem.getMailBoxPath(userNameZ).str(); std::vector allFolders; for (coreutils::MString &folder : server.mailFileSystem.listFolders(userNameZ)) allFolders.push_back(folder.str()); std::vector subscriptions = readSubscriptions(mailboxPath, allFolders); subscriptions.erase(std::remove(subscriptions.begin(), subscriptions.end(), folderName), subscriptions.end()); writeSubscriptions(mailboxPath, subscriptions); session.out << session.tag << " OK UNSUBSCRIBE completed" << CRLF; return 1; } }