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 <QtGlobal>
20#if QT_VERSION >= QT_VERSION_CHECK(6,0,0)
21#include <QtSystemDetection>
22#endif
23#include <QDateTime>
24#include <QMap>
25#include <QMutex>
26#include <QScriptEngine>
27#include <QScriptable>
28#include <QString>
29#include <QTextStream>
30
31// MythTV headers
32#include "upnpexp.h"
33#include "httprequest.h"
34
35#ifdef Q_OS_WINDOWS
36#include <QScriptEngineDebugger>
37#endif
38
40{
41 public:
42 QScriptValue m_oFunc;
43 QDateTime m_dtTimeStamp;
44
45 ScriptInfo() = default;
46
47 ScriptInfo( const QScriptValue& func, QDateTime dt )
48 : m_oFunc( func ), m_dtTimeStamp(std::move( dt ))
49 {}
50};
51
53{
54 public:
55
56 QScriptEngine m_engine;
57
58#ifdef Q_OS_WINDOWS
59 QScriptEngineDebugger m_debugger;
60#endif
61
64
65 QString SetResourceRootPath( const QString &path );
66
67 void RegisterMetaObjectType( const QString &sName,
68 const QMetaObject *pMetaObject,
69 QScriptEngine::FunctionSignature pFunction);
70
71 bool EvaluatePage( QTextStream *pOutStream, const QString &sFileName,
72 HTTPRequest *pRequest, const QByteArray &cspToken);
73
74 protected:
75
76 QMutex m_mutex;
77 QMap< QString, ScriptInfo* > m_mapScripts;
79
80 void Lock () { m_mutex.lock(); }
81 void Unlock () { m_mutex.unlock(); }
82
83 ScriptInfo *GetLoadedScript ( const QString &sFileName );
84
85 static QString ReadFileContents ( const QString &sFileName ) ;
86
87 QString CreateMethodFromFile( const QString &sFileName ) const;
88
89 bool ProcessLine ( QTextStream &sCode,
90 QString &sLine,
91 bool bInCode,
92 QString &sTransBuffer ) const;
93};
94
95
96class OutputStream : public QObject, public QScriptable
97{
98 Q_OBJECT
99
100 public:
101
102 explicit OutputStream( QTextStream *pStream, QObject *parent = nullptr )
103 : QObject( parent ), m_pTextStream( pStream ) {}
104
105 ~OutputStream() override = default;
106
107 public slots:
108
109 void write( const QString &sValue )
110 {
111 *m_pTextStream << sValue;
112 }
113
114 void writeln( const QString &sValue )
115 {
116 *m_pTextStream << sValue << "\n";
117 }
118
119 private:
120 QTextStream *m_pTextStream {nullptr};
121};
122
123#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