1 /*
2  *  Copyright (C) 2012-2018 Team Kodi
3  *  This file is part of Kodi - https://kodi.tv
4  *
5  *  SPDX-License-Identifier: GPL-2.0-or-later
6  *  See LICENSES/README.md for more information.
7  */
8 
9 #pragma once
10 
11 #include "XBDateTime.h"
12 #include "guilib/guiinfo/GUIInfoProvider.h"
13 
14 #include <atomic>
15 #include <memory>
16 #include <utility>
17 #include <vector>
18 
19 class CDataCacheCore;
20 
21 namespace KODI
22 {
23 namespace GUILIB
24 {
25 namespace GUIINFO
26 {
27 
28 class CGUIInfo;
29 
30 class CPlayerGUIInfo : public CGUIInfoProvider
31 {
32 public:
33   CPlayerGUIInfo();
34   ~CPlayerGUIInfo() override;
35 
36   // KODI::GUILIB::GUIINFO::IGUIInfoProvider implementation
37   bool InitCurrentItem(CFileItem *item) override;
38   bool GetLabel(std::string& value, const CFileItem *item, int contextWindow, const CGUIInfo &info, std::string *fallback) const override;
39   bool GetInt(int& value, const CGUIListItem *item, int contextWindow, const CGUIInfo &info) const override;
40   bool GetBool(bool& value, const CGUIListItem *item, int contextWindow, const CGUIInfo &info) const override;
41 
42   bool GetDisplayAfterSeek() const;
43   void SetDisplayAfterSeek(unsigned int timeOut = 2500, int seekOffset = 0);
SetShowTime(bool showtime)44   void SetShowTime(bool showtime) { m_playerShowTime = showtime; };
45   void SetShowInfo(bool showinfo);
GetShowInfo()46   bool GetShowInfo() const { return m_playerShowInfo; }
47   bool ToggleShowInfo();
48 
49 private:
50   std::unique_ptr<CFileItem> m_currentItem;
51 
52   unsigned int m_AfterSeekTimeout = 0;
53   mutable int m_seekOffset = 0;
54   std::atomic_bool m_playerShowTime;
55   std::atomic_bool m_playerShowInfo;
56 
57   int GetTotalPlayTime() const;
58   int GetPlayTime() const;
59   int GetPlayTimeRemaining() const;
60   float GetSeekPercent() const;
61 
62   std::string GetCurrentPlayTime(TIME_FORMAT format) const;
63   std::string GetCurrentPlayTimeRemaining(TIME_FORMAT format) const;
64   std::string GetDuration(TIME_FORMAT format) const;
65   std::string GetCurrentSeekTime(TIME_FORMAT format) const;
66   std::string GetSeekTime(TIME_FORMAT format) const;
67 
68   std::string GetContentRanges(int iInfo) const;
69   std::vector<std::pair<float, float>> GetCutList(CDataCacheCore& data, time_t duration) const;
70   std::vector<std::pair<float, float>> GetChapters(CDataCacheCore& data, time_t duration) const;
71 };
72 
73 } // namespace GUIINFO
74 } // namespace GUILIB
75 } // namespace KODI
76