@@ -157,6 +157,8 @@ void CloneDlg::accept()
157
157
}
158
158
159
159
mProgress = new ProgressDlg;
160
+
161
+ // TODO: implement a ProgressDlg::minimumDuration
160
162
mProgress ->show ();
161
163
162
164
if ( repoName.endsWith ( QLatin1String ( " .git" ) ) )
@@ -165,21 +167,47 @@ void CloneDlg::accept()
165
167
if ( repoName.lastIndexOf ( QChar ( L' /' ) ) != -1 )
166
168
repoName.remove ( 0 , repoName.lastIndexOf ( QChar ( L' /' ) ) + 1 );
167
169
170
+ ProgressDlg::StepInfo::List steps;
171
+ steps << ProgressDlg::StepInfo{ QStringLiteral (" transfer" ), tr (" Download Git objects." ) }
172
+ << ProgressDlg::StepInfo{ QStringLiteral (" index" ), tr (" Add objects to Git index." ) };
173
+
174
+ if (!clone->bare ()) {
175
+ steps << ProgressDlg::StepInfo{ QStringLiteral (" checkout" ),
176
+ tr (" Checkout the worktree." ) };
177
+ connect ( clone, &Git::CloneOperation::doneCheckout,
178
+ this , &CloneDlg::doneCheckout );
179
+ }
180
+
181
+ mProgress ->addActivity (tr (" Cloning <b>%1</b> to <b>%2</b>" )
182
+ .arg (repoName).arg (targetDir), clone, steps);
168
183
184
+ connect ( clone, &Git::CloneOperation::finished,
185
+ this , &CloneDlg::rootCloneFinished );
186
+ connect ( clone, &Git::CloneOperation::transportProgress,
187
+ this , &CloneDlg::onTransportProgress );
188
+ connect ( clone, &Git::CloneOperation::checkoutProgress,
189
+ this , &CloneDlg::onCheckoutProgress );
190
+ connect ( clone, &Git::CloneOperation::doneDownloading,
191
+ this , &CloneDlg::doneDownload );
192
+ connect ( clone, &Git::CloneOperation::doneIndexing,
193
+ this , &CloneDlg::doneIndexing );
169
194
170
195
clone->execute ();
171
196
}
172
197
173
198
void CloneDlg::doneDownload ()
174
199
{
200
+ mProgress ->finished (sender (), QStringLiteral (" transfer" ));
175
201
}
176
202
177
203
void CloneDlg::doneIndexing ()
178
204
{
205
+ mProgress ->finished (sender (), QStringLiteral (" index" ));
179
206
}
180
207
181
208
void CloneDlg::doneCheckout ()
182
209
{
210
+ mProgress ->finished (sender (), QStringLiteral (" checkout" ));
183
211
}
184
212
185
213
void CloneDlg::rootCloneFinished ()
@@ -189,6 +217,7 @@ void CloneDlg::rootCloneFinished()
189
217
190
218
if ( operation->result () )
191
219
{
220
+ mProgress ->finished (sender ());
192
221
return ;
193
222
}
194
223
@@ -197,9 +226,56 @@ void CloneDlg::rootCloneFinished()
197
226
mProgress ->reject ();
198
227
}
199
228
229
+ void CloneDlg::onCheckoutProgress (const QString& fileName, quint64 totalFiles,
230
+ quint64 completedFiles)
200
231
{
232
+ QObject* s = sender ();
233
+
234
+ const QString stepCheckout ( QStringLiteral (" checkout" ) );
235
+ mProgress ->setPercentage ( s, stepCheckout,
236
+ (qreal)completedFiles / totalFiles );
237
+ mProgress ->setStatusInfo ( s, stepCheckout,
238
+ tr (" Checked out %1 of %2 files (last file: %3)." )
239
+ .arg (completedFiles).arg (totalFiles).arg (fileName) );
240
+ }
201
241
242
+ void CloneDlg::onTransportProgress (quint32 totalObjects,
243
+ quint32 indexedObjects,
244
+ quint32 receivedObjects,
245
+ quint64 receivedBytes)
246
+ {
247
+ QString recv;
248
+ if ( receivedBytes > 1024 * 1024 * 950 ) /* 950 is so we get 0.9 gb */
249
+ {
250
+ recv = QString::number ( receivedBytes / (1024 *1024 *1024.0 ), ' f' , 2 ) + QStringLiteral (" Gb" );
251
+ }
252
+ else if ( receivedBytes > 1024 * 950 )
253
+ {
254
+ recv = QString::number ( receivedBytes / (1024 *1024.0 ), ' f' , 2 ) + QStringLiteral (" Mb" );
255
+ }
256
+ else if ( receivedBytes > 950 )
257
+ {
258
+ recv = QString::number ( receivedBytes / 1024.0 , ' f' , 2 ) + QStringLiteral (" Kb" );
259
+ }
260
+ else
202
261
{
262
+ recv = QString::number ( receivedBytes );
203
263
}
204
264
265
+ QObject* s = sender ();
266
+ const QString stepTransfer (QStringLiteral (" transfer" ));
267
+ mProgress ->setPercentage ( s, stepTransfer,
268
+ (qreal)receivedObjects / totalObjects );
269
+ mProgress ->setStatusInfo ( s, stepTransfer,
270
+ tr (" Received %1 of %2 objects (%3)." )
271
+ .arg (receivedObjects)
272
+ .arg (totalObjects)
273
+ .arg (recv) );
274
+
275
+ const QString stepIndex (QStringLiteral (" index" ));
276
+ mProgress ->setPercentage ( s, stepIndex,
277
+ (qreal)indexedObjects / totalObjects );
278
+ mProgress ->setStatusInfo ( s, stepIndex, tr (" Indexed %1 of %2 objects." )
279
+ .arg (indexedObjects)
280
+ .arg (totalObjects) );
205
281
}
0 commit comments