1 /*
2 SPDX-FileCopyrightText: 2018 Chinmoy Ranjan Pradhan <chinmoyrp65@gmail.com>
3
4 SPDX-License-Identifier: GPL-2.0-or-later
5 */
6
7 #include "revisionviewer.h"
8
9 #include <KLocalizedString>
10 #include <KMessageBox>
11
12 #include <QDialogButtonBox>
13 #include <QFileDialog>
14 #include <QLayout>
15 #include <QMimeDatabase>
16 #include <QMimeType>
17 #include <QPushButton>
18 #include <QStandardPaths>
19 #include <QTemporaryFile>
20
21 #include "fileprinterpreview.h"
22
23 class RevisionPreview : public Okular::FilePrinterPreview
24 {
25 Q_OBJECT
26
27 public:
28 explicit RevisionPreview(const QString &revisionFile, QWidget *parent = nullptr);
29
30 private Q_SLOTS:
31 void doSave();
32
33 private:
34 QString m_filename;
35 };
36
RevisionPreview(const QString & revisionFile,QWidget * parent)37 RevisionPreview::RevisionPreview(const QString &revisionFile, QWidget *parent)
38 : FilePrinterPreview(revisionFile, parent)
39 , m_filename(revisionFile)
40 {
41 setWindowTitle(i18n("Revision Preview"));
42
43 QDialogButtonBox *btnBox = findChild<QDialogButtonBox *>();
44 auto saveBtn = new QPushButton(i18n("Save As"), this);
45 btnBox->addButton(saveBtn, QDialogButtonBox::ActionRole);
46 connect(saveBtn, &QPushButton::clicked, this, &RevisionPreview::doSave);
47 }
48
doSave()49 void RevisionPreview::doSave()
50 {
51 QMimeDatabase db;
52 const QMimeType mime = db.mimeTypeForFile(m_filename);
53 const QString caption = i18n("Where do you want to save this revision?");
54 const QString path = QFileDialog::getSaveFileName(this, caption, QStringLiteral("Revision"), mime.filterString());
55 if (!path.isEmpty() && !QFile::copy(m_filename, path)) {
56 KMessageBox::error(this, i18n("Could not save file %1.", path));
57 return;
58 }
59 }
60
RevisionViewer(const QByteArray & revisionData,QWidget * parent)61 RevisionViewer::RevisionViewer(const QByteArray &revisionData, QWidget *parent)
62 : QObject(parent)
63 , m_parent(parent)
64 , m_revisionData(revisionData)
65 {
66 }
67
viewRevision()68 void RevisionViewer::viewRevision()
69 {
70 QMimeDatabase db;
71 const QMimeType mime = db.mimeTypeForData(m_revisionData);
72 const QString tempDir = QStandardPaths::writableLocation(QStandardPaths::TempLocation);
73 QTemporaryFile tf(tempDir + QStringLiteral("/okular_revision_XXXXXX.%1").arg(mime.suffixes().constFirst()));
74 if (!tf.open()) {
75 KMessageBox::error(m_parent, i18n("Could not view revision."));
76 return;
77 }
78 tf.write(m_revisionData);
79 RevisionPreview previewdlg(tf.fileName(), m_parent);
80 previewdlg.exec();
81 }
82
83 #include "revisionviewer.moc"
84