File indexing completed on 2024-04-28 15:51:57

0001 /*
0002     SPDX-FileCopyrightText: 2018 Chinmoy Ranjan Pradhan <chinmoyrp65@gmail.com>
0003 
0004     SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #include "revisionviewer.h"
0008 
0009 #include <KLocalizedString>
0010 #include <KMessageBox>
0011 
0012 #include <QDialogButtonBox>
0013 #include <QFileDialog>
0014 #include <QLayout>
0015 #include <QMimeDatabase>
0016 #include <QMimeType>
0017 #include <QPushButton>
0018 #include <QStandardPaths>
0019 #include <QTemporaryFile>
0020 
0021 #include "fileprinterpreview.h"
0022 
0023 class RevisionPreview : public Okular::FilePrinterPreview
0024 {
0025     Q_OBJECT
0026 
0027 public:
0028     explicit RevisionPreview(const QString &revisionFile, QWidget *parent = nullptr);
0029 
0030 private Q_SLOTS:
0031     void doSave();
0032 
0033 private:
0034     QString m_filename;
0035 };
0036 
0037 RevisionPreview::RevisionPreview(const QString &revisionFile, QWidget *parent)
0038     : FilePrinterPreview(revisionFile, parent)
0039     , m_filename(revisionFile)
0040 {
0041     setWindowTitle(i18n("Revision Preview"));
0042 
0043     QDialogButtonBox *btnBox = findChild<QDialogButtonBox *>();
0044     auto saveBtn = new QPushButton(i18n("Save As"), this);
0045     btnBox->addButton(saveBtn, QDialogButtonBox::ActionRole);
0046     connect(saveBtn, &QPushButton::clicked, this, &RevisionPreview::doSave);
0047 }
0048 
0049 void RevisionPreview::doSave()
0050 {
0051     QMimeDatabase db;
0052     const QMimeType mime = db.mimeTypeForFile(m_filename);
0053     const QString caption = i18n("Where do you want to save this revision?");
0054     const QString path = QFileDialog::getSaveFileName(this, caption, QStringLiteral("Revision"), mime.filterString());
0055     if (!path.isEmpty() && !QFile::copy(m_filename, path)) {
0056         KMessageBox::error(this, i18n("Could not save file %1.", path));
0057         return;
0058     }
0059 }
0060 
0061 RevisionViewer::RevisionViewer(const QByteArray &revisionData, QWidget *parent)
0062     : QObject(parent)
0063     , m_parent(parent)
0064     , m_revisionData(revisionData)
0065 {
0066 }
0067 
0068 void RevisionViewer::viewRevision()
0069 {
0070     QMimeDatabase db;
0071     const QMimeType mime = db.mimeTypeForData(m_revisionData);
0072     const QString tempDir = QStandardPaths::writableLocation(QStandardPaths::TempLocation);
0073     QTemporaryFile tf(tempDir + QStringLiteral("/okular_revision_XXXXXX.%1").arg(mime.suffixes().constFirst()));
0074     if (!tf.open()) {
0075         KMessageBox::error(m_parent, i18n("Could not view revision."));
0076         return;
0077     }
0078     tf.write(m_revisionData);
0079     RevisionPreview previewdlg(tf.fileName(), m_parent);
0080     previewdlg.exec();
0081 }
0082 
0083 #include "revisionviewer.moc"