tomb

the crypto undertaker
git clone git://parazyd.org/tomb.git
Log | Files | Refs | README | LICENSE

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:
Aextras/qt-tray/i18n/tomb-qt-tray_it.qm | 0
Aextras/qt-tray/i18n/tomb-qt-tray_it.ts | 75+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Aextras/qt-tray/main.cpp | 41+++++++++++++++++++++++++++++++++++++++++
Aextras/qt-tray/pixmaps/tomb_icon.png | 0
Aextras/qt-tray/qt-tray.pro | 47+++++++++++++++++++++++++++++++++++++++++++++++
Aextras/qt-tray/tomb.cpp | 171+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Aextras/qt-tray/tomb.h | 72++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
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 &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> 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