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