Audacity 3.2.0
UploadService.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 UploadService.h
7
8 Dmitry Vedenko
9
10**********************************************************************/
11#pragma once
12
13#include <functional>
14#include <memory>
15#include <utility>
16#include <variant>
17#include <vector>
18
19#include <wx/string.h>
20
21enum class AudiocomTrace;
22
24{
25class ServiceConfig;
26class OAuthService;
27
29struct CLOUD_AUDIOCOM_API UploadFailedPayload final
30{
31 int32_t code {};
32 int32_t status {};
33
34 std::string name;
35 std::string message;
36
37 using AdditionalError = std::pair<std::string, std::string>;
38 std::vector<AdditionalError> additionalErrors;
39};
40
42struct CLOUD_AUDIOCOM_API UploadSuccessfulPayload final
43{
45 std::string audioId;
47 std::string audioSlug;
49 std::string uploadToken;
51 std::string audioUrl;
52};
53
56struct CLOUD_AUDIOCOM_API UploadOperationCompleted final
57{
59 enum class Result
60 {
62 Success,
64 Aborted,
66 FileNotFound,
68 Unauthorized,
70 InvalidData,
74 UploadFailed
75 };
76
79
80 using Payload = std::variant<
81 std::monostate,
84 >;
85
88};
89
91class CLOUD_AUDIOCOM_API UploadOperation
92{
93public:
95
97 virtual bool IsCompleted() = 0;
99 virtual void Abort() = 0;
102 virtual void DiscardResult() = 0;
103};
104
106class CLOUD_AUDIOCOM_API UploadOperationHandle final
107{
108public:
110 explicit UploadOperationHandle(std::shared_ptr<UploadOperation> operation);
111
116
118
119 explicit operator bool() const noexcept;
120
121 UploadOperation* operator->() const noexcept;
122
123private:
124 std::shared_ptr<UploadOperation> mOperation {};
125};
126
128class CLOUD_AUDIOCOM_API UploadService final
129{
130public:
131 UploadService(const ServiceConfig& config, OAuthService& service);
132
134 std::function<void(const UploadOperationCompleted&)>;
135
136 using ProgressCallback = std::function<void(uint64_t current, uint64_t total)>;
137
139 /*
140 Both callbacks are invoked from the network thread.
141
142 If projectName is empty, the name for the uploaded file is deduced from the fileName.
143 */
145 const wxString& fileName, const wxString& projectName, bool isPublic,
146 CompletedCallback completedCallback, ProgressCallback progressCallback,
148
149private:
152};
153
154CLOUD_AUDIOCOM_API wxString GetUploadTempPath();
155} // namespace audacity::cloud::audiocom
AudiocomTrace
Definition: ExportUtils.h:27
Service responsible for OAuth authentication against the audio.com service.
Definition: OAuthService.h:43
Configuration for the audio.com.
Definition: ServiceConfig.h:25
A unique_ptr like class that holds a pointer to UploadOperation.
UploadOperationHandle(UploadOperationHandle &&)=default
UploadOperationHandle & operator=(const UploadOperationHandle &)=delete
UploadOperationHandle(const UploadOperationHandle &)=delete
UploadOperationHandle & operator=(UploadOperationHandle &&)=default
Class used to track the upload operation.
Definition: UploadService.h:92
virtual bool IsCompleted()=0
Returns true if the upload is finished.
virtual void Abort()=0
Abort the upload, if running.
Service, responsible for uploading audio files to audio.com.
std::function< void(uint64_t current, uint64_t total)> ProgressCallback
std::function< void(const UploadOperationCompleted &)> CompletedCallback
STL namespace.
This structure represents an upload error as returned by the server.
Definition: UploadService.h:30
std::vector< AdditionalError > additionalErrors
Definition: UploadService.h:38
std::pair< std::string, std::string > AdditionalError
Definition: UploadService.h:37
std::variant< std::monostate, UploadSuccessfulPayload, UploadFailedPayload > Payload
Definition: UploadService.h:84
This structure represents the payload associated with successful upload.
Definition: UploadService.h:43
std::string audioId
ID of the uploaded audio.
Definition: UploadService.h:45
std::string audioUrl
URL to the uploaded audio.
Definition: UploadService.h:51
std::string uploadToken
Upload token, if any.
Definition: UploadService.h:49
std::string audioSlug
"Slug" to be used for shareable URL construction
Definition: UploadService.h:47