kodi
XBPython.h
1 /*
2  * Copyright (C) 2005-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 "cores/IPlayerCallback.h"
12 #include "interfaces/IAnnouncer.h"
13 #include "interfaces/generic/ILanguageInvocationHandler.h"
14 #include "threads/CriticalSection.h"
15 #include "threads/Event.h"
16 #include "threads/Thread.h"
17 
18 #include <memory>
19 #include <vector>
20 
21 class CPythonInvoker;
22 class CVariant;
23 
24 typedef struct
25 {
26  int id;
27  bool bDone;
28  CPythonInvoker* pyThread;
29 } PyElem;
30 
31 class LibraryLoader;
32 
33 namespace XBMCAddon
34 {
35 namespace xbmc
36 {
37 class Monitor;
38 }
39 } // namespace XBMCAddon
40 
41 template<class T>
42 struct LockableType : public T, public CCriticalSection
43 {
44  bool hadSomethingRemoved;
45 };
46 
48 typedef LockableType<std::vector<XBMCAddon::xbmc::Monitor*>> MonitorCallbackList;
50 typedef std::vector<LibraryLoader*> PythonExtensionLibraries;
51 
52 class XBPython : public IPlayerCallback,
55 {
56 public:
57  XBPython();
58  ~XBPython() override;
59  void OnPlayBackEnded() override;
60  void OnPlayBackStarted(const CFileItem& file) override;
61  void OnAVStarted(const CFileItem& file) override;
62  void OnAVChange() override;
63  void OnPlayBackPaused() override;
64  void OnPlayBackResumed() override;
65  void OnPlayBackStopped() override;
66  void OnPlayBackError() override;
67  void OnPlayBackSpeedChanged(int iSpeed) override;
68  void OnPlayBackSeek(int64_t iTime, int64_t seekOffset) override;
69  void OnPlayBackSeekChapter(int iChapter) override;
70  void OnQueueNextItem() override;
71 
72  void Announce(ANNOUNCEMENT::AnnouncementFlag flag,
73  const std::string& sender,
74  const std::string& message,
75  const CVariant& data) override;
76  void RegisterPythonPlayerCallBack(IPlayerCallback* pCallback);
77  void UnregisterPythonPlayerCallBack(IPlayerCallback* pCallback);
78  void RegisterPythonMonitorCallBack(XBMCAddon::xbmc::Monitor* pCallback);
79  void UnregisterPythonMonitorCallBack(XBMCAddon::xbmc::Monitor* pCallback);
80  void OnSettingsChanged(const std::string& strings);
81  void OnScreensaverActivated();
82  void OnScreensaverDeactivated();
83  void OnDPMSActivated();
84  void OnDPMSDeactivated();
85  void OnScanStarted(const std::string& library);
86  void OnScanFinished(const std::string& library);
87  void OnCleanStarted(const std::string& library);
88  void OnCleanFinished(const std::string& library);
89  void OnNotification(const std::string& sender,
90  const std::string& method,
91  const std::string& data);
92 
93  void Process() override;
94  void PulseGlobalEvent() override;
95  void Uninitialize() override;
96  bool OnScriptInitialized(ILanguageInvoker* invoker) override;
97  void OnScriptStarted(ILanguageInvoker* invoker) override;
98  void NotifyScriptAborting(ILanguageInvoker* invoker) override;
99  void OnExecutionEnded(ILanguageInvoker* invoker) override;
100  void OnScriptFinalized(ILanguageInvoker* invoker) override;
101  ILanguageInvoker* CreateInvoker() override;
102 
103  bool WaitForEvent(CEvent& hEvent, unsigned int milliseconds);
104 
105 private:
106  static bool m_bInitialized; // whether global python runtime was already initialized
107 
108  CCriticalSection m_critSection;
109  void* m_mainThreadState{nullptr};
110  int m_iDllScriptCounter{0}; // to keep track of the total scripts running that need the dll
111 
112  //Vector with list of threads used for running scripts
113  PyList m_vecPyList;
114  PlayerCallbackList m_vecPlayerCallbackList;
115  MonitorCallbackList m_vecMonitorCallbackList;
116 
117  // any global events that scripts should be using
118  CEvent m_globalEvent;
119 
120  // in order to finalize and unload the python library, need to save all the extension libraries that are
121  // loaded by it and unload them first (not done by finalize)
122  PythonExtensionLibraries m_extensions;
123 };
This is an Event class built from a ConditionVariable.
Definition: Event.h:35
Definition: LibraryLoader.h:17
Definition: PythonInvoker.h:23
Definition: IAnnouncer.h:70
Definition: ILanguageInvocationHandler.h:13
Definition: Variant.h:31
Definition: Monitor.h:29
Defining LOG_LIFECYCLE_EVENTS will log all instantiations, deletions and also reference countings (in...
Definition: Addon.cpp:25
Definition: IPlayerCallback.h:18
Definition: XBPython.h:52
Definition: XBPython.h:24
Definition: XBPython.h:42
Definition: ILanguageInvoker.h:31
Represents a file on a share.
Definition: FileItem.h:102