Merge pull request #26287 from CrystalP/ref-savefilestatejob
[xbmc.git] / xbmc / favourites / FavouritesService.h
blob95a4c037b504e75b2d578c170175bb2330ae064e
1 /*
2 * Copyright (C) 2005-2018 Team Kodi
3 * This file is part of Kodi - https://kodi.tv
5 * SPDX-License-Identifier: GPL-2.0-or-later
6 * See LICENSES/README.md for more information.
7 */
9 #pragma once
11 #include "FileItemList.h"
12 #include "threads/CriticalSection.h"
13 #include "utils/EventStream.h"
15 #include <memory>
16 #include <string>
17 #include <unordered_map>
18 #include <vector>
20 class CFileItem;
22 class CFavouritesService
24 public:
25 explicit CFavouritesService(std::string userDataFolder);
26 virtual ~CFavouritesService() = default;
28 /** For profiles*/
29 void ReInit(std::string userDataFolder);
31 void OnPlaybackStopped(const CFileItem& item);
32 void OnPlaybackEnded(const CFileItem& item);
34 bool IsFavourited(const CFileItem& item, int contextWindow) const;
35 std::shared_ptr<CFileItem> GetFavourite(const CFileItem& item, int contextWindow) const;
36 std::shared_ptr<CFileItem> ResolveFavourite(const CFileItem& favItem) const;
38 int Size() const;
39 void GetAll(CFileItemList& items) const;
40 bool AddOrRemove(const CFileItem& item, int contextWindow);
41 bool Save(const CFileItemList& items);
43 /*! \brief Refresh favourites for directory providers, e.g. the GUI needs to be updated
45 void RefreshFavourites();
47 struct FavouritesUpdated { };
49 CEventStream<FavouritesUpdated>& Events() { return m_events; }
51 private:
52 CFavouritesService() = delete;
53 CFavouritesService(const CFavouritesService&) = delete;
54 CFavouritesService& operator=(const CFavouritesService&) = delete;
55 CFavouritesService(CFavouritesService&&) = delete;
56 CFavouritesService& operator=(CFavouritesService&&) = delete;
58 void OnUpdated();
59 bool Persist();
61 void CleanupTargetsCache(const CFileItem& item);
63 std::string m_userDataFolder;
64 CFileItemList m_favourites;
65 mutable std::unordered_map<std::string, std::shared_ptr<CFileItem>> m_targets;
66 CEventSource<FavouritesUpdated> m_events;
67 mutable CCriticalSection m_criticalSection;