#include "ConfigView.h"
#include <Catalog.h>
#include <Message.h>
#include <Entry.h>
#include <String.h>
#include <MailFilter.h>
#include <MailMessage.h>
#include <stdio.h>
#include "NodeMessage.h"
#undef B_TRANSLATION_CONTEXT
#define B_TRANSLATION_CONTEXT "FortuneFilter"
class FortuneFilter : public BMailFilter {
public:
FortuneFilter(BMailProtocol& protocol,
const BMailAddOnSettings& settings);
virtual void MessageReadyToSend(const entry_ref& ref,
BFile& file);
};
FortuneFilter::FortuneFilter(BMailProtocol& protocol,
const BMailAddOnSettings& settings)
:
BMailFilter(protocol, &settings)
{
}
void
FortuneFilter::MessageReadyToSend(const entry_ref& ref, BFile& file)
{
BString fortuneFile;
BString tagLine;
fSettings->FindString("fortune_file", &fortuneFile);
fSettings->FindString("tag_line", &tagLine);
fortuneFile.Prepend("/bin/fortune ");
char buffer[768];
FILE *fd;
fd = popen(fortuneFile.String(), "r");
if (!fd) {
printf("Could not open pipe to fortune!\n");
return;
}
BEmailMessage mailMessage(&ref);
BString fortuneText;
fortuneText += "\n--\n";
fortuneText += tagLine;
while (fgets(buffer, 768, fd)) {
fortuneText += buffer;
fortuneText += "\n";
}
pclose(fd);
BTextMailComponent* body = mailMessage.Body();
body->AppendText(fortuneText);
file.SetSize(0);
mailMessage.RenderToRFC822(&file);
}
BString
filter_name(const BMailAccountSettings& accountSettings,
const BMailAddOnSettings* settings)
{
return B_TRANSLATE("Fortune");
}
BMailFilter*
instantiate_filter(BMailProtocol& protocol,
const BMailAddOnSettings& settings)
{
return new FortuneFilter(protocol, settings);
}
BMailSettingsView*
instantiate_filter_settings_view(const BMailAccountSettings& accountSettings,
const BMailAddOnSettings& settings)
{
ConfigView* view = new ConfigView();
view->SetTo(settings);
return view;
}