Audacity 3.2.0
Namespaces | Classes | Enumerations | Functions | Variables
audacity::cloud::audiocom Namespace Reference

Namespaces

namespace  anonymous_namespace{AuthorizationHandler.cpp}
 
namespace  anonymous_namespace{CloudSyncService.cpp}
 
namespace  anonymous_namespace{NetworkUtils.cpp}
 
namespace  anonymous_namespace{OAuthService.cpp}
 
namespace  anonymous_namespace{ServiceConfig.cpp}
 
namespace  anonymous_namespace{ShareAudioDialog.cpp}
 
namespace  anonymous_namespace{UploadService.cpp}
 
namespace  anonymous_namespace{UserPanel.cpp}
 
namespace  anonymous_namespace{UserService.cpp}
 
namespace  sync
 

Classes

class  AuthorizationHandler
 
struct  AuthResult
 
struct  AuthStateChangedMessage
 Message that is sent when authorization state changes. More...
 
class  CloudSyncService
 
class  LinkFailedDialog
 
class  LinkSucceededDialog
 
class  LinkWithTokenDialog
 
class  OAuthService
 Service responsible for OAuth authentication against the audio.com service. More...
 
struct  ResponseResult
 
class  ServiceConfig
 Configuration for the audio.com. More...
 
class  ShareAudioDialog
 
struct  TransferStats
 
struct  UploadFailedPayload
 This structure represents an upload error as returned by the server. More...
 
class  UploadOperation
 Class used to track the upload operation. More...
 
struct  UploadOperationCompleted
 
class  UploadOperationHandle
 A unique_ptr like class that holds a pointer to UploadOperation. More...
 
class  UploadService
 Service, responsible for uploading audio files to audio.com. More...
 
struct  UploadSuccessfulPayload
 This structure represents the payload associated with successful upload. More...
 
struct  UserDataChanged
 
class  UserImage
 
class  UserPanel
 
struct  UserPanelStateChangedMessage
 
class  UserService
 Service for providing information about the user profile. More...
 

Enumerations

enum class  SyncResultCode {
  Success , Cancelled , Expired , Conflict ,
  ConnectionFailed , PaymentRequired , TooLarge , Unauthorized ,
  Forbidden , NotFound , UnexpectedResponse , InternalClientError ,
  InternalServerError , SyncImpossible , UnknownError
}
 

Functions

ResponseResult GetResponseResult (IResponse &response, bool readBody)
 
void SetCommonHeaders (Request &request)
 
bool IsUploadRecoverable (SyncResultCode code)
 
OAuthServiceGetOAuthService ()
 Returns the instance of the OAuthService. More...
 
const ServiceConfigGetServiceConfig ()
 Returns the instance of the ServiceConfig. More...
 
wxString GetUploadTempPath ()
 
UserServiceGetUserService ()
 
AuthorizationHandlerGetAuthorizationHandler ()
 
AuthResult PerformBlockingAuth (AudacityProject *project, AudiocomTrace trace, const TranslatableString &alternativeActionLabel)
 

Variables

StringSetting CloudProjectsSavePath
 
IntSetting DaysToKeepFiles
 

Detailed Description


Audacity: A Digital Audio Editor

CloudLibrarySettings.cpp

Dmitry Vedenko


Audacity: A Digital Audio Editor

CloudLibrarySettings.h

Dmitry Vedenko


Audacity: A Digital Audio Editor

CloudSyncService.cpp

Dmitry Vedenko


Audacity: A Digital Audio Editor

NetworkUtils.cpp

Dmitry Vedenko


Audacity: A Digital Audio Editor

OAuthService.cpp

Dmitry Vedenko


Audacity: A Digital Audio Editor

ServiceConfig.cpp

Dmitry Vedenko


Audacity: A Digital Audio Editor

DataUploader.h

Dmitry Vedenko


Audacity: A Digital Audio Editor

UploadService.cpp

Dmitry Vedenko


Audacity: A Digital Audio Editor

UserService.cpp

Dmitry Vedenko


Audacity: A Digital Audio Editor

UserService.h

Dmitry Vedenko


Audacity: A Digital Audio Editor

AuthorizationHandler.cpp

