1
0
Fork 0
mirror of https://github.com/HenkKalkwater/harbour-sailfin.git synced 2025-09-06 02:32:44 +00:00

sailfish: add LiveTvChannels page

This ocmmit adds a LiveTvChannels page for displaying the programs that
are now playing.

The section Live TV Channels on the main page now shows the TV channel
list in order of the channel number.

Additionally, it fixes an issue in ApiModel, where it would not reload
when a new loader was assigned. This is now fixed and some code on pages
that worked around this fix has been removed.
This commit is contained in:
Chris Josten 2024-06-03 22:11:10 +02:00
parent edcd3a93af
commit 57b67292fd
23 changed files with 344 additions and 54 deletions

View file

@ -194,6 +194,18 @@ bool setRequestStartIndex(Loader::GetAlbumArtistsParams &params, int offset) {
return true;
}
template<>
void setRequestLimit(Loader::GetLiveTvChannelsParams &params, int limit) {
params.setLimit(limit);
}
template<>
bool setRequestStartIndex(Loader::GetLiveTvChannelsParams &params, int offset) {
params.setStartIndex(offset);
return true;
}
template<>
QList<DTO::UserDto> extractRecords(const QList<DTO::UserDto> &result) {
return result;

View file

@ -83,6 +83,7 @@ void JellyfinPlugin::registerTypes(const char *uri) {
qmlRegisterType<ViewModel::NextUpLoader>(uri, 1, 0, "NextUpLoader");
qmlRegisterType<ViewModel::PublicUsersLoader>(uri, 1, 0, "PublicUsersLoader");
qmlRegisterType<ViewModel::AlbumArtistLoader>(uri, 1, 0, "AlbumArtistLoader");
qmlRegisterType<ViewModel::LiveTvChannelsLoader>(uri, 1, 0, "LiveTvChannelsLoader");
// Enumerations
qmlRegisterUncreatableType<Jellyfin::DTO::GeneralCommandTypeClass>(uri, 1, 0, "GeneralCommandType", "Is an enum");

View file

@ -34,9 +34,7 @@ Item::Item(QObject *parent, QSharedPointer<Model::Item> data)
: QObject(parent),
m_data(data),
m_userData(new UserData(this)){
connect(m_data.data(), &Model::Item::userDataChanged, this, &Item::onUserDataChanged);
m_userData->setData(data->userData());
updateMediaStreams();
this->setData(data);
}
void Item::setData(QSharedPointer<Model::Item> newData) {
@ -50,8 +48,18 @@ void Item::setData(QSharedPointer<Model::Item> newData) {
connect(m_data.data(), &Model::Item::userDataChanged, this, &Item::onUserDataChanged);
updateMediaStreams();
setUserData(m_data->userData());
if (m_data->currentProgram().isNull()) {
m_currentProgram = nullptr;
} else {
QSharedPointer<DTO::BaseItemDto> dataDto = m_data->currentProgram();
QSharedPointer<Model::Item> data = QSharedPointer<Model::Item>::create(*dataDto.data());
m_currentProgram = new Item(this, data);
}
emit currentProgramChanged();
}
emit userDataChanged(m_userData);
}

View file

@ -16,18 +16,19 @@
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include "JellyfinQt/viewmodel/itemmodel.h"
#include <JellyfinQt/viewmodel/itemmodel.h>
#include "JellyfinQt/viewmodel/item.h"
#include <JellyfinQt/viewmodel/item.h>
#include "JellyfinQt/loader/http/artists.h"
#include "JellyfinQt/loader/http/items.h"
#include "JellyfinQt/loader/http/userlibrary.h"
#include "JellyfinQt/loader/http/userviews.h"
#include "JellyfinQt/loader/http/tvshows.h"
#include <JellyfinQt/loader/http/artists.h>
#include <JellyfinQt/loader/http/items.h>
#include <JellyfinQt/loader/http/livetv.h>
#include <JellyfinQt/loader/http/userlibrary.h>
#include <JellyfinQt/loader/http/userviews.h>
#include <JellyfinQt/loader/http/tvshows.h>
#include "JellyfinQt/viewmodel/userdata.h"
#include "JellyfinQt/viewmodel/utils.h"
#include <JellyfinQt/viewmodel/userdata.h>
#include <JellyfinQt/viewmodel/utils.h>
#define JF_CASE(roleName) case roleName: \
try { \
@ -64,6 +65,9 @@ NextUpLoader::NextUpLoader(QObject *parent)
AlbumArtistLoader::AlbumArtistLoader(QObject *parent)
: AlbumArtistLoaderBase(new Jellyfin::Loader::HTTP::GetAlbumArtistsLoader(), parent) {}
LiveTvChannelsLoader::LiveTvChannelsLoader(QObject *parent)
: LiveTvChannelsLoaderBase(new Jellyfin::Loader::HTTP::GetLiveTvChannelsLoader(), parent) {}
ItemModel::ItemModel(QObject *parent)
: ApiModel<Model::Item>(parent) {
connect(this, &QAbstractItemModel::rowsInserted, this, &ItemModel::onInsertItems);
@ -126,6 +130,30 @@ QVariant ItemModel::data(const QModelIndex &index, int role) const {
return QVariant(item->userData()->played());
case RoleNames::userDataKey:
return QVariant(item->userData()->key());
case RoleNames::currentProgramName:
if (item->currentProgram()) {
return QVariant(item->currentProgram()->name());
} else {
return QVariant();
}
case RoleNames::currentProgramOverview:
if (item->currentProgram()) {
return QVariant(item->currentProgram()->overview());
} else {
return QVariant();
}
case RoleNames::currentProgramStartDate:
if (item->currentProgram()) {
return QVariant(item->currentProgram()->startDate());
} else {
return QVariant();
}
case RoleNames::currentProgramEndDate:
if (item->currentProgram()) {
return QVariant(item->currentProgram()->endDate());
} else {
return QVariant();
}
default:
return QVariant();
}