JS logging improvements.
This commit is contained in:
parent
2229d32720
commit
20a9c151be
|
@ -126,7 +126,7 @@ EmuStateScriptObject::EmuStateScriptObject(const QJSValue& jsArg1, const QJSValu
|
||||||
//printf("EmuStateScriptObject %p JS Constructor(int): %i\n", this, numInstances);
|
//printf("EmuStateScriptObject %p JS Constructor(int): %i\n", this, numInstances);
|
||||||
setSlot(jsVal.toInt());
|
setSlot(jsVal.toInt());
|
||||||
|
|
||||||
if (slot >= 0)
|
if ( (slot >= 0) && saveFileExists())
|
||||||
{
|
{
|
||||||
loadFromFile(filename);
|
loadFromFile(filename);
|
||||||
}
|
}
|
||||||
|
@ -251,7 +251,7 @@ bool EmuStateScriptObject::loadFromFile(const QString& filepath)
|
||||||
FILE* inf = fopen(filepath.toLocal8Bit().data(),"rb");
|
FILE* inf = fopen(filepath.toLocal8Bit().data(),"rb");
|
||||||
if (inf == nullptr)
|
if (inf == nullptr)
|
||||||
{
|
{
|
||||||
QString msg = "Warning: JS EmuState::loadFromFile failed to open file: " + filepath + "\n";
|
QString msg = "JS EmuState::loadFromFile failed to open file: " + filepath;
|
||||||
logMessage(FCEU::JSEngine::WARNING, msg);
|
logMessage(FCEU::JSEngine::WARNING, msg);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -261,7 +261,7 @@ bool EmuStateScriptObject::loadFromFile(const QString& filepath)
|
||||||
data = new EMUFILE_MEMORY(len);
|
data = new EMUFILE_MEMORY(len);
|
||||||
if ( fread(data->buf(),1,len,inf) != static_cast<size_t>(len) )
|
if ( fread(data->buf(),1,len,inf) != static_cast<size_t>(len) )
|
||||||
{
|
{
|
||||||
QString msg = "Warning: JS EmuState::loadFromFile failed to load full buffer.\n";
|
QString msg = "JS EmuState::loadFromFile failed to load full buffer.";
|
||||||
logMessage(FCEU::JSEngine::WARNING, msg);
|
logMessage(FCEU::JSEngine::WARNING, msg);
|
||||||
delete data;
|
delete data;
|
||||||
data = nullptr;
|
data = nullptr;
|
||||||
|
@ -280,6 +280,41 @@ void EmuStateScriptObject::logMessage(int lvl, QString& msg)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//----------------------------------------------------
|
//----------------------------------------------------
|
||||||
|
bool EmuStateScriptObject::saveFileExists()
|
||||||
|
{
|
||||||
|
bool exists = false;
|
||||||
|
QFileInfo fileInfo(filename);
|
||||||
|
|
||||||
|
if (fileInfo.exists() && fileInfo.isFile())
|
||||||
|
{
|
||||||
|
exists = true;
|
||||||
|
}
|
||||||
|
return exists;
|
||||||
|
}
|
||||||
|
//----------------------------------------------------
|
||||||
|
QJSValue EmuStateScriptObject::copy()
|
||||||
|
{
|
||||||
|
QJSValue jsVal;
|
||||||
|
auto* engine = FCEU::JSEngine::getCurrent();
|
||||||
|
|
||||||
|
if (engine != nullptr)
|
||||||
|
{
|
||||||
|
EmuStateScriptObject* emuStateObj = new EmuStateScriptObject();
|
||||||
|
|
||||||
|
if (emuStateObj != nullptr)
|
||||||
|
{
|
||||||
|
*emuStateObj = *this;
|
||||||
|
|
||||||
|
jsVal = engine->newQObject(emuStateObj);
|
||||||
|
|
||||||
|
#if QT_VERSION >= QT_VERSION_CHECK(6,0,0)
|
||||||
|
QJSEngine::setObjectOwnership( emuStateObj, QJSEngine::JavaScriptOwnership);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return jsVal;
|
||||||
|
}
|
||||||
|
//----------------------------------------------------
|
||||||
//---- EMU Script Object
|
//---- EMU Script Object
|
||||||
//----------------------------------------------------
|
//----------------------------------------------------
|
||||||
EmuScriptObject::EmuScriptObject(QObject* parent)
|
EmuScriptObject::EmuScriptObject(QObject* parent)
|
||||||
|
@ -1159,7 +1194,27 @@ namespace FCEU
|
||||||
{
|
{
|
||||||
if (lvl <= _logLevel)
|
if (lvl <= _logLevel)
|
||||||
{
|
{
|
||||||
dialog->logOutput(msg);
|
const char *prefix = "Warning: ";
|
||||||
|
switch (lvl)
|
||||||
|
{
|
||||||
|
case FCEU::JSEngine::DEBUG:
|
||||||
|
prefix = "Debug: ";
|
||||||
|
break;
|
||||||
|
case FCEU::JSEngine::INFO:
|
||||||
|
prefix = "Info: ";
|
||||||
|
break;
|
||||||
|
case FCEU::JSEngine::WARNING:
|
||||||
|
prefix = "Warning: ";
|
||||||
|
break;
|
||||||
|
case FCEU::JSEngine::CRITICAL:
|
||||||
|
prefix = "Critical: ";
|
||||||
|
break;
|
||||||
|
case FCEU::JSEngine::FATAL:
|
||||||
|
prefix = "Fatal: ";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
QString fullMsg = prefix + msg.trimmed() + "\n";
|
||||||
|
dialog->logOutput(fullMsg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1356,9 +1411,11 @@ int QtScriptInstance::loadScriptFile( QString filepath )
|
||||||
|
|
||||||
if (evalResult.isError())
|
if (evalResult.isError())
|
||||||
{
|
{
|
||||||
QString msg;
|
QString msg = "Uncaught exception at: " +
|
||||||
msg += evalResult.property("lineNumber").toString() + ": ";
|
evalResult.property("fileName").toString() + ":" +
|
||||||
msg += evalResult.toString();
|
evalResult.property("lineNumber").toString() + " : " +
|
||||||
|
evalResult.toString() + "\nStack:\n" +
|
||||||
|
evalResult.property("stack").toString() + "\n";
|
||||||
print(msg);
|
print(msg);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
@ -1534,7 +1591,12 @@ int QtScriptInstance::runFunc(QJSValue &func, const QJSValueList& args)
|
||||||
{
|
{
|
||||||
retval = -1;
|
retval = -1;
|
||||||
running = false;
|
running = false;
|
||||||
print(callResult.toString());
|
QString msg = "Uncaught exception at: " +
|
||||||
|
callResult.property("fileName").toString() + ":" +
|
||||||
|
callResult.property("lineNumber").toString() + " : " +
|
||||||
|
callResult.toString() + "\nStack:\n" +
|
||||||
|
callResult.property("stack").toString() + "\n";
|
||||||
|
print(msg);
|
||||||
}
|
}
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
@ -1754,6 +1816,36 @@ void QtScriptManager::destroy(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//----------------------------------------------------
|
//----------------------------------------------------
|
||||||
|
void QtScriptManager::logMessageQt(QtMsgType type, const QString &msg)
|
||||||
|
{
|
||||||
|
auto* engine = FCEU::JSEngine::getCurrent();
|
||||||
|
|
||||||
|
if (engine != nullptr)
|
||||||
|
{
|
||||||
|
int logLevel = FCEU::JSEngine::WARNING;
|
||||||
|
|
||||||
|
switch (type)
|
||||||
|
{
|
||||||
|
case QtDebugMsg:
|
||||||
|
logLevel = FCEU::JSEngine::DEBUG;
|
||||||
|
break;
|
||||||
|
case QtInfoMsg:
|
||||||
|
logLevel = FCEU::JSEngine::INFO;
|
||||||
|
break;
|
||||||
|
case QtWarningMsg:
|
||||||
|
logLevel = FCEU::JSEngine::WARNING;
|
||||||
|
break;
|
||||||
|
case QtCriticalMsg:
|
||||||
|
logLevel = FCEU::JSEngine::CRITICAL;
|
||||||
|
break;
|
||||||
|
case QtFatalMsg:
|
||||||
|
logLevel = FCEU::JSEngine::FATAL;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
engine->logMessage( logLevel, msg );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//----------------------------------------------------
|
||||||
void QtScriptManager::addScriptInstance(QtScriptInstance* script)
|
void QtScriptManager::addScriptInstance(QtScriptInstance* script)
|
||||||
{
|
{
|
||||||
FCEU::autoScopedLock autoLock(scriptListMutex);
|
FCEU::autoScopedLock autoLock(scriptListMutex);
|
||||||
|
|
|
@ -142,6 +142,8 @@ public slots:
|
||||||
Q_INVOKABLE void setFilename(const QString& name){ filename = name; }
|
Q_INVOKABLE void setFilename(const QString& name){ filename = name; }
|
||||||
Q_INVOKABLE bool saveToFile(const QString& filepath);
|
Q_INVOKABLE bool saveToFile(const QString& filepath);
|
||||||
Q_INVOKABLE bool loadFromFile(const QString& filepath);
|
Q_INVOKABLE bool loadFromFile(const QString& filepath);
|
||||||
|
Q_INVOKABLE bool saveFileExists();
|
||||||
|
Q_INVOKABLE QJSValue copy();
|
||||||
};
|
};
|
||||||
|
|
||||||
class EmuScriptObject: public QObject
|
class EmuScriptObject: public QObject
|
||||||
|
@ -413,6 +415,8 @@ public:
|
||||||
static QtScriptManager* create(QObject* parent = nullptr);
|
static QtScriptManager* create(QObject* parent = nullptr);
|
||||||
static void destroy();
|
static void destroy();
|
||||||
|
|
||||||
|
static void logMessageQt(QtMsgType type, const QString &msg);
|
||||||
|
|
||||||
int numScriptsLoaded(void){ return scriptList.size(); }
|
int numScriptsLoaded(void){ return scriptList.size(); }
|
||||||
void addScriptInstance(QtScriptInstance* script);
|
void addScriptInstance(QtScriptInstance* script);
|
||||||
void removeScriptInstance(QtScriptInstance* script);
|
void removeScriptInstance(QtScriptInstance* script);
|
||||||
|
|
|
@ -27,6 +27,7 @@
|
||||||
#include "Qt/ConsoleWindow.h"
|
#include "Qt/ConsoleWindow.h"
|
||||||
#include "Qt/fceuWrapper.h"
|
#include "Qt/fceuWrapper.h"
|
||||||
#include "Qt/SplashScreen.h"
|
#include "Qt/SplashScreen.h"
|
||||||
|
#include "Qt/QtScriptManager.h"
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
#include <QtPlatformHeaders/QWindowsWindowFunctions>
|
#include <QtPlatformHeaders/QWindowsWindowFunctions>
|
||||||
|
@ -65,6 +66,10 @@ static void MessageOutput(QtMsgType type, const QMessageLogContext &context, con
|
||||||
}
|
}
|
||||||
cmsg[sizeof(cmsg)-1] = 0;
|
cmsg[sizeof(cmsg)-1] = 0;
|
||||||
fprintf(stderr, "%s", cmsg );
|
fprintf(stderr, "%s", cmsg );
|
||||||
|
|
||||||
|
#ifdef __FCEU_QSCRIPT_ENABLE__
|
||||||
|
QtScriptManager::logMessageQt(type, msg);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue