|
|
@ -177,8 +177,8 @@ MainAttachment::readArchiveUrl () { |
|
|
|
archiveDownloadURL.clear (); |
|
|
|
string line; |
|
|
|
getline (cin, line); |
|
|
|
LOG_BUG (line.rfind ("arch: ", 0) != 0, return, "eMailShrinker: bug 9: no archive link. (line: " << line << ")"); |
|
|
|
LOG_BUG (line.rfind ("arch: bad", 0) == 0, return, "eMailShrinker: bug 10: bad archive link. (line: " << line << ")"); |
|
|
|
LOG_BUG (line.rfind ("arch: ", 0) != 0, return, "eMailShrinker: bug M9: no archive link. (line: " << line << ")"); |
|
|
|
LOG_BUG (line.rfind ("arch: bad", 0) == 0, return, "eMailShrinker: bug M10: bad archive link. (line: " << line << ")"); |
|
|
|
if (line.rfind ("arch: none", 0) == 0) |
|
|
|
return; |
|
|
|
archiveDownloadURL = line.substr (6); |
|
|
@ -192,7 +192,7 @@ MainAttachment::readDownloadUrl (string &url) { |
|
|
|
string line; |
|
|
|
getline (cin, line); |
|
|
|
LOG ("get URL: " << line); |
|
|
|
LOG_BUG (line.rfind ("url: ", 0) != 0, return, "eMailShrinker: bug 11: no download link. (line: " << line << ")"); |
|
|
|
LOG_BUG (line.rfind ("url: ", 0) != 0, return, "eMailShrinker: bug M11: no download link. (line: " << line << ")"); |
|
|
|
url = line.substr (5); |
|
|
|
} |
|
|
|
|
|
|
@ -231,7 +231,7 @@ MainAttachment::getDisclaim (string &plain, string &html) const { |
|
|
|
int linkCount (0); |
|
|
|
string plainNewLinks, htmlNewLinks; |
|
|
|
for (Attachment *attachP : allMarkedPtrs) { |
|
|
|
if (!attachP->toExtract) |
|
|
|
if (attachP->isSigned || !attachP->toExtract) |
|
|
|
continue; |
|
|
|
addLink (plainNewLinks, htmlNewLinks, attachP->downloadUrl, attachP->getAttachName ()); |
|
|
|
++linkCount; |
|
|
@ -240,7 +240,7 @@ MainAttachment::getDisclaim (string &plain, string &html) const { |
|
|
|
// previousLinks.erase (attachP->downloadUrl);
|
|
|
|
} |
|
|
|
for (Attachment *attachP : allMarkedPtrs) { |
|
|
|
if (!attachP->embeddedData.size ()) |
|
|
|
if (attachP->isSigned || !attachP->embeddedData.size ()) |
|
|
|
continue; |
|
|
|
for (EmbeddedData &embedded : attachP->embeddedData) { |
|
|
|
addLink (plainNewLinks, htmlNewLinks, embedded.downloadUrl, embedded.name); |
|
|
@ -449,7 +449,7 @@ MainAttachment::markSignificant (const streamoff &minAttachSize, ifstream &mbox) |
|
|
|
bool plainMarked (false), htmlMarked (false); |
|
|
|
markDisclaim (plainMarked, htmlMarked); |
|
|
|
emptyEMail = ! (plainMarked || htmlMarked); |
|
|
|
Attachment::markSignificant ("", minAttachSize, mbox, allMarkedPtrs); |
|
|
|
Attachment::markSignificant ("", isSigned, minAttachSize, mbox, allMarkedPtrs); |
|
|
|
} |
|
|
|
|
|
|
|
// ================================================================================
|
|
|
@ -492,7 +492,7 @@ MainAttachment::extract (ifstream &mbox, const SizeArg &minSize) const { |
|
|
|
int attachCount (0); |
|
|
|
string dirName, mediaName; |
|
|
|
for (Attachment *attachP : allMarkedPtrs) { |
|
|
|
if (attachP->isKazAttachment || !attachP->toExtract) |
|
|
|
if (attachP->isSigned || attachP->isKazAttachment || !attachP->toExtract) |
|
|
|
continue; |
|
|
|
newPjEntry (attachCount, attachP->getContentType (), attachP->getAttachName (), dirName, mediaName); |
|
|
|
++attachCount; |
|
|
@ -543,7 +543,7 @@ MainAttachment::extract (ifstream &mbox, const SizeArg &minSize) const { |
|
|
|
cout << dirName << endl; |
|
|
|
} |
|
|
|
for (Attachment *attachP : allMarkedPtrs) { |
|
|
|
if (!attachP->embeddedData.size ()) |
|
|
|
if (attachP->isSigned || !attachP->embeddedData.size ()) |
|
|
|
continue; |
|
|
|
string content = attachP->getContent (mbox); |
|
|
|
vector<string> imgs; |
|
|
@ -575,7 +575,7 @@ MainAttachment::substitute (ifstream &mbox, ofstream &outbox, const SizeArg &min |
|
|
|
removePreviousArchive (); |
|
|
|
map<const string, const string> translateHtml; |
|
|
|
for (Attachment *attachP : allMarkedPtrs) |
|
|
|
if (attachP->toExtract && !attachP->isKazAttachment) { |
|
|
|
if (!attachP->isSigned && attachP->toExtract && !attachP->isKazAttachment) { |
|
|
|
readDownloadUrl (attachP->downloadUrl); |
|
|
|
if (attachP->downloadUrl.empty ()) { |
|
|
|
LOG ("no change"); |
|
|
@ -589,7 +589,7 @@ MainAttachment::substitute (ifstream &mbox, ofstream &outbox, const SizeArg &min |
|
|
|
} |
|
|
|
} |
|
|
|
for (Attachment *attachP : allMarkedPtrs) { |
|
|
|
if (!attachP->embeddedData.size ()) |
|
|
|
if (attachP->isSigned || !attachP->embeddedData.size ()) |
|
|
|
continue; |
|
|
|
for (EmbeddedData &embedded : attachP->embeddedData) |
|
|
|
readDownloadUrl (embedded.downloadUrl); |
|
|
@ -601,11 +601,32 @@ MainAttachment::substitute (ifstream &mbox, ofstream &outbox, const SizeArg &min |
|
|
|
getDisclaim (plainDisclaim, htmlDisclaim); |
|
|
|
|
|
|
|
// copy email
|
|
|
|
streamoff curPos = 0; |
|
|
|
if (boundary.empty () && plainDisclaim.size () && (attachMode & ATTACHMENT)) { |
|
|
|
// XXX if no multipart ?
|
|
|
|
LOG_BUG (true, /* */, "eMailShrinker: bug 12: not multipart."); |
|
|
|
if (plainDisclaim.size () && emptyEMail && boundary.empty ()) { |
|
|
|
// only one attachment must be replace
|
|
|
|
cerr << "eMailShrinker: force one attachment" << endl; |
|
|
|
string mime (getMime (mbox)); |
|
|
|
string::size_type startPos = (0); |
|
|
|
for (string token : {string ("Content-Transfer-Encoding"), Attachment::contentTypeToken}) { |
|
|
|
startPos = caseInsensitiveFind (mime, "Content-Transfer-Encoding"); |
|
|
|
for (string::size_type stopPos (startPos); |
|
|
|
(stopPos = mime.find ("\n", stopPos)) != string::npos; |
|
|
|
) { |
|
|
|
if (string (" \t").find (mime [stopPos+1]) == string::npos) { |
|
|
|
mime.erase (startPos, stopPos-startPos); |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
mime.insert (startPos, KAZ_EMPTY_TEXT_PLAIN); |
|
|
|
string content (plainDisclaim); |
|
|
|
base64Encode (content); |
|
|
|
outbox << mime |
|
|
|
<< content << endl; |
|
|
|
outbox.flush (); |
|
|
|
outbox.close (); |
|
|
|
return; |
|
|
|
} |
|
|
|
streamoff curPos = 0; |
|
|
|
copy (mbox, outbox, curPos, contentPos); |
|
|
|
curPos = contentPos; |
|
|
|
|
|
|
@ -626,9 +647,12 @@ MainAttachment::substitute (ifstream &mbox, ofstream &outbox, const SizeArg &min |
|
|
|
copy (mbox, outbox, curPos, attachP->beginInParent); |
|
|
|
LOG_BUG (attachP->toUpdate && attachP->toExtract, /**/, "eMailShrinker: bug M5: update and extract. pos: " << attachP->beginPos); |
|
|
|
|
|
|
|
if (attachP->toExtract || attachP->isKazAttachment) { |
|
|
|
LOG ("skip Extracted or previous attachments"); |
|
|
|
if (attachP->isSigned) { |
|
|
|
LOG ("don't change signed content"); |
|
|
|
copy (mbox, outbox, attachP->beginInParent, attachP->endPos); |
|
|
|
|
|
|
|
} else if (attachP->toExtract || attachP->isKazAttachment) { |
|
|
|
LOG ("skip Extracted or previous attachments"); |
|
|
|
|
|
|
|
} else if (attachP->toUpdate) { |
|
|
|
string textProp = attachP->getProp (contentTypeToken, textRegEx); |
|
|
@ -718,7 +742,7 @@ MainAttachment::substitute (ifstream &mbox, ofstream &outbox, const SizeArg &min |
|
|
|
outbox.flush (); |
|
|
|
} |
|
|
|
copy (mbox, outbox, curPos, endPos); |
|
|
|
outbox << endl; |
|
|
|
//outbox << endl;
|
|
|
|
outbox.close (); |
|
|
|
} |
|
|
|
|
|
|
|