MCPcopy Create free account
hub / github.com/audacity/audacity / SyncProject

Method SyncProject

libraries/lib-cloud-audiocom/CloudSyncService.cpp:384–451  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

382}
383
384CloudSyncService::SyncFuture CloudSyncService::SyncProject(
385 AudacityProject& project, const std::string& path, bool forceSync,
386 sync::ProgressCallback callback)
387{
388 ASSERT_MAIN_THREAD();
389
390 // Reset promise
391 mSyncPromise = {};
392
393 if (mSyncInProcess.exchange(true))
394 {
395 CompleteSync({ sync::ProjectSyncResult::StatusCode::Blocked });
396 return mSyncPromise.get_future();
397 }
398
399 if (!callback)
400 mProgressCallback = [](auto...) { return true; };
401 else
402 mProgressCallback = std::move(callback);
403
404 auto& cloudDatabase = sync::CloudProjectsDatabase::Get();
405
406 auto projectInfo = cloudDatabase.GetProjectDataForPath(path);
407
408 if (!projectInfo)
409 {
410 // We assume, that the project is local
411 CompleteSync(path);
412 return mSyncPromise.get_future();
413 }
414
415 GetProjectInfo(
416 GetOAuthService(), GetServiceConfig(), projectInfo->ProjectId,
417 [projectInfo = *projectInfo, &project, path,
418 mode = forceSync ? SyncMode::ForceOverwrite : SyncMode::Normal,
419 this](sync::ProjectInfo remoteInfo, ResponseResult result)
420 {
421 if (result.Code != SyncResultCode::Success)
422 {
423 FailSync(std::move(result));
424 return;
425 }
426
427 // Do not perform the snapshot request if the project is up to date
428 if (remoteInfo.HeadSnapshot.Id == projectInfo.SnapshotId)
429 {
430 CompleteSync({ sync::ProjectSyncResult::StatusCode::Succeeded });
431 return;
432 }
433
434 const auto snapshotId = remoteInfo.HeadSnapshot.Synced > 0 ?
435 remoteInfo.HeadSnapshot.Id :
436 remoteInfo.LastSyncedSnapshotId;
437
438 GetSnapshotInfo(
439 GetOAuthService(), GetServiceConfig(), remoteInfo.Id, snapshotId,
440 [this, &project, mode,
441 remoteInfo](sync::SnapshotInfo snapshotInfo, ResponseResult result)

Callers 1

SyncCloudProjectFunction · 0.80

Calls 5

moveFunction · 0.85
GetFunction · 0.85
GetProjectInfoFunction · 0.85
GetSnapshotInfoFunction · 0.85
GetProjectDataForPathMethod · 0.80

Tested by

no test coverage detected