bool QtSingleApplication::event(QEvent *event)
{
    if (event->type() == QEvent::FileOpen) {
        QFileOpenEvent *foe = static_cast<QFileOpenEvent*>(event);
        emit fileOpenRequest(foe->file());
        return true;
    }
    return QApplication::event(event);
}
int Tiled::Internal::TiledApplication::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
{
    _id = QApplication::qt_metacall(_c, _id, _a);
    if (_id < 0)
        return _id;
    if (_c == QMetaObject::InvokeMetaMethod) {
        switch (_id) {
        case 0: fileOpenRequest((*reinterpret_cast< const QString(*)>(_a[1]))); break;
        default: ;
        }
        _id -= 1;
    }
    return _id;
}
void GarudaClient::parseMessage(const QString &message)
{
    QVariant var = QtJson::Json::parse(message);
    QVariantMap data = var.toMap();

    QVariantMap header = data["header"].toMap();
    QString action =  header["id"].toString();

    if (action == "GetCompatibleGadgetListResponse")
    {
        emit showCompatibleSoftwareResponse(data);
    }
    else if (action == "LoadDataRequest")
    {
        QVariantMap body = data["body"].toMap();
        QString filePath = body["data"].toString();
        QString originGadgetName = body["originGadgetName"].toString();
        QString originGadgetUUID = body["originGadgetUUID"].toString();
        qDebug("Garuda: %s (%s) requests we load %s",
               qPrintable(originGadgetName), qPrintable(originGadgetUUID),
               qPrintable(filePath));
        emit fileOpenRequest(filePath);
    }
}