Skip to content

Commit

Permalink
fix: config and login file path
Browse files Browse the repository at this point in the history
  • Loading branch information
Sorok-Dva committed Jul 24, 2024
1 parent 8b484d2 commit 8ee7284
Show file tree
Hide file tree
Showing 8 changed files with 121 additions and 33 deletions.
4 changes: 2 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -362,5 +362,5 @@ MigrationBackup/
# Fody - auto-generated XML schema
FodyWeavers.xsd

# Login info
resources/login_info.json
# Build
build/
43 changes: 43 additions & 0 deletions ScreenMe.pri
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
# ----------------------------------------------------
# This file is generated by the Qt Visual Studio Tools.
# ------------------------------------------------------

# This is a reminder that you are using a generated .pro file.
# Remove it when you are finished editing this file.
message("You are running qmake on a generated .pro file. This may not work!")


QT += core gui widgets
QT += websockets

HEADERS += ./include/config_manager.h \
./include/hotkeymap.h \
./include/uexception.h \
./include/uglobal.h \
./include/utils.h \
./include/screenshotdisplay.h \
./include/editor.h \
./include/customTextEdit.h \
./include/hotkeyEventFilter.h \
./include/globalKeyboardHook.h \
./include/main_window.h \
./include/ukeysequence.h \
./include/login_loader.h \
./include/login_server.h \
./include/uglobalhotkeys.h \
./include/options_window.h
SOURCES += ./src/customTextInput.cpp \
./src/editor.cpp \
./src/globalKeyboardHook.cpp \
./src/hotkeyEventFilter.cpp \
./src/login_loader.cpp \
./src/login_server.cpp \
./src/main_window.cpp \
./src/screenshotdisplay.cpp \
./src/uexception.cpp \
./src/uglobalhotkeys.cpp \
./src/ukeysequence.cpp \
./src/utils.cpp \
./main.cpp \
./src/config_manager.cpp \
./src/options_window.cpp
Binary file added ScreenMe.rc
Binary file not shown.
3 changes: 3 additions & 0 deletions include/utils.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,13 @@
QString getUniqueFilePath(const QString& folder, const QString& baseName, const QString& extension);
void CaptureScreenshot(const QString& savePath);
void displayScreenshotOnScreen(const QPixmap& pixmap);
QString getConfigFilePath(const QString& file);

void saveLoginInfo(const QString& id, const QString& email, const QString& nickname, const QString& token);
QString loadLoginInfo();
void clearLoginInfo();
void setAutoStart(bool enable);


//const QString SCREEN_ME_HOST = "http://127.0.0.1:3001";
const QString SCREEN_ME_HOST = "https://screen-me.cloud";
20 changes: 19 additions & 1 deletion main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
#include <QFile>
#include <QTextStream>
#include <QMessageBox>
#include <QSharedMemory>
#include <include/options_window.h>
#include <include/config_manager.h>
#include "include/login_loader.h"
Expand All @@ -20,7 +21,8 @@

using namespace std;

const QString VERSION = "1.1.0";
#define SHARED_MEM_KEY "ScreenMeSharedMemory"
const QString VERSION = "1.1.1";

static void showAboutDialog() {
QMessageBox aboutBox;
Expand Down Expand Up @@ -50,6 +52,13 @@ int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, char*, int nShowCmd)
FreeConsole();
#endif

QSharedMemory sharedMemory(SHARED_MEM_KEY);
if (!sharedMemory.create(1)) {
QMessageBox::warning(nullptr, "ScreenMe is already running",
"An instance of this application is already running. Please quit existing ScreenMe process first.");
return 1;
}

QString jsonStr = loadLoginInfo();
QJsonDocument jsonDoc = QJsonDocument::fromJson(jsonStr.toUtf8());
QJsonObject loginInfo = jsonDoc.object();
Expand All @@ -58,6 +67,15 @@ int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, char*, int nShowCmd)
QSystemTrayIcon trayIcon(QIcon("resources/icon.png"));
QMenu trayMenu;

QJsonObject config = configManager.loadConfig();
QVariant startWithSystemVar = config["start_with_system"].toBool();
if (startWithSystemVar.isValid() && startWithSystemVar.toBool()) {
setAutoStart(true);
}
else {
setAutoStart(false);
}

QAction loginAction("Login to ScreenMe", &trayMenu);
QAction takeScreenshotAction("Take Screenshot", &trayMenu);
QAction takeFullscreenScreenshotAction("Take Fullscreen Screenshot", &trayMenu);
Expand Down
8 changes: 0 additions & 8 deletions resources/config.json

This file was deleted.

