Skip to content

Commit

Permalink
SkGui: Create WSubtitle
Browse files Browse the repository at this point in the history
  • Loading branch information
3unjee committed Nov 21, 2024
1 parent e41401d commit 351137a
Show file tree
Hide file tree
Showing 24 changed files with 406 additions and 42 deletions.
2 changes: 2 additions & 0 deletions dist/changes/2.1.0.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@

- Create WChapter.

- Create WSubtitle.

- Create WPlayer.

- WControllerPlaylist: Create the 'backendIdFromText' function.
Expand Down
1 change: 1 addition & 0 deletions include/SkGui/WSubtitle
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
#include "../../src/SkGui/src/media/WSubtitle.h"
1 change: 1 addition & 0 deletions include/SkGui/WSubtitle.h
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
#include "../../src/SkGui/src/media/WSubtitle.h"
1 change: 1 addition & 0 deletions include/SkGui/private/WSubtitle_p
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
#include "../../../src/SkGui/src/media/WSubtitle_p.h"
1 change: 1 addition & 0 deletions include/SkGui/private/WSubtitle_p.h
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
#include "../../../src/SkGui/src/media/WSubtitle_p.h"
37 changes: 31 additions & 6 deletions src/SkGui/src/controllers/WControllerPlaylist.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6894,19 +6894,44 @@ WControllerPlaylist::Type WControllerPlaylist::vbmlTypeFromString(const QString
}

/* Q_INVOKABLE static */
QStringList WControllerPlaylist::vbmlSubtitles(const WYamlNodeBase & node, const QString & baseUrl)
QList<WSubtitle> WControllerPlaylist::vbmlSubtitles(const WYamlNodeBase & node,
const QString & baseUrl)
{
const WYamlNode * child = node.at("subtitles");

if (child == NULL || child->children.isEmpty() == false) return QStringList();
if (child == NULL) return QList<WSubtitle>();

QStringList result;
QList<WSubtitle> result;

QStringList list = child->value.split('\n');
const QList<WYamlNode> & children = child->children;

foreach (const QString & string, list)
if (children.isEmpty())
{
result.append(WControllerPlaylist::vbmlSource(string.trimmed(), baseUrl));
QStringList list = child->value.split('\n');

foreach (const QString & string, list)
{
QString source = WControllerPlaylist::vbmlSource(string.trimmed(), baseUrl);

WSubtitle subtitle(source);

result.append(subtitle);
}
}
else
{
foreach (const WYamlNode & child, children)
{
QString source = child.extractString("source");

source = WControllerPlaylist::vbmlSource(source.trimmed(), baseUrl);

QString title = child.extractString("title");

WSubtitle subtitle(source, title);

result.append(subtitle);
}
}

return result;
Expand Down
4 changes: 2 additions & 2 deletions src/SkGui/src/controllers/WControllerPlaylist.h
Original file line number Diff line number Diff line change
Expand Up @@ -463,8 +463,8 @@ class SK_GUI_EXPORT WControllerPlaylist : public WController

Q_INVOKABLE static QStringList vbmlTags(const WYamlNodeBase & node);

Q_INVOKABLE static QStringList vbmlSubtitles(const WYamlNodeBase & node,
const QString & baseUrl);
Q_INVOKABLE static QList<WSubtitle> vbmlSubtitles(const WYamlNodeBase & node,
const QString & baseUrl);

Q_INVOKABLE static const WYamlNode * vbmlTemplate(const WYamlNodeBase & root,
const WYamlNodeBase & node);
Expand Down
9 changes: 8 additions & 1 deletion src/SkGui/src/declarative/WDeclarativePlayer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -344,6 +344,13 @@ void WDeclarativePlayer::updateFrame()
return d->player->chaptersData(sort);
}

/* Q_INVOKABLE */ QVariantList WDeclarativePlayer::subtitlesData() const
{
Q_D(const WDeclarativePlayer);

return d->player->subtitlesData();
}

//---------------------------------------------------------------------------------------------
// Tracks

Expand Down Expand Up @@ -1117,7 +1124,7 @@ QString WDeclarativePlayer::ambient() const
return d->player->ambient();
}

