Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • akiraohgaki/ocs-manager
  • dfn2/ocs-manager
  • azubieta/ocs-manager
  • rws77/ocs-manager
4 results
Show changes
Commits on Source (78)
Showing
with 323 additions and 178 deletions
stages:
- build
appimage:
stage: build
image: ubuntu:14.04
only:
- master
- /^release\-.+/
script:
- ./scripts/package appimage
artifacts:
paths:
- build_*/ocs-manager*.AppImage
expire_in: 2 days
dist: trusty
sudo: required
services:
- docker
branches:
only:
- master
- /^release\-.+/
script:
- mntdir='/mnt/ocs-manager'
- docker run --rm -v $(pwd):${mntdir} ubuntu:14.04 /bin/bash -c "${mntdir}/scripts/package ci_appimage"
- cat transfer.log
# ocs-manager
[![License: GPL v3](https://img.shields.io/badge/License-GPL%20v3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0)
[![Build Status](https://travis-ci.org/opendesktop/ocs-manager.svg?branch=master)](https://travis-ci.org/opendesktop/ocs-manager)
A tool to handle item installation from OCS provider, file management, and apply themes.
Copyright: 2017-2018, Opendesktop.org
Copyright: 2017-2019, Opendesktop.org
License: GPL-3+
......@@ -29,7 +29,7 @@ RESOURCES += $${PWD}/configs/configs.qrc
INCLUDEPATH += $${PWD}/src
unix:!ios:!android {
contains(DEFINES, APP_DESKTOP) {
QT += dbus
HEADERS += \
......
{
"id": "ocs-manager",
"name": "ocs-manager",
"version": "0.6.0",
"version": "0.8.1",
"organization": "Opendesktop.org",
"domain": "org.opendesktop.ocs-manager",
"icon": ":/desktop/ocs-manager.svg",
......@@ -9,5 +9,5 @@
"license": "GPL-3+",
"author": "Opendesktop.org",
"contact": "contact@opendesktop.org",
"homepage": "https://github.com/opendesktop/ocs-manager"
"homepage": "https://git.opendesktop.org/akiraohgaki/ocs-manager"
}
{
"bin": {
"name": "Software",
"destination": "$HOME/.local/bin",
"destination": "",
"xdg_destination": "$HOME/.local/bin",
"generic_destination": "$APP_DATA/bin"
},
"downloads": {
"name": "Downloads",
"destination": "$XDG_DOWNLOAD_DIR",
"destination": "",
"xdg_destination": "$XDG_DOWNLOAD_DIR",
"generic_destination": "$APP_DATA/downloads"
},
"documents": {
"name": "Documents",
"destination": "$XDG_DOCUMENTS_DIR",
"destination": "",
"xdg_destination": "$XDG_DOCUMENTS_DIR",
"generic_destination": "$APP_DATA/documents"
},
"pictures": {
"name": "Pictures",
"destination": "$XDG_PICTURES_DIR",
"destination": "",
"xdg_destination": "$XDG_PICTURES_DIR",
"generic_destination": "$APP_DATA/pictures"
},
"music": {
"name": "Music",
"destination": "$XDG_MUSIC_DIR",
"destination": "",
"xdg_destination": "$XDG_MUSIC_DIR",
"generic_destination": "$APP_DATA/music"
},
"videos": {
"name": "Videos",
"destination": "$XDG_VIDEOS_DIR",
"destination": "",
"xdg_destination": "$XDG_VIDEOS_DIR",
"generic_destination": "$APP_DATA/videos"
},
"wallpapers": {
"name": "Wallpapers",
"destination": "$XDG_DATA_HOME/wallpapers",
"destination": "",
"xdg_destination": "$XDG_DATA_HOME/wallpapers",
"generic_destination": "$APP_DATA/wallpapers"
},
"fonts": {
"name": "Fonts",
"destination": "$HOME/.fonts",
"destination": "",
"xdg_destination": "$HOME/.fonts",
"generic_destination": "$APP_DATA/fonts"
},
"cursors": {
"name": "Cursors",
"destination": "$HOME/.icons",
"destination": "",
"xdg_destination": "$HOME/.icons",
"generic_destination": "$APP_DATA/cursors"
},
"icons": {
"name": "Icons",
"destination": "$XDG_DATA_HOME/icons",
"destination": "",
"xdg_destination": "$XDG_DATA_HOME/icons",
"generic_destination": "$APP_DATA/icons"
},
"emoticons": {
"name": "Emoticons",
"destination": "$XDG_DATA_HOME/emoticons",
"destination": "",
"xdg_destination": "$XDG_DATA_HOME/emoticons",
"generic_destination": "$APP_DATA/emoticons"
},
"themes": {
"name": "Desktop Themes",
"destination": "$HOME/.themes",
"destination": "",
"xdg_destination": "$HOME/.themes",
"generic_destination": "$APP_DATA/themes"
},
"emerald_themes": {
"name": "Emerald Themes",
"destination": "$HOME/.emerald/themes",
"destination": "",
"xdg_destination": "$HOME/.emerald/themes",
"generic_destination": "$APP_DATA/emerald_themes"
},
"enlightenment_themes": {
"name": "Enlightenment Themes",
"destination": "$HOME/.e/e/themes",
"destination": "",
"xdg_destination": "$HOME/.e/e/themes",
"generic_destination": "$APP_DATA/enlightenment_themes"
},
"enlightenment_backgrounds": {
"name": "Enlightenment Backgrounds",
"destination": "$HOME/.e/e/backgrounds",
"destination": "",
"xdg_destination": "$HOME/.e/e/backgrounds",
"generic_destination": "$APP_DATA/enlightenment_backgrounds"
},
"fluxbox_styles": {
"name": "Fluxbox Styles",
"destination": "$HOME/.fluxbox/styles",
"destination": "",
"xdg_destination": "$HOME/.fluxbox/styles",
"generic_destination": "$APP_DATA/fluxbox_styles"
},
"pekwm_themes": {
"name": "PekWM Themes",
"destination": "$HOME/.pekwm/themes",
"destination": "",
"xdg_destination": "$HOME/.pekwm/themes",
"generic_destination": "$APP_DATA/pekwm_themes"
},
"icewm_themes": {
"name": "IceWM Themes",
"destination": "$HOME/.icewm/themes",
"destination": "",
"xdg_destination": "$HOME/.icewm/themes",
"generic_destination": "$APP_DATA/icewm_themes"
},
"plasma_plasmoids": {
"name": "Plasma Plasmoids",
"destination": "$XDG_DATA_HOME/plasma/plasmoids",
"destination": "",
"xdg_destination": "$XDG_DATA_HOME/plasma/plasmoids",
"generic_destination": "$APP_DATA/plasma_plasmoids"
},
"plasma_look_and_feel": {
"name": "Plasma Look and Feel",
"destination": "$XDG_DATA_HOME/plasma/look-and-feel",
"destination": "",
"xdg_destination": "$XDG_DATA_HOME/plasma/look-and-feel",
"generic_destination": "$APP_DATA/plasma_look_and_feel"
},
"plasma_desktopthemes": {
"name": "Plasma Desktop Themes",
"destination": "$XDG_DATA_HOME/plasma/desktoptheme",
"destination": "",
"xdg_destination": "$XDG_DATA_HOME/plasma/desktoptheme",
"generic_destination": "$APP_DATA/plasma_desktopthemes"
},
"kwin_effects": {
"name": "KWin Effects",
"destination": "$XDG_DATA_HOME/kwin/effects",
"destination": "",
"xdg_destination": "$XDG_DATA_HOME/kwin/effects",
"generic_destination": "$APP_DATA/kwin_effects"
},
"kwin_scripts": {
"name": "KWin Scripts",
"destination": "$XDG_DATA_HOME/kwin/scripts",
"destination": "",
"xdg_destination": "$XDG_DATA_HOME/kwin/scripts",
"generic_destination": "$APP_DATA/kwin_scripts"
},
"kwin_tabbox": {
"name": "KWin Window Switcher",
"destination": "$XDG_DATA_HOME/kwin/tabbox",
"destination": "",
"xdg_destination": "$XDG_DATA_HOME/kwin/tabbox",
"generic_destination": "$APP_DATA/kwin_tabbox"
},
"aurorae_themes": {
"name": "Aurorae Themes",
"destination": "$XDG_DATA_HOME/aurorae/themes",
"destination": "",
"xdg_destination": "$XDG_DATA_HOME/aurorae/themes",
"generic_destination": "$APP_DATA/aurorae_themes"
},
"dekorator_themes": {
"name": "deKorator Themes",
"destination": "$XDG_DATA_HOME/deKorator/themes",
"destination": "",
"xdg_destination": "$XDG_DATA_HOME/deKorator/themes",
"generic_destination": "$APP_DATA/dekorator_themes"
},
"qtcurve": {
"name": "QtCurve Themes",
"destination": "$XDG_DATA_HOME/QtCurve",
"destination": "",
"xdg_destination": "$XDG_DATA_HOME/QtCurve",
"generic_destination": "$APP_DATA/qtcurve"
},
"color_schemes": {
"name": "KDE Color Schemes",
"destination": "$XDG_DATA_HOME/color-schemes",
"destination": "",
"xdg_destination": "$XDG_DATA_HOME/color-schemes",
"generic_destination": "$APP_DATA/color_schemes"
},
"gnome_shell_extensions": {
"name": "Gnome Shell Extensions",
"destination": "$XDG_DATA_HOME/gnome-shell/extensions",
"destination": "",
"xdg_destination": "$XDG_DATA_HOME/gnome-shell/extensions",
"generic_destination": "$APP_DATA/gnome_shell_extensions"
},
"cinnamon_applets": {
"name": "Cinnamon Applets",
"destination": "$XDG_DATA_HOME/cinnamon/applets",
"destination": "",
"xdg_destination": "$XDG_DATA_HOME/cinnamon/applets",
"generic_destination": "$APP_DATA/cinnamon_applets"
},
"cinnamon_desklets": {
"name": "Cinnamon Desklets",
"destination": "$XDG_DATA_HOME/cinnamon/desklets",
"destination": "",
"xdg_destination": "$XDG_DATA_HOME/cinnamon/desklets",
"generic_destination": "$APP_DATA/cinnamon_desklets"
},
"cinnamon_extensions": {
"name": "Cinnamon Extensions",
"destination": "$XDG_DATA_HOME/cinnamon/extensions",
"destination": "",
"xdg_destination": "$XDG_DATA_HOME/cinnamon/extensions",
"generic_destination": "$APP_DATA/cinnamon_extensions"
},
"nautilus_scripts": {
"name": "Nautilus Scripts",
"destination": "$XDG_DATA_HOME/nautilus/scripts",
"destination": "",
"xdg_destination": "$XDG_DATA_HOME/nautilus/scripts",
"generic_destination": "$APP_DATA/nautilus_scripts"
},
"amarok_scripts": {
"name": "Amarok Scripts",
"destination": "$KDEHOME/share/apps/amarok/scripts",
"destination": "",
"xdg_destination": "$KDEHOME/share/apps/amarok/scripts",
"generic_destination": "$APP_DATA/amarok_scripts"
},
"yakuake_skins": {
"name": "Yakuake Skins",
"destination": "$KDEHOME/share/apps/yakuake/skins",
"destination": "",
"xdg_destination": "$KDEHOME/share/apps/yakuake/skins",
"generic_destination": "$APP_DATA/yakuake_skins"
},
"cairo_clock_themes": {
"name": "Cairo-Clock Themes",
"destination": "$HOME/.cairo-clock/themes",
"destination": "",
"xdg_destination": "$HOME/.cairo-clock/themes",
"generic_destination": "$APP_DATA/cairo_clock_themes"
},
"books": {
"name": "Books",
"destination": "$APP_DATA/books",
"destination": "",
"xdg_destination": "$APP_DATA/books",
"generic_destination": "$APP_DATA/books"
},
"comics": {
"name": "Comics",
"destination": "$APP_DATA/comics",
"destination": "",
"xdg_destination": "$APP_DATA/comics",
"generic_destination": "$APP_DATA/comics"
}
}
......@@ -207,8 +207,15 @@ void ConfigHandler::importAppConfigInstallTypes()
auto installTypes = appConfig_.get("install_types");
for (const auto &key : installTypes.keys()) {
auto installtype = installTypes[key].toObject();
installtype["destination"] = convertPathString(installtype["destination"].toString());
installtype["generic_destination"] = convertPathString(installtype["generic_destination"].toString());
auto xdgDestination = convertPathString(installtype["xdg_destination"].toString());
auto genericDestination = convertPathString(installtype["generic_destination"].toString());
installtype["xdg_destination"] = xdgDestination;
installtype["generic_destination"] = genericDestination;
#ifdef APP_DESKTOP
installtype["destination"] = xdgDestination;
#else
installtype["destination"] = genericDestination;
#endif
installTypes[key] = installtype;
}
auto installTypesAlias = appConfig_.get("install_types_alias");
......
......@@ -2,7 +2,7 @@
#include <QStringList>
#ifdef QTIL_OS_UNIX
#ifdef APP_DESKTOP
#include <QFileInfo>
#include "desktopthemes/kdetheme.h"
......@@ -98,7 +98,7 @@ bool DesktopThemeHandler::isApplicableType(const QString &installType) const
bool DesktopThemeHandler::applyTheme(const QString &path, const QString &installType) const
{
#ifdef QTIL_OS_UNIX
#ifdef APP_DESKTOP
if (QFileInfo::exists(path) && isApplicableType(installType)) {
auto desktop = desktopEnvironment();
......
......@@ -6,8 +6,10 @@
#include <QFileInfo>
#include <QDateTime>
#ifdef QTIL_OS_UNIX
#include <QProcess>
#ifdef APP_DESKTOP
#include <QStringList>
#include <QDir>
#include <QDirIterator>
#endif
#include "qtil_dir.h"
......@@ -145,26 +147,18 @@ void ItemHandler::uninstall(const QString &itemKey)
auto installedItem = configHandler_->getUsrConfigInstalledItems()[itemKey].toObject();
auto installType = installedItem["install_type"].toString();
Qtil::Dir destDir;
#ifdef QTIL_OS_UNIX
destDir.setPath(configHandler_->getAppConfigInstallTypes()[installType].toObject()["destination"].toString());
Qtil::Dir destDir(configHandler_->getAppConfigInstallTypes()[installType].toObject()["destination"].toString());
for (const auto &filename : installedItem["files"].toArray()) {
#ifdef APP_DESKTOP
for (const auto filename : installedItem["files"].toArray()) {
QFileInfo fileInfo(destDir.path() + "/" + filename.toString());
// plasmapkg: Installation process has should be saved plasmapkg into destination directory
// plasmapkg: Installation process will saved plasmapkg into destination directory
Qtil::Package package(fileInfo.filePath());
// Uninstall
if (installType == "bin") {
if (fileInfo.filePath().endsWith(".appimage", Qt::CaseInsensitive)) {
QProcess process;
process.start(fileInfo.filePath() + " --remove-appimage-desktop-integration");
process.waitForFinished();
}
}
else if (installType == "plasma_plasmoids" || installType == "plasma4_plasmoids" || installType == "plasma5_plasmoids") {
if (installType == "plasma_plasmoids" || installType == "plasma4_plasmoids" || installType == "plasma5_plasmoids") {
package.uninstallAsPlasmapkg("plasmoid");
}
else if (installType == "plasma_look_and_feel" || installType == "plasma5_look_and_feel") {
......@@ -192,9 +186,7 @@ void ItemHandler::uninstall(const QString &itemKey)
}
}
#else
destDir.setPath(configHandler_->getAppConfigInstallTypes()[installType].toObject()["generic_destination"].toString());
for (const auto &filename : installedItem["files"].toArray()) {
for (const auto filename : installedItem["files"].toArray()) {
QFileInfo fileInfo(destDir.path() + "/" + filename.toString());
if (fileInfo.isDir()) {
Qtil::Dir(fileInfo.filePath()).remove();
......@@ -321,6 +313,8 @@ void ItemHandler::installDownloadedFile(Qtil::NetworkResource *resource)
tempDir.make();
Qtil::Dir tempDestDir(tempDir.path() + "/dest");
tempDestDir.make();
Qtil::Dir tempSrcDir(tempDir.path() + "/src");
tempSrcDir.make();
Qtil::Package package(tempDir.path() + "/" + filename);
if (!resource->saveData(package.path())) {
......@@ -341,11 +335,10 @@ void ItemHandler::installDownloadedFile(Qtil::NetworkResource *resource)
result["message"] = tr("Installing");
emit installStarted(result);
Qtil::Dir destDir;
#ifdef QTIL_OS_UNIX
destDir.setPath(configHandler_->getAppConfigInstallTypes()[installType].toObject()["destination"].toString());
Qtil::Dir destDir(configHandler_->getAppConfigInstallTypes()[installType].toObject()["destination"].toString());
// plasmapkg: Need to save package to remove installed files later
#ifdef APP_DESKTOP
// plasmapkg: Should save a package to remove installed files in uninstall process
if (installType == "bin"
&& package.installAsProgram(tempDestDir.path() + "/" + filename)) {
......@@ -381,6 +374,32 @@ void ItemHandler::installDownloadedFile(Qtil::NetworkResource *resource)
package.installAsFile(tempDestDir.path() + "/" + filename);
result["message"] = tr("The KWin window switcher has been installed");
}
else if (installType == "cursors"
&& package.installAsArchive(tempSrcDir.path())
&& installThemes("cursors", filename.section(".", 0, 0), tempSrcDir.path(), tempDestDir.path())) {
result["message"] = tr("The cursor theme has been installed");
}
else if (installType == "icons"
&& package.installAsArchive(tempSrcDir.path())
&& installThemes("icons", filename.section(".", 0, 0), tempSrcDir.path(), tempDestDir.path())) {
result["message"] = tr("The icon theme has been installed");
}
else if (installType == "emoticons"
&& package.installAsArchive(tempSrcDir.path())
&& installThemes("emoticons", filename.section(".", 0, 0), tempSrcDir.path(), tempDestDir.path())) {
result["message"] = tr("The emoticon theme has been installed");
}
else if ((installType == "themes"
|| installType == "gnome_shell_themes"
|| installType == "cinnamon_themes"
|| installType == "gtk2_themes"
|| installType == "gtk3_themes"
|| installType == "metacity_themes"
|| installType == "xfwm4_themes")
&& package.installAsArchive(tempSrcDir.path())
&& installThemes("themes", filename.section(".", 0, 0), tempSrcDir.path(), tempDestDir.path())) {
result["message"] = tr("The desktop theme has been installed");
}
else if (package.installAsArchive(tempDestDir.path())) {
result["message"] = tr("The archive file has been extracted");
}
......@@ -396,8 +415,6 @@ void ItemHandler::installDownloadedFile(Qtil::NetworkResource *resource)
return;
}
#else
destDir.setPath(configHandler_->getAppConfigInstallTypes()[installType].toObject()["generic_destination"].toString());
if (Qtil::File(package.path()).copy(tempDestDir.path() + "/" + filename)) {
result["message"] = tr("The file has been installed");
}
......@@ -432,6 +449,15 @@ void ItemHandler::installDownloadedFile(Qtil::NetworkResource *resource)
installedFiles.append(QJsonValue(destFilename));
}
if (installedFiles.isEmpty()) {
result["status"] = QString("error_install");
result["message"] = tr("Failed to installation");
emit installFinished(result);
tempDir.remove();
resource->deleteLater();
return;
}
// Installation post-process
metadata.remove("command");
metadata["files"] = installedFiles;
......@@ -445,3 +471,66 @@ void ItemHandler::installDownloadedFile(Qtil::NetworkResource *resource)
tempDir.remove();
resource->deleteLater();
}
#ifdef APP_DESKTOP
bool ItemHandler::installThemes(const QString &installType, const QString &name, const QString &srcDir, const QString &destDir)
{
QStringList themeDirs;
if (installType == "cursors") {
//QDirIterator iterator(srcDir, QStringList() << "index.theme", QDir::Files, QDirIterator::Subdirectories);
QDirIterator iterator(srcDir, QStringList() << "cursors", QDir::Dirs, QDirIterator::Subdirectories);
while (iterator.hasNext()) {
auto path = iterator.next();
path.truncate(path.lastIndexOf("/"));
themeDirs << path;
}
}
else if (installType == "icons") {
QDirIterator iterator(srcDir, QStringList() << "index.theme", QDir::Files, QDirIterator::Subdirectories);
while (iterator.hasNext()) {
auto path = iterator.next();
path.truncate(path.lastIndexOf("/"));
themeDirs << path;
}
}
else if (installType == "emoticons") {
QDirIterator iterator(srcDir, QStringList() << "emoticons.xml", QDir::Files, QDirIterator::Subdirectories);
while (iterator.hasNext()) {
auto path = iterator.next();
path.truncate(path.lastIndexOf("/"));
themeDirs << path;
}
}
else if (installType == "themes") {
/*QDirIterator iterator(srcDir,
QStringList() << "cinnamon"
<< "gnome-shell"
<< "gtk-2.0"
<< "gtk-3.0"
<< "metacity-1"
<< "plank"
<< "unity"
<< "xfwm4",
QDir::Dirs, QDirIterator::Subdirectories);*/
QDirIterator iterator(srcDir, QStringList() << "index.theme", QDir::Files, QDirIterator::Subdirectories);
while (iterator.hasNext()) {
auto path = iterator.next();
path.truncate(path.lastIndexOf("/"));
themeDirs << path;
}
}
if (!themeDirs.isEmpty()) {
for (const auto &themeDir : themeDirs) {
auto themeName = name;
if (themeDir != srcDir) {
themeName = themeDir.split("/").last();
}
Qtil::Dir(themeDir).move(destDir + "/" + themeName);
}
return true;
}
return false;
}
#endif
......@@ -45,6 +45,10 @@ private:
void saveDownloadedFile(Qtil::NetworkResource *resource);
void installDownloadedFile(Qtil::NetworkResource *resource);
#ifdef APP_DESKTOP
bool installThemes(const QString &installType, const QString &name, const QString &srcDir, const QString &destDir);
#endif
ConfigHandler *configHandler_;
QJsonObject metadataSet_;
};
......@@ -15,7 +15,7 @@ bool OcsApiHandler::addProviders(const QString &providerFileUrl) const
{
auto providers = Qtil::OcsApi::getProviderFile(QUrl(providerFileUrl));
if (!providers.isEmpty()) {
for (const auto &providerValue : providers) {
for (const auto providerValue : providers) {
auto provider = providerValue.toObject();
if (provider.contains("location")) {
// Use location (API base URL) as unique key
......@@ -69,7 +69,7 @@ bool OcsApiHandler::updateCategories(const QString &providerKey, bool force) con
// Data type variation workaround, convert object to array
QJsonArray responseData;
if (response["data"].isObject()) {
for (const auto &dataValue : response["data"].toObject()) {
for (const auto dataValue : response["data"].toObject()) {
responseData.append(dataValue);
}
}
......@@ -86,7 +86,7 @@ bool OcsApiHandler::updateCategories(const QString &providerKey, bool force) con
}
QJsonObject newProviderCategories;
for (const auto &dataValue : responseData) {
for (const auto dataValue : responseData) {
auto data = dataValue.toObject();
// Data type variation workaround, convert int to string
......
......@@ -3,7 +3,7 @@
#include <QUrl>
#include <QDesktopServices>
#ifdef QTIL_OS_UNIX
#ifdef APP_DESKTOP
#include <QFileInfo>
#include <QProcess>
#endif
......@@ -16,14 +16,6 @@ SystemHandler::SystemHandler(QObject *parent)
: QObject(parent)
{}
bool SystemHandler::isUnix() const
{
#ifdef QTIL_OS_UNIX
return true;
#endif
return false;
}
bool SystemHandler::isMobileDevice() const
{
#if defined(APP_MOBILE)
......@@ -42,7 +34,7 @@ bool SystemHandler::openUrl(const QString &url) const
path.replace("file://localhost", "", Qt::CaseInsensitive);
path.replace("file://", "", Qt::CaseInsensitive);
#ifdef QTIL_OS_UNIX
#ifdef APP_DESKTOP
if ((path.endsWith(".appimage", Qt::CaseInsensitive) || path.endsWith(".exe", Qt::CaseInsensitive))
&& QFileInfo(path).isExecutable()) {
return QProcess::startDetached(path);
......
......@@ -10,7 +10,6 @@ public:
explicit SystemHandler(QObject *parent = nullptr);
public slots:
bool isUnix() const;
bool isMobileDevice() const;
bool openUrl(const QString &url) const;
};
......@@ -9,7 +9,7 @@
#include "handlers/confighandler.h"
#ifdef QTIL_OS_UNIX
#ifdef APP_DESKTOP
#include "updaters/appimageupdater.h"
#endif
......@@ -37,17 +37,12 @@ void UpdateHandler::checkAll()
auto filename = installedItem["filename"].toString();
auto installType = installedItem["install_type"].toString();
QString filePath = "";
#ifdef QTIL_OS_UNIX
filePath = configHandler_->getAppConfigInstallTypes()[installType].toObject()["destination"].toString() + "/" + filename;
#else
filePath = configHandler_->getAppConfigInstallTypes()[installType].toObject()["generic_destination"].toString() + "/" + filename;
#endif
auto filePath = configHandler_->getAppConfigInstallTypes()[installType].toObject()["destination"].toString() + "/" + filename;
QString updateMethod = "";
if (installType == "bin") {
#ifdef QTIL_OS_UNIX
#ifdef APP_DESKTOP
if (filePath.endsWith(".appimage", Qt::CaseInsensitive)) {
if (AppImageUpdater(itemKey, filePath).checkForChanges()) {
updateMethod = "appimageupdate";
......@@ -86,7 +81,7 @@ void UpdateHandler::update(const QString &itemKey)
auto updateMethod = updateAvailableItems[itemKey].toObject()["update_method"].toString();
#ifdef QTIL_OS_UNIX
#ifdef APP_DESKTOP
if (updateMethod == "appimageupdate") {
updateAppImage(itemKey);
}
......@@ -96,7 +91,7 @@ void UpdateHandler::update(const QString &itemKey)
#endif
}
#ifdef QTIL_OS_UNIX
#ifdef APP_DESKTOP
void UpdateHandler::appImageUpdaterFinished(AppImageUpdater *updater)
{
auto itemKey = updater->id();
......@@ -134,7 +129,7 @@ void UpdateHandler::appImageUpdaterFinished(AppImageUpdater *updater)
}
#endif
#ifdef QTIL_OS_UNIX
#ifdef APP_DESKTOP
void UpdateHandler::updateAppImage(const QString &itemKey)
{
auto updateAvailableItem = configHandler_->getUsrConfigUpdateAvailableItems()[itemKey].toObject();
......@@ -160,14 +155,28 @@ void UpdateHandler::updateAppImage(const QString &itemKey)
metadata["installed_item_obj"] = installedItem;
metadata["new_filename"] = filename;
QString assembledNewFilename = "";
QString rawNewFilename = "";
auto updateInformation = updater->describeAppImage();
for (const auto &info : updateInformation.split("\n")) {
if (info.endsWith(".zsync", Qt::CaseInsensitive)) {
metadata["new_filename"] = info.split("|").last().split("/").last().replace(".zsync", "", Qt::CaseInsensitive);
break;
if (info.startsWith("Assembled ZSync URL:", Qt::CaseInsensitive)) {
assembledNewFilename = info.split("/").last().replace(".zsync", "", Qt::CaseInsensitive);
}
else if (info.startsWith("Raw update information:", Qt::CaseInsensitive)) {
rawNewFilename = info.split("|").last().split("/").last().replace(".zsync", "", Qt::CaseInsensitive);
}
}
}
if (!assembledNewFilename.isEmpty()) {
metadata["new_filename"] = assembledNewFilename;
}
else if (!rawNewFilename.isEmpty() && !rawNewFilename.contains("*")) {
metadata["new_filename"] = rawNewFilename;
}
metadataSet_[itemKey] = metadata;
emit updateStarted(itemKey, true);
......
......@@ -5,7 +5,7 @@
class ConfigHandler;
#ifdef QTIL_OS_UNIX
#ifdef APP_DESKTOP
class AppImageUpdater;
#endif
......@@ -28,12 +28,12 @@ public slots:
void update(const QString &itemKey);
private slots:
#ifdef QTIL_OS_UNIX
#ifdef APP_DESKTOP
void appImageUpdaterFinished(AppImageUpdater *updater);
#endif
private:
#ifdef QTIL_OS_UNIX
#ifdef APP_DESKTOP
void updateAppImage(const QString &itemKey);
#endif
......
......@@ -47,7 +47,7 @@ int main(int argc, char *argv[])
clParser.process(app);
auto port = clParser.value(clOptionPort).toInt();
auto port = clParser.value(clOptionPort).toUShort();
// Setup websocket server
auto *wsServer = new WebSocketServer(configHandler, appConfigApplication["id"].toString(), port, &app);
......
......@@ -335,9 +335,6 @@ void WebSocketServer::receiveMessage(const QString &id, const QString &func, con
resultData.append(configHandler_->removeUsrConfigUpdateAvailableItemsItem(data.at(0).toString()));
}
// SystemHandler
else if (func == "SystemHandler::isUnix") {
resultData.append(systemHandler_->isUnix());
}
else if (func == "SystemHandler::isMobileDevice") {
resultData.append(systemHandler_->isMobileDevice());
}
......
unix:!ios:!android {
contains(DEFINES, APP_DESKTOP) {
isEmpty(PREFIX) {
PREFIX = /usr/local
}
......
......@@ -4,107 +4,112 @@
<context>
<name>ItemHandler</name>
<message>
<location filename="../app/src/handlers/itemhandler.cpp" line="55"/>
<location filename="../app/src/handlers/itemhandler.cpp" line="53"/>
<source>The item already installed</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/src/handlers/itemhandler.cpp" line="62"/>
<source>The file already downloading</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/src/handlers/itemhandler.cpp" line="69"/>
<location filename="../app/src/handlers/itemhandler.cpp" line="76"/>
<source>Downloading</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/src/handlers/itemhandler.cpp" line="119"/>
<location filename="../app/src/handlers/itemhandler.cpp" line="125"/>
<source>Invalid OCS-URL</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/src/handlers/itemhandler.cpp" line="128"/>
<location filename="../app/src/handlers/itemhandler.cpp" line="136"/>
<source>The item not installed</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/src/handlers/itemhandler.cpp" line="142"/>
<source>Uninstalling</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/src/handlers/itemhandler.cpp" line="197"/>
<location filename="../app/src/handlers/itemhandler.cpp" line="212"/>
<source>Uninstalled</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/src/handlers/itemhandler.cpp" line="222"/>
<location filename="../app/src/handlers/itemhandler.cpp" line="237"/>
<source>Downloaded</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/src/handlers/itemhandler.cpp" line="252"/>
<location filename="../app/src/handlers/itemhandler.cpp" line="291"/>
<location filename="../app/src/handlers/itemhandler.cpp" line="267"/>
<location filename="../app/src/handlers/itemhandler.cpp" line="311"/>
<source>Saving</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/src/handlers/itemhandler.cpp" line="264"/>
<location filename="../app/src/handlers/itemhandler.cpp" line="306"/>
<location filename="../app/src/handlers/itemhandler.cpp" line="284"/>
<location filename="../app/src/handlers/itemhandler.cpp" line="328"/>
<source>Failed to save data</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/src/handlers/itemhandler.cpp" line="271"/>
<location filename="../app/src/handlers/itemhandler.cpp" line="314"/>
<location filename="../app/src/handlers/itemhandler.cpp" line="291"/>
<location filename="../app/src/handlers/itemhandler.cpp" line="336"/>
<source>Saved</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/src/handlers/itemhandler.cpp" line="319"/>
<location filename="../app/src/handlers/itemhandler.cpp" line="341"/>
<source>Installing</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/src/handlers/itemhandler.cpp" line="330"/>
<location filename="../app/src/handlers/itemhandler.cpp" line="352"/>
<source>The file has been installed as program</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/src/handlers/itemhandler.cpp" line="335"/>
<location filename="../app/src/handlers/itemhandler.cpp" line="357"/>
<source>The plasmoid has been installed</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/src/handlers/itemhandler.cpp" line="340"/>
<location filename="../app/src/handlers/itemhandler.cpp" line="362"/>
<source>The plasma look and feel has been installed</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/src/handlers/itemhandler.cpp" line="345"/>
<source>The plasma desktop theme has been installed</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/src/handlers/itemhandler.cpp" line="350"/>
<location filename="../app/src/handlers/itemhandler.cpp" line="372"/>
<source>The KWin effect has been installed</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/src/handlers/itemhandler.cpp" line="355"/>
<location filename="../app/src/handlers/itemhandler.cpp" line="377"/>
<source>The KWin script has been installed</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/src/handlers/itemhandler.cpp" line="360"/>
<location filename="../app/src/handlers/itemhandler.cpp" line="382"/>
<source>The KWin window switcher has been installed</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/src/handlers/itemhandler.cpp" line="363"/>
<location filename="../app/src/handlers/itemhandler.cpp" line="385"/>
<source>The archive file has been extracted</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/src/handlers/itemhandler.cpp" line="366"/>
<location filename="../app/src/handlers/itemhandler.cpp" line="380"/>
<location filename="../app/src/handlers/itemhandler.cpp" line="388"/>
<location filename="../app/src/handlers/itemhandler.cpp" line="402"/>
<source>The file has been installed</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/src/handlers/itemhandler.cpp" line="370"/>
<location filename="../app/src/handlers/itemhandler.cpp" line="384"/>
<location filename="../app/src/handlers/itemhandler.cpp" line="392"/>
<location filename="../app/src/handlers/itemhandler.cpp" line="406"/>
<source>Failed to installation</source>
<translation type="unfinished"></translation>
</message>
......
......@@ -4,107 +4,112 @@
<context>
<name>ItemHandler</name>
<message>
<location filename="../app/src/handlers/itemhandler.cpp" line="55"/>
<location filename="../app/src/handlers/itemhandler.cpp" line="53"/>
<source>The item already installed</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/src/handlers/itemhandler.cpp" line="62"/>
<source>The file already downloading</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/src/handlers/itemhandler.cpp" line="69"/>
<location filename="../app/src/handlers/itemhandler.cpp" line="76"/>
<source>Downloading</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/src/handlers/itemhandler.cpp" line="119"/>
<location filename="../app/src/handlers/itemhandler.cpp" line="125"/>
<source>Invalid OCS-URL</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/src/handlers/itemhandler.cpp" line="128"/>
<location filename="../app/src/handlers/itemhandler.cpp" line="136"/>
<source>The item not installed</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/src/handlers/itemhandler.cpp" line="142"/>
<source>Uninstalling</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/src/handlers/itemhandler.cpp" line="197"/>
<location filename="../app/src/handlers/itemhandler.cpp" line="212"/>
<source>Uninstalled</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/src/handlers/itemhandler.cpp" line="222"/>
<location filename="../app/src/handlers/itemhandler.cpp" line="237"/>
<source>Downloaded</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/src/handlers/itemhandler.cpp" line="252"/>
<location filename="../app/src/handlers/itemhandler.cpp" line="291"/>
<location filename="../app/src/handlers/itemhandler.cpp" line="267"/>
<location filename="../app/src/handlers/itemhandler.cpp" line="311"/>
<source>Saving</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/src/handlers/itemhandler.cpp" line="264"/>
<location filename="../app/src/handlers/itemhandler.cpp" line="306"/>
<location filename="../app/src/handlers/itemhandler.cpp" line="284"/>
<location filename="../app/src/handlers/itemhandler.cpp" line="328"/>
<source>Failed to save data</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/src/handlers/itemhandler.cpp" line="271"/>
<location filename="../app/src/handlers/itemhandler.cpp" line="314"/>
<location filename="../app/src/handlers/itemhandler.cpp" line="291"/>
<location filename="../app/src/handlers/itemhandler.cpp" line="336"/>
<source>Saved</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/src/handlers/itemhandler.cpp" line="319"/>
<location filename="../app/src/handlers/itemhandler.cpp" line="341"/>
<source>Installing</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/src/handlers/itemhandler.cpp" line="330"/>
<location filename="../app/src/handlers/itemhandler.cpp" line="352"/>
<source>The file has been installed as program</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/src/handlers/itemhandler.cpp" line="335"/>
<location filename="../app/src/handlers/itemhandler.cpp" line="357"/>
<source>The plasmoid has been installed</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/src/handlers/itemhandler.cpp" line="340"/>
<location filename="../app/src/handlers/itemhandler.cpp" line="362"/>
<source>The plasma look and feel has been installed</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/src/handlers/itemhandler.cpp" line="345"/>
<source>The plasma desktop theme has been installed</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/src/handlers/itemhandler.cpp" line="350"/>
<location filename="../app/src/handlers/itemhandler.cpp" line="372"/>
<source>The KWin effect has been installed</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/src/handlers/itemhandler.cpp" line="355"/>
<location filename="../app/src/handlers/itemhandler.cpp" line="377"/>
<source>The KWin script has been installed</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/src/handlers/itemhandler.cpp" line="360"/>
<location filename="../app/src/handlers/itemhandler.cpp" line="382"/>
<source>The KWin window switcher has been installed</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/src/handlers/itemhandler.cpp" line="363"/>
<location filename="../app/src/handlers/itemhandler.cpp" line="385"/>
<source>The archive file has been extracted</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/src/handlers/itemhandler.cpp" line="366"/>
<location filename="../app/src/handlers/itemhandler.cpp" line="380"/>
<location filename="../app/src/handlers/itemhandler.cpp" line="388"/>
<location filename="../app/src/handlers/itemhandler.cpp" line="402"/>
<source>The file has been installed</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/src/handlers/itemhandler.cpp" line="370"/>
<location filename="../app/src/handlers/itemhandler.cpp" line="384"/>
<location filename="../app/src/handlers/itemhandler.cpp" line="392"/>
<location filename="../app/src/handlers/itemhandler.cpp" line="406"/>
<source>Failed to installation</source>
<translation type="unfinished"></translation>
</message>
......