32 changes: 18 additions & 14 deletions src/config_manager.cpp
Original file line number Diff line number Diff line change
@@ -1,39 +1,43 @@
#include "include/config_manager.h"
#include "include/utils.h"
#include <QFile>
#include <QJsonDocument>
#include <QJsonObject>
#include <QDir>

ConfigManager::ConfigManager(const QString& configPath) : configPath(configPath) {
QFile file(configPath);
if (!file.exists()) {
QString filePath = getConfigFilePath("config.json");
QFile configFile(filePath);
if (!configFile.exists()) {
QJsonObject defaultConfig;
defaultConfig["screenshot_hotkey"] = "Ctrl+Shift+S";
defaultConfig["fullscreen_hotkey"] = "Ctrl+Shift+F";
defaultConfig["screenshot_hotkey"] = "Print";
defaultConfig["fullscreen_hotkey"] = "Ctrl+Shift+Print";
defaultConfig["file_extension"] = "png";
defaultConfig["image_quality"] = 90;
defaultConfig["default_save_folder"] = QDir::homePath();
defaultConfig["start_with_system"] = false;
defaultConfig["default_save_folder"] = QDir::homePath() + "/Pictures/ScreenMe";
defaultConfig["start_with_system"] = true;
saveConfig(defaultConfig);
}
}

QJsonObject ConfigManager::loadConfig() {
QFile file(configPath);
if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
QString filePath = getConfigFilePath("config.json");
QFile configFile(filePath);
if (!configFile.open(QIODevice::ReadOnly | QIODevice::Text)) {
return QJsonObject();
}
QJsonDocument doc = QJsonDocument::fromJson(file.readAll());
file.close();
QJsonDocument doc = QJsonDocument::fromJson(configFile.readAll());
configFile.close();
return doc.object();
}

void ConfigManager::saveConfig(const QJsonObject& config) {
QFile file(configPath);
if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) {
QString filePath = getConfigFilePath("config.json");
QFile configFile(filePath);
if (!configFile.open(QIODevice::WriteOnly | QIODevice::Text)) {
return;
}
QJsonDocument doc(config);
file.write(doc.toJson());
file.close();
configFile.write(doc.toJson());
configFile.close();
}
44 changes: 36 additions & 8 deletions src/utils.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@
#include <QJsonDocument>
#include <QJsonObject>
#include <QString>
#include <QStandardPaths>
#include <QSettings>

QString getUniqueFilePath(const QString& folder, const QString& baseName, const QString& extension) {
QDir dir(folder);
Expand All @@ -26,6 +28,15 @@ QString getUniqueFilePath(const QString& folder, const QString& baseName, const
return filePath;
}

QString getConfigFilePath(const QString& file) {
QString configPath = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation);
QDir dir(configPath);
if (!dir.exists()) {
dir.mkpath(".");
}
return dir.filePath(file);
}

void CaptureScreenshot(const QString& savePath) {
QScreen* screen = QGuiApplication::primaryScreen();
if (!screen) {
Expand All @@ -43,29 +54,46 @@ void displayScreenshotOnScreen(const QPixmap& pixmap) {
}

void saveLoginInfo(const QString& id, const QString& email, const QString& nickname, const QString& token) {
QFile file("resources/login_info.json");
if (file.open(QIODevice::WriteOnly)) {
QString filePath = getConfigFilePath("login_info.json");
QFile loginFile(filePath);
if (loginFile.open(QIODevice::WriteOnly)) {
QJsonObject jsonObj;
jsonObj["id"] = id;
jsonObj["email"] = email;
jsonObj["nickname"] = nickname;
jsonObj["token"] = token;

QJsonDocument jsonDoc(jsonObj);
file.write(jsonDoc.toJson());
loginFile.write(jsonDoc.toJson());
}
}

QString loadLoginInfo() {
QFile file("resources/login_info.json");
if (file.open(QIODevice::ReadOnly)) {
QByteArray data = file.readAll();
QString filePath = getConfigFilePath("login_info.json");
QFile loginFile(filePath);
if (loginFile.open(QIODevice::ReadOnly)) {
QByteArray data = loginFile.readAll();
return QString(data);
}
return QString();
}

void clearLoginInfo() {
QFile file("resources/login_info.json");
file.remove();
QString filePath = getConfigFilePath("login_info.json");
QFile loginFile(filePath);
loginFile.remove();
}


void setAutoStart(bool enable) {
QSettings settings("HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Run", QSettings::NativeFormat);

if (enable) {
QString applicationName = QApplication::applicationName();
QString applicationPath = QDir::toNativeSeparators(QCoreApplication::applicationFilePath());
settings.setValue(applicationName, applicationPath);
}
else {
settings.remove(QApplication::applicationName());
}
}

0 comments on commit 8ee7284

Please sign in to comment.