File indexing completed on 2024-12-08 07:19:10

0001 /*
0002     SPDX-FileCopyrightText: 2020 Volker Krause <vkrause@kde.org>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #ifndef KPUBLICTRANSPORT_ASSETREPOSITORY_P_H
0008 #define KPUBLICTRANSPORT_ASSETREPOSITORY_P_H
0009 
0010 #include "kpublictransport_export.h"
0011 
0012 #include <QObject>
0013 #include <QUrl>
0014 
0015 #include <deque>
0016 #include <functional>
0017 
0018 class QNetworkAccessManager;
0019 
0020 namespace KPublicTransport {
0021 
0022 class Attribution;
0023 
0024 /**
0025  * Access and downloading of line logos.
0026  */
0027 class KPUBLICTRANSPORT_EXPORT AssetRepository : public QObject
0028 {
0029     Q_OBJECT
0030 public:
0031     ~AssetRepository() override;
0032 
0033     /** Returns the locally cached content for @p url
0034      *  if available, an empty string if none is available.
0035      */
0036     static QUrl localFile(const QUrl &url);
0037 
0038     /** Schedules the image at @p url for downloading.
0039      *  @returns @c true if a download job has been started,
0040      *  @c false if the requested item is already present or
0041      *  @p url is invalid.
0042      */
0043     bool download(const QUrl &url);
0044 
0045     /** Returns @c true if no further download jobs are queued or in progress. */
0046     bool isQueueEmpty();
0047 
0048     /** Returns attributions for the provided assets. */
0049     const std::vector<Attribution>& attributions() const;
0050 
0051     static AssetRepository* instance();
0052 
0053 Q_SIGNALS:
0054     /** Emitted whenever all pending downloads have been completed,
0055      *  successful or not.
0056      */
0057     void downloadFinished();
0058 
0059 private:
0060     friend class Manager;
0061 
0062     AssetRepository(QObject *parent = nullptr);
0063     void setNetworkAccessManagerProvider(std::function<QNetworkAccessManager*()> namProvider);
0064     void downloadNext();
0065 
0066     static AssetRepository *s_instance;
0067     std::deque<QUrl> m_queue;
0068     std::function<QNetworkAccessManager*()> m_namProvider;
0069     mutable std::vector<Attribution> m_attributions;
0070 };
0071 
0072 }
0073 
0074 #endif // KPUBLICTRANSPORT_ASSETREPOSITORY_P_H