Skip to content

Commit 8ee7284

Browse files
committed
fix: config and login file path
1 parent 8b484d2 commit 8ee7284

File tree

8 files changed

+121
-33
lines changed

8 files changed

+121
-33
lines changed

.gitignore

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -362,5 +362,5 @@ MigrationBackup/
362362
# Fody - auto-generated XML schema
363363
FodyWeavers.xsd
364364

365-
# Login info
366-
resources/login_info.json
365+
# Build
366+
build/

ScreenMe.pri

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
# ----------------------------------------------------
2+
# This file is generated by the Qt Visual Studio Tools.
3+
# ------------------------------------------------------
4+
5+
# This is a reminder that you are using a generated .pro file.
6+
# Remove it when you are finished editing this file.
7+
message("You are running qmake on a generated .pro file. This may not work!")
8+
9+
10+
QT += core gui widgets
11+
QT += websockets
12+
13+
HEADERS += ./include/config_manager.h \
14+
./include/hotkeymap.h \
15+
./include/uexception.h \
16+
./include/uglobal.h \
17+
./include/utils.h \
18+
./include/screenshotdisplay.h \
19+
./include/editor.h \
20+
./include/customTextEdit.h \
21+
./include/hotkeyEventFilter.h \
22+
./include/globalKeyboardHook.h \
23+
./include/main_window.h \
24+
./include/ukeysequence.h \
25+
./include/login_loader.h \
26+
./include/login_server.h \
27+
./include/uglobalhotkeys.h \
28+
./include/options_window.h
29+
SOURCES += ./src/customTextInput.cpp \
30+
./src/editor.cpp \
31+
./src/globalKeyboardHook.cpp \
32+
./src/hotkeyEventFilter.cpp \
33+
./src/login_loader.cpp \
34+
./src/login_server.cpp \
35+
./src/main_window.cpp \
36+
./src/screenshotdisplay.cpp \
37+
./src/uexception.cpp \
38+
./src/uglobalhotkeys.cpp \
39+
./src/ukeysequence.cpp \
40+
./src/utils.cpp \
41+
./main.cpp \
42+
./src/config_manager.cpp \
43+
./src/options_window.cpp

ScreenMe.rc

2.6 KB
Binary file not shown.

include/utils.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,13 @@
66
QString getUniqueFilePath(const QString& folder, const QString& baseName, const QString& extension);
77
void CaptureScreenshot(const QString& savePath);
88
void displayScreenshotOnScreen(const QPixmap& pixmap);
9+
QString getConfigFilePath(const QString& file);
910

1011
void saveLoginInfo(const QString& id, const QString& email, const QString& nickname, const QString& token);
1112
QString loadLoginInfo();
1213
void clearLoginInfo();
14+
void setAutoStart(bool enable);
15+
1316

1417
//const QString SCREEN_ME_HOST = "http://127.0.0.1:3001";
1518
const QString SCREEN_ME_HOST = "https://screen-me.cloud";

main.cpp

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
#include <QFile>
1010
#include <QTextStream>
1111
#include <QMessageBox>
12+
#include <QSharedMemory>
1213
#include <include/options_window.h>
1314
#include <include/config_manager.h>
1415
#include "include/login_loader.h"
@@ -20,7 +21,8 @@
2021

2122
using namespace std;
2223

23-
const QString VERSION = "1.1.0";
24+
#define SHARED_MEM_KEY "ScreenMeSharedMemory"
25+
const QString VERSION = "1.1.1";
2426

2527
static void showAboutDialog() {
2628
QMessageBox aboutBox;
@@ -50,6 +52,13 @@ int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, char*, int nShowCmd)
5052
FreeConsole();
5153
#endif
5254

55+
QSharedMemory sharedMemory(SHARED_MEM_KEY);
56+
if (!sharedMemory.create(1)) {
57+
QMessageBox::warning(nullptr, "ScreenMe is already running",
58+
"An instance of this application is already running. Please quit existing ScreenMe process first.");
59+
return 1;
60+
}
61+
5362
QString jsonStr = loadLoginInfo();
5463
QJsonDocument jsonDoc = QJsonDocument::fromJson(jsonStr.toUtf8());
5564
QJsonObject loginInfo = jsonDoc.object();
@@ -58,6 +67,15 @@ int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, char*, int nShowCmd)
5867
QSystemTrayIcon trayIcon(QIcon("resources/icon.png"));
5968
QMenu trayMenu;
6069

70+
QJsonObject config = configManager.loadConfig();
71+
QVariant startWithSystemVar = config["start_with_system"].toBool();
72+
if (startWithSystemVar.isValid() && startWithSystemVar.toBool()) {
73+
setAutoStart(true);
74+
}
75+
else {
76+
setAutoStart(false);
77+
}
78+
6179
QAction loginAction("Login to ScreenMe", &trayMenu);
6280
QAction takeScreenshotAction("Take Screenshot", &trayMenu);
6381
QAction takeFullscreenScreenshotAction("Take Fullscreen Screenshot", &trayMenu);

resources/config.json

Lines changed: 0 additions & 8 deletions
This file was deleted.

src/config_manager.cpp

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,43 @@
11
#include "include/config_manager.h"
2+
#include "include/utils.h"
23
#include <QFile>
34
#include <QJsonDocument>
45
#include <QJsonObject>
56
#include <QDir>
67

