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

0001 // SPDX-FileCopyrightText: 2022 Plata Hill <plata.hill@kdemail.net>
0002 // SPDX-License-Identifier: LGPL-2.1-or-later
0003 
0004 #pragma once
0005 
0006 #include "fetcherimpl.h"
0007 
0008 #include "localdataprovider.h"
0009 
0010 #include <QDomDocument>
0011 #include <QMap>
0012 
0013 class XmltvFetcher : public FetcherImpl
0014 {
0015     Q_OBJECT
0016 public:
0017     XmltvFetcher();
0018     virtual ~XmltvFetcher() = default;
0019 
0020     void fetchGroups(std::function<void(const QVector<GroupData> &)> callback = nullptr, std::function<void(const Error &)> errorCallback = nullptr) override;
0021     void fetchGroup(const QString &url,
0022                     const GroupId &groupId,
0023                     std::function<void(const QList<ChannelData> &)> callback = nullptr,
0024                     std::function<void(const Error &)> errorCallback = nullptr) override;
0025     void fetchProgram(const ChannelId &channelId,
0026                       std::function<void(const QVector<ProgramData> &)> callback = nullptr,
0027                       std::function<void(const Error &)> errorCallback = nullptr) override;
0028     void fetchProgramDescription(const ChannelId &channelId,
0029                                  const ProgramId &programId,
0030                                  const QString &url,
0031                                  std::function<void(const QString &)> callback = nullptr,
0032                                  std::function<void(const Error &)> errorCallback = nullptr) override;
0033     QString image(const QString &url, std::function<void()> callback = nullptr, std::function<void(const Error &)> errorCallback = nullptr) override;
0034     QString imagePath(const QString &url) override;
0035 
0036 private:
0037     void open(QByteArray data);
0038     void fetchChannel(const ChannelId &channelId, const QString &name, const QString &icon, QMap<ChannelId, ChannelData> &channels);
0039     ProgramData processProgram(const QDomNode &program);
0040 
0041     QDomDocument m_doc;
0042     const LocalDataProvider m_provider;
0043 };