/* * This file contains minor utility functions */ #include #include #include #include #include #include #include #include #include #include "models/settings.h" #include "utils.h" bool checkInternetConnection(QUrl url) { QNetworkAccessManager nam; QNetworkRequest req(url); QNetworkReply* reply = nam.get(req); QEventLoop loop; QObject::connect(reply, &QNetworkReply::finished, &loop, &QEventLoop::quit); QTimer request_timeout_timer; QObject::connect(&request_timeout_timer, &QTimer::timeout, &loop, &QEventLoop::quit); request_timeout_timer.start(5000); // 5 seconds connection timeout loop.exec(); return reply->bytesAvailable(); } void logMessageHandler(QtMsgType type, const QMessageLogContext &context, const QString &msg) { QString message_type; switch (type) { case QtDebugMsg: message_type = "[DEBG]"; break; case QtInfoMsg: message_type = "[INFO]"; break; case QtWarningMsg: message_type = "[WARN]"; break; case QtCriticalMsg: message_type = "[CRIT]"; break; case QtFatalMsg: message_type = "[FATL]"; break; default: message_type = "[UNKN]"; break; } QString filename = context.category; QString function = context.function; QString line_number = QString::number(context.line); QString s = QString("%1: %2 ||| %3:%4 %5\n") .arg(message_type) .arg(msg) .arg(filename) .arg(line_number) .arg(function); #ifdef QT_DEBUG QFile log_file("legacy_v2.log"); log_file.open(QIODevice::ReadWrite | QIODevice::Append); QTextStream stream(&log_file); stream << s; log_file.close(); #endif fprintf(stderr, "%s", qUtf8Printable(s)); fflush(stderr); } bool checkSingleAppInstance() { QLockFile lockFile(QDir::temp().absoluteFilePath("rulotro.lock")); if(!lockFile.tryLock(1)){ qDebug() << "Lock file already exists! Some other application is already running..."; QMessageBox msgBox; msgBox.setIcon(QMessageBox::Warning); msgBox.setText("Приложение уже запущено.\nРазрешено запускать только один экземпляр приложения."); msgBox.exec(); return false; } return true; } AppErrorStatus CheckAppPrerequesities() { QString game_folder_path = Settings::getValue("Lotro/game_path").toString(); QString locale_prefix = Settings::getValue("Lotro/original_locale").toString(); // Checking LotroLauncher.exe availability QFileInfo lotro_launcher_exe(game_folder_path + "/LotroLauncher.exe"); if (!lotro_launcher_exe.exists()) { return E_WRONG_GAME_FOLDER; } else { if (!QFile::setPermissions(lotro_launcher_exe.absoluteFilePath(), QFileDevice::ReadUser | QFileDevice::WriteUser | QFileDevice::ExeUser)) { return E_WRONG_FILE_PERMISSIONS; } } // Checking DAT files availability & correctness QString client_local_filepath = game_folder_path + "/client_local_" + locale_prefix + ".dat"; QString client_general_filepath = game_folder_path + "/client_general.dat"; QFileInfo client_local_file(client_local_filepath); QFileInfo client_general_file(client_general_filepath); if (!client_general_file.exists() || !client_local_file.exists()) { return E_DAT_FILES_MISSING; } else { if (!QFile::setPermissions(client_general_filepath, QFileDevice::ReadUser | QFileDevice::WriteUser | QFileDevice::ExeUser)) { return E_WRONG_FILE_PERMISSIONS; } if (!QFile::setPermissions(client_local_filepath, QFileDevice::ReadUser | QFileDevice::WriteUser | QFileDevice::ExeUser)) { return E_WRONG_FILE_PERMISSIONS; } LOTRO_DAT::DatFile file(0); if (!file.Init(client_local_file.absoluteFilePath().toStdString())) { return E_DAT_FILE_INCORRECT; } else { file.Deinit(); } if (!file.Init(client_general_file.absoluteFilePath().toStdString())) { return E_DAT_FILE_INCORRECT; } else { file.Deinit(); } } if (!checkInternetConnection(QUrl(Settings::getValue("Network/patch_updates_url").toString()))) { return E_NO_SERVER_CONNECTION; } return E_NO_ERRORS; } QDebug operator<<(QDebug dbg, const AppErrorStatus &status) { bool wrong_game_folder = (status & E_WRONG_GAME_FOLDER); bool dat_files_missing = (status & E_DAT_FILES_MISSING); bool wrong_file_permissions = (status & E_WRONG_FILE_PERMISSIONS); bool cannot_access_dat_files = (status & E_CANNOT_ACCESS_DAT_FILES); bool dat_file_incorrect = (status & E_DAT_FILE_INCORRECT); bool no_server_connection = (status & E_NO_SERVER_CONNECTION); dbg.nospace() << "ErrorStatus ( " << (wrong_game_folder ? "Wrong game folder! " : "") << (dat_files_missing ? "Dat files missing! " : "") << (wrong_file_permissions ? "Wrong file permissions! " : "") << (cannot_access_dat_files ? "Cannot access dat files! " : "") << (dat_file_incorrect ? "Incorrect dat file! " : "") << (no_server_connection ? "No server connection! " : "") << ")"; return dbg; } PANIC: session(release): write data/sessions/c/5/c5332a0ab028eccd: no space left on device

PANIC

session(release): write data/sessions/c/5/c5332a0ab028eccd: no space left on device
github.com/go-macaron/session@v0.0.0-20190805070824-1a3cdc6f5659/session.go:199 (0x8b2934)
gopkg.in/macaron.v1@v1.3.9/context.go:79 (0x83d0a0)
github.com/go-macaron/inject@v0.0.0-20160627170012-d8a0b8677191/inject.go:157 (0x80ab07)
github.com/go-macaron/inject@v0.0.0-20160627170012-d8a0b8677191/inject.go:135 (0x80a8a8)
gopkg.in/macaron.v1@v1.3.9/context.go:121 (0x83d1f8)
gopkg.in/macaron.v1@v1.3.9/context.go:112 (0x84fdb5)
gopkg.in/macaron.v1@v1.3.9/recovery.go:161 (0x84fda8)
gopkg.in/macaron.v1@v1.3.9/logger.go:40 (0x840c73)
github.com/go-macaron/inject@v0.0.0-20160627170012-d8a0b8677191/inject.go:157 (0x80ab07)
github.com/go-macaron/inject@v0.0.0-20160627170012-d8a0b8677191/inject.go:135 (0x80a8a8)
gopkg.in/macaron.v1@v1.3.9/context.go:121 (0x83d1f8)
gopkg.in/macaron.v1@v1.3.9/router.go:187 (0x850fc6)
gopkg.in/macaron.v1@v1.3.9/router.go:303 (0x8493e5)
gopkg.in/macaron.v1@v1.3.9/macaron.go:220 (0x841fca)
net/http/server.go:2836 (0x7a79b2)
net/http/server.go:1924 (0x7a341b)
runtime/asm_amd64.s:1373 (0x46f9f0)