//-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- const QIcon PdmUiItem::uiIcon(QString uiConfigName) const { const PdmUiItemInfo* conInfo = configInfo(uiConfigName); const PdmUiItemInfo* defInfo = defaultInfo(); const PdmUiItemInfo* sttInfo = m_staticItemInfo; if (conInfo && !(conInfo->m_icon.isNull())) return conInfo->m_icon; if (defInfo && !(defInfo->m_icon.isNull())) return defInfo->m_icon; if (sttInfo && !(sttInfo->m_icon.isNull())) return sttInfo->m_icon; return QIcon(); }
//-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- const QString PdmUiItem::uiToolTip(QString uiConfigName) const { const PdmUiItemInfo* conInfo = configInfo(uiConfigName); const PdmUiItemInfo* defInfo = defaultInfo(); const PdmUiItemInfo* sttInfo = m_staticItemInfo; if (conInfo && !(conInfo->m_toolTip.isNull())) return conInfo->m_toolTip; if (defInfo && !(defInfo->m_toolTip.isNull())) return defInfo->m_toolTip; if (sttInfo && !(sttInfo->m_toolTip.isNull())) return sttInfo->m_toolTip; return QString(""); }
//-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- PdmUiItemInfo::LabelPosType PdmUiItem::uiLabelPosition(QString uiConfigName) const { const PdmUiItemInfo* conInfo = configInfo(uiConfigName); const PdmUiItemInfo* defInfo = defaultInfo(); const PdmUiItemInfo* sttInfo = m_staticItemInfo; if (conInfo) return conInfo->m_labelAlignment; if (defInfo) return defInfo->m_labelAlignment; if (sttInfo) return sttInfo->m_labelAlignment; return PdmUiItemInfo::LEFT; }
//-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- QString PdmUiItem::uiEditorTypeName(const QString& uiConfigName) const { const PdmUiItemInfo* conInfo = configInfo(uiConfigName); const PdmUiItemInfo* defInfo = defaultInfo(); const PdmUiItemInfo* sttInfo = m_staticItemInfo; if (conInfo && !(conInfo->m_editorTypeName.isEmpty())) return conInfo->m_editorTypeName; if (defInfo && !(defInfo->m_editorTypeName.isEmpty())) return defInfo->m_editorTypeName; if (sttInfo && !(sttInfo->m_editorTypeName.isEmpty())) return sttInfo->m_editorTypeName; return QString(); }
//-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- bool PdmUiItem::isUiReadOnly(QString uiConfigName /*= ""*/) { const PdmUiItemInfo* conInfo = configInfo(uiConfigName); const PdmUiItemInfo* defInfo = defaultInfo(); const PdmUiItemInfo* sttInfo = m_staticItemInfo; if (conInfo && !(conInfo->m_isReadOnly == -1)) return conInfo->m_isReadOnly; if (defInfo && !(defInfo->m_isReadOnly == -1)) return defInfo->m_isReadOnly; if (sttInfo && !(sttInfo->m_isReadOnly == -1)) return sttInfo->m_isReadOnly; return false; }
//-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- bool PdmUiItem::isUiChildrenHidden(QString uiConfigName) const { const PdmUiItemInfo* conInfo = configInfo(uiConfigName); const PdmUiItemInfo* defInfo = defaultInfo(); const PdmUiItemInfo* sttInfo = m_staticItemInfo; if (conInfo && !(conInfo->m_isChildrenHidden == -1)) return conInfo->m_isChildrenHidden; if (defInfo && !(defInfo->m_isChildrenHidden == -1)) return defInfo->m_isChildrenHidden; if (sttInfo && !(sttInfo->m_isChildrenHidden == -1)) return sttInfo->m_isChildrenHidden; return false; }
//-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- const QString PdmUiItem::uiWhatsThis(QString uiConfigName) const { const PdmUiItemInfo* conInfo = configInfo(uiConfigName); const PdmUiItemInfo* defInfo = defaultInfo(); const PdmUiItemInfo* sttInfo = m_staticItemInfo; if (conInfo && !(conInfo->m_whatsThis.isNull())) return conInfo->m_whatsThis; if (defInfo && !(defInfo->m_whatsThis.isNull())) return defInfo->m_whatsThis; if (sttInfo && !(sttInfo->m_whatsThis.isNull())) return sttInfo->m_whatsThis; return QString(""); }
GPUInfos Module::discover() const { GPUInfos result; GPUInfo defaultInfo( "GLX" ); const char* displayEnv = getenv( "DISPLAY" ); if( displayEnv && displayEnv[0] != '\0' ) { const std::string display( displayEnv ); if( queryDisplay_( display, defaultInfo )) { defaultInfo.flags = GPUInfo::FLAG_DEFAULT; result.push_back( defaultInfo ); #ifdef __APPLE__ // OS X only has one X server, but launchd magic makes duplicate // detection hard return result; #endif } } // try x servers :0 - :n for( unsigned i = 0; i < std::numeric_limits< unsigned >::max() ; ++i ) // x screens :n.0 - :n.m for( unsigned j = 0; j < std::numeric_limits< unsigned >::max(); ++j ) { std::stringstream stream; stream << ':' << i << '.' << j; GPUInfo info( "GLX" ); if( queryDisplay_( stream.str(), info )) { if( info != defaultInfo ) result.push_back( info ); } else if( j == 0 && i > TRY_PORTS ) // X Server does not exist, stop query return result; else // X Screen does not exist, try next server break; } return result; }
GPUInfos Module::discover() const { GPUInfos result; GPUInfo defaultInfo( "GLX" ); const char* displayEnv = getenv( "DISPLAY" ); if( displayEnv && displayEnv[0] != '\0' ) { const std::string display( displayEnv ); if( queryDisplay_( display, defaultInfo )) { if( display[0] != ':' && display[0] != '/' /* OS X launchd */ ) { defaultInfo.port = GPUInfo::defaultValue; defaultInfo.device = GPUInfo::defaultValue; } result.push_back( defaultInfo ); } } // try x servers :0 - :n for( unsigned i = 0; i < std::numeric_limits< unsigned >::max() ; ++i ) // x screens :n.0 - :n.m for( unsigned j = 0; j < std::numeric_limits< unsigned >::max(); ++j ) { std::stringstream stream; stream << ':' << i << '.' << j; GPUInfo info( "GLX" ); if( queryDisplay_( stream.str(), info )) { if( info != defaultInfo ) result.push_back( info ); } else if( j == 0 && i >= TRY_PORTS ) // X Server does not exist, stop query return result; else // X Screen does not exist, try next server break; } return result; }
QVariantHash PlayerSource::getPlayerMpdInfo(const QString mpdAddress) const { qCDebug(LOG_ESM) << "MPD" << mpdAddress; QVariantHash info = defaultInfo(); // build cmd QString cmd = QString("bash -c \"echo 'currentsong\nstatus\nclose' | curl " "--connect-timeout 1 -fsm 3 telnet://%1\"") .arg(mpdAddress); qCInfo(LOG_ESM) << "cmd" << cmd; TaskResult process = runTask(cmd); qCInfo(LOG_ESM) << "Cmd returns" << process.exitCode; qCInfo(LOG_ESM) << "Error" << process.error; QString qoutput = QTextCodec::codecForMib(106)->toUnicode(process.output).trimmed(); for (auto str : qoutput.split(QChar('\n'), QString::SkipEmptyParts)) { if (str.split(QString(": "), QString::SkipEmptyParts).count() == 2) { // "Metadata: data" QString metadata = str.split(QString(": "), QString::SkipEmptyParts) .first() .toLower(); QString data = str.split(QString(": "), QString::SkipEmptyParts) .last() .trimmed(); // there are one more time... if ((metadata == QString("time")) && (data.contains(QChar(':')))) { QStringList times = data.split(QString(":")); info[QString("player/duration")] = times.at(0).toInt(); info[QString("player/progress")] = times.at(1).toInt(); } else if (m_metadata.contains(metadata)) { info[QString("player/%1").arg(metadata)] = data; } } } return info; }
QVariantHash PlayerSource::getPlayerMprisInfo(const QString mpris) const { qCDebug(LOG_ESM) << "MPRIS" << mpris; QVariantHash info = defaultInfo(); if (mpris.isEmpty()) return info; QDBusConnection bus = QDBusConnection::sessionBus(); // comes from the following request: // qdbus org.mpris.MediaPlayer2.vlc /org/mpris/MediaPlayer2 // org.freedesktop.DBus.Properties.Get org.mpris.MediaPlayer2.Player // Metadata // or the same but using dbus-send: // dbus-send --print-reply --session --dest=org.mpris.MediaPlayer2.vlc // /org/mpris/MediaPlayer2 org.freedesktop.DBus.Properties.Get // string:'org.mpris.MediaPlayer2.Player' string:'Metadata' QVariantList args = QVariantList() << QString("org.mpris.MediaPlayer2.Player") << QString("Metadata"); QDBusMessage request = QDBusMessage::createMethodCall( QString("org.mpris.MediaPlayer2.%1").arg(mpris), QString("/org/mpris/MediaPlayer2"), QString(""), QString("Get")); request.setArguments(args); QDBusMessage response = bus.call(request, QDBus::BlockWithGui); if ((response.type() != QDBusMessage::ReplyMessage) || (response.arguments().isEmpty())) { qCWarning(LOG_ESM) << "Error message" << response.errorMessage(); } else { // another portion of dirty magic QVariantHash map = qdbus_cast<QVariantHash>(response.arguments() .first() .value<QDBusVariant>() .variant() .value<QDBusArgument>()); info[QString("player/album")] = map.value(QString("xesam:album"), QString("unknown")); // artist is array info[QString("player/artist")] = map.value(QString("xesam:artist"), QString("unknown")).toString(); info[QString("player/duration")] = map.value(QString("mpris:length"), 0).toInt() / (1000 * 1000); info[QString("player/title")] = map.value(QString("xesam:title"), QString("unknown")); } // position args[1] = QString("Position"); request.setArguments(args); response = bus.call(request, QDBus::BlockWithGui); if ((response.type() != QDBusMessage::ReplyMessage) || (response.arguments().isEmpty())) { qCWarning(LOG_ESM) << "Error message" << response.errorMessage(); } else { // this cast is simpler than the previous one ;) info[QString("player/progress")] = response.arguments() .first() .value<QDBusVariant>() .variant() .toLongLong() / (1000 * 1000); } return info; }