Dmitry Vedenko


Audacity: A Digital Audio Editor

LinkFailedDialog.cpp

Dmitry Vedenko


Audacity: A Digital Audio Editor

LinkSucceededDialog.cpp

Dmitry Vedenko


Audacity: A Digital Audio Editor

LinkSucceededDialog.h

Dmitry Vedenko


Audacity: A Digital Audio Editor

LinkAccountDialog.cpp

Dmitry Vedenko


Audacity: A Digital Audio Editor

ShareAudioDialog.cpp

Dmitry Vedenko


Audacity: A Digital Audio Editor

UserImage.cpp

Dmitry Vedenko


Audacity: A Digital Audio Editor

UserImage.h

Dmitry Vedenko


Audacity: A Digital Audio Editor

UserPanel.cpp

Dmitry Vedenko

Enumeration Type Documentation

◆ SyncResultCode

Enumerator
Success 
Cancelled 
Expired 
Conflict 
ConnectionFailed 
PaymentRequired 
TooLarge 
Unauthorized 
Forbidden 
NotFound 
UnexpectedResponse 
InternalClientError 
InternalServerError 
SyncImpossible 
UnknownError 

Definition at line 42 of file NetworkUtils.h.

Function Documentation

◆ GetAuthorizationHandler()

AuthorizationHandler & audacity::cloud::audiocom::GetAuthorizationHandler ( )

◆ GetOAuthService()

CLOUD_AUDIOCOM_API OAuthService & audacity::cloud::audiocom::GetOAuthService ( )

Returns the instance of the OAuthService.

Definition at line 382 of file OAuthService.cpp.

383{
384 static OAuthService service;
385 return service;
386}
Service responsible for OAuth authentication against the audio.com service.
Definition: OAuthService.h:43

Referenced by audacity::cloud::audiocom::CloudSyncService::GetHeadSnapshotID(), audacity::cloud::audiocom::CloudSyncService::GetProjects(), audacity::cloud::audiocom::sync::ProjectCloudUIExtension::OnCloudStatusChanged(), audacity::cloud::audiocom::LinkWithTokenDialog::OnContinue(), audacity::cloud::audiocom::UserPanel::OnLinkButtonPressed(), anonymous_namespace{CloudProjectFileIOExtensions.cpp}::IOExtension::OnSave(), audacity::cloud::audiocom::anonymous_namespace{OAuthService.cpp}::OAuthServiceSettingsResetHandler::OnSettingResetEnd(), audacity::cloud::audiocom::CloudSyncService::OpenFromCloud(), PerformBlockingAuth(), anonymous_namespace{CloudProjectFileIOExtensions.cpp}::IOExtension::PerformCloudSave(), audacity::cloud::audiocom::ShareAudioDialog::InitialStatePanel::PopulateInitialStatePanel(), anonymous_namespace{AudioComPrefsPanel.cpp}::AudioComPrefsPanel::PopulateOrExchange(), SetCommonHeaders(), audacity::cloud::audiocom::CloudSyncService::SyncProject(), audacity::cloud::audiocom::UserService::UpdateUserData(), audacity::cloud::audiocom::UserPanel::UpdateUserData(), and audacity::cloud::audiocom::anonymous_namespace{AuthorizationHandler.cpp}::WaitForAuth().

Here is the caller graph for this function:

◆ GetResponseResult()

ResponseResult audacity::cloud::audiocom::GetResponseResult ( IResponse response,
bool  readBody 
)

Definition at line 86 of file NetworkUtils.cpp.

87{
88 const auto resultCode = GuessResultCode(response);
89
90 if (resultCode == SyncResultCode::Success)
91 return { resultCode,
92 readBody ? response.readAll<std::string>() : std::string {} };
93
94 if (response.getError() != NetworkError::HTTPError)
95 return { resultCode, response.getErrorString() };
96
97 return { resultCode,
98 std::string("HTTP ") + std::to_string(response.getHTTPCode()) +
99 std::string("\n") + response.readAll<std::string>() };
100}
virtual std::string getErrorString() const =0
virtual unsigned getHTTPCode() const noexcept=0
virtual NetworkError getError() const noexcept=0
SyncResultCode GuessResultCode(IResponse &response) noexcept

