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 167 of file ShareAudioDialog.cpp.

169 parent, wxID_ANY, XO("Share Audio"), wxDefaultPosition, { 480, 250 },
170 wxDEFAULT_DIALOG_STYLE)
172 , mInitialStatePanel(*this)
173 , mServices(std::make_unique<Services>())
174{
176
177 ShuttleGui s(this, eIsCreating);
178
179 s.StartVerticalLay();
180 {
181 Populate(s);
182 }
183 s.EndVerticalLay();
184
185 Layout();
186 Fit();
187 Centre();
188
189 const auto size = GetSize();
190
191 SetMinSize({ size.x, std::min(250, size.y) });
192 SetMaxSize({ size.x, -1 });
193
194 mContinueAction = [this]()
195 {
196 if (mInitialStatePanel.root->IsShown())
198 };
199
200 Bind(
201 wxEVT_CHAR_HOOK,
202 [this](auto& evt)
203 {
204 if (!IsEscapeKey(evt))
205 {
206 evt.Skip();
207 return;
208 }
209
210 OnCancel();
211 });
212}
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 214 of file ShareAudioDialog.cpp.

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

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 311 of file ShareAudioDialog.cpp.

312{
314
315 const double t0 = 0.0;
316 const double t1 = tracks.GetEndTime();
317
318 const int nChannels = CalculateChannels(tracks);
319
320 auto hasMimeType = [](const auto&& mimeTypes, const std::string& mimeType)
321 {
322 return std::find(mimeTypes.begin(), mimeTypes.end(), mimeType) != mimeTypes.end();
323 };
324
325 const auto& registry = ExportPluginRegistry::Get();
326
327 for(const auto& preferredMimeType : GetServiceConfig().GetPreferredAudioFormats())
328 {
329 auto config = GetServiceConfig().GetExportConfig(preferredMimeType);
331 auto pluginIt = std::find_if(registry.begin(), registry.end(), [&](auto t)
332 {
333 auto [plugin, formatIndex] = t;
334 parameters.clear();
335 return hasMimeType(plugin->GetMimeTypes(formatIndex), preferredMimeType) &&
336 plugin->ParseConfig(formatIndex, config, parameters);
337 });
338
339 if(pluginIt == registry.end())
340 continue;
341
342 const auto [plugin, formatIndex] = *pluginIt;
343
344 const auto formatInfo = plugin->GetFormatInfo(formatIndex);
345 const auto path = GenerateTempPath(formatInfo.extensions[0]);
346
347 if(path.empty())
348 continue;
349
350 mExportProgressUpdater = std::make_unique<ExportProgressUpdater>(*this);
351
352 auto builder = ExportTaskBuilder{}
353 .SetParameters(parameters)
354 .SetNumChannels(nChannels)
356 .SetPlugin(plugin)
357 .SetFileName(path)
358 .SetRange(t0, t1, false);
359
360 auto result = ExportResult::Error;
362 {
363 auto exportTask = builder.Build(mProject);
364
365 auto f = exportTask.get_future();
366 std::thread(std::move(exportTask), std::ref(*mExportProgressUpdater)).detach();
367
369 {
370 while(f.wait_for(std::chrono::milliseconds(50)) != std::future_status::ready)
371 mExportProgressUpdater->UpdateUI();
372 result = f.get();
373 });
374 });
375
376 mExportProgressUpdater->SetResult(result);
377 const auto success = result == ExportResult::Success;
378 if(!success && wxFileExists(path))
379 wxRemoveFile(path);
380 if(success)
381 return path;
382 }
383 return {};
384}
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 500 of file ShareAudioDialog.cpp.

501{
502 EndModal(wxID_ABORT);
503
505 {}, XO("Export error"),
506 XO("We are unable to prepare this file for uploading."), {},
508}
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 471 of file ShareAudioDialog.cpp.

472{
473 EndModal(wxID_ABORT);
474
475 TranslatableString message;
476
477 if (!payload.message.empty())
478 {
479 auto details = payload.message;
480
481 for (auto& err : payload.additionalErrors)
482 details += " " + err.second;
483
484 message = XO("Error: %s").Format(details);
485 }
486 else
487 {
488 message = XO(
489 "We are unable to upload this file. Please try again and make sure to link to your audio.com account before uploading.");
490 }
491
493 {}, XO("Upload error"),
494 message,
495 {},
497
498}
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 464 of file ShareAudioDialog.cpp.

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

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 268 of file ShareAudioDialog.cpp.

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

296{
298}

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 222 of file ShareAudioDialog.cpp.

223{
226
227 s.StartHorizontalLay(wxEXPAND, 0);
228 {
230 {
231 s.SetBorder(2);
232 s.StartHorizontalLay(wxEXPAND, 0);
233 {
234 s.AddSpace(0, 0, 1);
235
236 mCancelButton = s.AddButton(XXO("&Cancel"));
237 mCancelButton->Bind(wxEVT_BUTTON, [this](auto) { OnCancel(); });
238
239 s.AddSpace(4, 0, 0);
240
241 mContinueButton = s.AddButton(XXO("C&ontinue"));
242 mContinueButton->Bind(wxEVT_BUTTON, [this](auto) { OnContinue(); });
243 }
245 }
247 }
249
250 const auto title = mProject.GetProjectName();
251
252 if (!title.empty())
253 {
255 mInitialStatePanel.trackTitle->SetInsertionPoint(title.length());
256 }
257
259
261 wxEVT_TEXT,
262 [this](auto&) {
263 mContinueButton->Enable(
265 });
266}
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 510 of file ShareAudioDialog.cpp.

511{
512 mStageStartTime = Clock::now();
514
515 mProgressPanel.elapsedTime->SetLabel(" 00:00:00");
516 mProgressPanel.remainingTime->SetLabel(" 00:00:00");
517 mProgressPanel.progress->SetValue(0);
518
520
522
524}
void Yield()
Dispatch waiting events, including actions enqueued by CallAfter.
Definition: BasicUI.cpp:224

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 386 of file ShareAudioDialog.cpp.

387{
388 mInProgress = true;
389
390 mInitialStatePanel.root->Hide();
391 mProgressPanel.root->Show();
392
393 mProgressPanel.info->Hide();
394
395 mContinueButton->Hide();
396
397 Layout();
398 Fit();
399
401
403
404 if(mFilePath.empty())
405 {
408 {
410 }
411
412 return;
413 }
414
415 mProgressPanel.title->SetLabel(XO("Uploading audio...").Translation());
417
418 mServices->uploadPromise = mServices->uploadService.Upload(
419 mFilePath,
421 false,
422 [this](const auto& result)
423 {
424 CallAfter(
425 [this, result]()
426 {
427 mInProgress = false;
428
429 if (result.result == UploadOperationCompleted::Result::Success)
430 {
431 // Success indicates that UploadSuccessfulPayload is in the payload
432 assert(std::holds_alternative<UploadSuccessfulPayload>(result.payload));
433
434 if (
435 auto payload =
436 std::get_if<UploadSuccessfulPayload>(&result.payload))
437 HandleUploadSucceeded(*payload);
438 else
439 HandleUploadSucceeded({});
440
441 }
442 else if (
443 result.result != UploadOperationCompleted::Result::Aborted)
444 {
445 if (
446 auto payload =
447 std::get_if<UploadFailedPayload>(&result.payload))
448 HandleUploadFailed(*payload);
449 else
450 HandleUploadFailed({});
451 }
452 });
453 },
454 [this](auto current, auto total)
455 {
456 CallAfter(
457 [this, current, total]()
458 {
459 UpdateProgress(current, total);
460 });
461 });
462}
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:213

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 538 of file ShareAudioDialog.cpp.

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