Merge pull request #215 from mgian/qt-tray

Added tomb-qt-tray
This commit is contained in:
Jaromil 2015-09-08 11:04:16 +02:00
commit 0a14747ccf
7 changed files with 406 additions and 0 deletions

Binary file not shown.

View File

@ -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>

41
extras/qt-tray/main.cpp Normal file
View File

@ -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();
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.7 KiB

View File

@ -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 +=

171
extras/qt-tray/tomb.cpp Normal file
View File

@ -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() {
}

72
extras/qt-tray/tomb.h Normal file
View File

@ -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