Files
Work/pop/HEADER.CPP
2024-08-07 09:16:27 -04:00

121 lines
4.5 KiB
C++

#include <pop/header.hpp>
#include <common/openfile.hpp>
#include <common/filemap.hpp>
#include <common/pview.hpp>
#include <common/block.hpp>
Header &Header::operator=(const Header &someHeader)
{
path(someHeader.path());
from(someHeader.from());
newsGroups(someHeader.newsGroups());
subject(someHeader.subject());
date(someHeader.date());
organization(someHeader.organization());
lines(someHeader.lines());
messageID(someHeader.messageID());
replyTo(someHeader.replyTo());
postingHost(someHeader.postingHost());
newsReader(someHeader.newsReader());
crossReference(someHeader.crossReference());
contentType(someHeader.contentType());
xMailer(someHeader.xMailer());
return *this;
}
Header &Header::operator=(Block<String> &headerLines)
{
UINT lineCount(headerLines.size());
for(int lineIndex=0;lineIndex<lineCount;lineIndex++)
{
String lineItem(headerLines[lineIndex].betweenString(' ',0));
String &headerLine=headerLines[lineIndex];
if(headerLine.isNull())continue;
if(isPath(headerLine))path(lineItem);
else if(isFrom(headerLine))from(lineItem);
else if(isNewsGroups(headerLine))newsGroups(lineItem);
else if(isSubject(headerLine))subject(lineItem);
else if(isDate(headerLine))date(lineItem);
else if(isOrganization(headerLine))organization(lineItem);
else if(isLines(headerLine))lines(lineItem);
else if(isMessageID(headerLine))messageID(lineItem);
else if(isReplyTo(headerLine))replyTo(lineItem);
else if(isNNTPPostingHost(headerLine))postingHost(lineItem);
else if(isNewsReader(headerLine))newsReader(lineItem);
else if(isCrossReference(headerLine))crossReference(lineItem);
else if(isContentType(headerLine))contentType(lineItem);
else if(isMailer(headerLine))xMailer(lineItem);
}
if(replyTo().isNull())replyTo(from());
return *this;
}
Header &Header::operator=(const String &pathFileName)
{
FileHandle headerFile(pathFileName,FileHandle::Read,FileHandle::ShareRead);
FileMap headerMap(headerFile);
PureViewOfFile headerView(headerMap);
String headerLine;
String lineItem;
if(!headerFile.isOkay())return *this;
while(headerView.getLine(headerLine))
{
if(headerLine.isNull()||!headerLine.length())break;
lineItem=(headerLine.betweenString(' ',0));
if(isPath(headerLine))path(lineItem);
else if(isFrom(headerLine))from(lineItem);
else if(isNewsGroups(headerLine))newsGroups(lineItem);
else if(isSubject(headerLine))subject(lineItem);
else if(isDate(headerLine))date(lineItem);
else if(isOrganization(headerLine))organization(lineItem);
else if(isLines(headerLine))lines(lineItem);
else if(isMessageID(headerLine))messageID(lineItem);
else if(isReplyTo(headerLine))replyTo(lineItem);
else if(isNNTPPostingHost(headerLine))postingHost(lineItem);
else if(isNewsReader(headerLine))newsReader(lineItem);
else if(isCrossReference(headerLine))crossReference(lineItem);
else if(isContentType(headerLine))contentType(lineItem);
else if(isMailer(headerLine))xMailer(lineItem);
}
if(replyTo().isNull())replyTo(from());
return *this;
}
SystemTime Header::systemTime(void)
{
SystemTime systemTime;
char *ptrString;
if(mDate.isNull())return systemTime;
String tmpDate(mDate.betweenString(',',0));
if(tmpDate.isNull())return systemTime;
ptrString=(LPSTR)tmpDate;
ptrString=::strtok(ptrString," ");
if(!ptrString)return systemTime;
systemTime.day(::atoi(ptrString));
ptrString=::strtok(0," ");
if(!ptrString)return systemTime;
if(!::strcmp(ptrString,"Jan"))systemTime.month(SystemTime::January);
else if(!::strcmp(ptrString,"Feb"))systemTime.month(SystemTime::February);
else if(!::strcmp(ptrString,"Mar"))systemTime.month(SystemTime::March);
else if(!::strcmp(ptrString,"Apr"))systemTime.month(SystemTime::April);
else if(!::strcmp(ptrString,"May"))systemTime.month(SystemTime::May);
else if(!::strcmp(ptrString,"Jun"))systemTime.month(SystemTime::June);
else if(!::strcmp(ptrString,"Jul"))systemTime.month(SystemTime::July);
else if(!::strcmp(ptrString,"Aug"))systemTime.month(SystemTime::August);
else if(!::strcmp(ptrString,"Sep"))systemTime.month(SystemTime::September);
else if(!::strcmp(ptrString,"Oct"))systemTime.month(SystemTime::October);
else if(!::strcmp(ptrString,"Nov"))systemTime.month(SystemTime::November);
else if(!::strcmp(ptrString,"Dec"))systemTime.month(SystemTime::December);
else systemTime.month(SystemTime::None);
ptrString=::strtok(0," ");
if(!ptrString)return systemTime;
systemTime.year(::atoi(ptrString));
systemTime.hour(0);
systemTime.minute(0);
systemTime.second(0);
systemTime.milliseconds(0);
return systemTime;
}