5
5
using System . Collections . Generic ;
6
6
using System . Diagnostics ;
7
7
using System . Linq ;
8
- using System . Threading ;
9
8
using osu . Framework . Allocation ;
10
9
using osu . Framework . Audio ;
11
10
using osu . Framework . Audio . Track ;
@@ -63,7 +62,8 @@ public partial class MusicController : CompositeDrawable
63
62
64
63
public DrawableTrack CurrentTrack { get ; private set ; } = new DrawableTrack ( new TrackVirtual ( 1000 ) ) ;
65
64
66
- private IBindableList < BeatmapSetInfo > detachedBeatmaps = null ! ;
65
+ [ Resolved ]
66
+ private RealmAccess realm { get ; set ; } = null ! ;
67
67
68
68
private BindableNumber < double > sampleVolume = null ! ;
69
69
@@ -76,15 +76,13 @@ public partial class MusicController : CompositeDrawable
76
76
private int randomHistoryDirection ;
77
77
78
78
[ BackgroundDependencyLoader ]
79
- private void load ( AudioManager audio , OsuConfigManager configManager , DetachedBeatmapStore detachedBeatmapStore , CancellationToken ? cancellationToken )
79
+ private void load ( AudioManager audio , OsuConfigManager configManager )
80
80
{
81
81
AddInternal ( audioDuckFilter = new AudioFilter ( audio . TrackMixer ) ) ;
82
82
audio . Tracks . AddAdjustment ( AdjustableProperty . Volume , audioDuckVolume ) ;
83
83
sampleVolume = audio . VolumeSample . GetBoundCopy ( ) ;
84
84
85
85
configManager . BindWith ( OsuSetting . RandomSelectAlgorithm , randomSelectAlgorithm ) ;
86
-
87
- detachedBeatmaps = detachedBeatmapStore . GetDetachedBeatmaps ( cancellationToken ) ;
88
86
}
89
87
90
88
protected override void LoadComplete ( )
@@ -257,8 +255,8 @@ private PreviousTrackResult prev(bool allowProtectedTracks)
257
255
playableSet = getNextRandom ( - 1 , allowProtectedTracks ) ;
258
256
else
259
257
{
260
- playableSet = getBeatmapSets ( ) . TakeWhile ( i => ! i . Equals ( current ? . BeatmapSetInfo ) ) . LastOrDefault ( s => ! s . Protected || allowProtectedTracks )
261
- ?? getBeatmapSets ( ) . LastOrDefault ( s => ! s . Protected || allowProtectedTracks ) ;
258
+ playableSet = getBeatmapSets ( ) . AsEnumerable ( ) . TakeWhile ( i => ! i . Equals ( current ? . BeatmapSetInfo ) ) . LastOrDefault ( s => ! s . Protected || allowProtectedTracks )
259
+ ?? getBeatmapSets ( ) . AsEnumerable ( ) . LastOrDefault ( s => ! s . Protected || allowProtectedTracks ) ;
262
260
}
263
261
264
262
if ( playableSet != null )
@@ -353,10 +351,10 @@ private bool next(bool allowProtectedTracks)
353
351
playableSet = getNextRandom ( 1 , allowProtectedTracks ) ;
354
352
else
355
353
{
356
- playableSet = getBeatmapSets ( ) . SkipWhile ( i => ! i . Equals ( current ? . BeatmapSetInfo ) )
354
+ playableSet = getBeatmapSets ( ) . AsEnumerable ( ) . SkipWhile ( i => ! i . Equals ( current ? . BeatmapSetInfo ) )
357
355
. Where ( i => ! i . Protected || allowProtectedTracks )
358
356
. ElementAtOrDefault ( 1 )
359
- ?? getBeatmapSets ( ) . FirstOrDefault ( i => ! i . Protected || allowProtectedTracks ) ;
357
+ ?? getBeatmapSets ( ) . AsEnumerable ( ) . FirstOrDefault ( i => ! i . Protected || allowProtectedTracks ) ;
360
358
}
361
359
362
360
var playableBeatmap = playableSet ? . Beatmaps . FirstOrDefault ( ) ;
@@ -375,7 +373,7 @@ private bool next(bool allowProtectedTracks)
375
373
{
376
374
BeatmapSetInfo result ;
377
375
378
- var possibleSets = getBeatmapSets ( ) . Where ( s => ! s . Protected || allowProtectedTracks ) . ToArray ( ) ;
376
+ var possibleSets = getBeatmapSets ( ) . AsEnumerable ( ) . Where ( s => ! s . Protected || allowProtectedTracks ) . ToArray ( ) ;
379
377
380
378
if ( possibleSets . Length == 0 )
381
379
return null ;
@@ -434,7 +432,7 @@ private void restartTrack()
434
432
435
433
private TrackChangeDirection ? queuedDirection ;
436
434
437
- private IEnumerable < BeatmapSetInfo > getBeatmapSets ( ) => detachedBeatmaps . Where ( s => ! s . DeletePending ) ;
435
+ private IQueryable < BeatmapSetInfo > getBeatmapSets ( ) => realm . Realm . All < BeatmapSetInfo > ( ) . Where ( s => ! s . DeletePending ) ;
438
436
439
437
private void changeBeatmap ( WorkingBeatmap newWorking )
440
438
{
@@ -461,8 +459,8 @@ private void changeBeatmap(WorkingBeatmap newWorking)
461
459
else
462
460
{
463
461
// figure out the best direction based on order in playlist.
464
- int last = getBeatmapSets ( ) . TakeWhile ( b => ! b . Equals ( current . BeatmapSetInfo ) ) . Count ( ) ;
465
- int next = getBeatmapSets ( ) . TakeWhile ( b => ! b . Equals ( newWorking . BeatmapSetInfo ) ) . Count ( ) ;
462
+ int last = getBeatmapSets ( ) . AsEnumerable ( ) . TakeWhile ( b => ! b . Equals ( current . BeatmapSetInfo ) ) . Count ( ) ;
463
+ int next = getBeatmapSets ( ) . AsEnumerable ( ) . TakeWhile ( b => ! b . Equals ( newWorking . BeatmapSetInfo ) ) . Count ( ) ;
466
464
467
465
direction = last > next ? TrackChangeDirection . Prev : TrackChangeDirection . Next ;
468
466
}
0 commit comments