7#include <private/qpacket_p.h>
9#include <QtCore/qurl.h>
10#include <QtCore/qfile.h>
11#include <QtCore/qfileinfo.h>
12#include <QtCore/qdir.h>
13#include <QtQml/qqmlfile.h>
18 : QQmlDebugClient(*(
new QQmlPreviewClientPrivate(connection)))
20 connect(
this, &QQmlPreviewClient::confirmation,
this,
21 [
this](
const QQmlPreviewClient::Settings &) { configureEventReplay(); });
26 QPacket packet(connection()->currentDataStreamVersion(), message);
34 packet >> seviceError;
35 emit error(seviceError);
41 emit request(fileName);
46 packet >> info.numSyncs >> info.minSync >> info.maxSync >> info.totalSync
47 >> info.numRenders >> info.minRender >> info.maxRender >> info.totalRender;
54 emit confirmation(settings);
57 case HotReloadFailure: {
60 emit hotReloadFailure(reason);
64 emit error(QString::fromLatin1(
"Unknown command received: %1").arg(command));
71 QPacket packet(connection()->currentDataStreamVersion());
72 packet <<
static_cast<qint8>(Directory) << path << entries;
73 sendMessage(packet.data());
78 QPacket packet(connection()->currentDataStreamVersion());
79 packet <<
static_cast<qint8>(File) << path << contents;
80 sendMessage(packet.data());
85 QPacket packet(connection()->currentDataStreamVersion());
86 packet <<
static_cast<qint8>(Error) << path;
87 sendMessage(packet.data());
92 QPacket packet(connection()->currentDataStreamVersion());
93 packet <<
static_cast<qint8>(Configuration) << config.enableInPlaceUpdates;
94 sendMessage(packet.data());
99 QPacket packet(connection()->currentDataStreamVersion());
100 packet <<
static_cast<qint8>(Load) << url;
101 sendMessage(packet.data());
106 QPacket packet(connection()->currentDataStreamVersion());
107 packet <<
static_cast<qint8>(Rerun);
108 sendMessage(packet.data());
113 QPacket packet(connection()->currentDataStreamVersion());
114 packet <<
static_cast<qint8>(Zoom) << factor;
115 sendMessage(packet.data());
120 QPacket packet(connection()->currentDataStreamVersion());
121 packet <<
static_cast<qint8>(AnimationSpeed) << factor;
122 sendMessage(packet.data());
127 Q_ASSERT(connection());
128 if (!d_func()->m_recordingData) {
129 d_func()->m_recordingData =
130 std::make_unique<QQmlPreviewClientPrivate::PreviewRecordingData>(connection());
133 recordClient().setFlushInterval(1);
134 recordClient().setRecording(
true);
135 auto &timer = replayTimer();
136 timer.setInterval(100);
137 connect(&timer, &QTimer::timeout,
this, [
this, &timer]() {
138 if (eventReceiver().numLoadedEvents() < numExpectedEvents())
145 if (eventReceiver().numLoadedEvents() > 0 && replayClient().state() == Enabled) {
146 replayEventsForUrl(QUrl());
152 const auto events = eventReceiver().events();
153 const auto types = eventReceiver().eventTypes();
156 for (
const auto &event : events)
157 replayClient().sendEvent(types[event.typeIndex()], event);
158 eventReceiver().clear();
159 replayTimer().start();
164 if (!d_func()->m_recordingData)
165 return triggerLoad(url);
167 setNumExpectedEvents(eventReceiver().numLoadedEvents());
168 if (numExpectedEvents() > 0 && replayClient().state() == Enabled) {
169 replayEventsForUrl(url);
171 eventReceiver().clear();
178 Q_D(QQmlPreviewClient);
179 d->m_numExpectedEvents = eventCount;
184 Q_D(
const QQmlPreviewClient);
185 return d->m_numExpectedEvents;
190 Q_D(
const QQmlPreviewClient);
191 return d->m_recordingData->replayTimer;
196 Q_D(
const QQmlPreviewClient);
197 return d->m_recordingData->recordClient;
202 Q_D(
const QQmlPreviewClient);
203 return d->m_recordingData->replayClient;
208 Q_D(
const QQmlPreviewClient);
209 return d->m_recordingData->eventReceiver;
214#include "moc_qqmlpreviewclient_p.cpp"
void messageReceived(const QByteArray &message) override
void triggerZoom(float factor)
void replayEventsForUrl(const QUrl &url)
void triggerAnimationSpeed(float factor)
void sendFile(const QString &path, const QByteArray &contents)
void sendError(const QString &path)
void sendDirectory(const QString &path, const QStringList &entries)
void sendConfiguration(const Settings &settings)
void triggerLoad(const QUrl &url)
void loadUrl(const QUrl &url)
Combined button and popup list for selecting options.
bool enableInPlaceUpdates