Audacity 3.2.0
LocalProjectSnapshot.h
Go to the documentation of this file.
1/* SPDX-License-Identifier: GPL-2.0-or-later */
2/*!********************************************************************
3
4 Audacity: A Digital Audio Editor
5
6 CloudProjectSnapshot.h
7
8 Dmitry Vedenko
9
10**********************************************************************/
11#pragma once
12
13#include <atomic>
14#include <functional>
15#include <future>
16#include <memory>
17#include <mutex>
18#include <string_view>
19
21#include "CloudSyncError.h"
22#include "CloudSyncDTO.h"
23#include "NetworkUtils.h"
24
26
27class AudacityProject;
28
30{
31class OAuthService;
32class ServiceConfig;
33} // namespace audacity::cloud::audiocom
34
36{
37constexpr auto UNASSIGNED_PROJECT_ID = -1;
38
41class MixdownUploader;
42class CloudSyncUI;
44
46
47class CLOUD_AUDIOCOM_API LocalProjectSnapshot final :
49 public std::enable_shared_from_this<LocalProjectSnapshot>
50{
51 struct Tag final
52 {
53 };
54
55public:
56 struct CLOUD_AUDIOCOM_API SnapshotData final
57 {
58 std::optional<CreateSnapshotResponse> Response;
59 std::shared_ptr<LocalProjectSnapshot> Operation;
60 };
61
62 using Promise = std::promise<SnapshotData>;
63 using Future = std::future<SnapshotData>;
64
66 Tag, const ServiceConfig& config, const OAuthService& oauthService,
68 ~LocalProjectSnapshot() override;
69
70 static Future Create(
71 const ServiceConfig& config, const OAuthService& oauthService,
73
74 bool IsCompleted() const override;
75
76 std::shared_ptr<AudacityProject> GetProject();
77
78 void Start() override;
79 void SetUploadData(const ProjectUploadData& data) override;
80 void Cancel() override;
81
82 void Abort();
83
84private:
85 void UploadFailed(CloudSyncError error);
86 void DataUploadFailed(const ResponseResult& uploadResult);
87 void DataUploadFailed(const MissingBlocksUploadProgress& uploadResult);
88
89 void UpdateProjectSnapshot();
90
91 void
92 OnSnapshotCreated(const CreateSnapshotResponse& response, bool newProject);
93 void StorePendingSnapshot(
94 const CreateSnapshotResponse& response, const ProjectUploadData& data);
95 void MarkSnapshotSynced();
96 void DeleteSnapshot();
97
98
100 std::weak_ptr<AudacityProject> mWeakProject;
101
102 std::promise<ProjectUploadData> mProjectDataPromise;
103
106
107 std::string mProjectName;
108
109 struct ProjectBlocksLock;
110 std::unique_ptr<ProjectBlocksLock> mProjectBlocksLock;
111
112 std::shared_ptr<MissingBlocksUploader> mMissingBlockUploader;
113
115 std::optional<CreateSnapshotResponse> mCreateSnapshotResponse;
116
118
120
122
123 std::atomic<bool> mCompleted { false };
124 std::atomic<bool> mCancelled { false };
125 std::atomic<bool> mProjectDataReady { false };
126};
127} // namespace audacity::cloud::audiocom::sync
const TranslatableString name
Definition: Distortion.cpp:76
The top-level handle to an Audacity project. It serves as a source of events that other objects can b...
Definition: Project.h:90
Service responsible for OAuth authentication against the audio.com service.
Definition: OAuthService.h:40
Configuration for the audio.com.
Definition: ServiceConfig.h:23
std::unique_ptr< ProjectBlocksLock > mProjectBlocksLock
std::optional< CreateSnapshotResponse > mCreateSnapshotResponse
std::shared_ptr< MissingBlocksUploader > mMissingBlockUploader
concurrency::CancellationContextPtr mCancellationContext
const AudacityProject & GetProject(const Track &track)
Definition: TrackArt.cpp:479
std::shared_ptr< CancellationContext > CancellationContextPtr