mirror of
https://github.com/subsurface/subsurface.git
synced 2024-11-30 22:20:21 +00:00
0df43252be
So far we only wrote messages to subsurface.log on Android (since we couldn't figure out how to make that file user accessible on iOS). Now that that's fixed, we also need to actually write to the file in the first place. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
78 lines
1.9 KiB
C++
78 lines
1.9 KiB
C++
// SPDX-License-Identifier: GPL-2.0
|
|
#include "messagehandlermodel.h"
|
|
|
|
/* based on logging bits from libdivecomputer */
|
|
#if !defined(Q_OS_ANDROID)
|
|
#define INFO(fmt, ...) fprintf(stderr, "INFO: " fmt "\n", ##__VA_ARGS__)
|
|
#else
|
|
#include <android/log.h>
|
|
#define INFO(fmt, ...) __android_log_print(ANDROID_LOG_DEBUG, __FILE__, "INFO: " fmt "\n", ##__VA_ARGS__);
|
|
#endif
|
|
|
|
#if defined(Q_OS_ANDROID) || defined(Q_OS_IOS)
|
|
extern void writeToAppLogFile(QString logText);
|
|
#endif
|
|
|
|
void logMessageHandler(QtMsgType type, const QMessageLogContext &context, const QString &msg)
|
|
{
|
|
Q_UNUSED(context)
|
|
MessageHandlerModel::self()->addLog(type, msg);
|
|
}
|
|
|
|
MessageHandlerModel * MessageHandlerModel::self()
|
|
{
|
|
static MessageHandlerModel *self = new MessageHandlerModel();
|
|
return self;
|
|
}
|
|
|
|
MessageHandlerModel::MessageHandlerModel(QObject *parent)
|
|
{
|
|
Q_UNUSED(parent)
|
|
// no more than one message handler.
|
|
qInstallMessageHandler(logMessageHandler);
|
|
}
|
|
|
|
int MessageHandlerModel::rowCount(const QModelIndex& parent) const
|
|
{
|
|
Q_UNUSED(parent)
|
|
return m_data.size();
|
|
}
|
|
|
|
#include <iostream>
|
|
|
|
void MessageHandlerModel::addLog(QtMsgType type, const QString& message)
|
|
{
|
|
beginInsertRows(QModelIndex(), rowCount(), rowCount());
|
|
m_data.append({message, type});
|
|
endInsertRows();
|
|
INFO("%s", qPrintable(message));
|
|
#if defined(Q_OS_ANDROID) || defined(Q_OS_IOS)
|
|
writeToAppLogFile(message);
|
|
#endif
|
|
}
|
|
|
|
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();
|
|
|
|
}
|