References audacity::network_manager::IResponse::getError(), audacity::network_manager::IResponse::getErrorString(), audacity::network_manager::IResponse::getHTTPCode(), audacity::cloud::audiocom::anonymous_namespace{NetworkUtils.cpp}::GuessResultCode(), audacity::network_manager::IResponse::readAll(), and Success.

Referenced by audacity::cloud::audiocom::sync::DataUploader::UploadOperation::ConfirmUpload(), audacity::cloud::audiocom::sync::RemoteProjectSnapshot::DownloadBlob(), audacity::cloud::audiocom::sync::DataUploader::UploadOperation::FailUpload(), audacity::cloud::audiocom::CloudSyncService::GetProjects(), audacity::cloud::audiocom::anonymous_namespace{CloudSyncService.cpp}::PerformProjectGetRequest(), and audacity::cloud::audiocom::sync::DataUploader::UploadOperation::PerformUpload().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetServiceConfig()

CLOUD_AUDIOCOM_API const ServiceConfig & audacity::cloud::audiocom::GetServiceConfig ( )

Returns the instance of the ServiceConfig.

Definition at line 373 of file ServiceConfig.cpp.

374{
375 static ServiceConfig config;
376 return config;
377}
Configuration for the audio.com.
Definition: ServiceConfig.h:25

Referenced by audacity::cloud::audiocom::sync::MixdownUploader::ExportProject(), audacity::cloud::audiocom::ShareAudioDialog::ExportProject(), audacity::cloud::audiocom::sync::ProjectCloudExtension::GetCloudProjectPage(), audacity::cloud::audiocom::CloudSyncService::GetHeadSnapshotID(), audacity::cloud::audiocom::CloudSyncService::GetProjects(), audacity::cloud::audiocom::sync::ProjectsListDialog::ProjectsTableData::GetSelectedProjectUrl(), audacity::cloud::audiocom::anonymous_namespace{UploadService.cpp}::GetUploadRequestPayload(), audacity::cloud::audiocom::OAuthService::HandleLinkURI(), audacity::cloud::audiocom::sync::ProjectCloudUIExtension::OnCloudStatusChanged(), anonymous_namespace{CloudProjectFileIOExtensions.cpp}::IOExtension::OnSave(), audacity::cloud::audiocom::CloudSyncService::OpenFromCloud(), anonymous_namespace{CloudProjectFileIOExtensions.cpp}::IOExtension::PerformCloudSave(), audacity::cloud::audiocom::ShareAudioDialog::InitialStatePanel::PopulateInitialStatePanel(), anonymous_namespace{AudioComPrefsPanel.cpp}::AudioComPrefsPanel::PopulateOrExchange(), audacity::cloud::audiocom::sync::anonymous_namespace{ResumedSnaphotUploadOperation.cpp}::ResumedSnaphotUploadOperation::RefreshUrls(), audacity::cloud::audiocom::CloudSyncService::ReportUploadStats(), SetCommonHeaders(), audacity::cloud::audiocom::CloudSyncService::SyncProject(), audacity::cloud::audiocom::UserService::UpdateUserData(), audacity::cloud::audiocom::sync::anonymous_namespace{ResumedSnaphotUploadOperation.cpp}::ResumedSnaphotUploadOperation::UploadBlocks(), audacity::cloud::audiocom::sync::UploadMixdown(), audacity::cloud::audiocom::sync::anonymous_namespace{ResumedSnaphotUploadOperation.cpp}::ResumedSnaphotUploadOperation::UploadSnapshot(), audacity::cloud::audiocom::OAuthService::ValidateAuth(), and audacity::cloud::audiocom::anonymous_namespace{OAuthService.cpp}::WriteCommonFields().

Here is the caller graph for this function:

◆ GetUploadTempPath()

CLOUD_AUDIOCOM_API wxString audacity::cloud::audiocom::GetUploadTempPath ( )

Definition at line 628 of file UploadService.cpp.

