File indexing completed on 2024-04-28 15:39:42

0001 // SPDX-FileCopyrightText: 2014-2022 Jesper K. Pedersen <blackie@kde.org>
0002 //
0003 // SPDX-License-Identifier: GPL-2.0-or-later
0004 
0005 #ifndef REMOTEINTERFACE_H
0006 #define REMOTEINTERFACE_H
0007 
0008 #include "CategoryModel.h"
0009 #include "DiscoveryModel.h"
0010 #include "RemoteCommand.h"
0011 #include "SearchInfo.h"
0012 #include "ThumbnailModel.h"
0013 
0014 #include "History.h"
0015 #include "Types.h"
0016 #include <QImage>
0017 #include <QMap>
0018 #include <QObject>
0019 #include <QStringList>
0020 
0021 class QTcpSocket;
0022 
0023 namespace RemoteControl
0024 {
0025 
0026 class Client;
0027 
0028 class RemoteInterface : public QObject
0029 {
0030     Q_OBJECT
0031     Q_PROPERTY(bool connected READ isConnected NOTIFY connectionChanged)
0032     Q_PROPERTY(RemoteControl::CategoryModel *categories MEMBER m_categories NOTIFY categoriesChanged)
0033     Q_PROPERTY(ThumbnailModel *categoryItems MEMBER m_categoryItems NOTIFY categoryItemsChanged)
0034     Q_PROPERTY(QImage home MEMBER m_homeImage NOTIFY homeImageChanged)
0035     Q_PROPERTY(QImage kphotoalbum MEMBER m_kphotoalbumImage NOTIFY kphotoalbumImageChange)
0036     Q_PROPERTY(QImage discoveryImage MEMBER m_discoveryImage NOTIFY discoveryImageChanged)
0037     Q_PROPERTY(RemoteControl::Types::Page currentPage MEMBER m_currentPage NOTIFY currentPageChanged)
0038     Q_PROPERTY(ThumbnailModel *thumbnailModel MEMBER m_thumbnailModel NOTIFY thumbnailModelChanged)
0039     Q_PROPERTY(QStringList listCategoryValues MEMBER m_listCategoryValues NOTIFY listCategoryValuesChanged)
0040     Q_PROPERTY(DiscoveryModel *discoveryModel MEMBER m_discoveryModel NOTIFY discoveryModelChanged)
0041     Q_PROPERTY(ThumbnailModel *activeThumbnailModel MEMBER m_activeThumbnailModel NOTIFY activeThumbnailModelChanged)
0042     Q_PROPERTY(QString networkAddress READ networkAddress NOTIFY networkAddressChanged)
0043     Q_PROPERTY(QStringList tokens READ tokens NOTIFY tokensChanged)
0044 
0045 public:
0046     static RemoteInterface &instance();
0047     bool isConnected() const;
0048     void sendCommand(const RemoteCommand &command);
0049     QString currentCategory() const;
0050     QImage discoveryImage() const;
0051 
0052     enum class ModelType { Thumbnail,
0053                            Discovery };
0054     void setActiveThumbnailModel(ModelType);
0055 
0056 public Q_SLOTS:
0057     void goHome();
0058     void goBack();
0059     void goForward();
0060     void selectCategory(const QString &category, int /*CategoryViewType*/ type);
0061     void selectCategoryValue(const QString &value);
0062     void showThumbnails();
0063     void showImage(int imageId);
0064     void requestDetails(int imageId);
0065     void activateSearch(const QString &search);
0066     void doDiscovery();
0067     void showOverviewPage();
0068     void setToken(int imageId, const QString &token);
0069     void removeToken(int imageId, const QString &token);
0070     void rerequestOverviewPageData();
0071     void pushAwayFromStartupState();
0072 
0073 Q_SIGNALS:
0074     void connectionChanged();
0075     void categoriesChanged();
0076     void homeImageChanged();
0077     void kphotoalbumImageChange();
0078     void categoryItemsChanged();
0079     void currentPageChanged();
0080     void thumbnailModelChanged();
0081     void jumpToImage(int index);
0082     void listCategoryValuesChanged();
0083 
0084     void discoveryImageChanged();
0085     void discoveryModelChanged();
0086 
0087     void activeThumbnailModelChanged();
0088     void networkAddressChanged();
0089     void tokensChanged();
0090 
0091 public:
0092     void setCurrentView(int imageId);
0093     QString networkAddress() const;
0094 
0095     QStringList tokens() const;
0096 
0097 private Q_SLOTS:
0098     void requestInitialData();
0099     void handleCommand(const RemoteCommand &);
0100     void updateImage(const ThumbnailResult &);
0101     void updateCategoryList(const CategoryListResult &);
0102     void gotSearchResult(const SearchResult &);
0103     void requestHomePageImages();
0104     void gotDisconnected();
0105 
0106 private:
0107     RemoteInterface();
0108     friend class Action;
0109     void setCurrentPage(Page page);
0110     void setListCategoryValues(const QStringList &values);
0111     void setHomePageImages(const StaticImageResult &command);
0112 
0113     Client *m_connection = nullptr;
0114     CategoryModel *m_categories;
0115     QImage m_homeImage;
0116     QImage m_kphotoalbumImage;
0117     SearchInfo m_search;
0118     ThumbnailModel *m_categoryItems;
0119     RemoteControl::Page m_currentPage = RemoteControl::Page::Startup;
0120     ThumbnailModel *m_thumbnailModel;
0121     History m_history;
0122     QStringList m_listCategoryValues;
0123     QImage m_discoveryImage;
0124     DiscoveryModel *m_discoveryModel;
0125     ThumbnailModel *m_activeThumbnailModel = nullptr;
0126 };
0127 
0128 }
0129 
0130 #endif // REMOTEINTERFACE_H