summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorisanae <14251494+isanae@users.noreply.github.com>2019-07-16 05:38:32 -0400
committerisanae <14251494+isanae@users.noreply.github.com>2019-07-22 07:33:37 -0400
commit54d98e291701f2187174a67c186f1ea762c6b959 (patch)
tree5ef78396bf9bc364146ae7bd4dd9a9fee2529504 /src
parentbc9f286bce224743d244e540d55f26b55affbd4a (diff)
removed unused or redundant stuff in error_report.h
renamed log() to vlog() for now extracted console creation to Console class rewrote LogBuffer to work with logging from uibase, renamed to LogModel added fmt dependency
Diffstat (limited to 'src')
-rw-r--r--src/CMakeLists.txt6
-rw-r--r--src/logbuffer.cpp263
-rw-r--r--src/logbuffer.h70
-rw-r--r--src/main.cpp116
-rw-r--r--src/mainwindow.cpp35
-rw-r--r--src/mainwindow.h1
-rw-r--r--src/mainwindow.ui15
-rw-r--r--src/organizercore.cpp1
-rw-r--r--src/profile.cpp5
-rw-r--r--src/shared/directoryentry.cpp12
-rw-r--r--src/shared/error_report.cpp45
-rw-r--r--src/shared/error_report.h21
12 files changed, 247 insertions, 343 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index f197211a..a359b8a9 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -520,6 +520,9 @@ LINK_DIRECTORIES(${Boost_LIBRARY_DIRS})
FIND_PACKAGE(zlib REQUIRED)
# TODO FindZlib doesn't find the static zlib library
+# fmt
+find_package(fmt REQUIRED)
+
INCLUDE_DIRECTORIES(${project_path}/uibase/src
${project_path}/bsatk/src
${project_path}/esptk/src
@@ -551,10 +554,11 @@ ELSE()
ENDIF()
ADD_EXECUTABLE(ModOrganizer WIN32 ${organizer_HDRS} ${organizer_SRCS} ${organizer_UIS} ${organizer_RCS} ${organizer_QRCS} ${organizer_translations_qm})
+
TARGET_LINK_LIBRARIES(ModOrganizer
Qt5::Widgets Qt5::WinExtras Qt5::WebEngineWidgets Qt5::Quick
Qt5::Qml Qt5::QuickWidgets Qt5::Network Qt5::WebSockets
- ${Boost_LIBRARIES}
+ ${Boost_LIBRARIES} fmt::fmt
zlibstatic
uibase esptk bsatk githubpp
${usvfs_name}
diff --git a/src/logbuffer.cpp b/src/logbuffer.cpp
index dfe8f943..9e3cd712 100644
--- a/src/logbuffer.cpp
+++ b/src/logbuffer.cpp
@@ -20,239 +20,140 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
#include "logbuffer.h"
#include <scopeguard.h>
#include <report.h>
+#include <log.h>
#include <QMutexLocker>
#include <QFile>
#include <QIcon>
#include <QDateTime>
#include <Windows.h>
-using MOBase::reportError;
+using namespace MOBase;
-QScopedPointer<LogBuffer> LogBuffer::s_Instance;
-QMutex LogBuffer::s_Mutex;
+static LogModel* g_instance = nullptr;
+const std::size_t MaxLines = 1000;
-LogBuffer::LogBuffer(int messageCount, QtMsgType minMsgType,
- const QString &outputFileName)
- : QAbstractItemModel(nullptr)
- , m_OutFileName(outputFileName)
- , m_ShutDown(false)
- , m_MinMsgType(minMsgType)
- , m_NumMessages(0)
+LogModel::LogModel()
{
- m_Messages.resize(messageCount);
+ connect(this, &LogModel::entryAdded, [&](auto&& e){ onEntryAdded(e); });
}
-LogBuffer::~LogBuffer()
+void LogModel::create()
{
- qInstallMessageHandler(0);
- write();
+ g_instance = new LogModel;
}
-void LogBuffer::logMessage(QtMsgType type, const QString &message)
+LogModel& LogModel::instance()
{
- if (type >= m_MinMsgType) {
- QStringList messagelist = message.split("\n");
- for (auto split_message : messagelist) {
- Message msg = {type, QTime::currentTime(), split_message};
- if (m_NumMessages < m_Messages.size()) {
- beginInsertRows(QModelIndex(), static_cast<int>(m_NumMessages),
- static_cast<int>(m_NumMessages) + 1);
- }
- m_Messages.at(m_NumMessages % m_Messages.size()) = msg;
- if (m_NumMessages < m_Messages.size()) {
- endInsertRows();
- } else {
- emit dataChanged(createIndex(0, 0),
- createIndex(static_cast<int>(m_Messages.size()), 0));
- }
- ++m_NumMessages;
- if (type >= QtCriticalMsg) {
- write();
- }
- }
- }
-}
-
-void LogBuffer::write() const
-{
- if (m_NumMessages == 0) {
- return;
- }
-
- DWORD lastError = ::GetLastError();
-
- QFile file(m_OutFileName);
- if (!file.open(QIODevice::WriteOnly)) {
- reportError(tr("failed to write log to %1: %2")
- .arg(m_OutFileName)
- .arg(file.errorString()));
- return;
- }
-
- unsigned int i
- = (m_NumMessages > m_Messages.size())
- ? static_cast<unsigned int>(m_NumMessages - m_Messages.size())
- : 0U;
- for (; i < m_NumMessages; ++i) {
- file.write(m_Messages.at(i % m_Messages.size()).toString().toUtf8());
- file.write("\r\n");
- }
- ::SetLastError(lastError);
+ return *g_instance;
}
-void LogBuffer::init(int messageCount, QtMsgType minMsgType,
- const QString &outputFileName)
+void LogModel::add(MOBase::log::Entry e)
{
- QMutexLocker guard(&s_Mutex);
-
- s_Instance.reset(new LogBuffer(messageCount, minMsgType, outputFileName));
- qInstallMessageHandler(LogBuffer::log);
+ emit entryAdded(std::move(e));
}
-char LogBuffer::msgTypeID(QtMsgType type)
+void LogModel::onEntryAdded(MOBase::log::Entry e)
{
- switch (type) {
- case QtDebugMsg:
- return 'D';
- case QtInfoMsg:
- return 'I';
- case QtWarningMsg:
- return 'W';
- case QtCriticalMsg:
- return 'C';
- case QtFatalMsg:
- return 'F';
- default:
- return '?';
+ bool full = false;
+ if (m_messages.size() > MaxLines) {
+ m_messages.pop_front();
+ full = true;
}
-}
-void LogBuffer::log(QtMsgType type, const QMessageLogContext &context,
- const QString &message)
-{
- // QMutexLocker doesn't support timeout...
- if (!s_Mutex.tryLock(100)) {
- fprintf(stderr, "failed to log: %s", qUtf8Printable(message));
- return;
- }
- ON_BLOCK_EXIT([]() { s_Mutex.unlock(); });
+ const int row = static_cast<int>(m_messages.size());
- if (!s_Instance.isNull()) {
- s_Instance->logMessage(type, message);
+ if (!full) {
+ beginInsertRows(QModelIndex(), row, row + 1);
}
- if (type == QtDebugMsg) {
- fprintf(stdout, "%s [%c] %s\n", qUtf8Printable(QTime::currentTime().toString()),
- msgTypeID(type), qUtf8Printable(message));
+ m_messages.emplace_back(std::move(e));
+
+ if (!full) {
+ endInsertRows();
} else {
- if (context.line != 0) {
- fprintf(stdout, "%s [%c] (%s:%u) %s\n",
- qUtf8Printable(QTime::currentTime().toString()), msgTypeID(type),
- context.file, context.line, qUtf8Printable(message));
- } else {
- fprintf(stdout, "%s [%c] %s\n",
- qUtf8Printable(QTime::currentTime().toString()), msgTypeID(type),
- qUtf8Printable(message));
- }
+ emit dataChanged(
+ createIndex(row, 0),
+ createIndex(row + 1, columnCount({})));
}
- fflush(stdout);
}
-QModelIndex LogBuffer::index(int row, int column, const QModelIndex &) const
+QModelIndex LogModel::index(int row, int column, const QModelIndex&) const
{
return createIndex(row, column, row);
}
-QModelIndex LogBuffer::parent(const QModelIndex &) const
+QModelIndex LogModel::parent(const QModelIndex&) const
{
return QModelIndex();
}
-int LogBuffer::rowCount(const QModelIndex &parent) const
+int LogModel::rowCount(const QModelIndex& parent) const
{
if (parent.isValid())
return 0;
else
- return static_cast<int>(std::min(m_NumMessages, m_Messages.size()));
+ return static_cast<int>(m_messages.size());
}
-int LogBuffer::columnCount(const QModelIndex &) const
+int LogModel::columnCount(const QModelIndex&) const
{
- return 2;
+ return 3;
}
-QVariant LogBuffer::data(const QModelIndex &index, int role) const
+QVariant LogModel::data(const QModelIndex& index, int role) const
{
- unsigned int offset
- = m_NumMessages < m_Messages.size()
- ? 0
- : static_cast<unsigned int>(m_NumMessages - m_Messages.size());
- unsigned int msgIndex = (offset + index.row() + 1) % m_Messages.size();
- switch (role) {
- case Qt::DisplayRole: {
- if (index.column() == 0) {
- return m_Messages[msgIndex].time.toString("H: mm: ss");
- } else if (index.column() == 1) {
- const QString &msg = m_Messages[msgIndex].message;
- if (msg.length() < 200) {
- return msg;
- } else {
- return msg.mid(0, 200) + "...";
- }
- }
- } break;
- case Qt::DecorationRole: {
- if (index.column() == 1) {
- switch (m_Messages[msgIndex].type) {
- case QtDebugMsg:
- case QtInfoMsg:
- return QIcon(":/MO/gui/information");
- case QtWarningMsg:
- return QIcon(":/MO/gui/warning");
- case QtCriticalMsg:
- return QIcon(":/MO/gui/important");
- case QtFatalMsg:
- return QIcon(":/MO/gui/problem");
- }
- }
- } break;
- case Qt::UserRole: {
- if (index.column() == 1) {
- switch (m_Messages[msgIndex].type) {
- case QtDebugMsg:
- return "D";
- case QtInfoMsg:
- return "I";
- case QtWarningMsg:
- return "W";
- case QtCriticalMsg:
- return "C";
- case QtFatalMsg:
- return "F";
- }
- }
- } break;
+ using namespace std::chrono;
+
+ const auto row = static_cast<std::size_t>(index.row());
+ if (row >= m_messages.size()) {
+ return {};
}
- return QVariant();
-}
-void LogBuffer::writeNow()
-{
- QMutexLocker guard(&s_Mutex);
- if (!s_Instance.isNull()) {
- s_Instance->write();
+ const auto& e = m_messages[row];
+
+ if (role == Qt::DisplayRole) {
+ if (index.column() == 1) {
+ const auto ms = duration_cast<milliseconds>(e.time.time_since_epoch());
+ const auto s = duration_cast<seconds>(ms);
+
+ const std::time_t t = s.count();
+ const std::size_t frac = ms.count() % 1000;
+
+ auto time = QDateTime::fromTime_t(t).time();
+ time = time.addMSecs(frac);
+
+ return time.toString("hh:mm:ss.zzz");
+ } else if (index.column() == 2) {
+ return QString::fromStdString(e.message);
+ }
+ }
+
+ if (role == Qt::DecorationRole) {
+ if (index.column() == 0) {
+ switch (e.level) {
+ case log::Warning:
+ return QIcon(":/MO/gui/warning");
+
+ case log::Error:
+ return QIcon(":/MO/gui/problem");
+
+ case log::Debug: // fall-through
+ case log::Info:
+ default:
+ return {};
+ }
+ }
}
+
+ return QVariant();
}
-void LogBuffer::cleanQuit()
+QVariant LogModel::headerData(int, Qt::Orientation, int) const
{
- QMutexLocker guard(&s_Mutex);
- if (!s_Instance.isNull()) {
- s_Instance->m_ShutDown = true;
- }
+ return {};
}
-void log(const char *format, ...)
+void vlog(const char *format, ...)
{
va_list argList;
va_start(argList, format);
@@ -268,11 +169,3 @@ void log(const char *format, ...)
va_end(argList);
}
-
-QString LogBuffer::Message::toString() const
-{
- return QString("%1 [%2] %3")
- .arg(time.toString())
- .arg(msgTypeID(type))
- .arg(message);
-}
diff --git a/src/logbuffer.h b/src/logbuffer.h
index 0cfecfa2..1bf8901b 100644
--- a/src/logbuffer.h
+++ b/src/logbuffer.h
@@ -26,70 +26,36 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
#include <QStringListModel>
#include <QTime>
#include <vector>
+#include <log.h>
-
-class LogBuffer : public QAbstractItemModel
+class LogModel : public QAbstractItemModel
{
Q_OBJECT
public:
+ static void create();
+ static LogModel& instance();
- static void init(int messageCount, QtMsgType minMsgType, const QString &outputFileName);
- static void log(QtMsgType type, const QMessageLogContext &context, const QString &message);
-
- static void writeNow();
- static void cleanQuit();
-
- static LogBuffer *instance() { return s_Instance.data(); }
-
-public:
-
- virtual ~LogBuffer();
-
- void logMessage(QtMsgType type, const QString &message);
+ void add(MOBase::log::Entry e);
- // QAbstractItemModel interface
-public:
- QModelIndex index(int row, int column, const QModelIndex &parent) const;
- QModelIndex parent(const QModelIndex &child) const;
- int rowCount(const QModelIndex &parent) const;
- int columnCount(const QModelIndex &parent) const;
- QVariant data(const QModelIndex &index, int role) const;
+protected:
+ QModelIndex index(int row, int column, const QModelIndex& parent) const override;
+ QModelIndex parent(const QModelIndex &child) const override;
+ int rowCount(const QModelIndex &parent) const override;
+ int columnCount(const QModelIndex &parent) const override;
+ QVariant data(const QModelIndex &index, int role) const override;
+
+ QVariant headerData(
+ int section, Qt::Orientation ori, int role=Qt::DisplayRole) const override;
signals:
-
-public slots:
+ void entryAdded(MOBase::log::Entry e);
private:
+ std::deque<MOBase::log::Entry> m_messages;
- explicit LogBuffer(int messageCount, QtMsgType minMsgType, const QString &outputFileName);
- LogBuffer(const LogBuffer &reference); // not implemented
- LogBuffer &operator=(const LogBuffer &reference); // not implemented
-
- void write() const;
-
- static char msgTypeID(QtMsgType type);
-
-private:
-
- struct Message {
- QtMsgType type;
- QTime time;
- QString message;
- QString toString() const;
- };
-
-private:
-
- static QScopedPointer<LogBuffer> s_Instance;
- static QMutex s_Mutex;
-
- QString m_OutFileName;
- bool m_ShutDown;
- QtMsgType m_MinMsgType;
- size_t m_NumMessages;
- std::vector<Message> m_Messages;
-
+ LogModel();
+ void onEntryAdded(MOBase::log::Entry e);
};
#endif // LOGBUFFER_H
diff --git a/src/main.cpp b/src/main.cpp
index db0c8f93..23ea234a 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -51,6 +51,7 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
#include <eh.h>
#include <windows_error.h>
#include <usvfs.h>
+#include <log.h>
#include <QApplication>
#include <QPushButton>
@@ -731,18 +732,46 @@ int runApplication(MOApplication &application, SingleInstance &instance,
}
}
-int doCoreDump(env::CoreDumpTypes type)
+class Console
{
- // open a console
- AllocConsole();
+public:
+ Console()
+ {
+ // open a console
+ AllocConsole();
+
+ // redirect stdin, stdout and stderr to it
+ freopen_s(&m_in, "CONIN$", "r", stdin);
+ freopen_s(&m_out, "CONOUT$", "w", stdout);
+ freopen_s(&m_err, "CONOUT$", "w", stderr);
+ }
+
+ ~Console()
+ {
+ // close redirected handles
+ std::fclose(m_err);
+ std::fclose(m_out);
+ std::fclose(m_in);
+
+ // close console
+ FreeConsole();
+
+ // redirect stdin, stdout and stderr to NUL, don't bother closing the
+ // handles
+ freopen_s(&m_in, "NUL", "r", stdin);
+ freopen_s(&m_out, "NUL", "w", stdout);
+ freopen_s(&m_err, "NUL", "w", stderr);
+ }
- // redirect stdin, stdout and stderr to it
- FILE* in=nullptr;
- FILE* out=nullptr;
- FILE* err=nullptr;
- freopen_s(&in, "CONIN$", "r", stdin);
- freopen_s(&out, "CONOUT$", "w", stdout);
- freopen_s(&err, "CONOUT$", "w", stderr);
+private:
+ FILE* m_in = nullptr;
+ FILE* m_out = nullptr;
+ FILE* m_err = nullptr;
+};
+
+int doCoreDump(env::CoreDumpTypes type)
+{
+ Console c;
// dump
const auto b = env::coredumpOther(type);
@@ -753,15 +782,66 @@ int doCoreDump(env::CoreDumpTypes type)
std::wcerr << L"Press enter to continue...";
std::wcin.get();
- // close redirected handles
- std::fclose(err);
- std::fclose(out);
- std::fclose(in);
+ return (b ? 0 : 1);
+}
- // close console
- FreeConsole();
+log::Levels convertQtLevel(QtMsgType t)
+{
+ switch (t)
+ {
+ case QtDebugMsg:
+ return log::Debug;
- return (b ? 0 : 1);
+ case QtWarningMsg:
+ return log::Warning;
+
+ case QtCriticalMsg: // fall-through
+ case QtFatalMsg:
+ return log::Error;
+
+ case QtInfoMsg: // fall-through
+ default:
+ return log::Info;
+ }
+}
+
+void qtLogCallback(
+ QtMsgType type, const QMessageLogContext& context, const QString& message)
+{
+ std::string_view file = "";
+
+ if (type != QtDebugMsg) {
+ if (context.file) {
+ file = context.file;
+
+ const auto lastSep = file.find_last_of("/\\");
+ if (lastSep != std::string_view::npos) {
+ file = {context.file + lastSep + 1};
+ }
+ }
+ }
+
+ if (file.empty()) {
+ log::log(
+ convertQtLevel(type), "{}",
+ message.toStdString());
+ } else {
+ log::log(
+ convertQtLevel(type), "[{}:{}] {}",
+ file, context.line, message.toStdString());
+ }
+}
+
+void initLogging(const QString& logFile)
+{
+ LogModel::create();
+
+ log::init(
+ true, MOBase::log::File::rotating(logFile.toStdWString(), 5*1024*1024, 5),
+ MOBase::log::Debug, "%^[%m-%d %H:%M:%S.%e %L] %v%$",
+ [](log::Entry e){ LogModel::instance().add(e); });
+
+ qInstallMessageHandler(qtLogCallback);
}
int main(int argc, char *argv[])
@@ -839,7 +919,7 @@ int main(int argc, char *argv[])
// initialize dump collection only after "dataPath" since the crashes are stored under it
prevUnhandledExceptionFilter = SetUnhandledExceptionFilter(MyUnhandledExceptionFilter);
- LogBuffer::init(1000000, QtDebugMsg, qApp->property("dataPath").toString() + "/logs/mo_interface.log");
+ initLogging(qApp->property("dataPath").toString() + "/logs/mo_interface.log");
QString splash = dataPath + "/splash.png";
if (!QFile::exists(dataPath + "/splash.png")) {
diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp
index 4b5ef9ed..cd224414 100644
--- a/src/mainwindow.cpp
+++ b/src/mainwindow.cpp
@@ -357,17 +357,10 @@ MainWindow::MainWindow(QSettings &initSettings
m_CategoryFactory.loadCategories();
- ui->logList->setModel(LogBuffer::instance());
- ui->logList->setColumnWidth(0, 100);
- ui->logList->setAutoScroll(true);
- ui->logList->scrollToBottom();
- ui->logList->addAction(ui->actionCopy_Log_to_Clipboard);
+ setupLogList();
+
int splitterSize = this->size().height(); // actually total window size, but the splitter doesn't seem to return the true value
ui->topLevelSplitter->setSizes(QList<int>() << splitterSize - 100 << 100);
- connect(ui->logList->model(), SIGNAL(rowsInserted(const QModelIndex &, int, int)),
- ui->logList, SLOT(scrollToBottom()));
- connect(ui->logList->model(), SIGNAL(dataChanged(QModelIndex,QModelIndex)),
- ui->logList, SLOT(scrollToBottom()));
updateProblemsButton();
@@ -593,6 +586,30 @@ MainWindow::MainWindow(QSettings &initSettings
updateModCount();
}
+void MainWindow::setupLogList()
+{
+ ui->logList->setModel(&LogModel::instance());
+
+ const int timestampWidth =
+ QFontMetrics(ui->logList->font()).width("00:00:00.000");
+
+ ui->logList->header()->setMinimumSectionSize(0);
+ ui->logList->header()->resizeSection(0, 20);
+ ui->logList->header()->resizeSection(1, timestampWidth + 8);
+
+ ui->logList->setAutoScroll(true);
+ ui->logList->scrollToBottom();
+ ui->logList->addAction(ui->actionCopy_Log_to_Clipboard);
+
+ connect(
+ ui->logList->model(), SIGNAL(rowsInserted(const QModelIndex &, int, int)),
+ ui->logList, SLOT(scrollToBottom()));
+
+ connect(
+ ui->logList->model(), SIGNAL(dataChanged(QModelIndex,QModelIndex)),
+ ui->logList, SLOT(scrollToBottom()));
+}
+
void MainWindow::resetActionIcons()
{
// this is a bit of a hack
diff --git a/src/mainwindow.h b/src/mainwindow.h
index d7dbfd90..9ca3e5c3 100644
--- a/src/mainwindow.h
+++ b/src/mainwindow.h
@@ -636,6 +636,7 @@ private slots:
void resetActionIcons();
void updateModCount();
void updatePluginCount();
+ void setupLogList();
private slots: // ui slots
// actions
diff --git a/src/mainwindow.ui b/src/mainwindow.ui
index d83c68ca..5a45b3b4 100644
--- a/src/mainwindow.ui
+++ b/src/mainwindow.ui
@@ -1402,6 +1402,9 @@ p, li { white-space: pre-wrap; }
<addaction name="menuHelp"/>
</widget>
<widget class="QDockWidget" name="logDock">
+ <property name="features">
+ <set>QDockWidget::AllDockWidgetFeatures</set>
+ </property>
<property name="windowTitle">
<string>Log</string>
</property>
@@ -1428,17 +1431,17 @@ p, li { white-space: pre-wrap; }
<enum>Qt::ActionsContextMenu</enum>
</property>
<property name="selectionMode">
- <enum>QAbstractItemView::NoSelection</enum>
- </property>
- <property name="uniformRowHeights">
- <bool>true</bool>
+ <enum>QAbstractItemView::ExtendedSelection</enum>
</property>
- <property name="itemsExpandable">
+ <property name="rootIsDecorated">
<bool>false</bool>
</property>
- <property name="headerHidden">
+ <property name="uniformRowHeights">
<bool>true</bool>
</property>
+ <attribute name="headerVisible">
+ <bool>false</bool>
+ </attribute>
</widget>
</item>
</layout>
diff --git a/src/organizercore.cpp b/src/organizercore.cpp
index eeb69e61..5f5c3afe 100644
--- a/src/organizercore.cpp
+++ b/src/organizercore.cpp
@@ -342,7 +342,6 @@ OrganizerCore::~OrganizerCore()
m_CurrentProfile = nullptr;
ModInfo::clear();
- LogBuffer::cleanQuit();
m_ModList.setProfile(nullptr);
// NexusInterface::instance()->cleanup();
diff --git a/src/profile.cpp b/src/profile.cpp
index ef387027..01906903 100644
--- a/src/profile.cpp
+++ b/src/profile.cpp
@@ -287,8 +287,11 @@ void Profile::createTweakedIniFile()
}
if (error) {
- reportError(tr("failed to create tweaked ini: %1").arg(getCurrentErrorString().c_str()));
+ const auto e = ::GetLastError();
+ reportError(tr("failed to create tweaked ini: %1")
+ .arg(formatSystemMessageQ(e)));
}
+
qDebug("%s saved", qUtf8Printable(QDir::toNativeSeparators(tweakedIni)));
}
diff --git a/src/shared/directoryentry.cpp b/src/shared/directoryentry.cpp
index bde515a9..9d9edd85 100644
--- a/src/shared/directoryentry.cpp
+++ b/src/shared/directoryentry.cpp
@@ -103,7 +103,7 @@ public:
m_OriginsNameMap.erase(iter);
m_OriginsNameMap[newName] = idx;
} else {
- log("failed to change name lookup from %ls to %ls", oldName.c_str(), newName.c_str());
+ vlog("failed to change name lookup from %ls to %ls", oldName.c_str(), newName.c_str());
}
}
@@ -714,12 +714,12 @@ void DirectoryEntry::removeFile(FileEntry::Index index)
if (iter != m_Files.end()) {
m_Files.erase(iter);
} else {
- log("file \"%ls\" not in directory \"%ls\"",
+ vlog("file \"%ls\" not in directory \"%ls\"",
m_FileRegister->getFile(index)->getName().c_str(),
this->getName().c_str());
}
} else {
- log("file \"%ls\" not in directory \"%ls\", directory empty",
+ vlog("file \"%ls\" not in directory \"%ls\", directory empty",
m_FileRegister->getFile(index)->getName().c_str(),
this->getName().c_str());
}
@@ -844,7 +844,7 @@ const FileEntry::Ptr DirectoryEntry::searchFile(const std::wstring &path, const
DirectoryEntry *temp = findSubDirectory(pathComponent);
if (temp != nullptr) {
if (len >= path.size()) {
- log("unexpected end of path");
+ vlog("unexpected end of path");
return FileEntry::Ptr();
}
return temp->searchFile(path.substr(len + 1), directory);
@@ -988,7 +988,7 @@ bool FileRegister::removeFile(FileEntry::Index index)
m_Files.erase(index);
return true;
} else {
- log("invalid file index for remove: %lu", index);
+ vlog("invalid file index for remove: %lu", index);
return false;
}
}
@@ -1002,7 +1002,7 @@ void FileRegister::removeOrigin(FileEntry::Index index, int originID)
m_Files.erase(iter);
}
} else {
- log("invalid file index for remove (for origin): %lu", index);
+ vlog("invalid file index for remove (for origin): %lu", index);
}
}
diff --git a/src/shared/error_report.cpp b/src/shared/error_report.cpp
index 6d091630..4185b544 100644
--- a/src/shared/error_report.cpp
+++ b/src/shared/error_report.cpp
@@ -23,7 +23,6 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
namespace MOShared {
-
void reportError(LPCSTR format, ...)
{
char buffer[1025];
@@ -52,48 +51,4 @@ void reportError(LPCWSTR format, ...)
MessageBoxW(nullptr, buffer, L"Error", MB_OK | MB_ICONERROR);
}
-
-std::string getCurrentErrorStringA()
-{
- LPSTR buffer = nullptr;
-
- DWORD errorCode = ::GetLastError();
-
- if (FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
- nullptr, errorCode, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPSTR)&buffer, 0, nullptr) == 0) {
- ::SetLastError(errorCode);
- return std::string();
- } else {
- LPSTR lastChar = buffer + strlen(buffer) - 2;
- *lastChar = '\0';
-
- std::string result(buffer);
-
- LocalFree(buffer);
- ::SetLastError(errorCode);
- return result;
- }
-}
-
-std::wstring getCurrentErrorStringW()
-{
- LPWSTR buffer = nullptr;
-
- DWORD errorCode = ::GetLastError();
-
- if (FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
- nullptr, errorCode, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPWSTR)&buffer, 0, nullptr) == 0) {
- ::SetLastError(errorCode);
- return std::wstring();
- } else {
- LPWSTR lastChar = buffer + wcslen(buffer) - 2;
- *lastChar = '\0';
-
- std::wstring result(buffer);
-
- LocalFree(buffer);
- ::SetLastError(errorCode);
- return result;
- }
-}
} // namespace MOShared
diff --git a/src/shared/error_report.h b/src/shared/error_report.h
index c09ad75b..a003ee09 100644
--- a/src/shared/error_report.h
+++ b/src/shared/error_report.h
@@ -24,28 +24,11 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
#include <Windows.h>
#include <string>
-namespace std {
-#ifdef UNICODE
-typedef wstring tstring;
-#else
-typedef string tstring;
-#endif
-}
-
-extern void log(const char* format, ...);
-
namespace MOShared {
void reportError(LPCSTR format, ...);
void reportError(LPCWSTR format, ...);
-std::string getCurrentErrorStringA();
-std::wstring getCurrentErrorStringW();
-
-#ifdef UNICODE
-#define getCurrentErrorString getCurrentErrorStringW
-#else
-#define getCurrentErrorString getCurrentErrorStringA
-#endif
-
} // namespace MOShared
+
+void vlog(const char* format, ...);