commit 0a14747ccf8b14b2d291c5c2371064c0c1b1bc3d
parent a74c811c5bd59f186f8339a7a2026499d0d01b36
Author: Jaromil <jaromil@dyne.org>
Date:   Tue,  8 Sep 2015 11:04:16 +0200
Merge pull request #215 from mgian/qt-tray
Added tomb-qt-tray
Diffstat:
7 files changed, 406 insertions(+), 0 deletions(-)
diff --git a/extras/qt-tray/i18n/tomb-qt-tray_it.qm b/extras/qt-tray/i18n/tomb-qt-tray_it.qm
Binary files differ.
diff --git a/extras/qt-tray/i18n/tomb-qt-tray_it.ts b/extras/qt-tray/i18n/tomb-qt-tray_it.ts
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="it_IT">
+<context>
+    <name>Dialog</name>
+    <message>
+        <source>Explore</source>
+        <translation type="vanished">Esplora</translation>
+    </message>
+    <message>
+        <source>Close</source>
+        <translation type="vanished">Chiudi</translation>
+    </message>
+</context>
+<context>
+    <name>Tomb</name>
+    <message>
+        <location filename="../tomb.cpp" line="72"/>
+        <source>Explore</source>
+        <translation>Esplora</translation>
+    </message>
+    <message>
+        <location filename="../tomb.cpp" line="77"/>
+        <source>Close</source>
+        <translation>Chiudi</translation>
+    </message>
+    <message>
+        <location filename="../tomb.cpp" line="80"/>
+        <source>Slam</source>
+        <translation>Slam</translation>
+    </message>
+    <message>
+        <location filename="../tomb.cpp" line="22"/>
+        <location filename="../tomb.cpp" line="120"/>
+        <location filename="../tomb.cpp" line="123"/>
+        <location filename="../tomb.cpp" line="144"/>
+        <source>tomb-qt-tray</source>
+        <translation>tomb-qt-tray</translation>
+    </message>
+    <message>
+        <location filename="../tomb.cpp" line="22"/>
+        <source>You need to specify a Tomb File.
+Exiting</source>
+        <translation>Devi specificare un file Tomb.
+Uscita</translation>
+    </message>
+    <message>
+        <location filename="../tomb.cpp" line="38"/>
+        <source>Tomb encrypted undertaker</source>
+        <translation>Tomb encrypted undertaker</translation>
+    </message>
+    <message>
+        <location filename="../tomb.cpp" line="38"/>
+        <source>We started digging out bones</source>
+        <translation>Abbiamo cominciato a tirare fuori gli scheletri</translation>
+    </message>
+    <message>
+        <location filename="../tomb.cpp" line="120"/>
+        <source>polkit is not installed</source>
+        <translation>polkit non è installato</translation>
+    </message>
+    <message>
+        <location filename="../tomb.cpp" line="123"/>
+        <source>The program crashed
+Try to run 'tomb close' in a console</source>
+        <translation>Il programma è crashato
+Prova ad eseguire "tomb close" in una console</translation>
+    </message>
+    <message>
+        <location filename="../tomb.cpp" line="135"/>
+        <source>The process failed to start. Either the invoked program is missing, or you may have insufficient permissions to invoke the program.</source>
+        <translation>Il programma non è stato avviato. O il programma chiamato non è installato o non hai sufficienti diritti per eseguirlo.</translation>
+    </message>
+</context>
+</TS>
diff --git a/extras/qt-tray/main.cpp b/extras/qt-tray/main.cpp
@@ -0,0 +1,41 @@
+/*  Tomb - encrypted storage undertaker
+ *
+ *  (c) Copyright 2015 Gianluca Montecchi <gian@grys.it>
+ *
+ * This source code is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Public License as published
+ * by the Free Software Foundation; either version 3 of the License,
+ * or (at your option) any later version.
+ *
+ * This source code is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * Please refer to the GNU Public License for more details.
+ *
+ * You should have received a copy of the GNU Public License along with
+ * this source code; if not, write to:
+ * Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include <QApplication>
+#include <QTranslator>
+#include <QLocale>
+
+#include "tomb.h"
+
+
+int main(int argc, char *argv[])
+{
+    QApplication a(argc, argv);
+    QTranslator translator(0);
+
+
+    translator.load( QString("./i18n/tomb-qt-tray_") + QLocale::system().name() );
+
+    a.installTranslator( &translator );
+    //w.show();
+    Tomb w;
+
+
+    return a.exec();
+}
diff --git a/extras/qt-tray/pixmaps/tomb_icon.png b/extras/qt-tray/pixmaps/tomb_icon.png
Binary files differ.
diff --git a/extras/qt-tray/qt-tray.pro b/extras/qt-tray/qt-tray.pro
@@ -0,0 +1,47 @@
+#  Tomb - encrypted storage undertaker
+#
+#  (c) Copyright 2015 Gianluca Montecchi <gian@grys.it>
+#
+# This source code is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Public License as published
+# by the Free Software Foundation; either version 3 of the License,
+# or (at your option) any later version.
+#
+# This source code is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# Please refer to the GNU Public License for more details.
+#
+# You should have received a copy of the GNU Public License along with
+# this source code; if not, write to:
+# Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+#/
+
+#-------------------------------------------------
+#
+# Project created by QtCreator 2015-07-30T22:53:13
+#
+#-------------------------------------------------
+
+QT       += core gui quick
+
+greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
+
+TARGET = tomb-qt-tray
+TEMPLATE = app
+
+
+SOURCES += main.cpp\
+        tomb.cpp
+
+HEADERS  += tomb.h
+
+TRANSLATIONS = i18n/tomb-qt-tray_it.ts
+
+CONFIG += c++11
+
+FORMS +=
+
+DISTFILES +=
+
+
diff --git a/extras/qt-tray/tomb.cpp b/extras/qt-tray/tomb.cpp
@@ -0,0 +1,171 @@
+/*  Tomb - encrypted storage undertaker
+ *
+ *  (c) Copyright 2015 Gianluca Montecchi <gian@grys.it>
+ *
+ * This source code is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Public License as published
+ * by the Free Software Foundation; either version 3 of the License,
+ * or (at your option) any later version.
+ *
+ * This source code is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * Please refer to the GNU Public License for more details.
+ *
+ * You should have received a copy of the GNU Public License along with
+ * this source code; if not, write to:
+ * Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+
+#include "tomb.h"
+#include <QDir>
+#include <QStorageInfo>
+#include <QMessageBox>
+#include <QQuickView>
+
+#include <mntent.h>
+
+Tomb::Tomb(QWidget *parent)
+    : QDialog(parent)
+{
+    struct mntent *ent;
+    FILE *aFile;
+
+
+    if (QApplication::arguments().length() > 1) {
+        this->info = QFileInfo(QApplication::arguments().takeAt(1));
+        this->tombName = QString(info.baseName());
+        this->tombPath = info.path();
+    } else {
+        QMessageBox::critical(this, tr("tomb-qt-tray"), tr("You need to specify a Tomb File.\nExiting"), QMessageBox::Ok);
+        exit(EXIT_FAILURE);
+    }
+
+
+    // Build the menù
+    this->icon = QIcon( QCoreApplication::applicationDirPath() + QDir::separator()+QString("pixmaps/tomb_icon.png"));
+    this->trayIcon = new QSystemTrayIcon(this->icon);
+    this->trayIconMenu = new QMenu();
+
+    this->tombBuildMenu();
+
+    this->trayIcon->setContextMenu(this->trayIconMenu);
+
+    this->trayIcon->setToolTip(QString(info.baseName()));
+    this->trayIcon->show();
+    this->trayIcon->showMessage(tr("Tomb encrypted undertaker"),tr("We started digging out bones"), QSystemTrayIcon::Information);
+    if (QT_VERSION >= 0x050400) {
+        for (auto volume : QStorageInfo::mountedVolumes()) {
+            if (QString(volume.device()).contains(this->tombName) == true) {
+                this->tombMountPoint = QString(volume.rootPath());
+                break;
+            }
+        }
+    } else {
+         aFile = setmntent("/proc/mounts", "r");
+         if (aFile == NULL) {
+           perror("setmntent");
+           exit(1);
+         }
+         while (NULL != (ent = getmntent(aFile))) {
+             if (QString( ent->mnt_fsname).contains(this->tombName) == true) {
+                 this->tombMountPoint = QString(ent->mnt_dir);
+                 break;
+             }
+         }
+         endmntent(aFile);
+    }
+}
+
+void Tomb::closeEvent(QCloseEvent *event) {
+    event->accept();
+}
+
+void Tomb::tombBuildMenu() {
+
+    // Create the menu items
+//    this->tombOpen = new QAction(tr("Open"), this);
+    //this->trayIconMenu->addAction(tombOpen);
+
+    this->menu_tombExplore = new QAction(tr("Explore"), this);
+    this->trayIconMenu->addAction(menu_tombExplore);
+
+    this->trayIconMenu->addSeparator();
+
+    this->menu_tombClose = new QAction(tr("Close"), this);
+    this->trayIconMenu->addAction(menu_tombClose);
+
+    this->menu_tombSlam = new QAction(tr("Slam"), this);
+    this->trayIconMenu->addAction(menu_tombSlam);
+
+    connect(this->menu_tombExplore,  SIGNAL(triggered()), this, SLOT(tombExplore()));
+    connect(this->menu_tombClose,  SIGNAL(triggered()), this, SLOT(tombClose()));
+    connect(this->menu_tombSlam,  SIGNAL(triggered()), this, SLOT(tombSlam()));
+
+}
+
+void Tomb::tombExplore() {
+
+    QDesktopServices::openUrl(QUrl(QUrl::fromLocalFile(this->tombMountPoint)));
+
+}
+
+void Tomb::tombClose() {
+
+    QProcess *tomb;
+    tomb = new QProcess(this);
+    tomb->start("pkexec", QStringList() << "tomb" << "close");
+    connect(tomb, SIGNAL(finished(int , QProcess::ExitStatus )), this, SLOT(tombCheckCmdRet(int , QProcess::ExitStatus )));
+    connect(tomb, SIGNAL(error(QProcess::ProcessError)), this, SLOT(tombStartError(QProcess::ProcessError)));
+    tomb->waitForFinished(30000);
+
+}
+
+void Tomb::tombSlam() {
+
+    QProcess *tomb;
+    tomb = new QProcess(this);
+    tomb->start("pkexec", QStringList() << "tomb" << "slam");
+    connect(tomb, SIGNAL(finished(int , QProcess::ExitStatus )), this, SLOT(tombCheckCmdRet(int , QProcess::ExitStatus )));
+    connect(tomb, SIGNAL(error(QProcess::ProcessError)), this, SLOT(tombStartError(QProcess::ProcessError)));
+    tomb->waitForFinished(30000);
+
+}
+
+void Tomb::tombCheckCmdRet(int exitCode, QProcess::ExitStatus exitStatus) {
+
+    if (exitStatus == QProcess::CrashExit) {
+        QMessageBox::critical(this, tr("tomb-qt-tray"), tr("polkit is not installed"),QMessageBox::Ok);
+    } else {
+        if (exitCode != QProcess::NormalExit) {
+            QMessageBox::critical(this, tr("tomb-qt-tray"), tr("The program crashed\nTry to run 'tomb close' in a console"),QMessageBox::Ok);
+        }
+    }
+
+}
+
+void Tomb::tombStartError(QProcess::ProcessError err) {
+
+    QString msg = QString();
+
+    switch (err) {
+        case QProcess::FailedToStart :
+            msg = tr("The process failed to start. Either the invoked program is missing, or you may have insufficient permissions to invoke the program.");
+        break;
+        case QProcess::Crashed:
+        case QProcess::Timedout:
+        case QProcess::ReadError:
+        case QProcess::WriteError:
+        case QProcess::UnknownError:
+            break;
+    }
+    QMessageBox::critical(this, tr("tomb-qt-tray"), msg, QMessageBox::Ok);
+
+}
+
+
+Tomb::~Tomb() {
+
+}
+
diff --git a/extras/qt-tray/tomb.h b/extras/qt-tray/tomb.h
@@ -0,0 +1,72 @@
+/*  Tomb - encrypted storage undertaker
+ *
+ *  (c) Copyright 2015 Gianluca Montecchi <gian@grys.it>
+ *
+ * This source code is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Public License as published
+ * by the Free Software Foundation; either version 3 of the License,
+ * or (at your option) any later version.
+ *
+ * This source code is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * Please refer to the GNU Public License for more details.
+ *
+ * You should have received a copy of the GNU Public License along with
+ * this source code; if not, write to:
+ * Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#ifndef DIALOG_H
+#define DIALOG_H
+
+#include <QDialog>
+#include <QWidget>
+#include <QIcon>
+#include <QSystemTrayIcon>
+#include <QMenu>
+#include <QAction>
+#include <QDebug>
+#include <QCoreApplication>
+#include <QApplication>
+#include <QDir>
+#include <QDesktopServices>
+#include <QUrl>
+#include <QProcess>
+
+class Tomb : public QDialog
+{
+    Q_OBJECT
+
+    public:
+        Tomb(QWidget *parent = 0);
+        ~Tomb();
+
+
+        QIcon icon;
+        QSystemTrayIcon *trayIcon;
+        QMenu *trayIconMenu;
+        QAction *menu_tombExplore;
+        QAction *menu_tombClose;
+        QAction *menu_tombSlam;
+
+    private:
+        void tombBuildMenu();
+
+        QString tombPath;
+        QString tombName;
+        QFileInfo info;
+        QString tombMountPoint;
+
+    private slots:
+        virtual void closeEvent(QCloseEvent *event);
+
+    public slots:
+        void tombExplore();
+        void tombClose();
+        void tombSlam();
+        void tombCheckCmdRet(int exitCode, QProcess::ExitStatus);
+        void tombStartError(QProcess::ProcessError err);
+};
+
+#endif // DIALOG_H