-
Notifications
You must be signed in to change notification settings - Fork 0
/
XBPython.h
133 lines (111 loc) · 4.24 KB
/
XBPython.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
#pragma once
/*
* Copyright (C) 2005-2013 Team XBMC
* http://xbmc.org
*
* This Program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* This Program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with XBMC; see the file COPYING. If not, see
* <http://www.gnu.org/licenses/>.
*
*/
#include "cores/IPlayerCallback.h"
#include "threads/CriticalSection.h"
#include "threads/Event.h"
#include "threads/Thread.h"
#include "interfaces/IAnnouncer.h"
#include "interfaces/generic/ILanguageInvocationHandler.h"
#include "addons/IAddon.h"
#include <boost/shared_ptr.hpp>
#include <vector>
class CPythonInvoker;
typedef struct {
int id;
bool bDone;
CPythonInvoker* pyThread;
}PyElem;
class LibraryLoader;
namespace XBMCAddon
{
namespace xbmc
{
class Monitor;
}
}
template <class T> struct LockableType : public T, public CCriticalSection
{ bool hadSomethingRemoved; };
typedef LockableType<std::vector<void*> > PlayerCallbackList;
typedef LockableType<std::vector<XBMCAddon::xbmc::Monitor*> > MonitorCallbackList;
typedef LockableType<std::vector<PyElem> > PyList;
typedef std::vector<LibraryLoader*> PythonExtensionLibraries;
class XBPython :
public IPlayerCallback,
public ANNOUNCEMENT::IAnnouncer,
public ILanguageInvocationHandler
{
public:
XBPython();
virtual ~XBPython();
virtual void OnPlayBackEnded();
virtual void OnPlayBackStarted();
virtual void OnPlayBackPaused();
virtual void OnPlayBackResumed();
virtual void OnPlayBackStopped();
virtual void OnPlayBackSpeedChanged(int iSpeed);
virtual void OnPlayBackSeek(int iTime, int seekOffset);
virtual void OnPlayBackSeekChapter(int iChapter);
virtual void OnQueueNextItem();
virtual void Announce(ANNOUNCEMENT::AnnouncementFlag flag, const char *sender, const char *message, const CVariant &data);
void RegisterPythonPlayerCallBack(IPlayerCallback* pCallback);
void UnregisterPythonPlayerCallBack(IPlayerCallback* pCallback);
void RegisterPythonMonitorCallBack(XBMCAddon::xbmc::Monitor* pCallback);
void UnregisterPythonMonitorCallBack(XBMCAddon::xbmc::Monitor* pCallback);
void OnSettingsChanged(const CStdString &strings);
void OnScreensaverActivated();
void OnScreensaverDeactivated();
void OnDatabaseUpdated(const std::string &database);
void OnDatabaseScanStarted(const std::string &database);
void OnAbortRequested(const CStdString &ID="");
void OnNotification(const std::string &sender, const std::string &method, const std::string &data);
virtual void Process();
virtual void Uninitialize();
virtual void OnScriptStarted(ILanguageInvoker *invoker);
virtual void OnScriptEnded(ILanguageInvoker *invoker);
virtual ILanguageInvoker* CreateInvoker();
bool InitializeEngine();
void FinalizeScript();
void PulseGlobalEvent();
bool WaitForEvent(CEvent& hEvent, unsigned int milliseconds);
void RegisterExtensionLib(LibraryLoader *pLib);
void UnregisterExtensionLib(LibraryLoader *pLib);
void UnloadExtensionLibs();
private:
void Finalize();
CCriticalSection m_critSection;
bool FileExist(const char* strFile);
void* m_mainThreadState;
ThreadIdentifier m_ThreadId;
bool m_bInitialized;
int m_iDllScriptCounter; // to keep track of the total scripts running that need the dll
unsigned int m_endtime;
//Vector with list of threads used for running scripts
PyList m_vecPyList;
PlayerCallbackList m_vecPlayerCallbackList;
MonitorCallbackList m_vecMonitorCallbackList;
LibraryLoader* m_pDll;
// any global events that scripts should be using
CEvent m_globalEvent;
// in order to finalize and unload the python library, need to save all the extension libraries that are
// loaded by it and unload them first (not done by finalize)
PythonExtensionLibraries m_extensions;
};
extern XBPython g_pythonParser;