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
21namespace cloud::audiocom
22{
23class ServiceConfig;
24class OAuthService;
25
27struct CLOUD_AUDIOCOM_API UploadFailedPayload final
28{
29 int32_t code {};
30 int32_t status {};
31
32 std::string name;
33 std::string message;
34
35 using AdditionalError = std::pair<std::string, std::string>;
36 std::vector<AdditionalError> additionalErrors;
37};
38
40struct CLOUD_AUDIOCOM_API UploadSuccessfulPayload final
41{
43 std::string audioId;
45 std::string audioSlug;
46};
47
50struct CLOUD_AUDIOCOM_API UploadOperationCompleted final
51{
53 enum class Result
54 {
56 Success,
58 Aborted,
60 FileNotFound,
62 Unauthorized,
64 InvalidData,
66 UnexpectedResponse,
68 UploadFailed
69 };
70
73
74 using Payload = std::variant<
75 std::monostate,
78 >;
79
82};
83
85class CLOUD_AUDIOCOM_API UploadOperation
86{
87public:
89
91 virtual bool IsCompleted() = 0;
93 virtual void Abort() = 0;
96 virtual void DiscardResult() = 0;
97};
98
100class CLOUD_AUDIOCOM_API UploadOperationHandle final
101{
102public:
104 explicit UploadOperationHandle(std::shared_ptr<UploadOperation> operation);
105
110
112
113 explicit operator bool() const noexcept;
114
115 UploadOperation* operator->() const noexcept;
116
117private:
118 std::shared_ptr<UploadOperation> mOperation {};
119};
120
122class CLOUD_AUDIOCOM_API UploadService final
123{
124public:
125 UploadService(const ServiceConfig& config, OAuthService& service);
126
128 std::function<void(const UploadOperationCompleted&)>;
129
130 using ProgressCallback = std::function<void(uint64_t current, uint64_t total)>;
131
133 /*
134 Both callbacks are invoked from the network thread.
135
136 If projectName is empty, the name for the uploaded file is deduced from the fileName.
137 */
139 const wxString& fileName, const wxString& projectName, bool isPublic,
140 CompletedCallback completedCallback, ProgressCallback progressCallback);
141
142private:
145};
146
147CLOUD_AUDIOCOM_API wxString GetUploadTempPath();
148} // namespace cloud::audiocom
Service responsible for OAuth authentication against the audio.com service.
Definition: OAuthService.h:38
Configuration for the audio.com.
Definition: ServiceConfig.h:24
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:86
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
const ServiceConfig & mServiceConfig
std::function< void(const UploadOperationCompleted &)> CompletedCallback
wxString GetUploadTempPath()
STL namespace.
This structure represents an upload error as returned by the server.
Definition: UploadService.h:28
std::vector< AdditionalError > additionalErrors
Definition: UploadService.h:36
std::pair< std::string, std::string > AdditionalError
Definition: UploadService.h:35
std::variant< std::monostate, UploadSuccessfulPayload, UploadFailedPayload > Payload
Definition: UploadService.h:78
This structure represents the payload associated with successful upload.
Definition: UploadService.h:41
std::string audioSlug
"Slug" to be used for shareable URL construction
Definition: UploadService.h:45
std::string audioId
ID of the uploaded audio.
Definition: UploadService.h:43