tMerge pull request #215 from mgian/qt-tray - tomb - the crypto undertaker
 (HTM) git clone git://parazyd.org/tomb.git
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 0a14747ccf8b14b2d291c5c2371064c0c1b1bc3d
 (DIR) parent a74c811c5bd59f186f8339a7a2026499d0d01b36
 (HTM) 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:
         A extras/qt-tray/i18n/tomb-qt-tray_i… |       0 
         A extras/qt-tray/i18n/tomb-qt-tray_i… |      75 +++++++++++++++++++++++++++++++
         A extras/qt-tray/main.cpp             |      41 +++++++++++++++++++++++++++++++
         A extras/qt-tray/pixmaps/tomb_icon.p… |       0 
         A extras/qt-tray/qt-tray.pro          |      47 +++++++++++++++++++++++++++++++
         A extras/qt-tray/tomb.cpp             |     171 +++++++++++++++++++++++++++++++
         A extras/qt-tray/tomb.h               |      72 +++++++++++++++++++++++++++++++
       
       7 files changed, 406 insertions(+), 0 deletions(-)
       ---
 (DIR) 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.
 (DIR) diff --git a/extras/qt-tray/i18n/tomb-qt-tray_it.ts b/extras/qt-tray/i18n/tomb-qt-tray_it.ts
       t@@ -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 &apos;tomb close&apos; in a console</source>
       +        <translation>Il programma è crashato
       +Prova ad eseguire &quot;tomb close&quot; 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>
 (DIR) diff --git a/extras/qt-tray/main.cpp b/extras/qt-tray/main.cpp
       t@@ -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();
       +}
 (DIR) diff --git a/extras/qt-tray/pixmaps/tomb_icon.png b/extras/qt-tray/pixmaps/tomb_icon.png
       Binary files differ.
 (DIR) diff --git a/extras/qt-tray/qt-tray.pro b/extras/qt-tray/qt-tray.pro
       t@@ -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 +=
       +
       +
 (DIR) diff --git a/extras/qt-tray/tomb.cpp b/extras/qt-tray/tomb.cpp
       t@@ -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() {
       +
       +}
       +
 (DIR) diff --git a/extras/qt-tray/tomb.h b/extras/qt-tray/tomb.h
       t@@ -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