QStringList WDeclarativePlayer::subtitles() const
QList<WSubtitle> WDeclarativePlayer::subtitles() const
{
Q_D(const WDeclarativePlayer);

Expand Down
6 changes: 4 additions & 2 deletions src/SkGui/src/declarative/WDeclarativePlayer.h
Original file line number Diff line number Diff line change
Expand Up @@ -153,7 +153,7 @@ class SK_GUI_EXPORT WDeclarativePlayer : public WDeclarativeItem, public WPlayli

Q_PROPERTY(QString ambient READ ambient NOTIFY ambientChanged)

Q_PROPERTY(QStringList subtitles READ subtitles NOTIFY subtitlesChanged)
Q_PROPERTY(QList<WSubtitle> subtitles READ subtitles NOTIFY subtitlesChanged)

Q_PROPERTY(int pauseTimeout READ pauseTimeout WRITE setPauseTimeout NOTIFY pauseTimeoutChanged)

Expand Down Expand Up @@ -246,6 +246,8 @@ class SK_GUI_EXPORT WDeclarativePlayer : public WDeclarativeItem, public WPlayli

Q_INVOKABLE QVariantList chaptersData(bool sort = true) const;

Q_INVOKABLE QVariantList subtitlesData() const;

//---------------------------------------------------------------------------------------------
// Tracks

Expand Down Expand Up @@ -478,7 +480,7 @@ class SK_GUI_EXPORT WDeclarativePlayer : public WDeclarativeItem, public WPlayli

QString ambient() const;

QStringList subtitles() const;
QList<WSubtitle> subtitles() const;

int pauseTimeout() const;
void setPauseTimeout(int msec);
Expand Down
10 changes: 5 additions & 5 deletions src/SkGui/src/media/WAbstractBackend.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -722,7 +722,7 @@ QString WAbstractBackend::mediaFromQuality(QHash<Quality, QString> medias, Quali
setVbml(false);
setLive(false);

setSubtitles(QStringList());
setSubtitles(QList<WSubtitle>());

//---------------------------------------------------------------------------------------------

Expand Down Expand Up @@ -1206,11 +1206,11 @@ void WAbstractBackend::setAmbient(const QString & ambient)
emit ambientChanged();
}

void WAbstractBackend::setSubtitles(const QStringList & subtitles)
void WAbstractBackend::setSubtitles(const QList<WSubtitle> & subtitles)
{
Q_D(WAbstractBackend);

QStringList list = subtitles;
QList<WSubtitle> list = subtitles;

if (d->filter) d->filter->filterSubtitles(&list);

Expand Down Expand Up @@ -1858,7 +1858,7 @@ QString WAbstractBackend::ambient() const
Q_D(const WAbstractBackend); return d->ambient;
}

QStringList WAbstractBackend::subtitles() const
QList<WSubtitle> WAbstractBackend::subtitles() const
{
Q_D(const WAbstractBackend); return d->subtitles;
}
Expand Down Expand Up @@ -1999,6 +1999,6 @@ WBackendOutput & WBackendOutput::operator=(const WBackendOutput & other)

/* virtual */ void WBackendFilter::filterAmbient(QString *) {}

/* virtual */ void WBackendFilter::filterSubtitles(QStringList *) {}
/* virtual */ void WBackendFilter::filterSubtitles(QList<WSubtitle> *) {}

#endif // SK_NO_ABSTRACTBACKEND
9 changes: 5 additions & 4 deletions src/SkGui/src/media/WAbstractBackend.h
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@

// Sk includes
#include <WChapter>
#include <WSubtitle>

#ifndef SK_NO_ABSTRACTBACKEND

Expand Down Expand Up @@ -234,7 +235,7 @@ class SK_GUI_EXPORT WAbstractBackend : public QObject, public WBackendInterface,

Q_PROPERTY(QString ambient READ ambient NOTIFY ambientChanged)

Q_PROPERTY(QStringList subtitles READ subtitles NOTIFY subtitlesChanged)
Q_PROPERTY(QList<WSubtitle> subtitles READ subtitles NOTIFY subtitlesChanged)

public:
enum State
Expand Down Expand Up @@ -460,7 +461,7 @@ class SK_GUI_EXPORT WAbstractBackend : public QObject, public WBackendInterface,

void setAmbient(const QString & ambient);

void setSubtitles(const QStringList & subtitles);
void setSubtitles(const QList<WSubtitle> & subtitles);

void deleteNow();

Expand Down Expand Up @@ -681,7 +682,7 @@ class SK_GUI_EXPORT WAbstractBackend : public QObject, public WBackendInterface,

QString ambient() const;

QStringList subtitles() const;
QList<WSubtitle> subtitles() const;

private:
W_DECLARE_PRIVATE(WAbstractBackend)
Expand Down Expand Up @@ -800,7 +801,7 @@ class SK_GUI_EXPORT WBackendFilter

virtual void filterAmbient(QString * ambient); // {}

virtual void filterSubtitles(QStringList * subtitles); // {}
virtual void filterSubtitles(QList<WSubtitle> * subtitles); // {}
};

#if defined(QT_NEW) && defined(SK_NO_QML) == false
Expand Down
2 changes: 1 addition & 1 deletion src/SkGui/src/media/WAbstractBackend_p.h
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@ class SK_GUI_EXPORT WAbstractBackendPrivate : public WPrivate

QString ambient;

