empty previewer for emails

This commit is contained in:
Martin Rotter 2022-03-30 14:50:06 +02:00
parent ded2ce26eb
commit 55571a9d44
8 changed files with 128 additions and 11 deletions

View File

@ -295,6 +295,8 @@ set(SOURCES
services/gmail/gui/formeditgmailaccount.h
services/gmail/gui/gmailaccountdetails.cpp
services/gmail/gui/gmailaccountdetails.h
services/gmail/gui/emailpreviewer.h
services/gmail/gui/emailpreviewer.cpp
services/greader/definitions.h
services/greader/greaderentrypoint.cpp
services/greader/greaderentrypoint.h
@ -541,6 +543,7 @@ set(UI_FILES
services/gmail/gui/formaddeditemail.ui
services/gmail/gui/formdownloadattachment.ui
services/gmail/gui/gmailaccountdetails.ui
services/gmail/gui/emailpreviewer.ui
services/greader/gui/greaderaccountdetails.ui
services/newsblur/gui/newsbluraccountdetails.ui
services/owncloud/gui/owncloudaccountdetails.ui

View File

@ -20,6 +20,7 @@
#include <QKeyEvent>
#include <QPainter>
#include <QScrollBar>
#include <QStackedLayout>
#include <QToolBar>
#include <QToolTip>
@ -41,22 +42,28 @@ void MessagePreviewer::createConnections() {
}
MessagePreviewer::MessagePreviewer(QWidget* parent)
: QWidget(parent), m_layout(new QGridLayout(this)), m_toolBar(new QToolBar(this)),
m_separator(nullptr), m_btnLabels(QList<QPair<LabelButton*, QAction*>>()) {
m_msgBrowser = new WebBrowser(nullptr, this);
: QWidget(parent), m_mainLayout(new QGridLayout(this)), m_viewerLayout(new QStackedLayout(this)),
m_toolBar(new QToolBar(this)), m_msgBrowser(new WebBrowser(nullptr, this)), m_separator(nullptr),
m_btnLabels(QList<QPair<LabelButton*, QAction*>>()) {
m_actionSwitchImportance->setCheckable(true);
m_toolBar->setOrientation(Qt::Orientation::Vertical);
// NOTE: To make sure that if we have many labels and short message
// that whole toolbar is visible.
m_toolBar->setSizePolicy(m_toolBar->sizePolicy().horizontalPolicy(), QSizePolicy::Policy::MinimumExpanding);
m_layout->setContentsMargins(3, 3, 3, 3);
m_layout->addWidget(m_msgBrowser, 0, 1, 1, 1);
m_layout->addWidget(m_toolBar, 0, 0, -1, 1);
// This layout holds standard article browser on index 0
// and optional custom browser on index 1.
m_viewerLayout->addWidget(m_msgBrowser);
m_mainLayout->setContentsMargins(3, 3, 3, 3);
m_mainLayout->addLayout(m_viewerLayout, 0, 1, 1, 1);
m_mainLayout->addWidget(m_toolBar, 0, 0, -1, 1);
createConnections();
m_actionSwitchImportance->setCheckable(true);
clear();
}
@ -77,6 +84,7 @@ WebBrowser* MessagePreviewer::webBrowser() const {
void MessagePreviewer::clear() {
updateLabels(true);
ensureDefaultBrowserVisible();
m_msgBrowser->clear(false);
hide();
m_root.clear();
@ -88,6 +96,7 @@ void MessagePreviewer::hideToolbar() {
}
void MessagePreviewer::loadUrl(const QString& url) {
ensureDefaultBrowserVisible();
m_msgBrowser->loadUrl(url);
}
@ -109,10 +118,9 @@ void MessagePreviewer::loadMessage(const Message& message, RootItem* root) {
return it->kind() == RootItem::Kind::Feed && it->customId() == msg_feed_id;
})->toFeed();
// TODO: tady místo na otevření skrze custom previewer, pokud
// ho root má.
if (feed != nullptr && feed->openArticlesDirectly() && !m_message.m_url.isEmpty()) {
ensureDefaultBrowserVisible();
m_msgBrowser->setVerticalScrollBarPosition(0.0);
m_msgBrowser->loadUrl(m_message.m_url);
}
@ -120,9 +128,24 @@ void MessagePreviewer::loadMessage(const Message& message, RootItem* root) {
CustomMessagePreviewer* custom_previewer = root->getParentServiceRoot()->customMessagePreviewer();
if (custom_previewer != nullptr) {
auto* current_custom_previewer = m_viewerLayout->widget(1);
if (current_custom_previewer != nullptr) {
if (current_custom_previewer != custom_previewer) {
m_viewerLayout->removeWidget(current_custom_previewer);
m_viewerLayout->addWidget(custom_previewer);
}
}
else {
m_viewerLayout->addWidget(custom_previewer);
}
m_viewerLayout->setCurrentIndex(1);
custom_previewer->loadMessage(message, m_root);
}
else {
ensureDefaultBrowserVisible();
m_msgBrowser->loadMessages({ message }, m_root);
}
}
@ -249,6 +272,14 @@ void MessagePreviewer::updateLabels(bool only_clear) {
}
}
void MessagePreviewer::ensureDefaultBrowserVisible() {
if (m_viewerLayout->count() > 1) {
m_viewerLayout->removeWidget(m_viewerLayout->widget(1));
}
m_viewerLayout->setCurrentIndex(0);
}
LabelButton::LabelButton(QWidget* parent) : QToolButton(parent), m_label(nullptr) {}
Label* LabelButton::label() const {

View File

@ -12,6 +12,7 @@
#include <QPointer>
class QGridLayout;
class QStackedLayout;
class QToolBar;
class WebBrowser;
@ -60,8 +61,10 @@ class MessagePreviewer : public QWidget {
void createConnections();
void updateButtons();
void updateLabels(bool only_clear);
void ensureDefaultBrowserVisible();
QGridLayout* m_layout;
QGridLayout* m_mainLayout;
QStackedLayout* m_viewerLayout;
QToolBar* m_toolBar;
WebBrowser* m_msgBrowser;
Message m_message;

View File

@ -12,6 +12,7 @@
#include "services/gmail/definitions.h"
#include "services/gmail/gmailentrypoint.h"
#include "services/gmail/gmailnetworkfactory.h"
#include "services/gmail/gui/emailpreviewer.h"
#include "services/gmail/gui/formaddeditemail.h"
#include "services/gmail/gui/formdownloadattachment.h"
#include "services/gmail/gui/formeditgmailaccount.h"
@ -97,6 +98,14 @@ bool GmailServiceRoot::wantsBaggedIdsOfExistingMessages() const {
return true;
}
CustomMessagePreviewer* GmailServiceRoot::customMessagePreviewer() {
if (m_emailPreview.isNull()) {
m_emailPreview.reset(new EmailPreviewer());
}
return m_emailPreview.data();
}
bool GmailServiceRoot::downloadAttachmentOnMyOwn(const QUrl& url) const {
QString str_url = url.toString();
QString attachment_id = str_url.mid(str_url.indexOf(QL1C('?')) + 1);

View File

@ -6,6 +6,8 @@
#include "services/abstract/cacheforserviceroot.h"
#include "services/abstract/serviceroot.h"
#include "services/gmail/gui/emailpreviewer.h"
class GmailNetworkFactory;
class GmailServiceRoot : public ServiceRoot, public CacheForServiceRoot {
@ -35,6 +37,7 @@ class GmailServiceRoot : public ServiceRoot, public CacheForServiceRoot {
const QHash<ServiceRoot::BagOfMessages, QStringList>& stated_messages,
const QHash<QString, QStringList>& tagged_messages);
virtual bool wantsBaggedIdsOfExistingMessages() const;
virtual CustomMessagePreviewer* customMessagePreviewer();
protected:
virtual RootItem* obtainNewTreeForSyncIn() const;
@ -47,6 +50,7 @@ class GmailServiceRoot : public ServiceRoot, public CacheForServiceRoot {
void updateTitle();
private:
QScopedPointer<EmailPreviewer> m_emailPreview;
GmailNetworkFactory* m_network;
QAction* m_actionReply;
Message m_replyToMessage;

View File

@ -0,0 +1,13 @@
#include "services/gmail/gui/emailpreviewer.h"
EmailPreviewer::EmailPreviewer(QWidget* parent) : CustomMessagePreviewer(parent) {
m_ui.setupUi(this);
}
EmailPreviewer::~EmailPreviewer() {
qDebugNN << LOGSEC_GMAIL << "Email previewer destroyed.";
}
void EmailPreviewer::clear() {}
void EmailPreviewer::loadMessage(const Message& msg, RootItem* selected_item) {}

View File

@ -0,0 +1,22 @@
#ifndef EMAILPREVIEWER_H
#define EMAILPREVIEWER_H
#include "services/abstract/gui/custommessagepreviewer.h"
#include "ui_emailpreviewer.h"
class EmailPreviewer : public CustomMessagePreviewer {
Q_OBJECT
public:
explicit EmailPreviewer(QWidget* parent = nullptr);
virtual ~EmailPreviewer();
virtual void clear();
virtual void loadMessage(const Message& msg, RootItem* selected_item);
private:
Ui::EmailPreviewer m_ui;
};
#endif // EMAILPREVIEWER_H

View File

@ -0,0 +1,32 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>EmailPreviewer</class>
<widget class="QWidget" name="EmailPreviewer">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>300</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<widget class="QLabel" name="label">
<property name="geometry">
<rect>
<x>80</x>
<y>90</y>
<width>49</width>
<height>16</height>
</rect>
</property>
<property name="text">
<string>test</string>
</property>
</widget>
</widget>
<resources/>
<connections/>
</ui>