Transfer::URI AssetDownloadTask::getURL(const Transfer::URI& orig, const String& given_url) { // We need to handle relative and absolute URIs: // If we can decode a URL, then we may need to handle relative URLs. Transfer::URL orig_url(orig); if (!orig_url.empty()) { // The URL constructor will figure out absolute/relative, or just fail // if it can't construct a valid URL. Transfer::URL deriv_url(orig_url.context(), given_url); if (!deriv_url.empty()) return Transfer::URI(deriv_url.toString()); } // Otherwise, try to decode as a plain URI, ignoring the original URI. This // will either succeed with a full URI or fail and return an empty URI return Transfer::URI(given_url); }
static char * MimeMessage_partial_message_html(const char *data, void *closure, MimeHeaders *headers) { MimeMessage *msg = (MimeMessage *)closure; nsCAutoString orig_url(data); char *uidl = MimeHeaders_get(headers, HEADER_X_UIDL, PR_FALSE, PR_FALSE); char *msgId = MimeHeaders_get(headers, HEADER_MESSAGE_ID, PR_FALSE, PR_FALSE); char *msgIdPtr = PL_strstr(msgId, "<"); int msgBase; PRInt32 pos = orig_url.Find("mailbox-message"); if (pos != -1) orig_url.Cut(pos + 7, 8); pos = orig_url.Find("#"); if (pos != -1) orig_url.Replace(pos, 1, "?number=", 8); if (msgIdPtr) msgIdPtr++; else msgIdPtr = msgId; char *gtPtr = PL_strstr(msgIdPtr, ">"); if (gtPtr) *gtPtr = 0; msgBase = (msg->bodyLength > MSG_LINEBREAK_LEN) ? MIME_MSG_PARTIAL_FMT_1 : MIME_MSG_PARTIAL_FMT2_1; nsCString partialMsgHtml; nsCString item; item.Adopt(MimeGetStringByID(msgBase)); partialMsgHtml += item; item.Adopt(MimeGetStringByID(msgBase+1)); partialMsgHtml += item; partialMsgHtml.Append(orig_url); if (msgIdPtr) { partialMsgHtml.AppendLiteral("&messageid="); MsgEscapeString(nsDependentCString(msgIdPtr), nsINetUtil::ESCAPE_URL_PATH, item); partialMsgHtml.Append(item); } if (uidl) { partialMsgHtml.AppendLiteral("&uidl="); MsgEscapeString(nsDependentCString(uidl), nsINetUtil::ESCAPE_XALPHAS, item); partialMsgHtml.Append(item); } item.Adopt(MimeGetStringByID(msgBase+2)); partialMsgHtml += item; return ToNewCString(partialMsgHtml); }
static char * MimeMessage_partial_message_html(const char *data, void *closure, MimeHeaders *headers) { MimeMessage *msg = (MimeMessage *)closure; nsAutoCString orig_url(data); char *uidl = MimeHeaders_get(headers, HEADER_X_UIDL, false, false); char *msgId = MimeHeaders_get(headers, HEADER_MESSAGE_ID, false, false); char *msgIdPtr = PL_strchr(msgId, '<'); int32_t pos = orig_url.Find("mailbox-message"); if (pos != -1) orig_url.Cut(pos + 7, 8); pos = orig_url.FindChar('#'); if (pos != -1) orig_url.Replace(pos, 1, "?number=", 8); if (msgIdPtr) msgIdPtr++; else msgIdPtr = msgId; char *gtPtr = PL_strchr(msgIdPtr, '>'); if (gtPtr) *gtPtr = 0; bool msgBaseTruncated = (msg->bodyLength > MSG_LINEBREAK_LEN); nsCString partialMsgHtml; nsCString item; partialMsgHtml.AppendLiteral("<div style=\"margin: 1em auto; border: 1px solid black; width: 80%\">"); partialMsgHtml.AppendLiteral("<div style=\"margin: 5px; padding: 10px; border: 1px solid gray; font-weight: bold; text-align: center;\">"); partialMsgHtml.AppendLiteral("<span style=\"font-size: 120%;\">"); if (msgBaseTruncated) item.Adopt(MimeGetStringByName(MOZ_UTF16("MIME_MSG_PARTIAL_TRUNCATED"))); else item.Adopt(MimeGetStringByName(MOZ_UTF16("MIME_MSG_PARTIAL_NOT_DOWNLOADED"))); partialMsgHtml += item; partialMsgHtml.AppendLiteral("</span><hr>"); if (msgBaseTruncated) item.Adopt(MimeGetStringByName(MOZ_UTF16("MIME_MSG_PARTIAL_TRUNCATED_EXPLANATION"))); else item.Adopt(MimeGetStringByName(MOZ_UTF16("MIME_MSG_PARTIAL_NOT_DOWNLOADED_EXPLANATION"))); partialMsgHtml += item; partialMsgHtml.AppendLiteral("<br><br>"); partialMsgHtml.AppendLiteral("<a href=\""); partialMsgHtml.Append(orig_url); if (msgIdPtr) { partialMsgHtml.AppendLiteral("&messageid="); MsgEscapeString(nsDependentCString(msgIdPtr), nsINetUtil::ESCAPE_URL_PATH, item); partialMsgHtml.Append(item); } if (uidl) { partialMsgHtml.AppendLiteral("&uidl="); MsgEscapeString(nsDependentCString(uidl), nsINetUtil::ESCAPE_XALPHAS, item); partialMsgHtml.Append(item); } partialMsgHtml.AppendLiteral("\">"); item.Adopt(MimeGetStringByName(MOZ_UTF16("MIME_MSG_PARTIAL_CLICK_FOR_REST"))); partialMsgHtml += item; partialMsgHtml.AppendLiteral("</a>"); partialMsgHtml.AppendLiteral("</div></div>"); return ToNewCString(partialMsgHtml); }