实现屏保插件,修改锁屏加载屏保方式由执行命令改为静态调用
This commit is contained in:
parent
0a1533d27e
commit
e51bcbd333
|
@ -67,5 +67,5 @@ add_subdirectory(screensaver-focus-helper)
|
||||||
add_subdirectory(Common)
|
add_subdirectory(Common)
|
||||||
add_subdirectory(KylinNM)
|
add_subdirectory(KylinNM)
|
||||||
|
|
||||||
add_dependencies(ukui-screensaver-dialog BiometricAuth VirtualKeyboard Common)
|
add_dependencies(ukui-screensaver-dialog BiometricAuth VirtualKeyboard Common Screensaver)
|
||||||
add_dependencies(ukui-screensaver-default Common)
|
add_dependencies(ukui-screensaver-default Common)
|
||||||
|
|
|
@ -0,0 +1,23 @@
|
||||||
|
#-------------------------------------------------
|
||||||
|
#
|
||||||
|
# Project created by QtCreator 2022-07-01T18:13:09
|
||||||
|
#
|
||||||
|
#-------------------------------------------------
|
||||||
|
|
||||||
|
QT += core gui
|
||||||
|
|
||||||
|
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
|
||||||
|
|
||||||
|
TARGET = LoadCustomPlugin
|
||||||
|
TEMPLATE = app
|
||||||
|
|
||||||
|
SOURCES += \
|
||||||
|
main.cpp \
|
||||||
|
widget.cpp
|
||||||
|
|
||||||
|
HEADERS += \
|
||||||
|
widget.h
|
||||||
|
|
||||||
|
FORMS += \
|
||||||
|
widget.ui
|
||||||
|
|
|
@ -0,0 +1,11 @@
|
||||||
|
#include "widget.h"
|
||||||
|
#include <QApplication>
|
||||||
|
|
||||||
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
QApplication a(argc, argv);
|
||||||
|
Widget w;
|
||||||
|
w.show();
|
||||||
|
|
||||||
|
return a.exec();
|
||||||
|
}
|
|
@ -0,0 +1,46 @@
|
||||||
|
#pragma execution_character_set("utf-8")
|
||||||
|
|
||||||
|
#include "widget.h"
|
||||||
|
#include "ui_widget.h"
|
||||||
|
#include <QFileDialog>
|
||||||
|
#include <QPluginLoader>
|
||||||
|
#include <QHBoxLayout>
|
||||||
|
#include <memory>
|
||||||
|
#include <ukui-screensaver/screensaverplugin.h>
|
||||||
|
|
||||||
|
Widget::Widget(QWidget *parent) :
|
||||||
|
QWidget(parent),
|
||||||
|
ui(new Ui::Widget)
|
||||||
|
{
|
||||||
|
ui->setupUi(this);
|
||||||
|
connect(ui->load_plugin_btn,SIGNAL(clicked(bool)),this, SLOT(slot_load_plugin()));
|
||||||
|
}
|
||||||
|
|
||||||
|
Widget::~Widget()
|
||||||
|
{
|
||||||
|
delete ui;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Widget::slot_load_plugin()
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
QString file_path = QFileDialog::getOpenFileName(NULL,"加载插件",".","dll (*.dll *.so)");
|
||||||
|
if(file_path.isEmpty())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
QPluginLoader pluginLoader("/usr/lib/ukui-screensaver/libscreensaver-default.so");
|
||||||
|
pluginLoader.load();
|
||||||
|
QObject* plugin = pluginLoader.instance();
|
||||||
|
if (plugin) {
|
||||||
|
std::unique_ptr<ScreensaverPlugin> interface_ptr = std::unique_ptr<ScreensaverPlugin>(qobject_cast<ScreensaverPlugin*>(plugin));
|
||||||
|
QWidget* widget = interface_ptr->createWidget(false,this);
|
||||||
|
widget->setFixedHeight(180);
|
||||||
|
widget->setFixedWidth(300);
|
||||||
|
QHBoxLayout* mainLayout = new QHBoxLayout(this);
|
||||||
|
|
||||||
|
mainLayout->addWidget(widget);
|
||||||
|
ui->widget->setLayout(mainLayout);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,25 @@
|
||||||
|
#ifndef WIDGET_H
|
||||||
|
#define WIDGET_H
|
||||||
|
|
||||||
|
#include <QWidget>
|
||||||
|
|
||||||
|
namespace Ui {
|
||||||
|
class Widget;
|
||||||
|
}
|
||||||
|
|
||||||
|
class Widget : public QWidget
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
explicit Widget(QWidget *parent = 0);
|
||||||
|
~Widget();
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
void slot_load_plugin();
|
||||||
|
|
||||||
|
private:
|
||||||
|
Ui::Widget *ui;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // WIDGET_H
|
|
@ -0,0 +1,43 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>Widget</class>
|
||||||
|
<widget class="QWidget" name="Widget">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>400</width>
|
||||||
|
<height>300</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>Widget</string>
|
||||||
|
</property>
|
||||||
|
<widget class="QPushButton" name="load_plugin_btn">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>140</x>
|
||||||
|
<y>30</y>
|
||||||
|
<width>111</width>
|
||||||
|
<height>31</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>LoadPlugin</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QWidget" name="widget" native="true">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>30</x>
|
||||||
|
<y>90</y>
|
||||||
|
<width>331</width>
|
||||||
|
<height>141</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
<layoutdefault spacing="6" margin="11"/>
|
||||||
|
<resources/>
|
||||||
|
<connections/>
|
||||||
|
</ui>
|
|
@ -29,7 +29,7 @@ qt5_wrap_cpp(screensaver_SRC
|
||||||
cyclelabel.h
|
cyclelabel.h
|
||||||
scconfiguration.h
|
scconfiguration.h
|
||||||
sleeptime.h
|
sleeptime.h
|
||||||
weathermanager.h
|
../src/weathermanager.h
|
||||||
../src/networkwatcher.h
|
../src/networkwatcher.h
|
||||||
)
|
)
|
||||||
set(screensaver_SRC
|
set(screensaver_SRC
|
||||||
|
@ -41,14 +41,76 @@ set(screensaver_SRC
|
||||||
cyclelabel.cpp
|
cyclelabel.cpp
|
||||||
scconfiguration.cpp
|
scconfiguration.cpp
|
||||||
sleeptime.cpp
|
sleeptime.cpp
|
||||||
weathermanager.cpp
|
../src/weathermanager.cpp
|
||||||
../src/networkwatcher.cpp
|
../src/networkwatcher.cpp
|
||||||
)
|
)
|
||||||
add_executable(ukui-screensaver-default ${screensaver_SRC})
|
add_executable(ukui-screensaver-default ${screensaver_SRC})
|
||||||
target_link_libraries(ukui-screensaver-default Qt5::Core Qt5::Widgets Qt5::X11Extras Qt5::Xml Qt5::Network ${EXTRA_LIBS})
|
target_link_libraries(ukui-screensaver-default Qt5::Core Qt5::Widgets Qt5::X11Extras Qt5::Xml Qt5::Network ${EXTRA_LIBS})
|
||||||
|
|
||||||
|
qt5_add_resources(screensaver_Plugin_SRC
|
||||||
|
default.qrc
|
||||||
|
)
|
||||||
|
|
||||||
|
qt5_wrap_cpp(screensaver_Plugin_SRC
|
||||||
|
chinesedate.h
|
||||||
|
screensaver.h
|
||||||
|
mbackground.h
|
||||||
|
cyclelabel.h
|
||||||
|
scconfiguration.h
|
||||||
|
sleeptime.h
|
||||||
|
../src/weathermanager.h
|
||||||
|
../src/networkwatcher.h
|
||||||
|
customplugin.h
|
||||||
|
screensaverplugin.h
|
||||||
|
)
|
||||||
|
set(screensaver_Plugin_SRC
|
||||||
|
${screensaver_Plugin_SRC}
|
||||||
|
chinesedate.cpp
|
||||||
|
mbackground.cpp
|
||||||
|
screensaver.cpp
|
||||||
|
cyclelabel.cpp
|
||||||
|
scconfiguration.cpp
|
||||||
|
sleeptime.cpp
|
||||||
|
../src/weathermanager.cpp
|
||||||
|
../src/networkwatcher.cpp
|
||||||
|
customplugin.cpp
|
||||||
|
)
|
||||||
|
|
||||||
|
add_library(screensaver-default SHARED ${screensaver_Plugin_SRC})
|
||||||
|
target_link_libraries(screensaver-default Qt5::Core Qt5::Widgets Qt5::X11Extras Qt5::Xml Qt5::Network ${EXTRA_LIBS})
|
||||||
|
|
||||||
|
qt5_add_resources(Screensaver_SRC
|
||||||
|
default.qrc
|
||||||
|
)
|
||||||
|
|
||||||
|
qt5_wrap_cpp(Screensaver_SRC
|
||||||
|
chinesedate.h
|
||||||
|
screensaver.h
|
||||||
|
mbackground.h
|
||||||
|
cyclelabel.h
|
||||||
|
scconfiguration.h
|
||||||
|
sleeptime.h
|
||||||
|
../src/weathermanager.h
|
||||||
|
../src/networkwatcher.h
|
||||||
|
)
|
||||||
|
set(Screensaver_SRC
|
||||||
|
${screensaver_Plugin_SRC}
|
||||||
|
chinesedate.cpp
|
||||||
|
mbackground.cpp
|
||||||
|
screensaver.cpp
|
||||||
|
cyclelabel.cpp
|
||||||
|
scconfiguration.cpp
|
||||||
|
sleeptime.cpp
|
||||||
|
../src/weathermanager.cpp
|
||||||
|
../src/networkwatcher.cpp
|
||||||
|
)
|
||||||
|
|
||||||
|
add_library(Screensaver STATIC ${Screensaver_SRC})
|
||||||
|
target_link_libraries(Screensaver Qt5::Core Qt5::Widgets Qt5::X11Extras Qt5::Xml Qt5::Network ${EXTRA_LIBS})
|
||||||
|
|
||||||
install(TARGETS
|
install(TARGETS
|
||||||
ukui-screensaver-default
|
ukui-screensaver-default
|
||||||
|
screensaver-default
|
||||||
DESTINATION lib/ukui-screensaver)
|
DESTINATION lib/ukui-screensaver)
|
||||||
|
|
||||||
install(FILES
|
install(FILES
|
||||||
|
@ -56,3 +118,7 @@ install(FILES
|
||||||
language/screensaver-en_US.ini
|
language/screensaver-en_US.ini
|
||||||
language/screensaver-jd.ini
|
language/screensaver-jd.ini
|
||||||
DESTINATION share/ukui-screensaver/language)
|
DESTINATION share/ukui-screensaver/language)
|
||||||
|
|
||||||
|
install(FILES
|
||||||
|
screensaverplugin.h
|
||||||
|
DESTINATION include/ukui-screensaver/)
|
||||||
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
#include "customplugin.h"
|
||||||
|
#include "screensaver.h"
|
||||||
|
|
||||||
|
CustomPlugin::CustomPlugin(QObject *parent):QObject(parent)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
QString CustomPlugin::name() const
|
||||||
|
{
|
||||||
|
return "screensaver-default";
|
||||||
|
}
|
||||||
|
|
||||||
|
QWidget* CustomPlugin::createWidget(bool isScreensaver,QWidget* parent)
|
||||||
|
{
|
||||||
|
return new Screensaver(isScreensaver,parent);
|
||||||
|
}
|
||||||
|
|
||||||
|
QString CustomPlugin::displayName() const
|
||||||
|
{
|
||||||
|
return "screensaver-default";
|
||||||
|
}
|
|
@ -0,0 +1,21 @@
|
||||||
|
#ifndef CUSTOMPLUGIN_H
|
||||||
|
#define CUSTOMPLUGIN_H
|
||||||
|
|
||||||
|
#include "screensaverplugin.h"
|
||||||
|
#include <QObject>
|
||||||
|
|
||||||
|
class CustomPlugin : public QObject, ScreensaverPlugin
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
//声明QT识别的唯一标识符
|
||||||
|
Q_PLUGIN_METADATA(IID "org.ukui.screensaver.screensaver-default1.0.0")
|
||||||
|
//声明实现的插件接口
|
||||||
|
Q_INTERFACES(ScreensaverPlugin)
|
||||||
|
public:
|
||||||
|
CustomPlugin(QObject* parent = 0);
|
||||||
|
QString name() const override;
|
||||||
|
QWidget* createWidget(bool isScreensaver,QWidget* parent) override;
|
||||||
|
QString displayName() const override;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // CUSTOMPLUGIN_H
|
|
@ -34,7 +34,6 @@
|
||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
||||||
#define WORKING_DIRECTORY "/usr/share/ukui-screensaver"
|
|
||||||
bool bControlFlg = false;//是否控制面板窗口
|
bool bControlFlg = false;//是否控制面板窗口
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
|
@ -45,18 +44,10 @@ int main(int argc, char *argv[])
|
||||||
#endif
|
#endif
|
||||||
QApplication a(argc, argv);
|
QApplication a(argc, argv);
|
||||||
prctl(PR_SET_PDEATHSIG, SIGHUP);
|
prctl(PR_SET_PDEATHSIG, SIGHUP);
|
||||||
//加载翻译文件
|
|
||||||
QString locale = QLocale::system().name();
|
|
||||||
QTranslator translator;
|
|
||||||
QString qmFile = QString(WORKING_DIRECTORY"/i18n_qm/%1.qm").arg(locale);
|
|
||||||
translator.load(qmFile);
|
|
||||||
a.installTranslator(&translator);
|
|
||||||
qDebug() << "load translation file " << qmFile;
|
|
||||||
|
|
||||||
|
|
||||||
QCommandLineParser parser;
|
QCommandLineParser parser;
|
||||||
QString windowId;
|
QString windowId;
|
||||||
Screensaver s;
|
Screensaver s(false);
|
||||||
XWindowAttributes xwa;
|
XWindowAttributes xwa;
|
||||||
|
|
||||||
parser.setApplicationDescription("Test helper");
|
parser.setApplicationDescription("Test helper");
|
||||||
|
@ -88,7 +79,7 @@ int main(int argc, char *argv[])
|
||||||
s.winId();
|
s.winId();
|
||||||
s.windowHandle()->setParent(window);
|
s.windowHandle()->setParent(window);
|
||||||
XGetWindowAttributes (QX11Info::display(), wid, &xwa);
|
XGetWindowAttributes (QX11Info::display(), wid, &xwa);
|
||||||
|
/*
|
||||||
#ifndef USE_INTEL
|
#ifndef USE_INTEL
|
||||||
XClassHint ch;
|
XClassHint ch;
|
||||||
ch.res_name = NULL;
|
ch.res_name = NULL;
|
||||||
|
@ -96,10 +87,9 @@ int main(int argc, char *argv[])
|
||||||
XGetClassHint (QX11Info::display(), wid, &ch);
|
XGetClassHint (QX11Info::display(), wid, &ch);
|
||||||
if(ch.res_name && strcmp(ch.res_name,"ukui-control-center")==0){
|
if(ch.res_name && strcmp(ch.res_name,"ukui-control-center")==0){
|
||||||
bControlFlg = true;
|
bControlFlg = true;
|
||||||
s.addClickedEvent();
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
*/
|
||||||
//获取屏保所在屏幕对应的缩放比例。
|
//获取屏保所在屏幕对应的缩放比例。
|
||||||
for(auto screen : QGuiApplication::screens())
|
for(auto screen : QGuiApplication::screens())
|
||||||
{
|
{
|
||||||
|
|
|
@ -57,6 +57,7 @@
|
||||||
|
|
||||||
#include "commonfunc.h"
|
#include "commonfunc.h"
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
#include "../src/weathermanager.h"
|
||||||
|
|
||||||
#define TIME_TYPE_SCHEMA "org.ukui.control-center.panel.plugins"
|
#define TIME_TYPE_SCHEMA "org.ukui.control-center.panel.plugins"
|
||||||
#define THEME_TYPE_SCHENA "org.ukui.style"
|
#define THEME_TYPE_SCHENA "org.ukui.style"
|
||||||
|
@ -66,11 +67,13 @@
|
||||||
#define KEY_MESSAGE_SHOW_ENABLED "show-message-enabled"
|
#define KEY_MESSAGE_SHOW_ENABLED "show-message-enabled"
|
||||||
#define KEY_HOURSYSTEM "hoursystem"
|
#define KEY_HOURSYSTEM "hoursystem"
|
||||||
#define KEY_DATE_FORMAT "date"
|
#define KEY_DATE_FORMAT "date"
|
||||||
|
#define WORKING_DIRECTORY "/usr/share/ukui-screensaver"
|
||||||
|
|
||||||
QTime Screensaver::m_currentTime = QTime::currentTime();
|
QTime Screensaver::m_currentTime = QTime::currentTime();
|
||||||
extern bool bControlFlg;
|
extern bool bControlFlg;
|
||||||
|
|
||||||
Screensaver::Screensaver(QWidget *parent):
|
Screensaver::Screensaver(bool isscreensaver,QWidget *parent):
|
||||||
|
isScreensaver(isscreensaver),
|
||||||
QWidget(parent),
|
QWidget(parent),
|
||||||
switchTimer(nullptr),
|
switchTimer(nullptr),
|
||||||
backgroundPath(""),
|
backgroundPath(""),
|
||||||
|
@ -93,9 +96,16 @@ Screensaver::Screensaver(QWidget *parent):
|
||||||
hasChanged(false),
|
hasChanged(false),
|
||||||
process(nullptr),
|
process(nullptr),
|
||||||
screenLabel(nullptr),
|
screenLabel(nullptr),
|
||||||
respondClick(false),
|
respondClick(false)
|
||||||
m_weatherManager(new WeatherManager(this))
|
|
||||||
{
|
{
|
||||||
|
//加载翻译文件
|
||||||
|
QString locale = QLocale::system().name();
|
||||||
|
QTranslator translator;
|
||||||
|
QString qmFile = QString(WORKING_DIRECTORY"/i18n_qm/%1.qm").arg(locale);
|
||||||
|
translator.load(qmFile);
|
||||||
|
qApp->installTranslator(&translator);
|
||||||
|
qDebug() << "load translation file " << qmFile;
|
||||||
|
|
||||||
installEventFilter(this);
|
installEventFilter(this);
|
||||||
// setWindowFlags(Qt::X11BypassWindowManagerHint);
|
// setWindowFlags(Qt::X11BypassWindowManagerHint);
|
||||||
setUpdateCenterWidget();
|
setUpdateCenterWidget();
|
||||||
|
@ -367,7 +377,7 @@ bool Screensaver::eventFilter(QObject *obj, QEvent *event)
|
||||||
#ifndef USE_INTEL
|
#ifndef USE_INTEL
|
||||||
if(obj == this){
|
if(obj == this){
|
||||||
if(event->type()==QEvent::MouseButtonPress){
|
if(event->type()==QEvent::MouseButtonPress){
|
||||||
if(respondClick){
|
if(!isScreensaver){
|
||||||
if(!process){
|
if(!process){
|
||||||
process = new QProcess(this);
|
process = new QProcess(this);
|
||||||
}
|
}
|
||||||
|
@ -495,7 +505,7 @@ void Screensaver::resizeEvent(QResizeEvent */*event*/)
|
||||||
{
|
{
|
||||||
float scale = 1.0;
|
float scale = 1.0;
|
||||||
scale = (float)width()/1920;
|
scale = (float)width()/1920;
|
||||||
if(width() < 600 || height()<400){//当显示在控制面板上时,字体缩小三倍。
|
if((width() < 600 || height()<400) && !isScreensaver){//当显示在控制面板上时,字体缩小三倍。
|
||||||
if(flag == 0)
|
if(flag == 0)
|
||||||
{
|
{
|
||||||
QList<QLabel*> labelList = this->findChildren<QLabel *>();
|
QList<QLabel*> labelList = this->findChildren<QLabel *>();
|
||||||
|
@ -520,25 +530,6 @@ void Screensaver::resizeEvent(QResizeEvent */*event*/)
|
||||||
flag = 1;
|
flag = 1;
|
||||||
#ifndef USE_INTEL
|
#ifndef USE_INTEL
|
||||||
if(myTextWidget){
|
if(myTextWidget){
|
||||||
|
|
||||||
// QColor highLightColor = palette().color(QPalette::Base);
|
|
||||||
// QString stringColor = QString("rgba(%1,%2,%3,82%)")
|
|
||||||
// .arg(highLightColor.red())
|
|
||||||
// .arg(highLightColor.green())
|
|
||||||
// .arg(highLightColor.blue());
|
|
||||||
// QColor textColor = palette().color(QPalette::Text);
|
|
||||||
// QString textString = QString("rgb(%1,%2,%3)")
|
|
||||||
// .arg(textColor.red())
|
|
||||||
// .arg(textColor.green())
|
|
||||||
// .arg(textColor.blue());
|
|
||||||
// QColor borderColor = palette().color(QPalette::BrightText);
|
|
||||||
// QString borderString = QString("rgba(%1,%2,%3,85%)")
|
|
||||||
// .arg(borderColor.red())
|
|
||||||
// .arg(borderColor.green())
|
|
||||||
// .arg(borderColor.blue());
|
|
||||||
|
|
||||||
// myTextLabel->setStyleSheet(QString("font-size:5px;border-radius: 2px;background: %1;color: %2;padding: 4px 8px 4px 8px;border-width: 1px;border-style: solid;border-color:%3;") \
|
|
||||||
// .arg(stringColor).arg(textString).arg(borderString));
|
|
||||||
if(curStyle == "ukui-dark" || curStyle == "ukui-black"){
|
if(curStyle == "ukui-dark" || curStyle == "ukui-black"){
|
||||||
myTextLabel->setStyleSheet(QString("QLabel{font-size:5px;border-radius: 2px;padding: 4px 8px 4px 8px;border-width: 1px;\
|
myTextLabel->setStyleSheet(QString("QLabel{font-size:5px;border-radius: 2px;padding: 4px 8px 4px 8px;border-width: 1px;\
|
||||||
background: rgba(0, 0, 0, %1); color:#FFFFFF; border-radius:16px}").arg(blur_Num * 0.01));
|
background: rgba(0, 0, 0, %1); color:#FFFFFF; border-radius:16px}").arg(blur_Num * 0.01));
|
||||||
|
@ -710,7 +701,7 @@ void Screensaver::updateBackgroundPath()
|
||||||
void Screensaver::enterEvent(QEvent*){
|
void Screensaver::enterEvent(QEvent*){
|
||||||
// qDebug() << "enter ScreenSaver::enterEvent";
|
// qDebug() << "enter ScreenSaver::enterEvent";
|
||||||
//当前是否是控制面板窗口
|
//当前是否是控制面板窗口
|
||||||
if(bControlFlg){
|
if(!isScreensaver){
|
||||||
setPreviewText(true);
|
setPreviewText(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -853,10 +844,12 @@ void Screensaver::initUI()
|
||||||
|
|
||||||
if(qssFile.open(QIODevice::ReadOnly)) {
|
if(qssFile.open(QIODevice::ReadOnly)) {
|
||||||
setStyleSheet(qssFile.readAll());
|
setStyleSheet(qssFile.readAll());
|
||||||
|
qDebug()<<qssFile.readAll();
|
||||||
}
|
}
|
||||||
qssFile.close();
|
qssFile.close();
|
||||||
|
|
||||||
#ifdef USE_INTEL
|
#ifdef USE_INTEL
|
||||||
|
m_weatherManager = new WeatherManager(this);
|
||||||
setWeatherLayout();
|
setWeatherLayout();
|
||||||
setDatelayout();
|
setDatelayout();
|
||||||
setCenterWidget();
|
setCenterWidget();
|
||||||
|
|
|
@ -37,14 +37,15 @@
|
||||||
#include "checkbutton.h"
|
#include "checkbutton.h"
|
||||||
#include "scconfiguration.h"
|
#include "scconfiguration.h"
|
||||||
#include "cyclelabel.h"
|
#include "cyclelabel.h"
|
||||||
#include "weathermanager.h"
|
|
||||||
|
class WeatherManager;
|
||||||
|
|
||||||
class Screensaver : public QWidget
|
class Screensaver : public QWidget
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit Screensaver(QWidget *parent = 0);
|
explicit Screensaver(bool isScreensaver,QWidget *parent = 0);
|
||||||
~Screensaver();
|
~Screensaver();
|
||||||
void addClickedEvent();
|
void addClickedEvent();
|
||||||
|
|
||||||
|
@ -135,7 +136,7 @@ private:
|
||||||
int blur_Num;
|
int blur_Num;
|
||||||
QString curStyle;
|
QString curStyle;
|
||||||
|
|
||||||
WeatherManager *m_weatherManager;
|
WeatherManager *m_weatherManager=nullptr;
|
||||||
QWidget *m_weatherLaout;
|
QWidget *m_weatherLaout;
|
||||||
QLabel *m_weatherIcon;
|
QLabel *m_weatherIcon;
|
||||||
QLabel *m_weatherArea;
|
QLabel *m_weatherArea;
|
||||||
|
@ -153,7 +154,8 @@ private:
|
||||||
int delayTime;
|
int delayTime;
|
||||||
QTimer *movieTimer = nullptr;
|
QTimer *movieTimer = nullptr;
|
||||||
int currentCount = 0;
|
int currentCount = 0;
|
||||||
|
bool bControlFlg = true;
|
||||||
|
bool isScreensaver = false;
|
||||||
protected:
|
protected:
|
||||||
void paintEvent(QPaintEvent *event);
|
void paintEvent(QPaintEvent *event);
|
||||||
void resizeEvent(QResizeEvent *event);
|
void resizeEvent(QResizeEvent *event);
|
||||||
|
|
|
@ -0,0 +1,27 @@
|
||||||
|
#ifndef SCREENSAVER_PLUGIN_H
|
||||||
|
#define SCREENSAVER_PLUGIN_H
|
||||||
|
|
||||||
|
#include <QWidget>
|
||||||
|
|
||||||
|
class ScreensaverPlugin
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
virtual ~ScreensaverPlugin() {}
|
||||||
|
//插件实例的名称
|
||||||
|
virtual QString name() const = 0;
|
||||||
|
|
||||||
|
//创建UI的实例
|
||||||
|
virtual QWidget* createWidget(bool isScreensaver,QWidget* parent) = 0;
|
||||||
|
|
||||||
|
//获得插件的展示名称
|
||||||
|
virtual QString displayName() const = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
//定义了在QT系统中该接口的全局唯一的ID
|
||||||
|
//实现该SDK的插件也要定义相同的ID
|
||||||
|
//接口的ID中包含了版本信息,通过该ID我们可以区别不同版本的SDK和插件
|
||||||
|
//Q_DECLARE_INTERFACE宏将类型和ID关联起来,这样QT就可以验证加载的插件是否可以转换成MyPluginInterface类型
|
||||||
|
#define interface_iid "org.ukui.screensaver.screensaver-default1.0.0"
|
||||||
|
Q_DECLARE_INTERFACE(ScreensaverPlugin, interface_iid)
|
||||||
|
|
||||||
|
#endif // FILTER_H
|
|
@ -1,122 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright (C) 2020 Tianjin KYLIN Information Technology Co., Ltd.
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation; either version 3, or (at your option)
|
|
||||||
* any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program; if not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
* Authors: ZHAI Kang-ning <zhaikangning@kylinos.cn>
|
|
||||||
**/
|
|
||||||
#ifndef WEATHERMANAGER_H
|
|
||||||
#define WEATHERMANAGER_H
|
|
||||||
|
|
||||||
#include <QObject>
|
|
||||||
#include <functional>
|
|
||||||
#include <QTimer>
|
|
||||||
#include <QGSettings>
|
|
||||||
|
|
||||||
#include "../src/networkwatcher.h"
|
|
||||||
|
|
||||||
class QNetworkAccessManager;
|
|
||||||
class QNetworkReply;
|
|
||||||
class LocalWeatherInfo;
|
|
||||||
|
|
||||||
class WeatherManager : public QObject
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
public:
|
|
||||||
explicit WeatherManager(QObject *parent = nullptr);
|
|
||||||
|
|
||||||
Q_SIGNALS:
|
|
||||||
void onWeatherUpdate(QString city, QString cond, QString temperature);
|
|
||||||
|
|
||||||
private Q_SLOTS:
|
|
||||||
void replyFinished(QNetworkReply *);
|
|
||||||
void onNetworkStateChanged(uint state);
|
|
||||||
|
|
||||||
public:
|
|
||||||
void getWeather();
|
|
||||||
QPixmap getWeatherIcon();
|
|
||||||
QPixmap getWeatherIcon(QString cond);
|
|
||||||
|
|
||||||
QString getCityName();
|
|
||||||
QString getCond();
|
|
||||||
QString getTemperature();
|
|
||||||
|
|
||||||
private:
|
|
||||||
bool updateLocation();//更新位置,从用户设置获取城市信息,如有多个,只取第一个,未对接
|
|
||||||
void weatherRequest();
|
|
||||||
|
|
||||||
bool getLogcalWeather();
|
|
||||||
QString getLogcalCityId();
|
|
||||||
|
|
||||||
private:
|
|
||||||
QString m_city_id; // "101030100" 默认天津
|
|
||||||
QString m_city_name;
|
|
||||||
QString m_cond_txt; //天气条件 晴、阴等
|
|
||||||
QString m_temperature;//温度 10、20等
|
|
||||||
|
|
||||||
QNetworkAccessManager *m_net_manager;
|
|
||||||
QTimer *m_timer;
|
|
||||||
QGSettings *m_settings;
|
|
||||||
|
|
||||||
LocalWeatherInfo *m_local_weather_info;
|
|
||||||
NetWorkWatcher *m_networkWatcher;
|
|
||||||
|
|
||||||
int m_networkTryNum = 0;
|
|
||||||
};
|
|
||||||
|
|
||||||
class LocalWeatherInfo : QObject
|
|
||||||
{
|
|
||||||
//"1920-08-27 10:17:42,101310204,澄迈,小雨,95%,25℃,北风,1级," 时间,城市编码,城市名称,天气,湿度,温度,风向,风力
|
|
||||||
Q_OBJECT
|
|
||||||
public:
|
|
||||||
explicit LocalWeatherInfo(QObject *parent = nullptr);
|
|
||||||
|
|
||||||
private:
|
|
||||||
QString m_update_time;
|
|
||||||
QString m_city_id;
|
|
||||||
QString m_city_name;
|
|
||||||
QString m_cond_text;
|
|
||||||
QString m_air_humidity;
|
|
||||||
QString m_temperature;
|
|
||||||
QString m_wind_direction;
|
|
||||||
QString m_wind_force;
|
|
||||||
public:
|
|
||||||
bool isTimeValid();
|
|
||||||
|
|
||||||
void setTime(QString time);
|
|
||||||
QString getTime();
|
|
||||||
|
|
||||||
void setCityId(QString cityId);
|
|
||||||
QString getCityId();
|
|
||||||
|
|
||||||
void setCityName(QString cityName);
|
|
||||||
QString getCityName();
|
|
||||||
|
|
||||||
void setCondText(QString condText);
|
|
||||||
QString getCondText();
|
|
||||||
|
|
||||||
void setAirHumidity(QString airHumidity);
|
|
||||||
QString getAirHumidity();
|
|
||||||
|
|
||||||
void setTemperature(QString temperature);
|
|
||||||
QString getTemperature();
|
|
||||||
|
|
||||||
void setWindDirection(QString windDirection);
|
|
||||||
QString getWindDirection();
|
|
||||||
|
|
||||||
void setWindForce(QString windForce);
|
|
||||||
QString getWindForce();
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // WEATHERMANAGER_H
|
|
|
@ -13,6 +13,7 @@ include_directories(${PROJECT_BINARY_DIR})
|
||||||
include_directories(${PROJECT_SOURCE_DIR}/VirtualKeyboard/src)
|
include_directories(${PROJECT_SOURCE_DIR}/VirtualKeyboard/src)
|
||||||
include_directories(${PROJECT_SOURCE_DIR}/BiometricAuth)
|
include_directories(${PROJECT_SOURCE_DIR}/BiometricAuth)
|
||||||
include_directories(${PROJECT_SOURCE_DIR}/Common)
|
include_directories(${PROJECT_SOURCE_DIR}/Common)
|
||||||
|
include_directories(${PROJECT_SOURCE_DIR}/screensaver)
|
||||||
include_directories(${PROJECT_SOURCE_DIR}/KylinNM)
|
include_directories(${PROJECT_SOURCE_DIR}/KylinNM)
|
||||||
include_directories(${PROJECT_SOURCE_DIR}/KylinNM/src)
|
include_directories(${PROJECT_SOURCE_DIR}/KylinNM/src)
|
||||||
include_directories(${PROJECT_SOURCE_DIR}/KylinNM/hot-spot)
|
include_directories(${PROJECT_SOURCE_DIR}/KylinNM/hot-spot)
|
||||||
|
@ -53,6 +54,7 @@ qt5_wrap_ui(dialog_SRC
|
||||||
qt5_add_resources(dialog_SRC
|
qt5_add_resources(dialog_SRC
|
||||||
assets.qrc
|
assets.qrc
|
||||||
../KylinNM/nmqrc.qrc #暂时将麒麟网络的资源文件放到这里,否则显示不出来,暂时不知道原因
|
../KylinNM/nmqrc.qrc #暂时将麒麟网络的资源文件放到这里,否则显示不出来,暂时不知道原因
|
||||||
|
../screensaver/default.qrc
|
||||||
)
|
)
|
||||||
|
|
||||||
# 头文件中包含了Xlib.h,需要单独拿出来处理,不知道原因
|
# 头文件中包含了Xlib.h,需要单独拿出来处理,不知道原因
|
||||||
|
@ -65,7 +67,7 @@ qt5_wrap_cpp(dialog_SRC
|
||||||
screensaverwidget.h
|
screensaverwidget.h
|
||||||
auth.h
|
auth.h
|
||||||
auth-pam.h
|
auth-pam.h
|
||||||
screensaver.h
|
screensavermode.h
|
||||||
xeventmonitor.h
|
xeventmonitor.h
|
||||||
monitorwatcher.h
|
monitorwatcher.h
|
||||||
configuration.h
|
configuration.h
|
||||||
|
@ -113,7 +115,7 @@ set(dialog_SRC
|
||||||
monitorwatcher.cpp
|
monitorwatcher.cpp
|
||||||
grab-x11.cpp
|
grab-x11.cpp
|
||||||
configuration.cpp
|
configuration.cpp
|
||||||
screensaver.cpp
|
screensavermode.cpp
|
||||||
powermanager.cpp
|
powermanager.cpp
|
||||||
utils.cpp
|
utils.cpp
|
||||||
users.cpp
|
users.cpp
|
||||||
|
@ -158,6 +160,7 @@ target_link_libraries(ukui-screensaver-dialog
|
||||||
Common
|
Common
|
||||||
Kylin-nm
|
Kylin-nm
|
||||||
ukui-log4qt
|
ukui-log4qt
|
||||||
|
Screensaver
|
||||||
)
|
)
|
||||||
link_libraries(libmatemixer.so glib-2.0.so)
|
link_libraries(libmatemixer.so glib-2.0.so)
|
||||||
|
|
||||||
|
|
|
@ -25,7 +25,7 @@
|
||||||
//#include "gsettings.h"
|
//#include "gsettings.h"
|
||||||
|
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
#include "screensaver.h"
|
#include "screensavermode.h"
|
||||||
|
|
||||||
class QGSettings;
|
class QGSettings;
|
||||||
|
|
||||||
|
|
|
@ -53,7 +53,7 @@
|
||||||
#include "xeventmonitor.h"
|
#include "xeventmonitor.h"
|
||||||
#include "monitorwatcher.h"
|
#include "monitorwatcher.h"
|
||||||
#include "configuration.h"
|
#include "configuration.h"
|
||||||
#include "screensaver.h"
|
#include "screensavermode.h"
|
||||||
#include "screensaverwidget.h"
|
#include "screensaverwidget.h"
|
||||||
#include "grab-x11.h"
|
#include "grab-x11.h"
|
||||||
#include "tabletlockwidget.h"
|
#include "tabletlockwidget.h"
|
||||||
|
@ -721,11 +721,11 @@ void FullBackgroundWidget::showScreensaver()
|
||||||
{
|
{
|
||||||
ScreenSaver *saver = configuration->getScreensaver();
|
ScreenSaver *saver = configuration->getScreensaver();
|
||||||
/*锁屏设置的Qt::WA_TranslucentBackground属性会导致第三方屏保变得透明,因此在使用第三方屏保时
|
/*锁屏设置的Qt::WA_TranslucentBackground属性会导致第三方屏保变得透明,因此在使用第三方屏保时
|
||||||
* 取消该属性,清除屏保时再设置回来*/
|
* 取消该属性,清除屏保时再设置回来*/
|
||||||
if(saver->path != "/usr/lib/ukui-screensaver/ukui-screensaver-default")
|
if(saver->path != "/usr/lib/ukui-screensaver/ukui-screensaver-default")
|
||||||
{
|
{
|
||||||
setAttribute(Qt::WA_TranslucentBackground,false);
|
setAttribute(Qt::WA_TranslucentBackground,false);
|
||||||
}
|
}
|
||||||
|
|
||||||
ScreenSaverWidget *saverWidget = new ScreenSaverWidget(saver, this);
|
ScreenSaverWidget *saverWidget = new ScreenSaverWidget(saver, this);
|
||||||
qDebug() << " new ScreenSaverWidget";
|
qDebug() << " new ScreenSaverWidget";
|
||||||
|
@ -745,7 +745,7 @@ void FullBackgroundWidget::showScreensaver()
|
||||||
if(lockWidget)
|
if(lockWidget)
|
||||||
{
|
{
|
||||||
lockWidget->stopAuth();
|
lockWidget->stopAuth();
|
||||||
lockWidget->hide();
|
lockWidget->hide();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
* along with this program; if not, see <http://www.gnu.org/licenses/>.
|
* along with this program; if not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
**/
|
**/
|
||||||
#include "screensaver.h"
|
#include "screensavermode.h"
|
||||||
#include <QFileInfo>
|
#include <QFileInfo>
|
||||||
#include <QDir>
|
#include <QDir>
|
||||||
#include <QImageReader>
|
#include <QImageReader>
|
|
@ -15,8 +15,8 @@
|
||||||
* along with this program; if not, see <http://www.gnu.org/licenses/>.
|
* along with this program; if not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
**/
|
**/
|
||||||
#ifndef SCREENSAVER_H
|
#ifndef SCREENSAVER_MODE_H
|
||||||
#define SCREENSAVER_H
|
#define SCREENSAVER_MODE_H
|
||||||
|
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
#include <QTimer>
|
#include <QTimer>
|
||||||
|
@ -74,4 +74,4 @@ Q_DECLARE_METATYPE(ScreenSaver)
|
||||||
|
|
||||||
QDebug &operator<<(QDebug stream, const ScreenSaver &screensaver);
|
QDebug &operator<<(QDebug stream, const ScreenSaver &screensaver);
|
||||||
|
|
||||||
#endif // SCREENSAVER_H
|
#endif // SCREENSAVER_MODE_H
|
|
@ -24,6 +24,7 @@
|
||||||
#include <QPainter>
|
#include <QPainter>
|
||||||
#include <QKeyEvent>
|
#include <QKeyEvent>
|
||||||
#include <QtX11Extras/QX11Info>
|
#include <QtX11Extras/QX11Info>
|
||||||
|
#include "screensaver.h"
|
||||||
#include <X11/Xlib.h>
|
#include <X11/Xlib.h>
|
||||||
#include <sys/prctl.h>
|
#include <sys/prctl.h>
|
||||||
ScreenSaverWidget::ScreenSaverWidget(ScreenSaver *screensaver, QWidget *parent)
|
ScreenSaverWidget::ScreenSaverWidget(ScreenSaver *screensaver, QWidget *parent)
|
||||||
|
@ -33,6 +34,7 @@ ScreenSaverWidget::ScreenSaverWidget(ScreenSaver *screensaver, QWidget *parent)
|
||||||
closing(false)
|
closing(false)
|
||||||
{
|
{
|
||||||
qDebug() << "ScreenSaverWidget::ScreenSaverWidget";
|
qDebug() << "ScreenSaverWidget::ScreenSaverWidget";
|
||||||
|
setAttribute(Qt::WA_DeleteOnClose);
|
||||||
setMouseTracking(true);
|
setMouseTracking(true);
|
||||||
setFocus();
|
setFocus();
|
||||||
this->installEventFilter(this);
|
this->installEventFilter(this);
|
||||||
|
@ -149,12 +151,30 @@ bool ScreenSaverWidget::eventFilter(QObject *obj, QEvent *event)
|
||||||
/* Embed xscreensavers */
|
/* Embed xscreensavers */
|
||||||
void ScreenSaverWidget::embedXScreensaver(const QString &path)
|
void ScreenSaverWidget::embedXScreensaver(const QString &path)
|
||||||
{
|
{
|
||||||
QString cmd = path + " -window-id " + QString::number(winId());
|
qDebug()<<"embedXScreensaver path = "<<path;
|
||||||
if(process.state() == QProcess::NotRunning)
|
|
||||||
process.start(cmd);
|
/*屏保模式为ukui或者自定义时,直接加载对象,为其他屏保时,使用调用命令方式实现*/
|
||||||
|
if(screensaver->mode == SAVER_SINGLE){
|
||||||
|
QString cmd = path + " -window-id " + QString::number(winId());
|
||||||
|
if(process.state() == QProcess::NotRunning)
|
||||||
|
process.start(cmd);
|
||||||
|
}else if(screensaver->mode == SAVER_DEFAULT || screensaver->mode == SAVER_DEFAULT_CUSTOM){
|
||||||
|
if(!m_screensaver){
|
||||||
|
m_screensaver = new Screensaver(true,this);
|
||||||
|
//m_screensaver->resize(1366,768);
|
||||||
|
//m_screensaver->setGeometry(this->geometry());
|
||||||
|
// m_screensaver->setGeometry(0,0,1920,1080);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ScreenSaverWidget::resizeEvent(QResizeEvent *event)
|
||||||
|
{
|
||||||
|
if(m_screensaver){
|
||||||
|
m_screensaver->setGeometry(this->geometry());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void ScreenSaverWidget::onBackgroundChanged(const QString &/*path*/)
|
void ScreenSaverWidget::onBackgroundChanged(const QString &/*path*/)
|
||||||
{
|
{
|
||||||
|
|
|
@ -20,8 +20,9 @@
|
||||||
|
|
||||||
#include <QWidget>
|
#include <QWidget>
|
||||||
#include <QProcess>
|
#include <QProcess>
|
||||||
#include "screensaver.h"
|
#include "screensavermode.h"
|
||||||
|
|
||||||
|
class Screensaver;
|
||||||
class ScreenSaverWidget : public QWidget
|
class ScreenSaverWidget : public QWidget
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
@ -34,6 +35,7 @@ protected:
|
||||||
void closeEvent(QCloseEvent *);
|
void closeEvent(QCloseEvent *);
|
||||||
void paintEvent(QPaintEvent *event);
|
void paintEvent(QPaintEvent *event);
|
||||||
bool eventFilter(QObject *obj, QEvent *event);
|
bool eventFilter(QObject *obj, QEvent *event);
|
||||||
|
void resizeEvent(QResizeEvent *event);
|
||||||
private:
|
private:
|
||||||
void embedXScreensaver(const QString &path);
|
void embedXScreensaver(const QString &path);
|
||||||
|
|
||||||
|
@ -46,6 +48,7 @@ private:
|
||||||
bool closing;
|
bool closing;
|
||||||
float opacity;
|
float opacity;
|
||||||
QProcess process;
|
QProcess process;
|
||||||
|
Screensaver *m_screensaver = nullptr;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // SCREENSAVERWIDGET_H
|
#endif // SCREENSAVERWIDGET_H
|
||||||
|
|
|
@ -44,7 +44,7 @@ SOURCES += \
|
||||||
auxiliary.cpp \
|
auxiliary.cpp \
|
||||||
configuration.cpp \
|
configuration.cpp \
|
||||||
screensaverwidget.cpp \
|
screensaverwidget.cpp \
|
||||||
screensaver.cpp \
|
screensavermode.cpp \
|
||||||
event_monitor.cpp \
|
event_monitor.cpp \
|
||||||
monitorwatcher.cpp
|
monitorwatcher.cpp
|
||||||
|
|
||||||
|
@ -58,7 +58,7 @@ HEADERS += \
|
||||||
auxiliary.h \
|
auxiliary.h \
|
||||||
configuration.h \
|
configuration.h \
|
||||||
screensaverwidget.h \
|
screensaverwidget.h \
|
||||||
screensaver.h \
|
screensavermode.h \
|
||||||
event_monitor.h \
|
event_monitor.h \
|
||||||
monitorwatcher.h
|
monitorwatcher.h
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2018 Tianjin KYLIN Information Technology Co., Ltd.
|
* Copyright (C) 2020 Tianjin KYLIN Information Technology Co., Ltd.
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -40,17 +40,18 @@ const int weatherReqInterval = 1000 * 60 * 20; //定时更新天气,和麒麟天
|
||||||
const QByteArray schemaWeather = "org.china-weather-data.settings";
|
const QByteArray schemaWeather = "org.china-weather-data.settings";
|
||||||
|
|
||||||
static const QMap<QString, QString> weatherMap {
|
static const QMap<QString, QString> weatherMap {
|
||||||
{"NA", "55"},
|
{"晴", "100"},{"多云", "101"},{"少云", "102"},{"晴间多云", "103"},{"阴", "104"},
|
||||||
{"晴", "0"},
|
{"有风", "200"},{"平静", "201"},{"微风", "202"},{"和风", "203"},{"清风", "204"},{"强风劲风", "205"},{"疾风", "206"},{"大风", "207"},{"烈风", "208"},{"风暴", "209"},
|
||||||
{"多云", "1"},
|
{"狂暴风", "210"},{"飓风", "211"},{"龙卷风", "212"},{"热带风暴", "213"},
|
||||||
{"阴", "2"},
|
{"阵雨", "300"},{"强阵雨", "301"},{"雷阵雨", "302"},{"强雷阵雨", "303"},{"雷阵雨伴有冰雹", "304"},{"小雨", "305"},{"中雨", "306"},{"大雨", "307"},{"极端降雨", "308"},{"毛毛雨细雨", "309"},
|
||||||
{"阵雨", "3"},
|
{"暴雨", "310"},{"大暴雨", "311"},{"特大暴雨", "312"},{"冻雨", "313"},{"小到中雨", "314"},{"中到大雨", "315"},{"大到暴雨", "316"},{"暴雨到大暴雨", "317"},{"大暴雨到特大暴雨", "318"},
|
||||||
{"雷阵雨", "4"},
|
{"雨", "399"},
|
||||||
{"小雨", "7"},
|
{"小雪", "400"},{"中雪", "401"},{"大雪", "402"},{"暴雪", "403"},{"雨夹雪", "404"},{"雨雪天气", "405"},{"阵雨夹雪", "406"},{"阵雪", "407"},{"小到中雪", "408"},{"中到大雪", "409"},
|
||||||
{"中雨", "8"},
|
{"大到暴雪", "410"},{"雪", "499"},
|
||||||
{"大雨", "9"},
|
{"薄雾", "500"},{"雾", "501"},{"霾", "502"},{"扬沙", "503"},{"浮尘", "504"},{"沙尘暴", "507"},{"强沙尘暴", "508"},{"大雾", "509"},
|
||||||
{"中到大雨", "9"},
|
{"强浓雾", "510"},{"中度霾", "511"},{"重度霾", "512"},{"严重霾", "513"},{"大雾", "514"},{"特强浓雾", "515"},
|
||||||
{"雪", "13"},
|
{"热", "900"},{"冷", "901"},
|
||||||
|
{"未知", "999"}
|
||||||
};
|
};
|
||||||
|
|
||||||
WeatherManager::WeatherManager(QObject *parent) : QObject(parent)
|
WeatherManager::WeatherManager(QObject *parent) : QObject(parent)
|
||||||
|
@ -66,6 +67,20 @@ WeatherManager::WeatherManager(QObject *parent) : QObject(parent)
|
||||||
m_local_weather_info = new LocalWeatherInfo(this);
|
m_local_weather_info = new LocalWeatherInfo(this);
|
||||||
|
|
||||||
connect(m_timer, &QTimer::timeout, this, &WeatherManager::weatherRequest);
|
connect(m_timer, &QTimer::timeout, this, &WeatherManager::weatherRequest);
|
||||||
|
|
||||||
|
m_networkWatcher = new NetWorkWatcher(this);
|
||||||
|
connect(m_networkWatcher, &NetWorkWatcher::NetworkStateChanged, this, &WeatherManager::onNetworkStateChanged);
|
||||||
|
|
||||||
|
m_networkWatcher->checkOnline();
|
||||||
|
}
|
||||||
|
|
||||||
|
void WeatherManager::onNetworkStateChanged(uint state)
|
||||||
|
{
|
||||||
|
qDebug() << state;
|
||||||
|
if (NM_STATE_CONNECTED_GLOBAL != state)
|
||||||
|
emit onWeatherUpdate("天气不可用", NULL, NULL);
|
||||||
|
else
|
||||||
|
getWeather();
|
||||||
}
|
}
|
||||||
|
|
||||||
void WeatherManager::getWeather()
|
void WeatherManager::getWeather()
|
||||||
|
@ -96,6 +111,9 @@ bool WeatherManager::updateLocation()
|
||||||
emit onWeatherUpdate(m_local_weather_info->getCityName(),
|
emit onWeatherUpdate(m_local_weather_info->getCityName(),
|
||||||
m_local_weather_info->getCondText(),
|
m_local_weather_info->getCondText(),
|
||||||
m_local_weather_info->getTemperature());
|
m_local_weather_info->getTemperature());
|
||||||
|
|
||||||
|
|
||||||
|
m_networkWatcher->checkOnline();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
m_city_id = getLogcalCityId();
|
m_city_id = getLogcalCityId();
|
||||||
|
@ -153,6 +171,23 @@ QString WeatherManager::getLogcalCityId()
|
||||||
|
|
||||||
void WeatherManager::replyFinished(QNetworkReply *reply)
|
void WeatherManager::replyFinished(QNetworkReply *reply)
|
||||||
{
|
{
|
||||||
|
if(reply != nullptr && reply->error() != QNetworkReply::NoError)
|
||||||
|
{
|
||||||
|
qWarning() << "[WeatherManager][replyFinished] get weather error:("
|
||||||
|
<< reply->error() << ")" << reply->errorString();
|
||||||
|
if (m_networkTryNum < 15)
|
||||||
|
{
|
||||||
|
m_networkTryNum++;
|
||||||
|
QTimer::singleShot(1000, this, [=]{
|
||||||
|
weatherRequest();
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
m_networkTryNum = 0;
|
||||||
|
}
|
||||||
|
emit onWeatherUpdate("天气不可用", "", "");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
//注:天气信息只解析了锁屏需要展示的部分
|
//注:天气信息只解析了锁屏需要展示的部分
|
||||||
QByteArray BA;
|
QByteArray BA;
|
||||||
QJsonDocument JD;
|
QJsonDocument JD;
|
||||||
|
@ -180,13 +215,14 @@ void WeatherManager::replyFinished(QNetworkReply *reply)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (now.contains("tmp")){
|
if (now.contains("tmp")){
|
||||||
m_temperature = now.mid(4);
|
m_temperature = now.mid(4) + "°C";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
emit onWeatherUpdate(m_city_name, m_cond_txt, m_temperature);
|
emit onWeatherUpdate(m_city_name, m_cond_txt, m_temperature);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
qWarning() << "get weather info error : " << JPE.errorString();
|
qWarning() << "get weather info error : " << JPE.errorString();
|
||||||
|
emit onWeatherUpdate("天气不可用", "", "");
|
||||||
}
|
}
|
||||||
|
|
||||||
reply->deleteLater();
|
reply->deleteLater();
|
||||||
|
@ -202,17 +238,33 @@ QPixmap WeatherManager::getWeatherIcon(QString cond)
|
||||||
if (cond.isEmpty())
|
if (cond.isEmpty())
|
||||||
{
|
{
|
||||||
qWarning() << "cond info is unknown";
|
qWarning() << "cond info is unknown";
|
||||||
return QPixmap(":/image/assets/weather/55.png").scaled(32,32);
|
return QPixmap(":/weather/assets/weather-icon/999.svg").scaled(32,32);
|
||||||
}
|
}
|
||||||
|
|
||||||
//根据m_cond_txt
|
//根据m_cond_txt
|
||||||
QString numStr = weatherMap.value(cond);
|
QString numStr = weatherMap.value(cond);
|
||||||
if (!numStr.isEmpty()) {
|
if (!numStr.isEmpty()) {
|
||||||
qDebug() << "----------------numStr=" + numStr;
|
qDebug() << "----------------numStr=" + numStr;
|
||||||
return QPixmap(":/image/assets/weather/" + numStr +".png").scaled(32,32);
|
return QPixmap(":/weather/assets/weather-icon/" + numStr +".svg").scaled(32,32);
|
||||||
}
|
}
|
||||||
|
|
||||||
return QPixmap(":/image/assets/weather/55.png").scaled(32,32);
|
qWarning() << "天气为|" << cond << "|";
|
||||||
|
return QPixmap(":/weather/assets/weather-icon/999.svg").scaled(32,32);
|
||||||
|
}
|
||||||
|
|
||||||
|
QString WeatherManager::getCityName()
|
||||||
|
{
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
QString WeatherManager::getCond()
|
||||||
|
{
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
QString WeatherManager::getTemperature()
|
||||||
|
{
|
||||||
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
LocalWeatherInfo::LocalWeatherInfo(QObject *parent)
|
LocalWeatherInfo::LocalWeatherInfo(QObject *parent)
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2018 Tianjin KYLIN Information Technology Co., Ltd.
|
* Copyright (C) 2020 Tianjin KYLIN Information Technology Co., Ltd.
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -24,6 +24,8 @@
|
||||||
#include <QTimer>
|
#include <QTimer>
|
||||||
#include <QGSettings>
|
#include <QGSettings>
|
||||||
|
|
||||||
|
#include "../src/networkwatcher.h"
|
||||||
|
|
||||||
class QNetworkAccessManager;
|
class QNetworkAccessManager;
|
||||||
class QNetworkReply;
|
class QNetworkReply;
|
||||||
class LocalWeatherInfo;
|
class LocalWeatherInfo;
|
||||||
|
@ -39,12 +41,17 @@ Q_SIGNALS:
|
||||||
|
|
||||||
private Q_SLOTS:
|
private Q_SLOTS:
|
||||||
void replyFinished(QNetworkReply *);
|
void replyFinished(QNetworkReply *);
|
||||||
|
void onNetworkStateChanged(uint state);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void getWeather();
|
void getWeather();
|
||||||
QPixmap getWeatherIcon();
|
QPixmap getWeatherIcon();
|
||||||
QPixmap getWeatherIcon(QString cond);
|
QPixmap getWeatherIcon(QString cond);
|
||||||
|
|
||||||
|
QString getCityName();
|
||||||
|
QString getCond();
|
||||||
|
QString getTemperature();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool updateLocation();//更新位置,从用户设置获取城市信息,如有多个,只取第一个,未对接
|
bool updateLocation();//更新位置,从用户设置获取城市信息,如有多个,只取第一个,未对接
|
||||||
void weatherRequest();
|
void weatherRequest();
|
||||||
|
@ -63,6 +70,9 @@ private:
|
||||||
QGSettings *m_settings;
|
QGSettings *m_settings;
|
||||||
|
|
||||||
LocalWeatherInfo *m_local_weather_info;
|
LocalWeatherInfo *m_local_weather_info;
|
||||||
|
NetWorkWatcher *m_networkWatcher;
|
||||||
|
|
||||||
|
int m_networkTryNum = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
class LocalWeatherInfo : QObject
|
class LocalWeatherInfo : QObject
|
||||||
|
|
Loading…
Reference in New Issue