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.
11 #include "FileItemList.h"
12 #include "threads/CriticalSection.h"
13 #include "utils/EventStream.h"
17 #include <unordered_map>
22 class CFavouritesService
25 explicit CFavouritesService(std::string userDataFolder
);
26 virtual ~CFavouritesService() = default;
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;
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
; }
52 CFavouritesService() = delete;
53 CFavouritesService(const CFavouritesService
&) = delete;
54 CFavouritesService
& operator=(const CFavouritesService
&) = delete;
55 CFavouritesService(CFavouritesService
&&) = delete;
56 CFavouritesService
& operator=(CFavouritesService
&&) = delete;
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
;