From a189ca94610c6b9f61fa7d9d9455fc3463675f45 Mon Sep 17 00:00:00 2001 From: Akira Ohgaki <akiraohgaki@gmail.com> Date: Sun, 9 Oct 2016 00:51:55 +0900 Subject: [PATCH] Add package class --- src/utility/package.cpp | 104 ++++++++++++++++++++++++++++++++++++++++ src/utility/package.h | 22 +++++++++ xdgurl.pro | 6 ++- 3 files changed, 130 insertions(+), 2 deletions(-) create mode 100644 src/utility/package.cpp create mode 100644 src/utility/package.h diff --git a/src/utility/package.cpp b/src/utility/package.cpp new file mode 100644 index 0000000..b3c5c75 --- /dev/null +++ b/src/utility/package.cpp @@ -0,0 +1,104 @@ +#include <QJsonObject> +#include <QMimeDatabase> +#include <QProcess> + +#include "package.h" + +namespace Utility { + +Package::Package(QObject *parent) : QObject(parent) +{} + +bool Package::uncompressArchive(const QString &path, const QString &targetDir) +{ + QJsonObject archiveTypes; + archiveTypes["application/x-tar"] = QString("tar"); + archiveTypes["application/x-gzip"] = QString("tar"); + archiveTypes["application/gzip"] = QString("tar"); + archiveTypes["application/x-bzip"] = QString("tar"); + archiveTypes["application/x-bzip2"] = QString("tar"); + archiveTypes["application/x-xz"] = QString("tar"); + archiveTypes["application/x-lzma"] = QString("tar"); + archiveTypes["application/x-lzip"] = QString("tar"); + archiveTypes["application/x-compressed-tar"] = QString("tar"); + archiveTypes["application/x-bzip-compressed-tar"] = QString("tar"); + archiveTypes["application/x-bzip2-compressed-tar"] = QString("tar"); + archiveTypes["application/x-xz-compressed-tar"] = QString("tar"); + archiveTypes["application/x-lzma-compressed-tar"] = QString("tar"); + archiveTypes["application/x-lzip-compressed-tar"] = QString("tar"); + archiveTypes["application/zip"] = QString("zip"); + archiveTypes["application/x-7z-compressed"] = QString("7z"); + archiveTypes["application/x-rar"] = QString("rar"); + archiveTypes["application/x-rar-compressed"] = QString("rar"); + + QMimeDatabase mimeDb; + QString mimeType = mimeDb.mimeTypeForFile(path).name(); + + if (archiveTypes.contains(mimeType)) { + QString archiveType = archiveTypes[mimeType].toString(); + + QProcess process; + QString program; + QStringList arguments; + + if (archiveType == "tar") { + program = "tar"; + arguments << "-xf" << path << "-C" << targetDir; + } + else if (archiveType == "zip") { + program = "unzip"; + arguments << "-o" << path << "-d" << targetDir; + } + else if (archiveType == "7z") { + program = "7z"; + arguments << "x" << path << "-o" + targetDir; // No space between -o and directory + } + else if (archiveType == "rar") { + program = "unrar"; + arguments << "e" << path << targetDir; + } + + process.start(program, arguments); + + if (process.waitForFinished()) { + process.waitForReadyRead(); + return true; + } + } + + return false; +} + +bool Package::installPlasmapkg(const QString &path, const QString &type) +{ + QProcess process; + QString program = "plasmapkg2"; // Use plasmapkg2 for now + QStringList arguments; + arguments << "-t" << type << "-i" << path; + + process.start(program, arguments); + + if (process.waitForFinished()) { + return true; + } + + return false; +} + +bool Package::uninstallPlasmapkg(const QString &path, const QString &type) +{ + QProcess process; + QString program = "plasmapkg2"; // Use plasmapkg2 for now + QStringList arguments; + arguments << "-t" << type << "-r" << path; + + process.start(program, arguments); + + if (process.waitForFinished()) { + return true; + } + + return false; +} + +} // namespace Utility diff --git a/src/utility/package.h b/src/utility/package.h new file mode 100644 index 0000000..89bf037 --- /dev/null +++ b/src/utility/package.h @@ -0,0 +1,22 @@ +#ifndef UTILITY_PACKAGE_H +#define UTILITY_PACKAGE_H + +#include <QObject> + +namespace Utility { + +class Package : public QObject +{ + Q_OBJECT + +public: + explicit Package(QObject *parent = 0); + + static bool uncompressArchive(const QString &path, const QString &targetDir); + static bool installPlasmapkg(const QString &path, const QString &type = "plasmoid"); + static bool uninstallPlasmapkg(const QString &path, const QString &type = "plasmoid"); +}; + +} // namespace Utility + +#endif // UTILITY_PACKAGE_H diff --git a/xdgurl.pro b/xdgurl.pro index b1f84a7..096220b 100644 --- a/xdgurl.pro +++ b/xdgurl.pro @@ -20,14 +20,16 @@ SOURCES += \ src/core/network.cpp \ src/handlers/xdgurl.cpp \ src/utility/file.cpp \ - src/utility/json.cpp + src/utility/json.cpp \ + src/utility/package.cpp HEADERS += \ src/core/config.h \ src/core/network.h \ src/handlers/xdgurl.h \ src/utility/file.h \ - src/utility/json.h + src/utility/json.h \ + src/utility/package.h RESOURCES += \ src/configs.qrc \ -- GitLab