2024-02-14 Fred Gleason <fredg@paravelsystems.com>

* Added a 'RDAIRPLAY.MESSAGE_WIDGET_URL' field to the database.
	* Incremented the database version to 374.
	* Added 'RDAirPlayConf::messageWidgetUrl()' and
	'RDAirPlayConf::setMessageWidgetUrl()' methods.
	* Modified rdairplay(1) to make the Message Widget retain the loaded
	URL across instances.
	* Modified rdairplay(1) to make the Message Widget continually poll
	and update loaded URLs using the 'file:' schema.

Signed-off-by: Fred Gleason <fredg@paravelsystems.com>
This commit is contained in:
Fred Gleason
2024-02-14 16:27:01 -05:00
parent c83ac46270
commit b64bf4a08e
10 changed files with 112 additions and 15 deletions

View File

@@ -22,6 +22,7 @@
#include <QKeyEvent>
#include <QWebFrame>
#include <rdapplication.h>
#include <rdeventfilter.h>
#include "colors.h"
@@ -63,6 +64,21 @@ MessageWidget::MessageWidget(QWidget *parent)
filter->addFilter(QEvent::MouseMove);
filter->addFilter(QEvent::Wheel);
d_view->installEventFilter(filter);
//
// Refresh Timer
//
d_refresh_timer=new QTimer(this);
d_refresh_timer->setSingleShot(true);
connect(d_refresh_timer,SIGNAL(timeout()),this,SLOT(refreshData()));
//
// Load Current Page
//
QString url=rda->airplayConf()->messageWidgetUrl();
if(!url.isEmpty()) {
setUrl(url);
}
}
@@ -77,6 +93,8 @@ void MessageWidget::setText(const QString &str,const QColor &col)
d_label->setText(str);
d_label->show();
d_view->hide();
d_refresh_timer->stop();
}
@@ -85,6 +103,7 @@ bool MessageWidget::setUrl(const QString &str)
QUrl url(str);
if(!url.isValid()) {
setText(tr("invalid URL")+": "+str.toUtf8().constData(),Qt::black);
d_refresh_timer->stop();
return false;
}
if((url.scheme().toLower()!="http")&&
@@ -92,12 +111,22 @@ bool MessageWidget::setUrl(const QString &str)
(url.scheme().toLower()!="file")) {
setText(tr("unsupported URL scheme")+": "+str.toUtf8().constData(),
Qt::black);
d_refresh_timer->stop();
return false;
}
d_view->load(url);
d_view->show();
d_label->hide();
d_url=str;
rda->airplayConf()->setMessageWidgetUrl(str);
if(url.scheme().toLower()=="file") {
d_refresh_timer->start(1000);
}
else {
d_refresh_timer->stop();
}
return true;
}
@@ -107,6 +136,9 @@ void MessageWidget::clear()
d_label->clear();
d_label->show();
d_view->hide();
d_refresh_timer->stop();
rda->airplayConf()->setMessageWidgetUrl(QString());
}
@@ -119,6 +151,13 @@ void MessageWidget::webLoadFinishedData(bool state)
}
void MessageWidget::refreshData()
{
d_view->load(d_url);
d_refresh_timer->start(1000);
}
void MessageWidget::resizeEvent(QResizeEvent *e)
{
d_label->setGeometry(0,0,size().width(),size().height());

View File

@@ -22,6 +22,7 @@
#define MESSAGEWIDGET_H
#include <QLabel>
#include <QTimer>
#include <QWebView>
#define MESSAGE_FONT_QUANTITY 8
@@ -38,6 +39,7 @@ class MessageWidget : public QWidget
private slots:
void webLoadFinishedData(bool state);
void refreshData();
protected:
void resizeEvent(QResizeEvent *e);
@@ -46,8 +48,10 @@ class MessageWidget : public QWidget
QFont MessageFont(QString str) const;
QLabel *d_label;
QWebView *d_view;
QTimer *d_refresh_timer;
QFont d_message_fonts[MESSAGE_FONT_QUANTITY];
QFontMetrics *d_message_metrics[MESSAGE_FONT_QUANTITY];
QString d_url;
};
#endif // MESSAGEWIDGET_H