Files
frelay/Util/Util.cpp

178 lines
4.2 KiB
C++
Raw Normal View History

2025-06-17 16:42:39 +08:00
#include "Util.h"
2025-06-14 23:25:16 +08:00
#include <QDateTime>
#include <QDebug>
2025-06-15 23:13:30 +08:00
#include <QDir>
#include <QFileInfo>
2025-06-14 23:25:16 +08:00
#include <QMutex>
2025-06-15 23:13:30 +08:00
#include <QStandardPaths>
2025-06-14 23:25:16 +08:00
#include <iostream>
#include <spdlog/fmt/bundled/color.h>
#include <spdlog/fmt/fmt.h>
#include <spdlog/sinks/rotating_file_sink.h>
#include <spdlog/sinks/stdout_color_sinks.h>
#include <spdlog/spdlog.h>
#ifdef Q_OS_WIN
#include <windows.h>
#endif
static QMutex msgMutex;
static std::shared_ptr<spdlog::logger> logger;
Util::Util()
{
}
2025-06-15 23:13:30 +08:00
QString Util::GetUserHome()
{
QString homePath = QStandardPaths::writableLocation(QStandardPaths::HomeLocation);
if (homePath.isEmpty()) {
qWarning() << "Failed to get user home directory";
homePath = QDir::homePath();
}
return homePath;
}
2025-06-20 10:33:03 +08:00
QString Util::GetCurConfigPath(const QString& sub)
{
// Get user's home directory
QString homePath = QStandardPaths::writableLocation(QStandardPaths::HomeLocation);
if (homePath.isEmpty()) {
qWarning() << "Failed to get user home directory";
return QString();
}
auto configPath = QDir(homePath).absoluteFilePath(".config");
// Append subdirectory if provided
if (!sub.isEmpty()) {
configPath = QDir(configPath).absoluteFilePath(sub);
}
// Create the directory if it doesn't exist
QDir dir(configPath);
if (!dir.exists()) {
if (!dir.mkpath(".")) {
qWarning() << "Failed to create config directory:" << configPath;
return QString();
}
}
return QDir::cleanPath(configPath);
}
2025-06-18 14:53:56 +08:00
QString Util::Join(const QString& path, const QString& name)
{
return QDir::cleanPath(path + QDir::separator() + name);
}
2025-06-14 23:25:16 +08:00
void Util::InitLogger(const QString& logPath, const QString& mark)
{
auto file_sink = std::make_shared<spdlog::sinks::rotating_file_sink_mt>(logPath.toStdString(), 1024 * 1024 * 50, 3);
auto console_sink = std::make_shared<spdlog::sinks::stdout_color_sink_mt>();
file_sink->set_pattern("[%Y-%m-%d %H:%M:%S.%e][%l]: %v");
console_sink->set_pattern("%^[%Y-%m-%d %H:%M:%S.%e][%l]: %v%$");
std::vector<spdlog::sink_ptr> sinks{file_sink, console_sink};
logger = std::make_shared<spdlog::logger>(mark.toStdString(), sinks.begin(), sinks.end());
logger->set_level(spdlog::level::debug);
spdlog::register_logger(logger);
}
2025-06-20 13:03:27 +08:00
// do not check exit
2025-06-17 16:42:39 +08:00
QString Util::Get2FilePath(const QString& file, const QString& directory)
{
if (file.isEmpty() || directory.isEmpty()) {
return QString();
}
2025-06-20 13:03:27 +08:00
QString fileName = QFileInfo(file).fileName();
QString cleanDir = QDir::cleanPath(directory);
QString fullPath = QDir(cleanDir).filePath(fileName);
2025-06-17 16:42:39 +08:00
2025-06-20 13:03:27 +08:00
return QDir::cleanPath(fullPath);
2025-06-17 16:42:39 +08:00
}
2025-06-14 23:25:16 +08:00
void Util::ConsoleMsgHander(QtMsgType type, const QMessageLogContext& context, const QString& msg)
{
Q_UNUSED(context);
switch (type) {
case QtDebugMsg:
logger->debug(msg.toStdString());
break;
case QtInfoMsg:
logger->info(msg.toStdString());
break;
case QtWarningMsg:
logger->warn(msg.toStdString());
break;
case QtCriticalMsg:
logger->error(msg.toStdString());
break;
case QtFatalMsg:
logger->critical(msg.toStdString());
break;
default:
logger->warn("Unknown QtMsgType type.");
break;
}
}
2025-06-15 14:31:54 +08:00
QString DirFileHelper::GetErr() const
{
return QString();
}
DirFileHelper::DirFileHelper(QObject* parent) : QObject(parent)
2025-06-15 14:31:54 +08:00
{
2025-06-20 16:00:18 +08:00
}
GlobalData* GlobalData::Ins()
{
static GlobalData instance;
return &instance;
}
void GlobalData::SetLocalRoot(const QString& root)
{
QMutexLocker locker(&mutex_);
LocalRoot_ = root;
}
void GlobalData::SetLocalID(const QString& id)
{
QMutexLocker locker(&mutex_);
LocalID_ = id;
}
void GlobalData::SetRemoteID(const QString& id)
{
QMutexLocker locker(&mutex_);
RemoteID_ = id;
2025-06-20 16:00:18 +08:00
}
void GlobalData::SetRemoteRoot(const QString& root)
{
QMutexLocker locker(&mutex_);
RemoteRoot_ = root;
2025-06-20 16:00:18 +08:00
}
QString GlobalData::GetLocalRoot() const
{
return LocalRoot_;
}
QString GlobalData::GetLocalID() const
{
return LocalID_;
}
2025-06-20 16:00:18 +08:00
QString GlobalData::GetRemoteRoot() const
{
return RemoteRoot_;
}
QString GlobalData::GetRemoteID() const
{
return RemoteID_;
}