Skip to content

Commit 86aa2c6

Browse files
Merge pull request #29527 from RomanPudashkin/online_sounds_clear_cache_460
[4.6.0] Fix #29487: Add method to clear online sounds cache
2 parents 63fcea2 + d4cc271 commit 86aa2c6

36 files changed

Lines changed: 343 additions & 103 deletions

src/appshell/view/appmenumodel.cpp

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ void AppMenuModel::setupConnections()
117117
});
118118

119119
#ifdef MUSE_MODULE_WORKSPACE
120-
connect(m_workspacesMenuModel.get(), &WorkspacesMenuModel::itemsChanged, this, [this](){
120+
connect(m_workspacesMenuModel.get(), &WorkspacesMenuModel::itemsChanged, this, [this]() {
121121
MenuItem& workspacesItem = findMenu("menu-workspaces");
122122
workspacesItem.setSubitems(m_workspacesMenuModel->items());
123123
});
@@ -159,6 +159,15 @@ void AppMenuModel::onActionsStateChanges(const muse::actions::ActionCodeList& co
159159
}
160160
}
161161

162+
bool AppMenuModel::isMuseSamplerModuleAdded() const
163+
{
164+
#ifdef MUSE_MODULE_MUSESAMPLER
165+
return museSamplerInfo() != nullptr;
166+
#else
167+
return false;
168+
#endif
169+
}
170+
162171
MenuItemList AppMenuModel::makeChordAndFretboardDiagramsItems()
163172
{
164173
MenuItemList items {
@@ -452,8 +461,15 @@ MenuItem* AppMenuModel::makeHelpMenu(bool addDiagnosticsSubMenu)
452461
helpItems << makeMenuItem("about-musescore", MenuItemRole::AboutRole);
453462
helpItems << makeMenuItem("about-qt", MenuItemRole::AboutQtRole);
454463
helpItems << makeMenuItem("about-musicxml");
455-
456464
helpItems << makeSeparator();
465+
466+
#if defined(Q_OS_WIN) || defined(Q_OS_MACOS)
467+
if (isMuseSamplerModuleAdded()) {
468+
helpItems << makeMenuItem("clear-online-sounds-cache");
469+
helpItems << makeSeparator();
470+
}
471+
#endif
472+
457473
helpItems << makeMenuItem("revert-factory");
458474

459475
return makeMenu(TranslatableString("appshell/menu/help", "&Help"), helpItems, "menu-help");
@@ -473,9 +489,7 @@ MenuItem* AppMenuModel::makeDiagnosticsMenu()
473489
makeMenu(TranslatableString("appshell/menu/diagnostics", "&System"), systemItems, "menu-system")
474490
};
475491

476-
#ifdef MUSE_MODULE_MUSESAMPLER
477-
bool isMuseSamplerModuleAdded = museSamplerInfo() != nullptr;
478-
if (isMuseSamplerModuleAdded) {
492+
if (isMuseSamplerModuleAdded()) {
479493
MenuItemList museSamplerItems {
480494
makeMenuItem("musesampler-check"),
481495
};
@@ -486,7 +500,6 @@ MenuItem* AppMenuModel::makeDiagnosticsMenu()
486500

487501
items << makeMenu(TranslatableString("appshell/menu/diagnostics", "&MuseSampler"), museSamplerItems, "menu-musesampler");
488502
}
489-
#endif
490503

491504
if (globalConfiguration()->devModeEnabled()) {
492505
MenuItemList actionsItems {

src/appshell/view/appmenumodel.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,8 @@ class AppMenuModel : public muse::uicomponents::AbstractMenuModel
8080

8181
void onActionsStateChanges(const muse::actions::ActionCodeList& codes) override;
8282

83+
bool isMuseSamplerModuleAdded() const;
84+
8385
using muse::uicomponents::AbstractMenuModel::makeMenuItem;
8486
muse::uicomponents::MenuItem* makeMenuItem(const muse::actions::ActionCode& actionCode, muse::uicomponents::MenuItemRole role);
8587

src/framework/audio/common/rpc/irpcchannel.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,9 @@ enum class Method {
6363
// notification
6464
InputParamsChanged,
6565

66+
ProcessInput,
67+
68+
ClearCache,
6669
ClearSources,
6770

6871
// Play
@@ -136,6 +139,9 @@ inline std::string to_string(Method m)
136139
case Method::GetInputProcessingProgress: return "GetInputProcessingProgress";
137140
case Method::InputParamsChanged: return "InputParamsChanged";
138141

142+
case Method::ProcessInput: return "ProcessInput";
143+
144+
case Method::ClearCache: return "ClearCache";
139145
case Method::ClearSources: return "ClearSources";
140146

141147
// Play

src/framework/audio/main/internal/playback.cpp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -408,6 +408,14 @@ async::Channel<TrackSequenceId, TrackId, AudioInputParams> Playback::inputParams
408408
return m_inputParamsChanged;
409409
}
410410

411+
void Playback::processInput(const TrackSequenceId sequenceId, const TrackId trackId) const
412+
{
413+
ONLY_AUDIO_MAIN_THREAD;
414+
415+
Msg msg = rpc::make_request(Method::ProcessInput, RpcPacker::pack(sequenceId, trackId));
416+
channel()->send(msg);
417+
}
418+
411419
muse::async::Promise<InputProcessingProgress> Playback::inputProcessingProgress(const TrackSequenceId sequenceId,
412420
const TrackId trackId) const
413421
{
@@ -437,6 +445,14 @@ muse::async::Promise<InputProcessingProgress> Playback::inputProcessingProgress(
437445
}, PromiseType::AsyncByBody);
438446
}
439447

448+
void Playback::clearCache(const TrackSequenceId sequenceId, const TrackId trackId) const
449+
{
450+
ONLY_AUDIO_MAIN_THREAD;
451+
452+
Msg msg = rpc::make_request(Method::ClearCache, RpcPacker::pack(sequenceId, trackId));
453+
channel()->send(msg);
454+
}
455+
440456
void Playback::clearSources()
441457
{
442458
ONLY_AUDIO_MAIN_THREAD;

src/framework/audio/main/internal/playback.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,8 +75,10 @@ class Playback : public IPlayback, public Injectable, public async::Asyncable
7575
void setInputParams(const TrackSequenceId sequenceId, const TrackId trackId, const AudioInputParams& params) override;
7676
async::Channel<TrackSequenceId, TrackId, AudioInputParams> inputParamsChanged() const override;
7777

78+
void processInput(const TrackSequenceId sequenceId, const TrackId trackId) const override;
7879
async::Promise<InputProcessingProgress> inputProcessingProgress(const TrackSequenceId sequenceId, const TrackId id) const override;
7980

81+
void clearCache(const TrackSequenceId sequenceId, const TrackId trackId) const override;
8082
void clearSources() override;
8183

8284
// 3. Play Sequence

src/framework/audio/main/iplayback.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,8 +77,10 @@ class IPlayback : MODULE_EXPORT_INTERFACE
7777
virtual void setInputParams(const TrackSequenceId sequenceId, const TrackId trackId, const AudioInputParams& params) = 0;
7878
virtual async::Channel<TrackSequenceId, TrackId, AudioInputParams> inputParamsChanged() const = 0;
7979

80+
virtual void processInput(const TrackSequenceId sequenceId, const TrackId trackId) const = 0;
8081
virtual async::Promise<InputProcessingProgress> inputProcessingProgress(const TrackSequenceId sequenceId, const TrackId id) const = 0;
8182

83+
virtual void clearCache(const TrackSequenceId sequenceId, const TrackId trackId) const = 0;
8284
virtual void clearSources() = 0;
8385

8486
// 3. Play Sequence

src/framework/audio/worker/internal/eventaudiosource.cpp

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -233,6 +233,17 @@ async::Notification EventAudioSource::readyToPlayChanged() const
233233
return m_synth->readyToPlayChanged();
234234
}
235235

236+
void EventAudioSource::processInput()
237+
{
238+
ONLY_AUDIO_WORKER_THREAD;
239+
240+
IF_ASSERT_FAILED(m_synth) {
241+
return;
242+
}
243+
244+
m_synth->processInput();
245+
}
246+
236247
InputProcessingProgress EventAudioSource::inputProcessingProgress() const
237248
{
238249
ONLY_AUDIO_WORKER_THREAD;
@@ -244,6 +255,17 @@ InputProcessingProgress EventAudioSource::inputProcessingProgress() const
244255
return m_synth->inputProcessingProgress();
245256
}
246257

258+
void EventAudioSource::clearCache()
259+
{
260+
ONLY_AUDIO_WORKER_THREAD;
261+
262+
IF_ASSERT_FAILED(m_synth) {
263+
return;
264+
}
265+
266+
m_synth->clearCache();
267+
}
268+
247269
EventAudioSource::SynthCtx EventAudioSource::currentSynthCtx() const
248270
{
249271
if (!m_synth) {

src/framework/audio/worker/internal/eventaudiosource.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,8 +62,11 @@ class EventAudioSource : public ITrackAudioInput, public muse::Injectable, publi
6262
bool readyToPlay() const override;
6363
async::Notification readyToPlayChanged() const override;
6464

65+
void processInput() override;
6566
InputProcessingProgress inputProcessingProgress() const override;
6667

68+
void clearCache() override;
69+
6770
private:
6871
struct SynthCtx
6972
{

src/framework/audio/worker/internal/sequenceio.cpp

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,22 @@ AudioSignalChanges SequenceIO::audioSignalChanges(const TrackId id) const
161161
return track->outputHandler->audioSignalChanges();
162162
}
163163

164+
void SequenceIO::processInput(const TrackId id) const
165+
{
166+
ONLY_AUDIO_WORKER_THREAD;
167+
168+
IF_ASSERT_FAILED(m_getTracks) {
169+
return;
170+
}
171+
172+
TrackPtr track = m_getTracks->track(id);
173+
IF_ASSERT_FAILED(track) {
174+
return;
175+
}
176+
177+
track->inputHandler->processInput();
178+
}
179+
164180
InputProcessingProgress SequenceIO::inputProcessingProgress(const TrackId id) const
165181
{
166182
ONLY_AUDIO_WORKER_THREAD;
@@ -176,3 +192,19 @@ InputProcessingProgress SequenceIO::inputProcessingProgress(const TrackId id) co
176192

177193
return track->inputHandler->inputProcessingProgress();
178194
}
195+
196+
void SequenceIO::clearCache(const TrackId id) const
197+
{
198+
ONLY_AUDIO_WORKER_THREAD;
199+
200+
IF_ASSERT_FAILED(m_getTracks) {
201+
return;
202+
}
203+
204+
TrackPtr track = m_getTracks->track(id);
205+
IF_ASSERT_FAILED(track) {
206+
return;
207+
}
208+
209+
track->inputHandler->clearCache();
210+
}

src/framework/audio/worker/internal/sequenceio.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,11 @@ class SequenceIO : public ISequenceIO, public async::Asyncable
4646

4747
AudioSignalChanges audioSignalChanges(const TrackId id) const override;
4848

49+
void processInput(const TrackId id) const override;
4950
InputProcessingProgress inputProcessingProgress(const TrackId id) const override;
5051

52+
void clearCache(const TrackId id) const override;
53+
5154
private:
5255
worker::IGetTracks* m_getTracks = nullptr;
5356

0 commit comments

Comments
 (0)