protected void ApplyFilters(WebMailMessageCollection messageCollection, DbStorage dbStorage, Folder fld, ref ArrayList arr) { Filter[] filters = dbStorage.GetFilters(); if (_account.MailIncomingProtocol == IncomingMailProtocol.WMServer) { ArrayList allFiltersArr = new ArrayList(); Folder virusFolder = dbStorage.GetFolder(FolderType.Quarantine); if (virusFolder != null) { Filter fltVirus = new Filter(0, _account.ID, FilterField.XVirusHeader, FilterCondition.BeginsWithSubstring, "infected", FilterAction.MoveToFolder, virusFolder.ID, true); allFiltersArr.Add(fltVirus); } Folder spamFolder = dbStorage.GetFolder(FolderType.Spam); if (spamFolder != null) { Filter flt = new Filter(0, _account.ID, FilterField.XSpamHeader, FilterCondition.BeginsWithSubstring, "spam", FilterAction.MoveToFolder, spamFolder.ID, true); allFiltersArr.Add(flt); } if (filters.Length > 0) { foreach (Filter flt in filters) { allFiltersArr.Add(flt); } } Filter[] allFilters = (Filter[])allFiltersArr.ToArray(typeof(Filter)); // if (filters.Length > 0) filters.CopyTo(allFilters, 0); filters = allFilters; } int id_msg = dbStorage.GetLastMsgID(); foreach (WebMailMessage webMsg in messageCollection) { id_msg = Utils.RandMsgID(++id_msg); bool needToSave = true; if (fld.Type == FolderType.Inbox) { foreach (Filter flt in filters) { if (flt.Applied == false) { continue; } FilterAction action = flt.GetActionToApply(webMsg); switch (action) { case FilterAction.DeleteFromServerImmediately: { object[] messageIndexSet = new object[] { -1 }; if (_account.MailIncomingProtocol != IncomingMailProtocol.Imap4) { messageIndexSet[0] = webMsg.StrUid; } else if (_account.MailIncomingProtocol == IncomingMailProtocol.Imap4) { messageIndexSet[0] = webMsg.IntUid; } DeleteMessages(messageIndexSet, fld); needToSave = false; break; } case FilterAction.MoveToFolder: if (needToSave) { Folder toFld = dbStorage.GetFolder(flt.IDFolder); if (toFld != null) { if (fld.FullPath != toFld.FullPath) { if (_account.MailIncomingProtocol == IncomingMailProtocol.WMServer) { WmServerFS wmserverFS = new WmServerFS(_account); webMsg.StrUid = wmserverFS.MoveMessage(webMsg.StrUid, fld.FullPath, toFld.FullPath); } } dbStorage.SaveMessage(id_msg, webMsg, toFld); if (!_updatedFolders.ContainsKey(toFld.ID)) { _updatedFolders.Add(toFld.ID, toFld.FullPath); } } needToSave = false; } break; case FilterAction.MarkGrey: webMsg.Grayed = true; break; } } } if (needToSave) { dbStorage.SaveMessage(id_msg, webMsg, fld); } arr.Add((webMsg.IntUid > 0) ? (object)webMsg.IntUid : webMsg.StrUid); } }