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

Method DownloadCloudAudio

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

Source from the content-addressed store, hash-verified

921}
922
923CloudSyncService::DownloadAudioFuture CloudSyncService::DownloadCloudAudio(
924 std::string_view audioId,
925 sync::ProgressCallback callback)
926{
927 ASSERT_MAIN_THREAD();
928
929 mDownloadAudioPromise = {};
930
931 if (mDownloadInProcess.exchange(true))
932 {
933 mDownloadAudioPromise.set_value(
934 { sync::DownloadAudioResult::StatusCode::Blocked, {}, {}});
935 return mDownloadAudioPromise.get_future();
936 }
937
938 if (audioId.empty())
939 {
940 mDownloadAudioPromise.set_value(
941 { sync::DownloadAudioResult::StatusCode::Failed,
942 { SyncResultCode::InternalClientError, "Empty audioId" },
943 {} });
944 return mDownloadAudioPromise.get_future();
945 }
946
947 if (!callback)
948 mProgressCallback = [](auto...) { return true; };
949 else
950 mProgressCallback = std::move(callback);
951
952 GetAudioInfo(GetOAuthService(), GetServiceConfig(), std::string(audioId),
953 [this](sync::CloudAudioFullInfo audioInfo, ResponseResult result)
954 {
955 if (result.Code != SyncResultCode::Success)
956 {
957 mDownloadInProcess.store(false);
958 mDownloadAudioPromise.set_value(
959 { sync::DownloadAudioResult::StatusCode::Failed,
960 std::move(result),
961 {} });
962 return;
963 }
964
965 if (!audioInfo.IsDownloadable && audioInfo.AuthorId != GetUserService().GetUserId()) {
966 mDownloadInProcess.store(false);
967 mDownloadAudioPromise.set_value(
968 { sync::DownloadAudioResult::StatusCode::Failed,
969 { SyncResultCode::Forbidden, "You don't have permission to download this audio" },
970 {} });
971 return;
972 }
973
974 GetAudioDownloadInfo(GetOAuthService(), GetServiceConfig(), audioInfo.Id,
975 [this, audioInfo](sync::CloudAudioDownloadInfo downloadInfo, ResponseResult result)
976 {
977 if (result.Code != SyncResultCode::Success)
978 {
979 mDownloadInProcess.store(false);
980 mDownloadAudioPromise.set_value(

Callers 1

OpenAudioFromCloudFunction · 0.80

Calls 8

moveFunction · 0.85
GetAudioInfoFunction · 0.85
GetAudioDownloadInfoFunction · 0.85
GetUserIdMethod · 0.80
emptyMethod · 0.45
storeMethod · 0.45
beginMethod · 0.45
endMethod · 0.45

Tested by

no test coverage detected