summaryrefslogtreecommitdiffstats
path: root/mainwindow.h
blob: f33c04fbcee4cc825ed7da1ab80ff35fab6f55a6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QTreeView>
#include <QFileSystemModel>
#include <QProcess>
#include <QQueue>
#include <QSettings>
#include "storemodel.h"
#include "trayicon.h"
#if SINGLE_APP
#include "singleapplication.h"
#else
#define SingleApplication QApplication
#endif

namespace Ui {
class MainWindow;
}

struct execQueueItem {
    QString app;
    QString args;
    QString input;
};

struct UserInfo;

class MainWindow : public QMainWindow
{
    Q_OBJECT

enum actionType { GPG, GIT, EDIT, DELETE, GPG_INTERNAL, PWGEN };

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
    void setPassExecutable(QString);
    void setGitExecutable(QString);
    void setGpgExecutable(QString);
    QString getGpgExecutable();
    bool checkConfig();
    void setApp(SingleApplication* app);
    void setText(QString);
    QStringList getSecretKeys();
    void generateKeyPair(QString, QDialog *);
    void userDialog(QString = "");
    QString generatePassword();

protected:
    void closeEvent(QCloseEvent *event);

private slots:
    void on_updateButton_clicked();
    void on_pushButton_clicked();
    void on_treeView_clicked(const QModelIndex &index);
    void on_configButton_clicked();
    void readyRead(bool finished);
    void processFinished(int, QProcess::ExitStatus);
    void processError(QProcess::ProcessError);
    void clearClipboard();
    void on_lineEdit_textChanged(const QString &arg1);
    void on_lineEdit_returnPressed();
    void on_clearButton_clicked();
    void on_addButton_clicked();
    void on_deleteButton_clicked();
    void on_editButton_clicked();
    void on_usersButton_clicked();
    void messageAvailable(QString message);
    void on_profileBox_currentIndexChanged(QString);
    void showContextMenu(const QPoint& pos);
    void addFolder();
    void editPassword();

private:
    QApplication *QtPass;
    QScopedPointer<QSettings> settings;
    QScopedPointer<Ui::MainWindow> ui;
    QFileSystemModel model;
    StoreModel proxyModel;
    QScopedPointer<QItemSelectionModel> selectionModel;
    QScopedPointer<QProcess> process;
    bool usePass;
    bool useClipboard;
    bool useAutoclear;
    bool hidePassword;
    bool hideContent;
    bool addGPGId;
    int autoclearSeconds;
    QString passStore;
    QString passExecutable;
    QString gitExecutable;
    QString gpgExecutable;
    QString pwgenExecutable;
    QString gpgHome;
    bool useWebDav;
    QString webDavUrl;
    QString webDavUser;
    QString webDavPassword;
    QProcess fusedav;
    QString clippedPass;
    actionType currentAction;
    QString lastDecrypt;
    bool wrapperRunning;
    QStringList env;
    QQueue<execQueueItem> *execQueue;
    bool freshStart;
    QDialog *keygen;
    QString currentDir;
    QHash<QString, QString> profiles;
    QString profile;
    bool startupPhase;
    trayIcon *tray;
    bool useTrayIcon;
    bool hideOnClose;
    bool useGit;
    bool usePwgen;
    bool useSymbols;
    int passwordLength;
    QString passwordChars;
    void updateText();
    void executePass(QString, QString = QString());
    void executeWrapper(QString, QString, QString = QString());
    void config();
    void enableUiElements(bool);
    void selectFirstFile();
    QModelIndex firstFile(QModelIndex parentIndex);
    QString getDir(const QModelIndex &, bool);
    QString getFile(const QModelIndex &, bool);
    void setPassword(QString, bool, bool);
    QSettings &getSettings();
    QList<UserInfo> listKeys(QString keystring = "", bool secret = false);
    QStringList getRecipientList(QString for_file);
    QString getRecipientString(QString for_file, QString separator = " ", int *count = NULL);
    void mountWebDav();
    void updateEnv();
    void updateProfileBox();
    void initTrayIcon();
    void destroyTrayIcon();
    bool removeDir(const QString & dirName);
};

#endif // MAINWINDOW_H