mirror of
https://github.com/the-djmaze/snappymail.git
synced 2025-11-06 13:26:13 +08:00
Bugfix: message attachments missing data
This commit is contained in:
parent
fd0a41cfaf
commit
787e236133
10 changed files with 15 additions and 52 deletions
|
|
@ -250,7 +250,7 @@ setLayoutResizer = (source, target, sClientSideKeyName, mode) =>
|
||||||
|
|
||||||
populateMessageBody = (oMessage, popup) => {
|
populateMessageBody = (oMessage, popup) => {
|
||||||
if (oMessage) {
|
if (oMessage) {
|
||||||
popup || MessageUserStore.hideMessageBodies();
|
popup || MessageUserStore.message(oMessage);
|
||||||
popup || MessageUserStore.loading(true);
|
popup || MessageUserStore.loading(true);
|
||||||
Remote.message((iError, oData/*, bCached*/) => {
|
Remote.message((iError, oData/*, bCached*/) => {
|
||||||
if (iError) {
|
if (iError) {
|
||||||
|
|
@ -276,9 +276,9 @@ populateMessageBody = (oMessage, popup) => {
|
||||||
MessageFlagsCache.initMessage(oMessage);
|
MessageFlagsCache.initMessage(oMessage);
|
||||||
|
|
||||||
// Set clone
|
// Set clone
|
||||||
MessageUserStore.message(MessageModel.fromMessageListItem(oMessage));
|
oMessage = MessageModel.fromMessageListItem(oMessage);
|
||||||
oMessage = MessageUserStore.message();
|
|
||||||
}
|
}
|
||||||
|
MessageUserStore.message(oMessage);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (oMessage && oMessage.uid == json.Uid) {
|
if (oMessage && oMessage.uid == json.Uid) {
|
||||||
|
|
@ -289,6 +289,7 @@ populateMessageBody = (oMessage, popup) => {
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
isNew || oMessage.revivePropertiesFromJson(json);
|
isNew || oMessage.revivePropertiesFromJson(json);
|
||||||
|
|
||||||
if (messagesDom) {
|
if (messagesDom) {
|
||||||
let id = 'rl-msg-' + oMessage.hash.replace(/[^a-zA-Z0-9]/g, ''),
|
let id = 'rl-msg-' + oMessage.hash.replace(/[^a-zA-Z0-9]/g, ''),
|
||||||
body = elementById(id);
|
body = elementById(id);
|
||||||
|
|
@ -312,11 +313,7 @@ populateMessageBody = (oMessage, popup) => {
|
||||||
|
|
||||||
messagesDom.append(body);
|
messagesDom.append(body);
|
||||||
|
|
||||||
if (!popup) {
|
popup || (oMessage.body.hidden = false);
|
||||||
MessageUserStore.activeDom(body);
|
|
||||||
MessageUserStore.hideMessageBodies();
|
|
||||||
oMessage.body.hidden = false;
|
|
||||||
}
|
|
||||||
popup && oMessage.viewPopupMessage();
|
popup && oMessage.viewPopupMessage();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -48,7 +48,6 @@ export function MimeToMessage(data, message)
|
||||||
attachment.folder = '';
|
attachment.folder = '';
|
||||||
attachment.uid = '';
|
attachment.uid = '';
|
||||||
attachment.mimeIndex = part.id;
|
attachment.mimeIndex = part.id;
|
||||||
attachment.framed = false;
|
|
||||||
*/
|
*/
|
||||||
attachment.cid = cid ? cid.value : '';
|
attachment.cid = cid ? cid.value : '';
|
||||||
if (cid && html) {
|
if (cid && html) {
|
||||||
|
|
|
||||||
|
|
@ -29,7 +29,6 @@ export class AttachmentModel extends AbstractModel {
|
||||||
this.url = '';
|
this.url = '';
|
||||||
this.mimeIndex = '';
|
this.mimeIndex = '';
|
||||||
this.estimatedSize = 0;
|
this.estimatedSize = 0;
|
||||||
this.framed = false;
|
|
||||||
|
|
||||||
this.addObservables({
|
this.addObservables({
|
||||||
isInline: false,
|
isInline: false,
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,6 @@ import { AppUserStore } from 'Stores/User/App';
|
||||||
import { AccountUserStore } from 'Stores/User/Account';
|
import { AccountUserStore } from 'Stores/User/Account';
|
||||||
import { FolderUserStore } from 'Stores/User/Folder';
|
import { FolderUserStore } from 'Stores/User/Folder';
|
||||||
import { MessagelistUserStore } from 'Stores/User/Messagelist';
|
import { MessagelistUserStore } from 'Stores/User/Messagelist';
|
||||||
import { MessageUserStore } from 'Stores/User/Message';
|
|
||||||
import { ThemeStore } from 'Stores/Theme';
|
import { ThemeStore } from 'Stores/Theme';
|
||||||
|
|
||||||
import { SystemDropDownUserView } from 'View/User/SystemDropDown';
|
import { SystemDropDownUserView } from 'View/User/SystemDropDown';
|
||||||
|
|
@ -83,8 +82,7 @@ export class MailBoxUserScreen extends AbstractScreen {
|
||||||
let message = new MessageModel;
|
let message = new MessageModel;
|
||||||
message.folder = folderHash;
|
message.folder = folderHash;
|
||||||
message.uid = messageUid;
|
message.uid = messageUid;
|
||||||
MessageUserStore.message(message);
|
populateMessageBody(message);
|
||||||
populateMessageBody(MessageUserStore.message());
|
|
||||||
} else {
|
} else {
|
||||||
let threadUid = folderHash.replace(/^.+~(\d+)$/, '$1');
|
let threadUid = folderHash.replace(/^.+~(\d+)$/, '$1');
|
||||||
MessagelistUserStore.threadUid((folderHash === threadUid) ? 0 : pInt(threadUid));
|
MessagelistUserStore.threadUid((folderHash === threadUid) ? 0 : pInt(threadUid));
|
||||||
|
|
|
||||||
|
|
@ -15,8 +15,7 @@ export const MessageUserStore = new class {
|
||||||
loading: false,
|
loading: false,
|
||||||
|
|
||||||
// Cache mail bodies
|
// Cache mail bodies
|
||||||
bodiesDom: null,
|
bodiesDom: null
|
||||||
activeDom: null
|
|
||||||
});
|
});
|
||||||
|
|
||||||
// Subscribers
|
// Subscribers
|
||||||
|
|
@ -30,8 +29,8 @@ export const MessageUserStore = new class {
|
||||||
} else {
|
} else {
|
||||||
AppUserStore.focusedState(Scope.MessageList);
|
AppUserStore.focusedState(Scope.MessageList);
|
||||||
exitFullscreen();
|
exitFullscreen();
|
||||||
this.hideMessageBodies();
|
|
||||||
}
|
}
|
||||||
|
this.hideMessageBodies();
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -160,8 +160,7 @@ export class MailMessageList extends AbstractViewRight {
|
||||||
|
|
||||||
this.selector.on('ItemSelect', message => {
|
this.selector.on('ItemSelect', message => {
|
||||||
if (message) {
|
if (message) {
|
||||||
MessageUserStore.message(MessageModel.fromMessageListItem(message));
|
populateMessageBody(MessageModel.fromMessageListItem(message));
|
||||||
populateMessageBody(MessageUserStore.message());
|
|
||||||
} else {
|
} else {
|
||||||
MessageUserStore.message(null);
|
MessageUserStore.message(null);
|
||||||
}
|
}
|
||||||
|
|
@ -246,8 +245,7 @@ export class MailMessageList extends AbstractViewRight {
|
||||||
let message = new MessageModel;
|
let message = new MessageModel;
|
||||||
message.folder = sFolder;
|
message.folder = sFolder;
|
||||||
message.uid = iUid;
|
message.uid = iUid;
|
||||||
MessageUserStore.message(message);
|
populateMessageBody(message);
|
||||||
populateMessageBody(MessageUserStore.message());
|
|
||||||
} else {
|
} else {
|
||||||
MessageUserStore.message(null);
|
MessageUserStore.message(null);
|
||||||
}
|
}
|
||||||
|
|
@ -679,7 +677,7 @@ export class MailMessageList extends AbstractViewRight {
|
||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
addShortcut('tab,arrowright', '', Scope.MessageList, () => {
|
addShortcut('tab,arrowright', '', Scope.MessageList, () => {
|
||||||
if (MessageUserStore.message()){
|
if (MessageUserStore.message()) {
|
||||||
AppUserStore.focusedState(Scope.MessageView);
|
AppUserStore.focusedState(Scope.MessageView);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -176,8 +176,6 @@ export class MailMessageView extends AbstractViewRight {
|
||||||
|
|
||||||
this.addSubscribables({
|
this.addSubscribables({
|
||||||
message: message => {
|
message: message => {
|
||||||
MessageUserStore.activeDom(null);
|
|
||||||
|
|
||||||
if (message) {
|
if (message) {
|
||||||
if (this.viewHash !== message.hash) {
|
if (this.viewHash !== message.hash) {
|
||||||
this.scrollMessageToTop();
|
this.scrollMessageToTop();
|
||||||
|
|
|
||||||
|
|
@ -22,21 +22,4 @@ class AttachmentCollection extends \MailSo\Base\Collection
|
||||||
assert($oAttachment instanceof Attachment);
|
assert($oAttachment instanceof Attachment);
|
||||||
parent::append($oAttachment, $bToTop);
|
parent::append($oAttachment, $bToTop);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function SpecData() : array
|
|
||||||
{
|
|
||||||
$aResult = array();
|
|
||||||
foreach ($this as $oAttachment) {
|
|
||||||
$aResult[] = array(
|
|
||||||
'@Object' => 'Object/Attachment',
|
|
||||||
'FileName' => $oAttachment->FileName(),
|
|
||||||
'MimeType' => $oAttachment->MimeType(),
|
|
||||||
'IsInline' => $oAttachment->IsInline()
|
|
||||||
);
|
|
||||||
}
|
|
||||||
return array(
|
|
||||||
'@Object' => 'Collection/AttachmentCollection',
|
|
||||||
'@Collection' => $aResult
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -680,7 +680,7 @@ class Message implements \JsonSerializable
|
||||||
'ReadReceipt' => '',
|
'ReadReceipt' => '',
|
||||||
'Autocrypt' => $this->sAutocrypt,
|
'Autocrypt' => $this->sAutocrypt,
|
||||||
|
|
||||||
'Attachments' => $this->oAttachments ? $this->oAttachments->SpecData() : null,
|
'Attachments' => $this->oAttachments,
|
||||||
|
|
||||||
'Flags' => $aFlags,
|
'Flags' => $aFlags,
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -113,12 +113,6 @@ trait Response
|
||||||
return $aResult;
|
return $aResult;
|
||||||
}
|
}
|
||||||
|
|
||||||
private function isFileHasFramedPreview(string $sFileName) : bool
|
|
||||||
{
|
|
||||||
$sExt = \MailSo\Base\Utils::GetFileExtension($sFileName);
|
|
||||||
return \in_array($sExt, array('doc', 'docx', 'xls', 'xlsx', 'ppt', 'pptx'));
|
|
||||||
}
|
|
||||||
|
|
||||||
private function isFileHasThumbnail(string $sFileName) : bool
|
private function isFileHasThumbnail(string $sFileName) : bool
|
||||||
{
|
{
|
||||||
static $aCache = array();
|
static $aCache = array();
|
||||||
|
|
@ -194,6 +188,8 @@ trait Response
|
||||||
'FileName' => (\strlen($sSubject) ? \MailSo\Base\Utils::SecureFileName($sSubject) : 'message-'.$mResult['Uid']) . '.eml'
|
'FileName' => (\strlen($sSubject) ? \MailSo\Base\Utils::SecureFileName($sSubject) : 'message-'.$mResult['Uid']) . '.eml'
|
||||||
));
|
));
|
||||||
|
|
||||||
|
$mResult['Attachments'] = $this->responseObject($mResponse->Attachments(), $sParent);
|
||||||
|
|
||||||
if ('Message' === $sParent)
|
if ('Message' === $sParent)
|
||||||
{
|
{
|
||||||
$mResult['DraftInfo'] = $mResponse->DraftInfo();
|
$mResult['DraftInfo'] = $mResponse->DraftInfo();
|
||||||
|
|
@ -208,8 +204,6 @@ trait Response
|
||||||
$mResult['PgpSigned'] = $mResponse->PgpSigned();
|
$mResult['PgpSigned'] = $mResponse->PgpSigned();
|
||||||
$mResult['PgpEncrypted'] = $mResponse->PgpEncrypted();
|
$mResult['PgpEncrypted'] = $mResponse->PgpEncrypted();
|
||||||
|
|
||||||
$mResult['Attachments'] = $this->responseObject($mResponse->Attachments(), $sParent);
|
|
||||||
|
|
||||||
$mResult['ReadReceipt'] = $mResponse->ReadReceipt();
|
$mResult['ReadReceipt'] = $mResponse->ReadReceipt();
|
||||||
|
|
||||||
if (\strlen($mResult['ReadReceipt']) && !\in_array('$forwarded', $mResult['Flags']))
|
if (\strlen($mResult['ReadReceipt']) && !\in_array('$forwarded', $mResult['Flags']))
|
||||||
|
|
@ -241,7 +235,6 @@ trait Response
|
||||||
if ($mResponse instanceof \MailSo\Mail\Attachment)
|
if ($mResponse instanceof \MailSo\Mail\Attachment)
|
||||||
{
|
{
|
||||||
$mResult = $mResponse->jsonSerialize();
|
$mResult = $mResponse->jsonSerialize();
|
||||||
$mResult['Framed'] = $this->isFileHasFramedPreview($mResult['FileName']);
|
|
||||||
$mResult['IsThumbnail'] = $this->GetCapa(Capa::ATTACHMENT_THUMBNAILS) && $this->isFileHasThumbnail($mResult['FileName']);
|
$mResult['IsThumbnail'] = $this->GetCapa(Capa::ATTACHMENT_THUMBNAILS) && $this->isFileHasThumbnail($mResult['FileName']);
|
||||||
$mResult['Download'] = Utils::EncodeKeyValuesQ(array(
|
$mResult['Download'] = Utils::EncodeKeyValuesQ(array(
|
||||||
'V' => APP_VERSION,
|
'V' => APP_VERSION,
|
||||||
|
|
@ -250,8 +243,7 @@ trait Response
|
||||||
'Uid' => $mResult['Uid'],
|
'Uid' => $mResult['Uid'],
|
||||||
'MimeIndex' => $mResult['MimeIndex'],
|
'MimeIndex' => $mResult['MimeIndex'],
|
||||||
'MimeType' => $mResult['MimeType'],
|
'MimeType' => $mResult['MimeType'],
|
||||||
'FileName' => $mResult['FileName'],
|
'FileName' => $mResult['FileName']
|
||||||
'Framed' => $mResult['Framed']
|
|
||||||
));
|
));
|
||||||
return $mResult;
|
return $mResult;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue