Audacity 3.2.0
Classes | Public Member Functions | Private Types | Private Member Functions | Private Attributes | List of all members
audacity::cloud::audiocom::ShareAudioDialog Class Referencefinal

#include <ShareAudioDialog.h>

Inheritance diagram for audacity::cloud::audiocom::ShareAudioDialog:
[legend]
Collaboration diagram for audacity::cloud::audiocom::ShareAudioDialog:
[legend]

Classes

class  ExportProgressUpdater
 
struct  InitialStatePanel
 
struct  ProgressPanel
 
struct  Services
 

Public Member Functions

 ShareAudioDialog (AudacityProject &project, wxWindow *parent=nullptr)
 
 ~ShareAudioDialog () override
 
- Public Member Functions inherited from wxDialogWrapper
 wxDialogWrapper ()
 
 wxDialogWrapper (wxWindow *parent, wxWindowID id, const TranslatableString &title, const wxPoint &pos=wxDefaultPosition, const wxSize &size=wxDefaultSize, long style=wxDEFAULT_DIALOG_STYLE, const TranslatableString &name=XO("Dialog"))
 
bool Create (wxWindow *parent, wxWindowID id, const TranslatableString &title, const wxPoint &pos=wxDefaultPosition, const wxSize &size=wxDefaultSize, long style=wxDEFAULT_DIALOG_STYLE, const TranslatableString &name=XO("Dialog"))
 
void SetTitle (const TranslatableString &title)
 
void SetLabel (const TranslatableString &title)
 
void SetName (const TranslatableString &title)
 
void SetName ()
 
- Public Member Functions inherited from wxTabTraversalWrapper< wxDialog >
 wxTabTraversalWrapper (Args &&... args)
 
 wxTabTraversalWrapper (const wxTabTraversalWrapper &)=delete
 
 wxTabTraversalWrapper (wxTabTraversalWrapper &&)=delete
 
wxTabTraversalWrapperoperator= (const wxTabTraversalWrapper &)=delete
 
wxTabTraversalWrapperoperator= (wxTabTraversalWrapper &&)=delete
 

Private Types

using Clock = std::chrono::steady_clock
 

Private Member Functions

void Populate (ShuttleGui &s)
 
void OnCancel ()
 
void OnContinue ()
 
wxString ExportProject ()
 
void StartUploadProcess ()
 
void HandleUploadSucceeded (const UploadSuccessfulPayload &payload)
 
void HandleUploadFailed (const UploadFailedPayload &payload)
 
void HandleExportFailure ()
 
void ResetProgress ()
 
void UpdateProgress (uint64_t current, uint64_t total)
 

Private Attributes

AudacityProjectmProject
 
struct audacity::cloud::audiocom::ShareAudioDialog::InitialStatePanel mInitialStatePanel
 
struct audacity::cloud::audiocom::ShareAudioDialog::ProgressPanel mProgressPanel
 
wxButton * mContinueButton { nullptr }
 
wxButton * mCancelButton { nullptr }
 
std::unique_ptr< ServicesmServices
 
std::unique_ptr< ExportProgressUpdatermExportProgressUpdater
 
Clock::time_point mStageStartTime
 
Clock::time_point mLastUIUpdateTime
 
int mLastProgressValue { 0 }
 
wxString mFilePath
 
std::function< void()> mContinueAction
 
bool mIsAuthorised { false }
 
bool mInProgress { false }
 

Detailed Description

Definition at line 39 of file ShareAudioDialog.h.

Member Typedef Documentation

◆ Clock

using audacity::cloud::audiocom::ShareAudioDialog::Clock = std::chrono::steady_clock
private

Definition at line 113 of file ShareAudioDialog.h.

Constructor & Destructor Documentation

◆ ShareAudioDialog()

audacity::cloud::audiocom::ShareAudioDialog::ShareAudioDialog ( AudacityProject project,
wxWindow *  parent = nullptr 
)

Definition at line 168 of file ShareAudioDialog.cpp.

170 parent, wxID_ANY, XO("Share Audio"), wxDefaultPosition, { 480, 250 },
171 wxDEFAULT_DIALOG_STYLE)
173 , mInitialStatePanel(*this)
174 , mServices(std::make_unique<Services>())
175{
177
178 ShuttleGui s(this, eIsCreating);
179
180 s.StartVerticalLay();
181 {
182 Populate(s);
183 }
184 s.EndVerticalLay();
185
186 Layout();
187 Fit();
188 Centre();
189
190 const auto size = GetSize();
191
192 SetMinSize({ size.x, std::min(250, size.y) });
193 SetMaxSize({ size.x, -1 });
194
195 mContinueAction = [this]()
196 {
197 if (mInitialStatePanel.root->IsShown())
199 };
200
201 Bind(
202 wxEVT_CHAR_HOOK,
203 [this](auto& evt)
204 {
205 if (!IsEscapeKey(evt))
206 {
207 evt.Skip();
208 return;
209 }
210
211 OnCancel();
212 });
213}
int min(int a, int b)
XO("Cut/Copy/Paste")
@ eIsCreating
Definition: ShuttleGui.h:37
const auto project
Derived from ShuttleGuiBase, an Audacity specific class for shuttling data to and from GUI.
Definition: ShuttleGui.h:640
struct audacity::cloud::audiocom::ShareAudioDialog::InitialStatePanel mInitialStatePanel
AuthorizationHandler & GetAuthorizationHandler()

◆ ~ShareAudioDialog()

audacity::cloud::audiocom::ShareAudioDialog::~ShareAudioDialog ( )
override

Definition at line 215 of file ShareAudioDialog.cpp.

216{
218 // Clean up the temp file when the dialog is closed
219 if (!mFilePath.empty() && wxFileExists(mFilePath))
220 wxRemoveFile(mFilePath);
221}

References audacity::cloud::audiocom::GetAuthorizationHandler(), mFilePath, and audacity::cloud::audiocom::AuthorizationHandler::PopSuppressDialogs().

Here is the call graph for this function:

Member Function Documentation

◆ ExportProject()

wxString audacity::cloud::audiocom::ShareAudioDialog::ExportProject ( )
private

Definition at line 312 of file ShareAudioDialog.cpp.

313{
315
316 const double t0 = 0.0;
317 const double t1 = tracks.GetEndTime();
318
319 const int nChannels = CalculateChannels(tracks);
320
321 auto hasMimeType = [](const auto&& mimeTypes, const std::string& mimeType)
322 {
323 return std::find(mimeTypes.begin(), mimeTypes.end(), mimeType) != mimeTypes.end();
324 };
325
326 const auto& registry = ExportPluginRegistry::Get();
327
328 for(const auto& preferredMimeType : GetServiceConfig().GetPreferredAudioFormats())
329 {
330 auto config = GetServiceConfig().GetExportConfig(preferredMimeType);
332 auto pluginIt = std::find_if(registry.begin(), registry.end(), [&](auto t)
333 {
334 auto [plugin, formatIndex] = t;
335 parameters.clear();
336 return hasMimeType(plugin->GetMimeTypes(formatIndex), preferredMimeType) &&
337 plugin->ParseConfig(formatIndex, config, parameters);
338 });
339
340 if(pluginIt == registry.end())
341 continue;
342
343 const auto [plugin, formatIndex] = *pluginIt;
344
345 const auto formatInfo = plugin->GetFormatInfo(formatIndex);
346 const auto path = GenerateTempPath(formatInfo.extensions[0]);
347
348 if(path.empty())
349 continue;
350
351 mExportProgressUpdater = std::make_unique<ExportProgressUpdater>(*this);
352
353 auto builder = ExportTaskBuilder{}
354 .SetParameters(parameters)
355 .SetNumChannels(nChannels)
357 .SetPlugin(plugin)
358 .SetFileName(path)
359 .SetRange(t0, t1, false);
360
361 auto result = ExportResult::Error;
363 {
364 auto exportTask = builder.Build(mProject);
365
366 auto f = exportTask.get_future();
367 std::thread(std::move(exportTask), std::ref(*mExportProgressUpdater)).detach();
368
370 {
371 while(f.wait_for(std::chrono::milliseconds(50)) != std::future_status::ready)
372 mExportProgressUpdater->UpdateUI();
373 result = f.get();
374 });
375 });
376
377 mExportProgressUpdater->SetResult(result);
378 const auto success = result == ExportResult::Success;
379 if(!success && wxFileExists(path))
380 wxRemoveFile(path);
381 if(success)
382 return path;
383 }
384 return {};
385}
const auto tracks
static ExportPluginRegistry & Get()
std::vector< std::tuple< ExportOptionID, ExportValue > > Parameters
Definition: ExportPlugin.h:93
ExportTaskBuilder & SetPlugin(const ExportPlugin *plugin, int format=0) noexcept
Definition: Export.cpp:59
ExportTaskBuilder & SetParameters(ExportProcessor::Parameters parameters) noexcept
Definition: Export.cpp:47
ExportTaskBuilder & SetNumChannels(unsigned numChannels) noexcept
Definition: Export.cpp:53
ExportTaskBuilder & SetSampleRate(double sampleRate) noexcept
Definition: Export.cpp:72
ExportTaskBuilder & SetFileName(const wxFileName &filename)
Definition: Export.cpp:33
ExportTaskBuilder & SetRange(double t0, double t1, bool selectedOnly=false) noexcept
Definition: Export.cpp:39
static ProjectRate & Get(AudacityProject &project)
Definition: ProjectRate.cpp:28
static TrackList & Get(AudacityProject &project)
Definition: Track.cpp:314
rapidjson::Document GetExportConfig(const std::string &exporterName) const
Export configuration suitable for the mime type provided.
std::unique_ptr< ExportProgressUpdater > mExportProgressUpdater
void ExceptionWrappedCall(Callable callable)
double GetRate(const Track &track)
Definition: TimeTrack.cpp:182
const ServiceConfig & GetServiceConfig()
Returns the instance of the ServiceConfig.

References audacity::cloud::audiocom::anonymous_namespace{ShareAudioDialog.cpp}::CalculateChannels(), Error, ExportProgressUI::ExceptionWrappedCall(), audacity::cloud::audiocom::anonymous_namespace{ShareAudioDialog.cpp}::GenerateTempPath(), ExportPluginRegistry::Get(), ProjectRate::Get(), TrackList::Get(), audacity::cloud::audiocom::ServiceConfig::GetExportConfig(), anonymous_namespace{TimeTrack.cpp}::GetRate(), audacity::cloud::audiocom::GetServiceConfig(), mExportProgressUpdater, mProject, ExportTaskBuilder::SetFileName(), ExportTaskBuilder::SetNumChannels(), ExportTaskBuilder::SetParameters(), ExportTaskBuilder::SetPlugin(), ExportTaskBuilder::SetRange(), ExportTaskBuilder::SetSampleRate(), Success, and tracks.

Referenced by StartUploadProcess().

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

◆ HandleExportFailure()

void audacity::cloud::audiocom::ShareAudioDialog::HandleExportFailure ( )
private

Definition at line 501 of file ShareAudioDialog.cpp.

502{
503 EndModal(wxID_ABORT);
504
506 {}, XO("Export error"),
507 XO("We are unable to prepare this file for uploading."), {},
509}
void ShowErrorDialog(const WindowPlacement &placement, const TranslatableString &dlogTitle, const TranslatableString &message, const ManualPageID &helpPage, const ErrorDialogOptions &options={})
Show an error dialog with a link to the manual for further help.
Definition: BasicUI.h:264
Options for variations of error dialogs; the default is for modal dialogs.
Definition: BasicUI.h:52

References BasicUI::ModalError, BasicUI::ShowErrorDialog(), and XO().

Referenced by StartUploadProcess().

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

◆ HandleUploadFailed()

void audacity::cloud::audiocom::ShareAudioDialog::HandleUploadFailed ( const UploadFailedPayload payload)
private

Definition at line 472 of file ShareAudioDialog.cpp.

473{
474 EndModal(wxID_ABORT);
475
476 TranslatableString message;
477
478 if (!payload.message.empty())
479 {
480 auto details = payload.message;
481
482 for (auto& err : payload.additionalErrors)
483 details += " " + err.second;
484
485 message = XO("Error: %s").Format(details);
486 }
487 else
488 {
489 message = XO(
490 "We are unable to upload this file. Please try again and make sure to link to your audio.com account before uploading.");
491 }
492
494 {}, XO("Upload error"),
495 message,
496 {},
498
499}
Holds a msgid for the translation catalog; may also bind format arguments.

References audacity::cloud::audiocom::UploadFailedPayload::additionalErrors, audacity::cloud::audiocom::UploadFailedPayload::message, BasicUI::ModalError, BasicUI::ShowErrorDialog(), and XO().

Here is the call graph for this function:

◆ HandleUploadSucceeded()

void audacity::cloud::audiocom::ShareAudioDialog::HandleUploadSucceeded ( const UploadSuccessfulPayload payload)
private

Definition at line 465 of file ShareAudioDialog.cpp.

467{
468 EndModal(wxID_CLOSE);
469 OpenInDefaultBrowser(wxString { payload.audioUrl });
470}
bool OpenInDefaultBrowser(const wxString &url)
Open an URL in default browser.
Definition: BasicUI.cpp:246

References audacity::cloud::audiocom::UploadSuccessfulPayload::audioUrl, and BasicUI::OpenInDefaultBrowser().

Here is the call graph for this function:

◆ OnCancel()

void audacity::cloud::audiocom::ShareAudioDialog::OnCancel ( )
private

Definition at line 269 of file ShareAudioDialog.cpp.

270{
271 if (mInProgress)
272 {
273 AudacityMessageDialog dlgMessage(
274 this, XO("Are you sure you want to cancel?"), XO("Cancel upload to Audio.com"),
275 wxYES_NO | wxICON_QUESTION | wxNO_DEFAULT | wxSTAY_ON_TOP);
276
277 const auto result = dlgMessage.ShowModal();
278
279 if (result != wxID_YES)
280 return;
281
282 // If export has started, notify it that it should be canceled
284 mExportProgressUpdater->Cancel();
285 }
286
287
288 // If upload was started - ask it to discard the result.
289 // The result should be discarded even after the upload has finished
290 if (mServices->uploadPromise)
291 mServices->uploadPromise->DiscardResult();
292
293 EndModal(wxID_CANCEL);
294}
Wrap wxMessageDialog so that caption IS translatable.

References mExportProgressUpdater, mInProgress, mServices, and XO().

Referenced by Populate().

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

◆ OnContinue()

void audacity::cloud::audiocom::ShareAudioDialog::OnContinue ( )
private

Definition at line 296 of file ShareAudioDialog.cpp.

297{
299}

References mContinueAction.

Referenced by Populate().

Here is the caller graph for this function:

◆ Populate()

void audacity::cloud::audiocom::ShareAudioDialog::Populate ( ShuttleGui s)
private

Definition at line 223 of file ShareAudioDialog.cpp.

224{
227
228 s.StartHorizontalLay(wxEXPAND, 0);
229 {
231 {
232 s.SetBorder(2);
233 s.StartHorizontalLay(wxEXPAND, 0);
234 {
235 s.AddSpace(0, 0, 1);
236
237 mCancelButton = s.AddButton(XXO("&Cancel"));
238 mCancelButton->Bind(wxEVT_BUTTON, [this](auto) { OnCancel(); });
239
240 s.AddSpace(4, 0, 0);
241
242 mContinueButton = s.AddButton(XXO("C&ontinue"));
243 mContinueButton->Bind(wxEVT_BUTTON, [this](auto) { OnContinue(); });
244 }
246 }
248 }
250
251 const auto title = mProject.GetProjectName();
252
253 if (!title.empty())
254 {
256 mInitialStatePanel.trackTitle->SetInsertionPoint(title.length());
257 }
258
260
262 wxEVT_TEXT,
263 [this](auto&) {
264 mContinueButton->Enable(
266 });
267}
XXO("&Cut/Copy/Paste Toolbar")
static const auto title
const wxString & GetProjectName() const
Definition: Project.cpp:100
void SetBorder(int Border)
Definition: ShuttleGui.h:495
void EndInvisiblePanel()
wxPanel * StartInvisiblePanel(int border=0)
wxButton * AddButton(const TranslatableString &Text, int PositionFlags=wxALIGN_CENTRE, bool setDefault=false)
Definition: ShuttleGui.cpp:362
void EndHorizontalLay()
void StartHorizontalLay(int PositionFlags=wxALIGN_CENTRE, int iProp=1)
wxSizerItem * AddSpace(int width, int height, int prop=0)
struct audacity::cloud::audiocom::ShareAudioDialog::ProgressPanel mProgressPanel

References ShuttleGuiBase::AddButton(), ShuttleGui::AddSpace(), ShuttleGuiBase::EndHorizontalLay(), ShuttleGuiBase::EndInvisiblePanel(), AudacityProject::GetProjectName(), audacity::cloud::audiocom::ShareAudioDialog::InitialStatePanel::HasValidTitle(), mCancelButton, mContinueButton, mInitialStatePanel, mIsAuthorised, mProgressPanel, mProject, OnCancel(), OnContinue(), audacity::cloud::audiocom::ShareAudioDialog::InitialStatePanel::PopulateInitialStatePanel(), audacity::cloud::audiocom::ShareAudioDialog::ProgressPanel::PopulateProgressPanel(), ShuttleGuiBase::SetBorder(), ShuttleGuiBase::StartHorizontalLay(), ShuttleGuiBase::StartInvisiblePanel(), title, audacity::cloud::audiocom::ShareAudioDialog::InitialStatePanel::trackTitle, and XXO().

Here is the call graph for this function:

◆ ResetProgress()

void audacity::cloud::audiocom::ShareAudioDialog::ResetProgress ( )
private

Definition at line 511 of file ShareAudioDialog.cpp.

512{
513 mStageStartTime = Clock::now();
515
516 mProgressPanel.elapsedTime->SetLabel(" 00:00:00");
517 mProgressPanel.remainingTime->SetLabel(" 00:00:00");
518 mProgressPanel.progress->SetValue(0);
519
521
523
525}
void Yield()
Dispatch waiting events, including actions enqueued by CallAfter.
Definition: BasicUI.cpp:225

References BasicUI::Yield().

Referenced by StartUploadProcess().

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

◆ StartUploadProcess()

void audacity::cloud::audiocom::ShareAudioDialog::StartUploadProcess ( )
private

Definition at line 387 of file ShareAudioDialog.cpp.

388{
389 mInProgress = true;
390
391 mInitialStatePanel.root->Hide();
392 mProgressPanel.root->Show();
393
394 mProgressPanel.info->Hide();
395
396 mContinueButton->Hide();
397
398 Layout();
399 Fit();
400
402
404
405 if(mFilePath.empty())
406 {
409 {
411 }
412
413 return;
414 }
415
416 mProgressPanel.title->SetLabel(XO("Uploading audio...").Translation());
418
419 mServices->uploadPromise = mServices->uploadService.Upload(
420 mFilePath,
422 false,
423 [this](const auto& result)
424 {
425 CallAfter(
426 [this, result]()
427 {
428 mInProgress = false;
429
430 if (result.result == UploadOperationCompleted::Result::Success)
431 {
432 // Success indicates that UploadSuccessfulPayload is in the payload
433 assert(std::holds_alternative<UploadSuccessfulPayload>(result.payload));
434
435 if (
436 auto payload =
437 std::get_if<UploadSuccessfulPayload>(&result.payload))
438 HandleUploadSucceeded(*payload);
439 else
440 HandleUploadSucceeded({});
441
442 }
443 else if (
444 result.result != UploadOperationCompleted::Result::Aborted)
445 {
446 if (
447 auto payload =
448 std::get_if<UploadFailedPayload>(&result.payload))
449 HandleUploadFailed(*payload);
450 else
451 HandleUploadFailed({});
452 }
453 });
454 },
455 [this](auto current, auto total)
456 {
457 CallAfter(
458 [this, current, total]()
459 {
460 UpdateProgress(current, total);
461 });
462 });
463}
void UpdateProgress(uint64_t current, uint64_t total)
void CallAfter(Action action)
Schedule an action to be done later, and in the main thread.
Definition: BasicUI.cpp:214

References Cancelled, ExportProject(), audacity::cloud::audiocom::ShareAudioDialog::InitialStatePanel::GetTrackTitle(), HandleExportFailure(), audacity::cloud::audiocom::ShareAudioDialog::ProgressPanel::info, mContinueButton, mExportProgressUpdater, mFilePath, mInitialStatePanel, mInProgress, mProgressPanel, mServices, ResetProgress(), audacity::cloud::audiocom::ShareAudioDialog::InitialStatePanel::root, audacity::cloud::audiocom::ShareAudioDialog::ProgressPanel::root, audacity::cloud::audiocom::ShareAudioDialog::ProgressPanel::title, and XO().

Here is the call graph for this function:

◆ UpdateProgress()

void audacity::cloud::audiocom::ShareAudioDialog::UpdateProgress ( uint64_t  current,
uint64_t  total 
)
private

Definition at line 539 of file ShareAudioDialog.cpp.

540{
541 using namespace std::chrono;
542
543 const auto now = Clock::now();
544
545 if (current == 0)
546 return;
547
548 if (current > total)
549 current = total;
550
551 if (mLastProgressValue != current)
552 {
553 constexpr int scale = 10000;
554
555 mLastProgressValue = static_cast<int>(current);
556
557 mProgressPanel.progress->SetRange(scale);
558 mProgressPanel.progress->SetValue((current * scale) / total);
559
560 if (current == total && mServices->uploadPromise)
561 {
563 mProgressPanel.title->SetLabel(XO("Finalizing upload...").Translation());
564 }
565 }
566
567 const auto elapsedSinceUIUpdate = now - mLastUIUpdateTime;
568
569 constexpr auto uiUpdateTimeout = 500ms;
570
571 if (elapsedSinceUIUpdate < uiUpdateTimeout && current < total)
572 return;
573
574 mLastUIUpdateTime = now;
575
576 const auto elapsed = duration_cast<milliseconds>(now - mStageStartTime);
577
579
580 const auto estimate = elapsed * total / current;
581 const auto remains = estimate - elapsed;
582
585 std::chrono::duration_cast<std::chrono::milliseconds>(remains));
586}
void SetTimeLabel(wxStaticText *label, std::chrono::milliseconds time)

References audacity::cloud::audiocom::anonymous_namespace{ShareAudioDialog.cpp}::SetTimeLabel(), and XO().

Referenced by audacity::cloud::audiocom::ShareAudioDialog::ExportProgressUpdater::UpdateUI().

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

Member Data Documentation

◆ mCancelButton

wxButton* audacity::cloud::audiocom::ShareAudioDialog::mCancelButton { nullptr }
private

Definition at line 105 of file ShareAudioDialog.h.

Referenced by Populate().

◆ mContinueAction

std::function<void()> audacity::cloud::audiocom::ShareAudioDialog::mContinueAction
private

Definition at line 121 of file ShareAudioDialog.h.

Referenced by OnContinue().

◆ mContinueButton

wxButton* audacity::cloud::audiocom::ShareAudioDialog::mContinueButton { nullptr }
private

Definition at line 104 of file ShareAudioDialog.h.

Referenced by Populate(), and StartUploadProcess().

◆ mExportProgressUpdater

std::unique_ptr<ExportProgressUpdater> audacity::cloud::audiocom::ShareAudioDialog::mExportProgressUpdater
private

Definition at line 111 of file ShareAudioDialog.h.

Referenced by ExportProject(), OnCancel(), and StartUploadProcess().

◆ mFilePath

wxString audacity::cloud::audiocom::ShareAudioDialog::mFilePath
private

Definition at line 119 of file ShareAudioDialog.h.

Referenced by StartUploadProcess(), and ~ShareAudioDialog().

◆ mInitialStatePanel

struct audacity::cloud::audiocom::ShareAudioDialog::InitialStatePanel audacity::cloud::audiocom::ShareAudioDialog::mInitialStatePanel
private

Referenced by Populate(), and StartUploadProcess().

◆ mInProgress

bool audacity::cloud::audiocom::ShareAudioDialog::mInProgress { false }
private

Definition at line 124 of file ShareAudioDialog.h.

Referenced by OnCancel(), and StartUploadProcess().

◆ mIsAuthorised

bool audacity::cloud::audiocom::ShareAudioDialog::mIsAuthorised { false }
private

Definition at line 123 of file ShareAudioDialog.h.

Referenced by Populate().

◆ mLastProgressValue

int audacity::cloud::audiocom::ShareAudioDialog::mLastProgressValue { 0 }
private

Definition at line 117 of file ShareAudioDialog.h.

◆ mLastUIUpdateTime

Clock::time_point audacity::cloud::audiocom::ShareAudioDialog::mLastUIUpdateTime
private

Definition at line 116 of file ShareAudioDialog.h.

◆ mProgressPanel

struct audacity::cloud::audiocom::ShareAudioDialog::ProgressPanel audacity::cloud::audiocom::ShareAudioDialog::mProgressPanel
private

Referenced by Populate(), and StartUploadProcess().

◆ mProject

AudacityProject& audacity::cloud::audiocom::ShareAudioDialog::mProject
private

Definition at line 62 of file ShareAudioDialog.h.

Referenced by ExportProject(), and Populate().

◆ mServices

std::unique_ptr<Services> audacity::cloud::audiocom::ShareAudioDialog::mServices
private

Definition at line 108 of file ShareAudioDialog.h.

Referenced by OnCancel(), and StartUploadProcess().

◆ mStageStartTime

Clock::time_point audacity::cloud::audiocom::ShareAudioDialog::mStageStartTime
private

Definition at line 115 of file ShareAudioDialog.h.


The documentation for this class was generated from the following files: