Skip to content

Commit 7a7fa4c

Browse files
committed
Initial release of Empyrion Save
1 parent 4361a4a commit 7a7fa4c

9 files changed

+767
-15
lines changed

.gitignore

+75-15
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,75 @@
1-
# Binaries for programs and plugins
2-
*.exe
3-
*.exe~
4-
*.dll
5-
*.so
6-
*.dylib
7-
8-
# Test binary, built with `go test -c`
9-
*.test
10-
11-
# Output of the go coverage tool, specifically when used with LiteIDE
12-
*.out
13-
14-
# Dependency directories (remove the comment below to include it)
15-
# vendor/
1+
# This file is used to ignore files which are generated
2+
# ----------------------------------------------------------------------------
3+
4+
*~
5+
*.autosave
6+
*.a
7+
*.core
8+
*.moc
9+
*.o
10+
*.obj
11+
*.orig
12+
*.rej
13+
*.so
14+
*.so.*
15+
*_pch.h.cpp
16+
*_resource.rc
17+
*.qm
18+
.#*
19+
*.*#
20+
core
21+
!core/
22+
tags
23+
.DS_Store
24+
.directory
25+
*.debug
26+
Makefile*
27+
*.prl
28+
*.app
29+
moc_*.cpp
30+
ui_*.h
31+
qrc_*.cpp
32+
Thumbs.db
33+
*.res
34+
*.rc
35+
/.qmake.cache
36+
/.qmake.stash
37+
38+
# qtcreator generated files
39+
*.pro.user*
40+
41+
# xemacs temporary files
42+
*.flc
43+
44+
# Vim temporary files
45+
.*.swp
46+
47+
# Visual Studio generated files
48+
*.ib_pdb_index
49+
*.idb
50+
*.ilk
51+
*.pdb
52+
*.sln
53+
*.suo
54+
*.vcproj
55+
*vcproj.*.*.user
56+
*.ncb
57+
*.sdf
58+
*.opensdf
59+
*.vcxproj
60+
*vcxproj.*
61+
62+
# MinGW generated files
63+
*.Debug
64+
*.Release
65+
66+
# Python byte code
67+
*.pyc
68+
69+
# Binaries
70+
# --------
71+
*.dll
72+
*.exe
73+
74+
# Third-party libraries
75+
/thirdparty

empyrionsave.pro

+31
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
QT += core gui
2+
3+
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
4+
5+
CONFIG += c++11
6+
7+
# You can make your code fail to compile if it uses deprecated APIs.
8+
# In order to do so, uncomment the following line.
9+
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
10+
11+
SOURCES += \
12+
main.cpp \
13+
mainwindow.cpp \
14+
utils.cpp
15+
16+
HEADERS += \
17+
mainwindow.h \
18+
utils.h
19+
20+
FORMS += \
21+
mainwindow.ui
22+
23+
# Default rules for deployment.
24+
qnx: target.path = /tmp/$${TARGET}/bin
25+
else: unix:!android: target.path = /opt/$${TARGET}/bin
26+
!isEmpty(target.path): INSTALLS += target
27+
28+
# QuaZIP
29+
DEFINES += QUAZIP_STATIC
30+
INCLUDEPATH += $$[QT_INSTALL_HEADERS]/QtZlib
31+
include(thirdparty/quazip-0.9.1/quazip.pri)

main.cpp

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
#include "mainwindow.h"
2+
3+
#include <QApplication>
4+
5+
int main(int argc, char *argv[]) {
6+
QApplication a(argc, argv);
7+
MainWindow w;
8+
w.show();
9+
return a.exec();
10+
}

mainwindow.cpp

