1/* 2 * Copyright 2004-2012, Haiku, Inc. All rights reserved. 3 * Copyright 2002 Alexander G. M. Smith. 4 * Distributed under the terms of the MIT License. 5 */ 6 7 8/*! SpamFilter's configuration view. Lets the user change various settings 9 related to the add-on, but not the spamdbm server. 10*/ 11 12 13#include <stdlib.h> 14#include <stdio.h> 15 16#include <Alert.h> 17#include <Button.h> 18#include <Catalog.h> 19#include <CheckBox.h> 20#include <LayoutBuilder.h> 21#include <MailFilter.h> 22#include <MailSettingsView.h> 23#include <Message.h> 24#include <Messenger.h> 25#include <Roster.h> 26#include <StringView.h> 27#include <TextControl.h> 28#include <FindDirectory.h> 29#include <Entry.h> 30#include <Path.h> 31 32#include <FileConfigView.h> 33 34 35#undef B_TRANSLATION_CONTEXT 36#define B_TRANSLATION_CONTEXT "SpamFilterConfig" 37 38 39class SpamFilterConfig : public BMailSettingsView { 40public: 41 SpamFilterConfig(const BMessage* settings); 42 43 virtual status_t SaveInto(BMailAddOnSettings& settings) const; 44 45private: 46 BCheckBox* fSubjectHintCheckBox; 47 BCheckBox* fAutoTrainingCheckBox; 48 float fGenuineCutoffRatio; 49 BTextControl* fGenuineCutoffRatioTextControl; 50 BCheckBox* fNoWordsMeansSpamCheckBox; 51 float fSpamCutoffRatio; 52 BTextControl* fSpamCutoffRatioTextControl; 53}; 54 55 56SpamFilterConfig::SpamFilterConfig(const BMessage* settings) 57 : 58 BMailSettingsView("spamfilter_config"), 59 fSubjectHintCheckBox(NULL), 60 fAutoTrainingCheckBox(NULL), 61 fGenuineCutoffRatioTextControl(NULL), 62 fNoWordsMeansSpamCheckBox(NULL), 63 fSpamCutoffRatioTextControl(NULL) 64{ 65 bool subjectHint; 66 bool autoTraining; 67 bool noWordsMeansSpam; 68 if (settings->FindBool("AddMarkerToSubject", &subjectHint) != B_OK) 69 subjectHint = false; 70 if (settings->FindBool("AutoTraining", &autoTraining) != B_OK) 71 autoTraining = true; 72 if (settings->FindBool("NoWordsMeansSpam", &noWordsMeansSpam) != B_OK) 73 noWordsMeansSpam = true; 74 75 if (settings->FindFloat("GenuineCutoffRatio", &fGenuineCutoffRatio) != B_OK) 76 fGenuineCutoffRatio = 0.01f; 77 if (settings->FindFloat("SpamCutoffRatio", &fSpamCutoffRatio) != B_OK) 78 fSpamCutoffRatio = 0.99f; 79 80 SetViewUIColor(B_PANEL_BACKGROUND_COLOR); 81 82 fSubjectHintCheckBox = new BCheckBox("AddToSubject", 83 B_TRANSLATE("Add spam rating to start of subject"), NULL); 84 fSubjectHintCheckBox->SetValue(subjectHint); 85 86 BString number; 87 number.SetToFormat("%06.4f", (double)fSpamCutoffRatio); 88 fSpamCutoffRatioTextControl = new BTextControl("spamcutoffratio", 89 B_TRANSLATE("Spam above:"), number.String(), NULL); 90 91 fNoWordsMeansSpamCheckBox = new BCheckBox("NoWordsMeansSpam", 92 B_TRANSLATE("or empty e-mail"), NULL); 93 fNoWordsMeansSpamCheckBox->SetValue(noWordsMeansSpam); 94 95 number.SetToFormat("%08.6f", (double)fGenuineCutoffRatio); 96 fGenuineCutoffRatioTextControl = new BTextControl("genuinecutoffratio", 97 B_TRANSLATE("Genuine below and uncertain above:"), 98 number.String(), NULL); 99 100 fAutoTrainingCheckBox = new BCheckBox("autoTraining", 101 B_TRANSLATE("Learn from all incoming e-mail"), NULL); 102 fAutoTrainingCheckBox->SetValue(autoTraining); 103 104 BLayoutBuilder::Group<>(this, B_VERTICAL) 105 .Add(fSubjectHintCheckBox) 106 .AddGroup(B_HORIZONTAL) 107 .Add(fSpamCutoffRatioTextControl->CreateLabelLayoutItem()) 108 .Add(fSpamCutoffRatioTextControl->CreateTextViewLayoutItem()) 109 .Add(fNoWordsMeansSpamCheckBox) 110 .End() 111 .AddGroup(B_HORIZONTAL) 112 .Add(fGenuineCutoffRatioTextControl->CreateLabelLayoutItem()) 113 .Add(fGenuineCutoffRatioTextControl->CreateTextViewLayoutItem()) 114 .End() 115 .Add(fAutoTrainingCheckBox); 116} 117 118 119status_t 120SpamFilterConfig::SaveInto(BMailAddOnSettings& settings) const 121{ 122 settings.MakeEmpty(); 123 124 status_t status = settings.AddBool("AddMarkerToSubject", 125 fSubjectHintCheckBox->Value() == B_CONTROL_ON); 126 127 if (status == B_OK) { 128 status = settings.AddBool("AutoTraining", 129 fAutoTrainingCheckBox->Value() == B_CONTROL_ON); 130 } 131 if (status == B_OK) { 132 status = settings.AddBool("NoWordsMeansSpam", 133 fNoWordsMeansSpamCheckBox->Value() == B_CONTROL_ON); 134 } 135 if (status == B_OK) { 136 status = settings.AddFloat("GenuineCutoffRatio", 137 atof(fGenuineCutoffRatioTextControl->Text())); 138 } 139 if (status == B_OK) { 140 status = settings.AddFloat("SpamCutoffRatio", 141 atof(fSpamCutoffRatioTextControl->Text())); 142 } 143 144 return status; 145} 146 147 148// #pragma mark - 149 150 151BMailSettingsView* 152instantiate_filter_settings_view(const BMailAccountSettings& accountSettings, 153 const BMailAddOnSettings& settings) 154{ 155 return new SpamFilterConfig(&settings); 156} 157