@@ -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,18 @@ 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
+ if (!m_in_header_sync && !m_in_pre_header_sync) {
123
+ if (new_progress != m_verification_progress) {
124
+ setRemainingSyncTime (new_progress);
81
125
82
- m_verification_progress = new_progress;
126
+ m_verification_progress = new_progress + m_header_sync_progress + m_pre_header_sync_progress;
127
+ Q_EMIT verificationProgressChanged ();
128
+ }
129
+ } else {
130
+ m_verification_progress = new_progress + m_header_sync_progress + m_pre_header_sync_progress;
83
131
Q_EMIT verificationProgressChanged ();
84
132
}
85
133
}
@@ -135,12 +183,33 @@ void NodeModel::ConnectToBlockTipSignal()
135
183
QMetaObject::invokeMethod (this , [=] {
136
184
setBlockTipHeight (tip.block_height );
137
185
setVerificationProgress (verification_progress);
138
-
186
+ setInHeaderSync (false );
187
+ setInPreHeaderSync (false );
139
188
Q_EMIT setTimeRatioList (tip.block_time );
140
189
});
141
190
});
142
191
}
143
192
193
+ void NodeModel::ConnectToHeaderTipSignal ()
194
+ {
195
+ assert (!m_handler_notify_header_tip);
196
+
197
+ m_handler_notify_header_tip = m_node.handleNotifyHeaderTip (
198
+ [this ](SynchronizationState sync_state, interfaces::BlockTip tip, bool presync) {
199
+ QMetaObject::invokeMethod (this , [=] {
200
+ if (presync) {
201
+ setInHeaderSync (false );
202
+ setInPreHeaderSync (true );
203
+ setPreHeaderSyncProgress (tip.block_height , QDateTime::fromSecsSinceEpoch (tip.block_time ));
204
+ } else {
205
+ setInHeaderSync (true );
206
+ setInPreHeaderSync (false );
207
+ setHeaderSyncProgress (tip.block_height , QDateTime::fromSecsSinceEpoch (tip.block_time ));
208
+ }
209
+ });
210
+ });
211
+ }
212
+
144
213
void NodeModel::ConnectToNumConnectionsChangedSignal ()
145
214
{
146
215
assert (!m_handler_notify_num_peers_changed);
0 commit comments