| 
									
										
										
										
											2017-06-05 19:56:52 -07:00
										 |  |  | // SPDX-License-Identifier: GPL-2.0
 | 
					
						
							| 
									
										
										
										
											2017-06-05 18:16:12 +02:00
										 |  |  | #include "messagehandlermodel.h"
 | 
					
						
							| 
									
										
										
										
											2020-04-17 13:02:25 -07:00
										 |  |  | #include "core/qthelper.h"
 | 
					
						
							| 
									
										
										
										
											2017-06-05 19:56:52 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-13 16:53:51 -07:00
										 |  |  | #if defined(Q_OS_ANDROID) || defined(Q_OS_IOS)
 | 
					
						
							|  |  |  | extern void writeToAppLogFile(QString logText); | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-21 17:53:42 +02:00
										 |  |  | void logMessageHandler(QtMsgType type, const QMessageLogContext&, const QString &msg) | 
					
						
							| 
									
										
										
										
											2017-06-05 18:16:12 +02:00
										 |  |  | { | 
					
						
							|  |  |  | 	MessageHandlerModel::self()->addLog(type, msg); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | MessageHandlerModel * MessageHandlerModel::self() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	static MessageHandlerModel *self = new MessageHandlerModel(); | 
					
						
							|  |  |  | 	return self; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-21 17:53:42 +02:00
										 |  |  | MessageHandlerModel::MessageHandlerModel(QObject*) | 
					
						
							| 
									
										
										
										
											2017-06-05 18:16:12 +02:00
										 |  |  | { | 
					
						
							|  |  |  | 	// no more than one message handler.
 | 
					
						
							|  |  |  | 	qInstallMessageHandler(logMessageHandler); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-21 17:53:42 +02:00
										 |  |  | int MessageHandlerModel::rowCount(const QModelIndex&) const | 
					
						
							| 
									
										
										
										
											2017-06-05 18:16:12 +02:00
										 |  |  | { | 
					
						
							|  |  |  | 	return m_data.size(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <iostream>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void MessageHandlerModel::addLog(QtMsgType type, const QString& message) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2020-03-29 14:38:09 -07:00
										 |  |  | 	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; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2017-06-05 18:16:12 +02:00
										 |  |  | 	beginInsertRows(QModelIndex(), rowCount(), rowCount()); | 
					
						
							|  |  |  | 	m_data.append({message, type}); | 
					
						
							|  |  |  | 	endInsertRows(); | 
					
						
							| 
									
										
										
										
											2020-04-17 13:02:25 -07:00
										 |  |  | 	SSRF_INFO("%s", qPrintable(message)); | 
					
						
							| 
									
										
										
										
											2018-04-13 16:53:51 -07:00
										 |  |  | #if defined(Q_OS_ANDROID) || defined(Q_OS_IOS)
 | 
					
						
							| 
									
										
										
										
											2017-07-09 17:03:57 -07:00
										 |  |  | 	writeToAppLogFile(message); | 
					
						
							|  |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2017-06-05 18:16:12 +02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-16 16:50:17 +02:00
										 |  |  | 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; | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2017-06-05 18:16:12 +02:00
										 |  |  | 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(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | } |