@@ -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
}
@@ -135,12 +184,33 @@ void NodeModel::ConnectToBlockTipSignal()
135
184
QMetaObject::invokeMethod (this , [=] {
136
185
setBlockTipHeight (tip.block_height );
137
186
setVerificationProgress (verification_progress);
138
-
187
+ setInHeaderSync (false );
188
+ setInPreHeaderSync (false );
139
189
Q_EMIT setTimeRatioList (tip.block_time );
140
190
});
141
191
});
142
192
}
143
193
194
+ void NodeModel::ConnectToHeaderTipSignal ()
195
+ {
196
+ assert (!m_handler_notify_header_tip);
197
+
198
+ m_handler_notify_header_tip = m_node.handleNotifyHeaderTip (
199
+ [this ](SynchronizationState sync_state, interfaces::BlockTip tip, bool presync) {
200
+ QMetaObject::invokeMethod (this , [=] {
201
+ if (presync) {
202
+ setInHeaderSync (false );
203
+ setInPreHeaderSync (true );
204
+ setPreHeaderSyncProgress (tip.block_height , QDateTime::fromSecsSinceEpoch (tip.block_time ));
205
+ } else {
206
+ setInHeaderSync (true );
207
+ setInPreHeaderSync (false );
208
+ setHeaderSyncProgress (tip.block_height , QDateTime::fromSecsSinceEpoch (tip.block_time ));
209
+ }
210
+ });
211
+ });
212
+ }
213
+
144
214
void NodeModel::ConnectToNumConnectionsChangedSignal ()
145
215
{
146
216
assert (!m_handler_notify_num_peers_changed);
0 commit comments