Put message in URL for autoload regarding issue #100 and Nextcloud unified search #96

This commit is contained in:
the-djmaze 2022-10-14 10:20:41 +02:00
parent c5d1e5e9c6
commit f649ea05fd
4 changed files with 51 additions and 19 deletions

View file

@ -113,19 +113,24 @@ export const
* @param {number=} threadUid = 0 * @param {number=} threadUid = 0
* @returns {string} * @returns {string}
*/ */
mailBox = (folder, page, search, threadUid) => { mailBox = (folder, page, search, threadUid, messageUid) => {
let result = [HASH_PREFIX + 'mailbox']; let result = [HASH_PREFIX + 'mailbox'];
if (folder) { if (folder) {
result.push(folder + (threadUid ? '~' + threadUid : '')); result.push(folder + (threadUid ? '~' + threadUid : ''));
} }
page = pInt(page, 1); if (messageUid) {
if (1 < page) { result.push('m' + messageUid);
result.push('p' + page); } else {
page = pInt(page, 1);
if (1 < page) {
result.push('p' + page);
}
search && result.push(encodeURI(search));
} }
search && result.push(encodeURI(search));
return result.join('/'); return result.join('/');
}; },
mailBoxMessage = (folder, messageUid) => mailBox(folder, 1, '', 0, pInt(messageUid));

View file

@ -11,6 +11,7 @@ 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';
@ -20,6 +21,9 @@ import { MailMessageView } from 'View/User/MailBox/MessageView';
import { AbstractScreen } from 'Knoin/AbstractScreen'; import { AbstractScreen } from 'Knoin/AbstractScreen';
import { MessageModel } from 'Model/Message';
import { populateMessageBody } from 'Common/UtilsUser';
export class MailBoxUserScreen extends AbstractScreen { export class MailBoxUserScreen extends AbstractScreen {
constructor() { constructor() {
var styleSheet = createElement('style'); var styleSheet = createElement('style');
@ -69,17 +73,22 @@ export class MailBoxUserScreen extends AbstractScreen {
* @param {string} search * @param {string} search
* @returns {void} * @returns {void}
*/ */
onRoute(folderHash, page, search) { onRoute(folderHash, page, search, messageUid) {
const folder = getFolderFromCacheList(getFolderFullName(folderHash.replace(/~([\d]+)$/, ''))); const folder = getFolderFromCacheList(getFolderFullName(folderHash.replace(/~([\d]+)$/, '')));
if (folder) { if (folder) {
let threadUid = folderHash.replace(/^.+~(\d+)$/, '$1');
FolderUserStore.currentFolder(folder); FolderUserStore.currentFolder(folder);
MessagelistUserStore.page(1 > page ? 1 : page); MessagelistUserStore.page(1 > page ? 1 : page);
MessagelistUserStore.listSearch(search); MessagelistUserStore.listSearch(search);
MessagelistUserStore.threadUid((folderHash === threadUid) ? 0 : pInt(threadUid)); if (messageUid) {
let message = new MessageModel;
message.folder = folderHash;
message.uid = messageUid;
MessageUserStore.message(message);
populateMessageBody(MessageUserStore.message());
} else {
let threadUid = folderHash.replace(/^.+~(\d+)$/, '$1');
MessagelistUserStore.threadUid((folderHash === threadUid) ? 0 : pInt(threadUid));
}
MessagelistUserStore.reload(); MessagelistUserStore.reload();
} }
} }
@ -145,6 +154,10 @@ export class MailBoxUserScreen extends AbstractScreen {
[/^([a-zA-Z0-9.~_-]+)\/(.+)\/?$/, { normalize_: (request, vals) => [/^([a-zA-Z0-9.~_-]+)\/(.+)\/?$/, { normalize_: (request, vals) =>
[folder(request, vals), 1, decodeURI(pString(vals[1]))] [folder(request, vals), 1, decodeURI(pString(vals[1]))]
}], }],
// Message: {folder}/m{uid}(/{search})?
[/^([a-zA-Z0-9.~_-]+)\/m([1-9][0-9]*)(?:\/(.+))?$/, { normalize_: (request, vals) =>
[folder(request, vals), 1, pString(vals[2]), pString(vals[1])]
}],
// Page: {folder}/p{int}(/{search})? // Page: {folder}/p{int}(/{search})?
[/^([a-zA-Z0-9.~_-]+)\/p([1-9][0-9]*)(?:\/(.+))?$/, { normalize_: fNormS }] [/^([a-zA-Z0-9.~_-]+)\/p([1-9][0-9]*)(?:\/(.+))?$/, { normalize_: fNormS }]
]; ];

View file

@ -200,10 +200,10 @@ export class MailMessageList extends AbstractViewRight {
hasher.setHash(mailBox(sFolder)); hasher.setHash(mailBox(sFolder));
} }
if (sFolder && iUid) { if (sFolder && iUid) {
MessageUserStore.message(MessageModel.fromMessageListItem(null)); let message = new MessageModel;
MessageUserStore.message().folder = sFolder; message.folder = sFolder;
MessageUserStore.message().uid = iUid; message.uid = iUid;
MessageUserStore.message(message);
populateMessageBody(MessageUserStore.message()); populateMessageBody(MessageUserStore.message());
} else { } else {
MessageUserStore.message(null); MessageUserStore.message(null);

View file

@ -20,6 +20,18 @@ use OCP\Search\SearchResultEntry;
*/ */
class Provider implements IProvider class Provider implements IProvider
{ {
/** @var IL10N */
private $l10n;
/** @var IURLGenerator */
private $urlGenerator;
public function __construct(IL10N $l10n, IURLGenerator $urlGenerator)
{
$this->l10n = $l10n;
$this->urlGenerator = $urlGenerator;
}
public function getId(): string public function getId(): string
{ {
return Application::APP_ID; return Application::APP_ID;
@ -85,8 +97,10 @@ class Provider implements IProvider
$Message->Subject(), $Message->Subject(),
// subline // subline
$Message->From()->ToString(), $Message->From()->ToString(),
// resourceUrl // resourceUrl /index.php/apps/snappymail/#/mailbox/INBOX/p2/text=an&unseen
'', // TODO $this->urlGenerator->linkToRouteAbsolute(), $this->urlGenerator->linkToRoute('snappymail.page.index')
. '#/mailbox/INBOX/m' . $Message->Uid()
. '/' . \rawurlencode($oParams->sSearch),
// icon // icon
'icon-mail', 'icon-mail',
// rounded // rounded