@@ -20,6 +20,7 @@ NodeModel::NodeModel(interfaces::Node& node)
20
20
: m_node{node}
21
21
{
22
22
ConnectToBlockTipSignal ();
23
+ ConnectToHeaderTipSignal ();
23
24
ConnectToNumConnectionsChangedSignal ();
24
25
}
25
26
@@ -39,6 +40,47 @@ void NodeModel::setNumOutboundPeers(int new_num)
39
40
}
40
41
}
41
42
43
+ void NodeModel::setInHeaderSync (bool new_in_header_sync)
44
+ {
45
+ if (new_in_header_sync != m_in_header_sync) {
46
+ m_in_header_sync = new_in_header_sync;
47
+ Q_EMIT inHeaderSyncChanged ();
48
+ }
49
+ }
50
+
51
+ void NodeModel::setHeaderSyncProgress (int64_t header_height, const QDateTime& block_date)
52
+ {
53
+ int estimated_headers_left = block_date.secsTo (QDateTime::currentDateTime ()) / Params ().GetConsensus ().nPowTargetSpacing ;
54
+ double new_header_sync_progress = (100.0 / (header_height + estimated_headers_left) * header_height) / 10000 ;
55
+
56
+ if (new_header_sync_progress != m_header_sync_progress) {
57
+ m_header_sync_progress = new_header_sync_progress;
58
+ setVerificationProgress (0.0 );
59
+ Q_EMIT headerSyncProgressChanged ();
60
+ }
61
+ }
62
+
63
+ void NodeModel::setInPreHeaderSync (bool new_in_pre_header_sync)
64
+ {
65
+ if (new_in_pre_header_sync != m_in_pre_header_sync) {
66
+ m_in_pre_header_sync = new_in_pre_header_sync;
67
+ Q_EMIT inPreHeaderSyncChanged ();
68
+ }
69
+ }
70
+
71
+ void NodeModel::setPreHeaderSyncProgress (int64_t header_height, const QDateTime& block_date)
72
+ {
73
+ int estimated_headers_left = block_date.secsTo (QDateTime::currentDateTime ()) / Params ().GetConsensus ().nPowTargetSpacing ;
74
+ double new_pre_header_sync_progress = (100.0 / (header_height + estimated_headers_left) * header_height) / 10000 ;
75
+
76
+ if (new_pre_header_sync_progress != m_pre_header_sync_progress) {
77
+ m_pre_header_sync_progress = new_pre_header_sync_progress;
78
+ setVerificationProgress (0.0 );
79
+ Q_EMIT preHeaderSyncProgressChanged ();
80
+
81
+ }
82
+ }
83
+
42
84
void NodeModel::setRemainingSyncTime (double new_progress)
43
85
{
44
86
int currentTime = QDateTime::currentDateTime ().toMSecsSinceEpoch ();
@@ -74,12 +116,19 @@ void NodeModel::setRemainingSyncTime(double new_progress)
74
116
}
75
117
}
76
118
}
119
+
77
120
void NodeModel::setVerificationProgress (double new_progress)
78
121
{
79
- if (new_progress != m_verification_progress) {
80
- setRemainingSyncTime (new_progress);
122
+ double header_progress = m_header_sync_progress + m_pre_header_sync_progress;
123
+ if (!m_in_header_sync && !m_in_pre_header_sync) {
124
+ if (new_progress != m_verification_progress) {
125
+ setRemainingSyncTime (new_progress);
81
126
82
- m_verification_progress = new_progress;
127
+ m_verification_progress = header_progress + (new_progress - header_progress);
128
+ Q_EMIT verificationProgressChanged ();
129
+ }
130
+ } else {
131
+ m_verification_progress = header_progress;
83
132
Q_EMIT verificationProgressChanged ();
84
133
}
85
134
}
@@ -140,12 +189,33 @@ void NodeModel::ConnectToBlockTipSignal()
140
189
QMetaObject::invokeMethod (this , [=] {
141
190
setBlockTipHeight (tip.block_height );
142
191
setVerificationProgress (verification_progress);
143
-
192
+ setInHeaderSync (false );
193
+ setInPreHeaderSync (false );
144
194
Q_EMIT setTimeRatioList (tip.block_time );
145
195
});
146
196
});
147
197
}
148
198
199
+ void NodeModel::ConnectToHeaderTipSignal ()
200
+ {
201
+ assert (!m_handler_notify_header_tip);
202
+
203
+ m_handler_notify_header_tip = m_node.handleNotifyHeaderTip (
204
+ [this ](SynchronizationState sync_state, interfaces::BlockTip tip, bool presync) {
205
+ QMetaObject::invokeMethod (this , [=] {
206
+ if (presync) {
207
+ setInHeaderSync (false );
208
+ setInPreHeaderSync (true );
209
+ setPreHeaderSyncProgress (tip.block_height , QDateTime::fromSecsSinceEpoch (tip.block_time ));
210
+ } else {
211
+ setInHeaderSync (true );
212
+ setInPreHeaderSync (false );
213
+ setHeaderSyncProgress (tip.block_height , QDateTime::fromSecsSinceEpoch (tip.block_time ));
214
+ }
215
+ });
216
+ });
217
+ }
218
+
149
219
void NodeModel::ConnectToNumConnectionsChangedSignal ()
150
220
{
151
221
assert (!m_handler_notify_num_peers_changed);
0 commit comments