629{
630 const auto tempPath = TempDirectory::DefaultTempDir();
631
632 if (!wxDirExists(tempPath))
633 {
634 // Temp directory was not created yet.
635 // Is it a first run of Audacity?
636 // In any case, let's wait for some better time
637 return {};
638 }
639
641 tempPath, XO("Cannot proceed to upload.")))
642 return {};
643
644 return tempPath + "/cloud/";
645}
XO("Cut/Copy/Paste")
FILES_API bool WritableLocationCheck(const FilePath &path, const TranslatableString &message)
Check location on writable access and return true if checked successfully.
FILES_API const FilePath & DefaultTempDir()

References TempDirectory::DefaultTempDir(), FileNames::WritableLocationCheck(), and XO().

Referenced by audacity::cloud::audiocom::sync::anonymous_namespace{MixdownUploader.cpp}::GenerateTempPath(), and audacity::cloud::audiocom::anonymous_namespace{ShareAudioDialog.cpp}::GenerateTempPath().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetUserService()

CLOUD_AUDIOCOM_API UserService & audacity::cloud::audiocom::GetUserService ( )

Definition at line 139 of file UserService.cpp.

140{
141 static UserService userService;
142 return userService;
143}
Service for providing information about the user profile.
Definition: UserService.h:28

Referenced by audacity::cloud::audiocom::sync::ProjectCloudUIExtension::OnCloudStatusChanged(), anonymous_namespace{CloudProjectFileIOExtensions.cpp}::IOExtension::OnSave(), audacity::cloud::audiocom::ShareAudioDialog::InitialStatePanel::PopulateInitialStatePanel(), anonymous_namespace{AudioComPrefsPanel.cpp}::AudioComPrefsPanel::PopulateOrExchange(), and audacity::cloud::audiocom::UserPanel::UpdateUserData().

Here is the caller graph for this function:

◆ IsUploadRecoverable()

bool audacity::cloud::audiocom::IsUploadRecoverable ( SyncResultCode  code)

Definition at line 117 of file NetworkUtils.cpp.

118{
119 return code == SyncResultCode::Cancelled ||
120 code == SyncResultCode::ConnectionFailed ||
124 code == SyncResultCode::InternalClientError ||
126}

References Cancelled, ConnectionFailed, Forbidden, InternalClientError, InternalServerError, PaymentRequired, and Unauthorized.

Referenced by audacity::cloud::audiocom::sync::LocalProjectSnapshot::OnSnapshotCreated(), and audacity::cloud::audiocom::sync::anonymous_namespace{ResumedSnaphotUploadOperation.cpp}::ResumedSnaphotUploadOperation::UploadSnapshot().

Here is the caller graph for this function:

◆ PerformBlockingAuth()

AuthResult audacity::cloud::audiocom::PerformBlockingAuth ( AudacityProject project,
AudiocomTrace  trace,
const TranslatableString alternativeActionLabel 
)

Definition at line 78 of file AuthorizationHandler.cpp.

81{
82 using namespace sync;
83 auto& oauthService = GetOAuthService();
84
85 // Assume, that the token is valid
86 // Services will need to handle 403 errors and refresh the token
87 if (GetOAuthService().HasAccessToken())
88 return { AuthResult::Status::Authorised, {} };
89
91 auto popSuppress =
93
94 if (oauthService.HasRefreshToken())
95 {
96 std::promise<std::optional<AuthResult>> promise;
97
98 oauthService.ValidateAuth(
99 [&promise](auto...) { promise.set_value({}); }, trace, true);
100
101 if (auto waitResult = WaitForAuth(promise.get_future(), project))
102 return *waitResult;
103 }
104
105 auto linkResult =
106 sync::LinkAccountDialog { project, alternativeActionLabel }.ShowDialog();
107
108 if (linkResult == LinkAccountDialog::CancelButtonIdentifier())
109 return { AuthResult::Status::Cancelled, {} };
110
111 if (linkResult == LinkAccountDialog::AlternativeButtonIdentifier())
112 return { AuthResult::Status::UseAlternative, {} };
113
114 std::promise<std::optional<AuthResult>> promise;
115
116 auto authSubscription = oauthService.Subscribe(
117 [&promise](auto& result)
118 {
119 promise.set_value(
120 result.authorised ?
121 AuthResult { AuthResult::Status::Authorised, {} } :
122 AuthResult { AuthResult::Status::Failure,
123 std::string(result.errorMessage) });
124 });
125
127 { audacity::ToWXString(GetServiceConfig().GetOAuthLoginPage(trace)) });
128
129 auto waitResult = WaitForAuth(promise.get_future(), project);
130
131 if (waitResult)
132 return *waitResult;
133
134 return AuthResult { AuthResult::Status::Failure, {} };
135}
const auto project
bool OpenInDefaultBrowser(const wxString &url)
Open an URL in default browser.
Definition: BasicUI.cpp:246
std::optional< AuthResult > WaitForAuth(std::future< std::optional< AuthResult > > future, const AudacityProject *project)
AuthorizationHandler & GetAuthorizationHandler()
OAuthService & GetOAuthService()
Returns the instance of the OAuthService.
const ServiceConfig & GetServiceConfig()
Returns the instance of the ServiceConfig.
wxString ToWXString(const std::string &str)