QStringList subtitles;
QList<WSubtitle> subtitles;

QSizeF size;

Expand Down
2 changes: 1 addition & 1 deletion src/SkGui/src/media/WAbstractHook.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -314,7 +314,7 @@ void WAbstractHook::setAmbient(const QString & ambient)
Q_D(WAbstractHook); d->backend->setAmbient(ambient);
}

void WAbstractHook::setSubtitles(const QStringList & subtitles)
void WAbstractHook::setSubtitles(const QList<WSubtitle> & subtitles)
{
Q_D(WAbstractHook); d->backend->setSubtitles(subtitles);
}
Expand Down
2 changes: 1 addition & 1 deletion src/SkGui/src/media/WAbstractHook.h
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ class SK_GUI_EXPORT WAbstractHook : public QObject,

void setAmbient(const QString & ambient);

void setSubtitles(const QStringList & subtitles);
void setSubtitles(const QList<WSubtitle> & subtitles);

//---------------------------------------------------------------------------------------------
// Backend abstract functions
Expand Down
25 changes: 24 additions & 1 deletion src/SkGui/src/media/WHookOutput.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -529,7 +529,30 @@ void WHookOutputPrivate::onReply(const WBroadcastReply & reply)
{
Q_Q(WHookOutput);

q->setSubtitles(reply.parameters);
const QStringList & parameters = reply.parameters;

int count = parameters.count();

if (count % 2) return;

QList<WSubtitle> subtitles;

int index = 0;

while (index < count)
{
WSubtitle subtitle;

subtitle.setSource(parameters.at(index));

index++;

subtitle.setTitle(parameters.at(index));

index++;
}

q->setSubtitles(subtitles);
}
else if (type == WBroadcastReply::VOLUME)
{
Expand Down
28 changes: 25 additions & 3 deletions src/SkGui/src/media/WPlayer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1157,7 +1157,17 @@ void WPlayerPrivate::onAmbient()

void WPlayerPrivate::onSubtitles()
{
server->sendReply(WBroadcastReply::SUBTITLES, backend->subtitles());
QStringList parameters;

QList<WSubtitle> subtitles = backend->subtitles();

foreach (const WSubtitle & subtitle, subtitles)
{
parameters.append(subtitle.source());
parameters.append(subtitle.title ());
}

server->sendReply(WBroadcastReply::SUBTITLES, parameters);
}

#ifndef SK_NO_QML
Expand Down Expand Up @@ -1671,6 +1681,18 @@ void WPlayer::updateFrame()
return list;
}

/* Q_INVOKABLE */ QVariantList WPlayer::subtitlesData() const
{
QVariantList list;

foreach (const WSubtitle & subtitle, subtitles())
{
list.append(subtitle.toMap());
}

return list;
}

//---------------------------------------------------------------------------------------------
// Tracks

Expand Down Expand Up @@ -2708,15 +2730,15 @@ QString WPlayer::ambient() const
else return QString();
}

QStringList WPlayer::subtitles() const
QList<WSubtitle> WPlayer::subtitles() const
{
Q_D(const WPlayer);

if (d->backend)
{
return d->backend->subtitles();
}
else return QStringList();
else return QList<WSubtitle>();
}

//-------------------------------------------------------------------------------------------------
Expand Down
6 changes: 4 additions & 2 deletions src/SkGui/src/media/WPlayer.h
Original file line number Diff line number Diff line change
Expand Up @@ -150,7 +150,7 @@ class SK_GUI_EXPORT WPlayer : public QObject, public WPlaylistWatcher, public WP

Q_PROPERTY(QString ambient READ ambient NOTIFY ambientChanged)

Q_PROPERTY(QStringList subtitles READ subtitles NOTIFY subtitlesChanged)
Q_PROPERTY(QList<WSubtitle> subtitles READ subtitles NOTIFY subtitlesChanged)

Q_PROPERTY(int pauseTimeout READ pauseTimeout WRITE setPauseTimeout NOTIFY pauseTimeoutChanged)

Expand Down Expand Up @@ -234,6 +234,8 @@ class SK_GUI_EXPORT WPlayer : public QObject, public WPlaylistWatcher, public WP

Q_INVOKABLE QVariantList chaptersData(bool sort = true) const;

Q_INVOKABLE QVariantList subtitlesData() const;

//---------------------------------------------------------------------------------------------
// Tracks

Expand Down Expand Up @@ -459,7 +461,7 @@ class SK_GUI_EXPORT WPlayer : public QObject, public WPlaylistWatcher, public WP

QString ambient() const;

QStringList subtitles() const;
QList<WSubtitle> subtitles() const;

int pauseTimeout() const;
void setPauseTimeout(int msec);
Expand Down
Loading

0 comments on commit 351137a

Please sign in to comment.