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