File indexing completed on 2024-05-19 05:57:21

0001 // SPDX-FileCopyrightText: 2022 Plata Hill <plata.hill@kdemail.net>
0002 // SPDX-License-Identifier: LGPL-2.1-or-later
0003 
0004 #include "channel.h"
0005 
0006 #include "fetcher.h"
0007 #include "programfactory.h"
0008 #include "types.h"
0009 
0010 #include <QDebug>
0011 
0012 Channel::Channel(const ChannelData &data, bool favorite, const QVector<QString> &groupIds, ProgramFactory &programFactory)
0013     : QObject(nullptr)
0014     , m_data(data)
0015     , m_favorite(favorite)
0016     , m_groups(groupIds)
0017 {
0018     connect(&Fetcher::instance(), &Fetcher::startedFetchingChannel, this, [this](const ChannelId &id) {
0019         if (id == m_data.m_id) {
0020             setRefreshing(true);
0021         }
0022     });
0023     connect(&Fetcher::instance(), &Fetcher::channelUpdated, this, [this](const ChannelId &id) {
0024         if (id == m_data.m_id) {
0025             setRefreshing(false);
0026             Q_EMIT programChanged();
0027             m_error.reset();
0028         }
0029     });
0030     connect(&Fetcher::instance(), &Fetcher::errorFetchingChannel, this, [this](const ChannelId &id, const Error &error) {
0031         if (id == m_data.m_id) {
0032             setError(error);
0033             setRefreshing(false);
0034         }
0035     });
0036     connect(&Fetcher::instance(), &Fetcher::imageDownloadFinished, this, [this](const QString &url) {
0037         if (url == m_data.m_image) {
0038             Q_EMIT imageChanged(url);
0039         }
0040     });
0041 
0042     // programs
0043     m_programsModel = new ProgramsModel(this, programFactory);
0044 }
0045 
0046 Channel::~Channel()
0047 {
0048 }
0049 
0050 QString Channel::id() const
0051 {
0052     return m_data.m_id.value();
0053 }
0054 
0055 QString Channel::url() const
0056 {
0057     return m_data.m_url;
0058 }
0059 
0060 QString Channel::name() const
0061 {
0062     return m_data.m_name;
0063 }
0064 
0065 QString Channel::image() const
0066 {
0067     return m_data.m_image;
0068 }
0069 
0070 bool Channel::favorite() const
0071 {
0072     return m_favorite;
0073 }
0074 
0075 QVector<QString> Channel::groups() const
0076 {
0077     return m_groups;
0078 }
0079 
0080 bool Channel::refreshing() const
0081 {
0082     return m_refreshing;
0083 }
0084 
0085 int Channel::errorId() const
0086 {
0087     return m_error.m_id;
0088 }
0089 
0090 QString Channel::errorString() const
0091 {
0092     return m_error.m_message;
0093 }
0094 
0095 void Channel::setName(const QString &name)
0096 {
0097     m_data.m_name = name;
0098     Q_EMIT nameChanged(m_data.m_name);
0099 }
0100 
0101 void Channel::setImage(const QString &image)
0102 {
0103     m_data.m_image = image;
0104     Q_EMIT imageChanged(m_data.m_image);
0105 }
0106 
0107 void Channel::setFavorite(bool favorite)
0108 {
0109     if (m_favorite != favorite) {
0110         m_favorite = favorite;
0111 
0112         Q_EMIT favoriteChanged(favorite);
0113     }
0114 }
0115 
0116 void Channel::setGroups(const QVector<QString> &groups)
0117 {
0118     m_groups = groups;
0119     Q_EMIT groupsChanged(m_groups);
0120 }
0121 
0122 void Channel::setRefreshing(bool refreshing)
0123 {
0124     m_refreshing = refreshing;
0125     Q_EMIT refreshingChanged(m_refreshing);
0126 }
0127 
0128 void Channel::setError(const Error &error)
0129 {
0130     m_error = error;
0131     Q_EMIT errorIdChanged(m_error.m_id);
0132     Q_EMIT errorStringChanged(m_error.m_message);
0133 }