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