+166
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,166 @@
1+
#include "mainwindow.h"
2+
#include "ui_mainwindow.h"
3+
#include "utils.h"
4+
5+
#include <QSettings>
6+
#include <QMessageBox>
7+
#include <QDialogButtonBox>
8+
#include <QFileDialog>
9+
#include <QDateTime>
10+
11+
QSettings *mySettings;
12+
13+
MainWindow::MainWindow(QWidget *parent)
14+
: QMainWindow(parent)
15+
, ui(new Ui::MainWindow) {
16+
ui->setupUi(this);
17+
18+
// Load settings.
19+
mySettings = new QSettings("stevenlafl", "empyrionsave");
20+
this->loadSettings();
21+
}
22+
23+
MainWindow::~MainWindow() {
24+
delete mySettings;
25+
if (timer.isActive()) {
26+
timer.stop();
27+
}
28+
delete ui;
29+
}
30+
31+
void MainWindow::loadSettings() {
32+
int x = mySettings->value("timerSlider").toInt();
33+
34+
// Trigger slider move.
35+
ui->timerSlider->setValue(x);
36+
this->on_timerSlider_sliderMoved(x);
37+
38+
ui->backupEdit->setText(mySettings->value("backupFolder").toString());
39+
ui->saveEdit->setText(mySettings->value("saveFolder").toString());
40+
ui->saveZipCheck->setChecked(mySettings->value("saveAsZip").toBool());
41+
42+
ui->statusbar->showMessage("Settings loaded", 1 * 1000);
43+
}
44+
45+
void MainWindow::saveSettings() {
46+
mySettings->setValue("timerSlider", ui->timerSlider->value());
47+
mySettings->setValue("backupFolder", ui->backupEdit->text());
48+
mySettings->setValue("saveFolder", ui->saveEdit->text());
49+
mySettings->setValue("saveAsZip", ui->saveZipCheck->isChecked());
50+
51+
ui->statusbar->showMessage("Settings saved", 1 * 1000);
52+
}
53+
54+
void MainWindow::backupSave() {
55+
56+
QString backupDir = ui->backupEdit->text();
57+
QString saveDir = ui->saveEdit->text();
58+
59+
QString timeString = QDateTime::currentDateTime().toString("yyyy-MM-dd_hh-mm-ss");
60+
QString fileName = QDir(saveDir).dirName() + "_" + timeString;
61+
QString fullPath = backupDir + "/" + fileName;
62+
63+
if (ui->saveZipCheck->isChecked()) {
64+
fullPath += ".zip";
65+
fileName += ".zip";
66+
if (Utils::archive(fullPath, saveDir)) {
67+
ui->statusbar->showMessage("Backup saved: " + fileName, 1 * 1000);
68+
}
69+
else {
70+
ui->statusbar->showMessage("Backup failed: " + fileName, 1 * 1000);
71+
}
72+
}
73+
else {
74+
if (Utils::copyPath(saveDir, fullPath, true)) {
75+
ui->statusbar->showMessage("Backup saved: " + fileName, 1 * 1000);
76+
}
77+
else {
78+
ui->statusbar->showMessage("Backup failed: " + fileName, 1 * 1000);
79+
}
80+
}
81+
82+
ui->textEdit->setText(saveDir + " ---> " + fullPath);
83+
}
84+
85+
void MainWindow::closeEvent(QCloseEvent *event) {
86+
QMessageBox::StandardButton resBtn = QMessageBox::question( this, "Empyrion Save",
87+
"Are you sure you want to exit?",
88+
QMessageBox::Yes | QMessageBox::No | QMessageBox::Cancel,
89+
QMessageBox::Yes);
90+
if (resBtn != QMessageBox::Yes) {
91+
event->ignore();
92+
} else {
93+
event->accept();
94+
}
95+
}
96+
97+
void MainWindow::timerEvent(QTimerEvent *event) {
98+
if (event->timerId() == timer.timerId()) {
99+
timerCounter++;
100+
101+
if (timerCounter > timerMax) {
102+
timerCounter = 0;
103+
this->backupSave();
104+
}
105+
else {
106+
ui->statusbar->showMessage("Last saved " + this->getMinuteString(timerCounter) + " ago", 1 * 1000);
107+
}
108+
} else {
109+
QWidget::timerEvent(event);
110+
}
111+
}
112+
113+
QString MainWindow::getMinuteString(int seconds) {
114+
int min = seconds / 60;
115+
int sec = seconds % 60;
116+
QString time = "";
117+
118+
time += QString("%1m%2s").arg(
119+
QVariant(min).toString().rightJustified(2, '0'),
120+
QVariant(sec).toString().rightJustified(2, '0'));
121+
122+
return time;
123+
}
124+
125+
void MainWindow::on_timerSlider_sliderMoved(int position) {
126+
ui->intervalLabel->setText(this->getMinuteString(position));
127+
}
128+
129+
void MainWindow::on_saveBrowse_clicked() {
130+
QString dir = QFileDialog::getExistingDirectory(this, tr("Open Directory"),
131+
ui->saveEdit->text(),
132+
QFileDialog::ShowDirsOnly
133+
| QFileDialog::DontResolveSymlinks);
134+
if (!dir.isEmpty())
135+
{
136+
ui->saveEdit->setText(dir);
137+
}
138+
}
139+
140+
void MainWindow::on_backupBrowse_clicked() {
141+
QString dir = QFileDialog::getExistingDirectory(this, tr("Open Directory"),
142+
ui->backupEdit->text(),
143+
QFileDialog::ShowDirsOnly
144+
| QFileDialog::DontResolveSymlinks);
145+
if (!dir.isEmpty()) {
146+
ui->backupEdit->setText(dir);
147+
}
148+
}
149+
150+
void MainWindow::on_saveButton_clicked() {
151+
this->saveSettings();
152+
}
153+
154+
void MainWindow::on_startButton_clicked() {
155+
if (!timer.isActive()) {
156+
timerCounter = 0;
157+
timerMax = ui->timerSlider->value();
158+
timer.start(1 * 1000, this);
159+
ui->startButton->setText("Stop");
160+
}
161+
else {
162+
timerCounter = 0;
163+
ui->startButton->setText("Start");
164+
timer.stop();
165+
}
166+
}

mainwindow.h

+46
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
#ifndef MAINWINDOW_H
2+
#define MAINWINDOW_H
3+
4+
#include <QMainWindow>
5+
#include <QBasicTimer>
6+
#include <QCloseEvent>
7+
8+
QT_BEGIN_NAMESPACE
9+
namespace Ui { class MainWindow; }
10+
QT_END_NAMESPACE
11+
12+
class MainWindow : public QMainWindow {
13+
Q_OBJECT
14+
15+
public:
16+
MainWindow(QWidget *parent = nullptr);
17+
~MainWindow();
18+
19+
void closeEvent(QCloseEvent (*event));
20+
QString getMinuteString(int seconds);
21+
22+
private slots:
23+
void on_timerSlider_sliderMoved(int position);
24+
25+
void on_saveBrowse_clicked();
26+
27+
void on_backupBrowse_clicked();
28+
29+
void on_saveButton_clicked();
30+
31+
void on_startButton_clicked();
32+
33+
private:
34+
Ui::MainWindow *ui;
35+
QBasicTimer timer;
36+
int timerCounter = 0;
37+
int timerMax = 0;
38+
39+
protected:
40+
void timerEvent(QTimerEvent *event) override;
41+
void loadSettings();
42+
void saveSettings();
43+
44+
void backupSave();
45+
};
46+
#endif // MAINWINDOW_H

0 commit comments

Comments
 (0)