78
ConfigManager::ConfigManager(const QString& configPath) : configPath(configPath) {
8-
QFile file(configPath);
9-
if (!file.exists()) {
9+
QString filePath = getConfigFilePath("config.json");
10+
QFile configFile(filePath);
11+
if (!configFile.exists()) {
1012
QJsonObject defaultConfig;
11-
defaultConfig["screenshot_hotkey"] = "Ctrl+Shift+S";
12-
defaultConfig["fullscreen_hotkey"] = "Ctrl+Shift+F";
13+
defaultConfig["screenshot_hotkey"] = "Print";
14+
defaultConfig["fullscreen_hotkey"] = "Ctrl+Shift+Print";
1315
defaultConfig["file_extension"] = "png";
1416
defaultConfig["image_quality"] = 90;
15-
defaultConfig["default_save_folder"] = QDir::homePath();
16-
defaultConfig["start_with_system"] = false;
17+
defaultConfig["default_save_folder"] = QDir::homePath() + "/Pictures/ScreenMe";
18+
defaultConfig["start_with_system"] = true;
1719
saveConfig(defaultConfig);
1820
}
1921
}
2022

2123
QJsonObject ConfigManager::loadConfig() {
22-
QFile file(configPath);
23-
if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
24+
QString filePath = getConfigFilePath("config.json");
25+
QFile configFile(filePath);
26+
if (!configFile.open(QIODevice::ReadOnly | QIODevice::Text)) {
2427
return QJsonObject();
2528
}
26-
QJsonDocument doc = QJsonDocument::fromJson(file.readAll());
27-
file.close();
29+
QJsonDocument doc = QJsonDocument::fromJson(configFile.readAll());
30+
configFile.close();
2831
return doc.object();
2932
}
3033

3134
void ConfigManager::saveConfig(const QJsonObject& config) {
32-
QFile file(configPath);
33-
if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) {
35+
QString filePath = getConfigFilePath("config.json");
36+
QFile configFile(filePath);
37+
if (!configFile.open(QIODevice::WriteOnly | QIODevice::Text)) {
3438
return;
3539
}
3640
QJsonDocument doc(config);
37-
file.write(doc.toJson());
38-
file.close();
41+
configFile.write(doc.toJson());
42+
configFile.close();
3943
}

src/utils.cpp

Lines changed: 36 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99
#include <QJsonDocument>
1010
#include <QJsonObject>
1111
#include <QString>
12+
#include <QStandardPaths>
13+
#include <QSettings>
1214

1315
QString getUniqueFilePath(const QString& folder, const QString& baseName, const QString& extension) {
1416
QDir dir(folder);
@@ -26,6 +28,15 @@ QString getUniqueFilePath(const QString& folder, const QString& baseName, const
2628
return filePath;
2729
}
2830

31+
QString getConfigFilePath(const QString& file) {
32+
QString configPath = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation);
33+
QDir dir(configPath);
34+
if (!dir.exists()) {
35+
dir.mkpath(".");
36+
}
37+
return dir.filePath(file);
38+
}
39+
2940
void CaptureScreenshot(const QString& savePath) {
3041
QScreen* screen = QGuiApplication::primaryScreen();
3142
if (!screen) {
@@ -43,29 +54,46 @@ void displayScreenshotOnScreen(const QPixmap& pixmap) {
4354
}
4455

4556
void saveLoginInfo(const QString& id, const QString& email, const QString& nickname, const QString& token) {
46-
QFile file("resources/login_info.json");
47-
if (file.open(QIODevice::WriteOnly)) {
57+
QString filePath = getConfigFilePath("login_info.json");
58+
QFile loginFile(filePath);
59+
if (loginFile.open(QIODevice::WriteOnly)) {
4860
QJsonObject jsonObj;
4961
jsonObj["id"] = id;
5062
jsonObj["email"] = email;
5163
jsonObj["nickname"] = nickname;
5264
jsonObj["token"] = token;
5365

5466
QJsonDocument jsonDoc(jsonObj);
55-
file.write(jsonDoc.toJson());
67+
loginFile.write(jsonDoc.toJson());
5668
}
5769
}
5870

5971
QString loadLoginInfo() {
60-
QFile file("resources/login_info.json");
61-
if (file.open(QIODevice::ReadOnly)) {
62-
QByteArray data = file.readAll();
72+
QString filePath = getConfigFilePath("login_info.json");
73+
QFile loginFile(filePath);
74+
if (loginFile.open(QIODevice::ReadOnly)) {
75+
QByteArray data = loginFile.readAll();
6376
return QString(data);
6477
}
6578
return QString();
6679
}
6780

6881
void clearLoginInfo() {
69-
QFile file("resources/login_info.json");
70-
file.remove();
82+
QString filePath = getConfigFilePath("login_info.json");
83+
QFile loginFile(filePath);
84+
loginFile.remove();
85+
}
86+
87+
88+
void setAutoStart(bool enable) {
89+
QSettings settings("HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Run", QSettings::NativeFormat);
90+
91+
if (enable) {
92+
QString applicationName = QApplication::applicationName();
93+
QString applicationPath = QDir::toNativeSeparators(QCoreApplication::applicationFilePath());
94+
settings.setValue(applicationName, applicationPath);
95+
}
96+
else {
97+
settings.remove(QApplication::applicationName());
98+
}
7199
}

0 commit comments

Comments
 (0)