#include "web-search-plugin.h" #include "global-settings.h" #include #include #include #include #include #define UKUI_SEARCH_SCHEMAS "org.ukui.search.settings" #define BROWSERTYPE "x-scheme-handler/http" #define DESKTOPPATH "/usr/share/applications/" #define WEB_ENGINE_KEY "webEngine" using namespace UkuiSearch; WebSearchPlugin::WebSearchPlugin(QObject *parent) : QObject(parent) { if (QGSettings::isSchemaInstalled(UKUI_SEARCH_SCHEMAS)) { m_settings = new QGSettings(UKUI_SEARCH_SCHEMAS, QByteArray(), this); if (m_settings->keys().contains(WEB_ENGINE_KEY)) { m_webEngine = m_settings->get(WEB_ENGINE_KEY).toString(); } connect(m_settings, &QGSettings::changed, this, [ & ] (const QString& key) { if (key == WEB_ENGINE_KEY) { m_webEngine = m_settings->get(WEB_ENGINE_KEY).toString(); } }); } SearchPluginIface::Actioninfo open { 0, tr("Start browser search")}; m_actionInfo << open; initDetailPage(); } const QString UkuiSearch::WebSearchPlugin::name() { return "Web Page"; } const QString UkuiSearch::WebSearchPlugin::description() { return tr("Web Page"); } QString UkuiSearch::WebSearchPlugin::getPluginName() { return tr("Web Page"); } void UkuiSearch::WebSearchPlugin::KeywordSearch(QString keyword, DataQueue *searchResult) { m_keyWord = keyword; ResultInfo resultInfo; resultInfo.name = m_keyWord; resultInfo.type = 0; QByteArray ba = QString(DESKTOPPATH + getDefaultAppId(BROWSERTYPE)).toUtf8(); GDesktopAppInfo * textinfo = g_desktop_app_info_new_from_filename(ba.constData()); char *iconname = g_icon_to_string(g_app_info_get_icon(G_APP_INFO(textinfo))); QIcon appicon; appicon = IconLoader::loadIconQt(QString(QLatin1String(iconname)), QIcon(QString("/usr/share/pixmaps/"+QString(QLatin1String(iconname)) +".png"))); g_free(iconname); resultInfo.icon = QIcon(appicon); resultInfo.actionKey = m_keyWord; searchResult->enqueue(resultInfo); g_object_unref(textinfo); } void WebSearchPlugin::stopSearch() { } QList UkuiSearch::WebSearchPlugin::getActioninfo(int type) { Q_UNUSED(type) return m_actionInfo; } void UkuiSearch::WebSearchPlugin::openAction(int actionkey, QString key, int type) { Q_UNUSED(actionkey) Q_UNUSED(key) Q_UNUSED(type) QString address; if(!m_webEngine.isEmpty()) { if(m_webEngine == "360") { address = "https://so.com/s?q=" + m_keyWord; //360 } else if(m_webEngine == "sougou") { address = "https://www.sogou.com/web?query=" + m_keyWord; //搜狗 } else { address = "http://baidu.com/s?word=" + m_keyWord; //百度 } } else { //默认值 address = "http://baidu.com/s?word=" + m_keyWord ; //百度 } bool res(false); QDBusInterface * appLaunchInterface = new QDBusInterface("com.kylin.AppManager", "/com/kylin/AppManager", "com.kylin.AppManager", QDBusConnection::sessionBus()); if(!appLaunchInterface->isValid()) { qWarning() << qPrintable(QDBusConnection::sessionBus().lastError().message()); res = false; } else { appLaunchInterface->setTimeout(10000); QDBusReply reply = appLaunchInterface->call("LaunchDefaultAppWithUrl", address); if(reply.isValid()) { res = reply; } else { qWarning() << "SoftWareCenter dbus called failed!"; res = false; } } if(appLaunchInterface) { delete appLaunchInterface; } appLaunchInterface = NULL; if (res) return; QDesktopServices::openUrl(address); } QWidget *UkuiSearch::WebSearchPlugin::detailPage(const UkuiSearch::SearchPluginIface::ResultInfo &ri) { Q_UNUSED(ri) return m_detailPage; } void UkuiSearch::WebSearchPlugin::initDetailPage() { m_detailPage = new QWidget(); m_detailPage->setFixedWidth(360); m_detailPage->setAttribute(Qt::WA_TranslucentBackground); m_detailLyt = new QVBoxLayout(m_detailPage); m_detailLyt->setContentsMargins(8, 0, 16, 0); m_iconLabel = new QLabel(m_detailPage); m_iconLabel->setAlignment(Qt::AlignCenter); QString type = GlobalSettings::getInstance().getValue(STYLE_NAME_KEY).toString(); if (type == "ukui-dark") { m_iconLabel->setPixmap(QIcon(":/res/icons/search-web-dark.svg").pixmap(128, 128)); } else { m_iconLabel->setPixmap(QIcon(":/res/icons/search-web-default.svg").pixmap(128, 128)); } connect(qApp, &QApplication::paletteChanged, this, [=] () { QString type = GlobalSettings::getInstance().getValue(STYLE_NAME_KEY).toString(); if (type == "ukui-dark") { m_iconLabel->setPixmap(QIcon(":/res/icons/search-web-dark.svg").pixmap(128, 128)); } else { m_iconLabel->setPixmap(QIcon(":/res/icons/search-web-default.svg").pixmap(128, 128)); } }); m_actionFrame = new QFrame(m_detailPage); m_actionFrameLyt = new QVBoxLayout(m_actionFrame); m_actionFrameLyt->setContentsMargins(0, 0, 0, 0); m_actionFrameLyt->setAlignment(Qt::AlignCenter); m_actionLabel1 = new ActionLabel(tr("Start browser search"), m_currentActionKey, m_actionFrame); m_actionLabel1->adjustSize(); m_actionFrameLyt->addWidget(m_actionLabel1); m_actionFrame->setLayout(m_actionFrameLyt); m_detailLyt->addSpacing(146); m_detailLyt->addWidget(m_iconLabel); //m_detailLyt->addSpacing(6); m_detailLyt->addWidget(m_actionFrame); m_detailPage->setLayout(m_detailLyt); m_detailLyt->addStretch(); connect(m_actionLabel1, &ActionLabel::actionTriggered, [ & ](){ openAction(0, m_currentActionKey, 0); }); } QString WebSearchPlugin::getDefaultAppId(const char *contentType) { GAppInfo * app = g_app_info_get_default_for_type(contentType, false); if(app != NULL){ const char * id = g_app_info_get_id(app); QString strId(id); g_object_unref(app); return strId; } else { return QString(""); } }