References audacity::cloud::audiocom::AuthResult::Authorised, audacity::cloud::audiocom::AuthResult::Cancelled, audacity::cloud::audiocom::AuthResult::Failure, GetAuthorizationHandler(), GetOAuthService(), audacity::cloud::audiocom::AuthorizationHandler::PopSuppressDialogs(), project, audacity::cloud::audiocom::AuthorizationHandler::PushSuppressDialogs(), audacity::cloud::audiocom::AuthResult::UseAlternative, and audacity::cloud::audiocom::anonymous_namespace{AuthorizationHandler.cpp}::WaitForAuth().

Referenced by anonymous_namespace{CloudProjectFileIOExtensions.cpp}::IOExtension::OnLoad(), audacity::cloud::audiocom::sync::OpenProjectFromCloud(), audacity::cloud::audiocom::sync::ProjectsListDialog::ProjectsTableData::Refresh(), anonymous_namespace{CloudProjectFileIOExtensions.cpp}::IOExtension::SaveCloudProject(), and audacity::cloud::audiocom::sync::SyncCloudProject().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ SetCommonHeaders()

void audacity::cloud::audiocom::SetCommonHeaders ( Request request)

Definition at line 102 of file NetworkUtils.cpp.

103{
104 const auto language = GetServiceConfig().GetAcceptLanguageValue();
105
106 if (!language.empty())
107 request.setHeader(
109
110 auto& oauthService = GetOAuthService();
111
112 if (oauthService.HasAccessToken())
113 request.setHeader(
114 common_headers::Authorization, oauthService.GetAccessToken());
115}
std::string GetAcceptLanguageValue() const
Returns the preferred language.
Request & setHeader(const std::string &name, std::string value)
Definition: Request.cpp:46

References audacity::network_manager::common_headers::AcceptLanguage, audacity::network_manager::common_headers::Authorization, audacity::cloud::audiocom::ServiceConfig::GetAcceptLanguageValue(), GetOAuthService(), GetServiceConfig(), and audacity::network_manager::Request::setHeader().

Referenced by audacity::cloud::audiocom::sync::LocalProjectSnapshot::DeleteSnapshot(), audacity::cloud::audiocom::CloudSyncService::GetProjects(), audacity::cloud::audiocom::sync::LocalProjectSnapshot::MarkSnapshotSynced(), audacity::cloud::audiocom::sync::anonymous_namespace{ResumedSnaphotUploadOperation.cpp}::ResumedSnaphotUploadOperation::MarkSnapshotSynced(), audacity::cloud::audiocom::anonymous_namespace{CloudSyncService.cpp}::PerformProjectGetRequest(), audacity::cloud::audiocom::sync::anonymous_namespace{ResumedSnaphotUploadOperation.cpp}::ResumedSnaphotUploadOperation::RefreshUrls(), and audacity::cloud::audiocom::CloudSyncService::ReportUploadStats().

Here is the call graph for this function:
Here is the caller graph for this function:

Variable Documentation

◆ CloudProjectsSavePath

CLOUD_AUDIOCOM_API StringSetting audacity::cloud::audiocom::CloudProjectsSavePath

◆ DaysToKeepFiles

CLOUD_AUDIOCOM_API IntSetting audacity::cloud::audiocom::DaysToKeepFiles