xbmc
ApplicationStackHelper.h
1 /*
2  * Copyright (C) 2017-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 "application/IApplicationComponent.h"
12 #include "threads/CriticalSection.h"
13 
14 #include <map>
15 #include <memory>
16 #include <string>
17 
18 class CFileItem;
19 class CFileItemList;
20 
22 {
23 public:
25  ~CApplicationStackHelper() = default;
26 
27  void Clear();
28  void OnPlayBackStarted(const CFileItem& item);
29 
34  bool InitializeStack(const CFileItem& item);
35 
41 
45  int GetCurrentPartNumber() const { return m_currentStackPosition; }
46 
50  bool IsPlayingISOStack() const;
51 
55  bool IsPlayingRegularStack() const;
56 
60  bool HasNextStackPartFileItem() const;
61 
66  {
67  return GetStackPartFileItem(++m_currentStackPosition);
68  }
69 
74  const CFileItem& SetStackPartCurrentFileItem(int partNumber)
75  {
76  return GetStackPartFileItem(m_currentStackPosition = partNumber);
77  }
78 
83  {
84  return GetStackPartFileItem(m_currentStackPosition);
85  }
86 
91  uint64_t GetStackPartEndTimeMs(int partNumber) const;
92 
97  uint64_t GetStackPartStartTimeMs(int partNumber) const { return (partNumber > 0) ? GetStackPartEndTimeMs(partNumber - 1) : 0; }
98 
102  uint64_t GetCurrentStackPartStartTimeMs() const { return GetStackPartStartTimeMs(m_currentStackPosition); }
103 
107  uint64_t GetStackTotalTimeMs() const;
108 
113  int GetStackPartNumberAtTimeMs(uint64_t msecs);
114 
115  // Stack information registration methods
116 
121 
125  std::shared_ptr<const CFileItem> GetRegisteredStack(const CFileItem& item) const;
126 
131  bool HasRegisteredStack(const CFileItem& item) const;
132 
138  void SetRegisteredStack(const CFileItem& item, std::shared_ptr<CFileItem> stackItem);
139 
144  int GetRegisteredStackPartNumber(const CFileItem& item);
145 
151  void SetRegisteredStackPartNumber(const CFileItem& item, int partNumber);
152 
157  uint64_t GetRegisteredStackPartStartTimeMs(const CFileItem& item) const;
158 
164  void SetRegisteredStackPartStartTimeMs(const CFileItem& item, uint64_t startTimeMs);
165 
170  uint64_t GetRegisteredStackTotalTimeMs(const CFileItem& item) const;
171 
177  void SetRegisteredStackTotalTimeMs(const CFileItem& item, uint64_t totalTimeMs);
178 
179  CCriticalSection m_critSection;
180 
181 protected:
186  CFileItem& GetStackPartFileItem(int partNumber);
187  const CFileItem& GetStackPartFileItem(int partNumber) const;
188 
190  {
191  public:
193  {
194  m_lStackPartNumber = 0;
195  m_lStackPartStartTimeMs = 0;
196  m_lStackTotalTimeMs = 0;
197  };
198  uint64_t m_lStackPartStartTimeMs;
199  uint64_t m_lStackTotalTimeMs;
200  int m_lStackPartNumber;
201  std::shared_ptr<CFileItem> m_pStack;
202  };
203 
204  typedef std::shared_ptr<StackPartInformation> StackPartInformationPtr;
205  typedef std::map<std::string, StackPartInformationPtr> Stackmap;
206  Stackmap m_stackmap;
207  StackPartInformationPtr GetStackPartInformation(const std::string& key);
208  StackPartInformationPtr GetStackPartInformation(const std::string& key) const;
209 
210  std::unique_ptr<CFileItemList> m_currentStack;
211  int m_currentStackPosition = 0;
212  bool m_currentStackIsDiscImageStack = false;
213 };
Definition: ApplicationStackHelper.h:21
uint64_t GetCurrentStackPartStartTimeMs() const
Returns the start time of the current FileItem part of a (non-ISO) stack playback.
Definition: ApplicationStackHelper.h:102
bool HasRegisteredStack(const CFileItem &item) const
Returns true if there is a registered stack for the given CFileItem part.
Definition: ApplicationStackHelper.cpp:262
uint64_t GetStackPartEndTimeMs(int partNumber) const
Returns the end time of a FileItem part of a (non-ISO) stack playback.
Definition: ApplicationStackHelper.cpp:227
const CFileItem & SetStackPartCurrentFileItem(int partNumber)
sets a given stack part as the current and returns a reference to it
Definition: ApplicationStackHelper.h:74
uint64_t GetRegisteredStackPartStartTimeMs(const CFileItem &item) const
Returns the start time of the part in the parameter.
Definition: ApplicationStackHelper.cpp:294
int GetStackPartNumberAtTimeMs(uint64_t msecs)
Returns the stack part number corresponding to the given timestamp in a (non-ISO) stack playback...
Definition: ApplicationStackHelper.cpp:237
uint64_t GetRegisteredStackTotalTimeMs(const CFileItem &item) const
Returns the total time of the stack associated to the part in the parameter.
Definition: ApplicationStackHelper.cpp:304
bool IsPlayingISOStack() const
Returns true if Application is currently playing an ISO stack.
Definition: ApplicationStackHelper.cpp:212
void SetRegisteredStackPartStartTimeMs(const CFileItem &item, uint64_t startTimeMs)
Stores the part start time in the item-stack map.
Definition: ApplicationStackHelper.cpp:299
Represents a list of files.
Definition: FileItem.h:721
int InitializeStackStartPartAndOffset(const CFileItem &item)
Initialize stack times for each part, start & end, total time, and current part number if resume offs...
Definition: ApplicationStackHelper.cpp:83
uint64_t GetStackTotalTimeMs() const
Returns the total time of a (non-ISO) stack playback.
Definition: ApplicationStackHelper.cpp:232
void SetRegisteredStackPartNumber(const CFileItem &item, int partNumber)
Stores the part number in the item-stack map.
Definition: ApplicationStackHelper.cpp:289
bool HasNextStackPartFileItem() const
returns true if there is a next part available
Definition: ApplicationStackHelper.cpp:222
const CFileItem & SetNextStackPartCurrentFileItem()
sets the next stack part as the current and returns a reference to it
Definition: ApplicationStackHelper.h:65
bool IsPlayingRegularStack() const
Returns true if Application is currently playing a Regular (non-ISO) stack.
Definition: ApplicationStackHelper.cpp:217
int GetRegisteredStackPartNumber(const CFileItem &item)
Returns the part number of the part in the parameter.
Definition: ApplicationStackHelper.cpp:284
uint64_t GetStackPartStartTimeMs(int partNumber) const
Returns the start time of a FileItem part of a (non-ISO) stack playback.
Definition: ApplicationStackHelper.h:97
bool InitializeStack(const CFileItem &item)
Initialize stack.
Definition: ApplicationStackHelper.cpp:60
void SetRegisteredStack(const CFileItem &item, std::shared_ptr< CFileItem > stackItem)
Stores a smart pointer to the stack CFileItem in the item-stack map.
Definition: ApplicationStackHelper.cpp:268
const CFileItem & GetCurrentStackPartFileItem() const
Returns the FileItem currently playing back as part of a (non-ISO) stack playback.
Definition: ApplicationStackHelper.h:82
CFileItem & GetStackPartFileItem(int partNumber)
Returns a FileItem part of a (non-ISO) stack playback.
Definition: ApplicationStackHelper.cpp:274
Base class for application components.
Definition: IApplicationComponent.h:12
void SetRegisteredStackTotalTimeMs(const CFileItem &item, uint64_t totalTimeMs)
Stores the stack&#39;s total time associated to the part in the item-stack map.
Definition: ApplicationStackHelper.cpp:309
int GetCurrentPartNumber() const
returns the current part number
Definition: ApplicationStackHelper.h:45
std::shared_ptr< const CFileItem > GetRegisteredStack(const CFileItem &item) const
Returns a smart pointer to the stack CFileItem.
Definition: ApplicationStackHelper.cpp:256
Definition: ApplicationStackHelper.h:189
void ClearAllRegisteredStackInformation()
Clear all entries in the item-stack map. To be called upon playback stopped.
Definition: ApplicationStackHelper.cpp:251
Represents a file on a share.
Definition: FileItem.h:102