/* * Copyright © 2015-2016 Antti Lamminsalo * * This file is part of Orion. * * Orion is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * You should have received a copy of the GNU General Public License * along with Orion. If not, see . */ #pragma once #include "channel.h" #include "channellistmodel.h" #include "gamelistmodel.h" #include "game.h" #include "../network/networkmanager.h" #include "settingsmanager.h" #include #include #include "singletonprovider.h" #define DEFAULT_LOGO_URL "http://static-cdn.jtvnw.net/jtv_user_pictures/xarth/404_user_150x150.png" class ChannelManager: public QObject { QML_SINGLETON Q_OBJECT NetworkManager* netman; SettingsManager *settingsManager; ChannelListModel* tempFavourites; ChannelListModel* favouritesModel; QSortFilterProxyModel* favouritesProxy; ChannelListModel* resultsModel; //Games (and game search results) GameListModel* gamesModel; //Oauth QString user_name; quint64 user_id; /** * @brief createFollowedChannelsModel * Creates ready-to-use followed channels model * @return */ ChannelListModel *createFollowedChannelsModel(); bool isAccessTokenAvailable() { return settingsManager->hasAccessToken(); } ChannelManager(); public: static ChannelManager *getInstance(); ~ChannelManager(); void load(); void save(); Q_INVOKABLE bool containsFavourite(const quint32&); void checkStreams(const QList&); ChannelListModel *getFavouritesModel() const; QSortFilterProxyModel *getFavouritesProxy() const; ChannelListModel *getResultsModel() const; GameListModel *getGamesModel() const; quint64 getUser_id() const; signals: void pushNotification(const QString &title, const QString &message, const QString &imgUrl); void resultsUpdated(int numAdded, int total); void searchingStarted(); void foundPlaybackStream(const QVariantMap &streams); void deletedChannel(const quint32 &chanid); void addedChannel(const quint32 &chanid); void gamesSearchStarted(); void gamesUpdated(); void followedUpdated(); //oauth methods void accessTokenUpdated(); void userNameUpdated(const QString name); void login(const QString &username, const QString &password); public slots: void checkFavourites(); void addToFavourites(const quint32&); void removeFromFavourites(const quint32&); void searchChannels(QString, const quint32&, const quint32&, bool); void notify(Channel*); void notifyMultipleChannelsOnline(const QList &); void findPlaybackStream(const QString&); void addToFavourites(const quint32 &id, const QString &serviceName, const QString &title, const QString &info, const QString &logo, const QString &preview, const QString& game, const qint32 &viewers, bool online); void getFollowedChannels(const quint32 &limit = FOLLOWED_FETCH_LIMIT, const quint32 &offset = 0); void searchGames(QString, const quint32&, const quint32&); QString username() const; private slots: void addSearchResults(const QList&, const int total); void updateFavourites(const QList&); void updateStreams(const QList&); void addGames(const QList&); void onUserUpdated(const QString &name, const quint64 userId); void addFollowedResults(const QList&, const quint32, const quint32); void slotNetworkAccessChanged(bool); void updateAccessToken(QString accessToken); // QObject interface protected: void timerEvent(QTimerEvent *event); };