File indexing completed on 2024-12-01 04:37:41

0001 /*
0002     SPDX-FileCopyrightText: 2024 Ralf Habacker  ralf.habacker @freenet.de
0003 
0004     This file is part of libalkimia.
0005 
0006     SPDX-License-Identifier: LGPL-2.1-or-later
0007 */
0008 
0009 #include "alkonlinequoteuploaddialog.h"
0010 
0011 #include "ui_alkonlinequoteuploaddialog.h"
0012 #include "alkonlinequotesource.h"
0013 #include "alknewstuffstore.h"
0014 
0015 #include <QApplication>
0016 #include <QClipboard>
0017 #include <QDate>
0018 #include <QDesktopServices>
0019 #include <QDir>
0020 #include <QFileInfo>
0021 #include <QProcess>
0022 #include <QTimer>
0023 
0024 static const char *packager = "/usr/bin/7za";
0025 
0026 
0027 AlkOnlineQuoteUploadDialog::AlkOnlineQuoteUploadDialog(const AlkOnlineQuoteSource &source, bool autoGenerate, QWidget *parent)
0028     : QDialog(parent)
0029     , ui(new Ui::AlkOnlineQuoteUploadDialog)
0030     , m_source(source)
0031 {
0032     ui->setupUi(this);
0033     ui->m_editSourceName->setText(source.name());
0034     ui->m_editVersion->setText(QDate::currentDate().toString(Qt::ISODate));
0035     ui->m_packageLabel->setVisible(false);
0036     ui->m_failedLabel->setVisible(false);
0037     QUrl packageUrl;
0038     QString id = m_source.profile()->GHNSId(source.name());
0039     if (!id.isEmpty()) {
0040         m_storePackageEditUrl = QUrl(AlkNewStuffStore::packageBaseUrl + id + AlkNewStuffStore::packageEditSuffix);
0041         packageUrl = QUrl(AlkNewStuffStore::packageBaseUrl + id);
0042         if (autoGenerate) {
0043             slotCreatePackage();
0044             slotCopyToClipboard();
0045             slotEnterStoreAndClose();
0046             QTimer::singleShot(0, this, SLOT(close()));
0047         }
0048     } else {
0049         m_storePackageEditUrl = QUrl(AlkNewStuffStore::newPackageUrl);
0050     }
0051     ui->m_storePackageEditUrl->setText(QString("<a href=\"%1\">%1</a>").arg(m_storePackageEditUrl.toString()));
0052     ui->m_storePackageUrl->setText(QString("<a href=\"%1\">%1</a>").arg(packageUrl.toString()));
0053 
0054     connect(ui->m_createButton, SIGNAL(clicked()), this, SLOT(slotCreatePackage()));
0055     connect(ui->m_enterStoreButtonAndClose, SIGNAL(clicked()), this, SLOT(slotEnterStoreAndClose()));
0056     connect(ui->m_copyToClipboardButton, SIGNAL(clicked()), this, SLOT(slotCopyToClipboard()));
0057     connect(ui->m_closeButton, SIGNAL(clicked()), this, SLOT(accept()));
0058 }
0059 
0060 AlkOnlineQuoteUploadDialog::~AlkOnlineQuoteUploadDialog()
0061 {
0062     delete ui;
0063 }
0064 
0065 bool AlkOnlineQuoteUploadDialog::isSupported()
0066 {
0067     QFileInfo fi(packager);
0068     return fi.exists();
0069 }
0070 
0071 bool AlkOnlineQuoteUploadDialog::compressFile(const QString &outFile, const QString &inFile)
0072 {
0073     QProcess zip;
0074     QStringList args;
0075     args << "a"
0076          << outFile
0077          << inFile;
0078 
0079     zip.start(packager, args);
0080     if (!zip.waitForStarted())
0081         return false;
0082 
0083     if (!zip.waitForFinished())
0084         return false;
0085 
0086     return true;
0087 }
0088 
0089 void AlkOnlineQuoteUploadDialog::slotCreatePackage()
0090 {
0091     QString tempPath = QDir::tempPath();
0092     QFileInfo inFile(m_source.ghnsWriteFileName());
0093     QFileInfo outFile(tempPath + "/" + inFile.baseName() + "-" + ui->m_editVersion->text() + ".zip");
0094     ui->m_copyToClipboardButton->setEnabled(true);
0095     m_file = outFile.absoluteFilePath();
0096     ui->m_fileLabel->setText(QString("<a href=\"%1\">%1</a>").arg(m_file.toString()));
0097 
0098     if (!compressFile(outFile.absoluteFilePath(), inFile.absoluteFilePath())) {
0099         ui->m_failedLabel->setVisible(true);
0100         return;
0101     }
0102 
0103     ui->m_packageLabel->setVisible(true);
0104     ui->m_createButton->setEnabled(false);
0105     ui->m_closeButton->setEnabled(true);
0106 }
0107 
0108 void AlkOnlineQuoteUploadDialog::slotCopyToClipboard()
0109 {
0110     QClipboard *clipboard = QApplication::clipboard();
0111     clipboard->setText(m_file.toString());
0112 }
0113 
0114 void AlkOnlineQuoteUploadDialog::slotEnterStoreAndClose()
0115 {
0116     QDesktopServices::openUrl(m_storePackageEditUrl);
0117     accept();
0118 }