mirror of
https://github.com/subsurface/subsurface.git
synced 2024-11-30 22:20:21 +00:00
f9f4a9c232
I would have bet money that Android used to send stderr to the logcat log, but apparently it doesn't (anymore?). So in order to be able to have a chance to debug weird cloud storage issues on Android, let's do some wholesale replacement of fprintf(stderr,...) with our own version of the INFO macro that we long ago borrowed from libdivecomputer (and rename it to ensure we don't have a conflict there). Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
84 lines
2 KiB
C++
84 lines
2 KiB
C++
// SPDX-License-Identifier: GPL-2.0
|
|
#include "messagehandlermodel.h"
|
|
#include "core/qthelper.h"
|
|
|
|
#if defined(Q_OS_ANDROID) || defined(Q_OS_IOS)
|
|
extern void writeToAppLogFile(QString logText);
|
|
#endif
|
|
|
|
void logMessageHandler(QtMsgType type, const QMessageLogContext&, const QString &msg)
|
|
{
|
|
MessageHandlerModel::self()->addLog(type, msg);
|
|
}
|
|
|
|
MessageHandlerModel * MessageHandlerModel::self()
|
|
{
|
|
static MessageHandlerModel *self = new MessageHandlerModel();
|
|
return self;
|
|
}
|
|
|
|
MessageHandlerModel::MessageHandlerModel(QObject*)
|
|
{
|
|
// no more than one message handler.
|
|
qInstallMessageHandler(logMessageHandler);
|
|
}
|
|
|
|
int MessageHandlerModel::rowCount(const QModelIndex&) const
|
|
{
|
|
return m_data.size();
|
|
}
|
|
|
|
#include <iostream>
|
|
|
|
void MessageHandlerModel::addLog(QtMsgType type, const QString& message)
|
|
{
|
|
if (!m_data.isEmpty()) {
|
|
struct MessageData *lm = &m_data.last();
|
|
QString lastMessage = lm->message.mid(lm->message.indexOf(':'));
|
|
QString newMessage = message.mid(message.indexOf(':'));
|
|
if (lastMessage == newMessage)
|
|
return;
|
|
}
|
|
beginInsertRows(QModelIndex(), rowCount(), rowCount());
|
|
m_data.append({message, type});
|
|
endInsertRows();
|
|
SSRF_INFO("%s", qPrintable(message));
|
|
#if defined(Q_OS_ANDROID) || defined(Q_OS_IOS)
|
|
writeToAppLogFile(message);
|
|
#endif
|
|
}
|
|
|
|
const QString MessageHandlerModel::logAsString()
|
|
{
|
|
QString copyString;
|
|
|
|
// Loop through m_data and build big string to be put on the clipboard
|
|
for(const MessageData &data: m_data)
|
|
copyString += data.message + "\n";
|
|
return copyString;
|
|
}
|
|
QVariant MessageHandlerModel::data(const QModelIndex& idx, int role) const
|
|
{
|
|
switch(role) {
|
|
case Message:
|
|
case Qt::DisplayRole:
|
|
return m_data.at(idx.row()).message;
|
|
}
|
|
return QVariant(QString("Role: %1").arg(role));
|
|
};
|
|
|
|
QHash<int, QByteArray> MessageHandlerModel::roleNames() const {
|
|
static QHash<int, QByteArray> roles = {
|
|
{Message, "message"},
|
|
{Severity, "severity"}
|
|
};
|
|
return roles;
|
|
};
|
|
|
|
void MessageHandlerModel::reset()
|
|
{
|
|
beginRemoveRows(QModelIndex(), 0, m_data.size()-1);
|
|
m_data.clear();
|
|
endRemoveRows();
|
|
|
|
}
|