MythTV master
serverSideScripting.h
Go to the documentation of this file.
1
2// Program Name: serverSideScripting.h
3// Created : Mar. 22, 2011
4//
5// Purpose : Server Side Scripting support for Html Server
6//
7// Copyright (c) 2011 David Blain <dblain@mythtv.org>
8//
9// Licensed under the GPL v2 or later, see LICENSE for details
10//
12
13#ifndef SERVERSIDESCRIPTING_H_
14#define SERVERSIDESCRIPTING_H_
15
16#include <utility>
17
18// Qt headers
19#include <QDateTime>
20#include <QMap>
21#include <QMutex>
22#include <QScriptEngine>
23#include <QScriptable>
24#include <QString>
25#include <QTextStream>
26
27// MythTV headers
28#include "upnpexp.h"
29#include "httprequest.h"
30
31#ifdef _WIN32
32#include <QScriptEngineDebugger>
33#endif
34
36{
37 public:
38 QScriptValue m_oFunc;
39 QDateTime m_dtTimeStamp;
40
41 ScriptInfo() = default;
42
43 ScriptInfo( const QScriptValue& func, QDateTime dt )
44 : m_oFunc( func ), m_dtTimeStamp(std::move( dt ))
45 {}
46};
47
49{
50 public:
51
52 QScriptEngine m_engine;
53
54#ifdef _WIN32
55 QScriptEngineDebugger m_debugger;
56#endif
57
60
61 QString SetResourceRootPath( const QString &path );
62
63 void RegisterMetaObjectType( const QString &sName,
64 const QMetaObject *pMetaObject,
65 QScriptEngine::FunctionSignature pFunction);
66
67 bool EvaluatePage( QTextStream *pOutStream, const QString &sFileName,
68 HTTPRequest *pRequest, const QByteArray &cspToken);
69
70 protected:
71
72 QMutex m_mutex;
73 QMap< QString, ScriptInfo* > m_mapScripts;
75
76 void Lock () { m_mutex.lock(); }
77 void Unlock () { m_mutex.unlock(); }
78
79 ScriptInfo *GetLoadedScript ( const QString &sFileName );
80
81 static QString ReadFileContents ( const QString &sFileName ) ;
82
83 QString CreateMethodFromFile( const QString &sFileName ) const;
84
85 bool ProcessLine ( QTextStream &sCode,
86 QString &sLine,
87 bool bInCode,
88 QString &sTransBuffer ) const;
89};
90
91
92class OutputStream : public QObject, public QScriptable
93{
94 Q_OBJECT
95
96 public:
97
98 explicit OutputStream( QTextStream *pStream, QObject *parent = nullptr )
99 : QObject( parent ), m_pTextStream( pStream ) {}
100
101 ~OutputStream() override = default;
102
103 public slots:
104
105 void write( const QString &sValue )
106 {
107 *m_pTextStream << sValue;
108 }
109
110 void writeln( const QString &sValue )
111 {
112 *m_pTextStream << sValue << "\n";
113 }
114
115 private:
116 QTextStream *m_pTextStream {nullptr};
117};
118
119#endif
void writeln(const QString &sValue)
void write(const QString &sValue)
QTextStream * m_pTextStream
OutputStream(QTextStream *pStream, QObject *parent=nullptr)
~OutputStream() override=default
ScriptInfo()=default
QDateTime m_dtTimeStamp
ScriptInfo(const QScriptValue &func, QDateTime dt)
QScriptValue m_oFunc
QScriptEngineDebugger m_debugger
QMap< QString, ScriptInfo * > m_mapScripts
STL namespace.
#define UPNP_PUBLIC
Definition: upnpexp.h:9