@@ -20,6 +20,7 @@ public class MainWindowViewModel : ViewModelBase
20
20
private DOWNLOADPROC ? _downloadProc ;
21
21
private BASSTimer ? _updateTimer ;
22
22
private int _currentStream ;
23
+ private bool _isDiscoveryInit ;
23
24
24
25
#region Params
25
26
@@ -97,7 +98,7 @@ public int TabIndex
97
98
set => this . RaiseAndSetIfChanged ( ref _tabIndex , value ) ;
98
99
}
99
100
100
- private const string DefaultTip = "有的鱼是永远都关不住的,因为他们属于天空。 " ;
101
+ private const string DefaultTip = "有的鱼是永远都关不住的,因为他们属于天空" ;
101
102
private string _tipText = DefaultTip ;
102
103
public string TipText
103
104
{
@@ -120,48 +121,27 @@ public MainWindowViewModel()
120
121
121
122
#endregion
122
123
123
- public void ShowCapture ( )
124
+ public void PlayPauseMusic ( )
124
125
{
125
-
126
+ if ( Playing )
127
+ {
128
+ Pause ( ) ;
129
+ }
130
+ else
131
+ {
132
+ Play ( ) ;
133
+ }
126
134
}
127
135
128
136
private void InitBassAndSongs ( )
129
137
{
130
138
Task . Factory . StartNew ( ( ) =>
131
139
{
132
140
BassInit ( ) ;
133
- InitSongs ( ) ;
141
+ RefreshList ( ) ;
134
142
} ) ;
135
143
}
136
144
137
- private void InitSongs ( )
138
- {
139
- var date = new DateTime ( ) . ToString ( "yyyy-MM-dd" ) ;
140
- var type = "daily" ;
141
- var songs = DbHelper . GetSongs ( date , type ) ;
142
- if ( songs . Count <= 0 )
143
- {
144
- var url = "https://ifish.fun/api/music/daily?t=all" ;
145
- using var client = new HttpClient ( ) ;
146
- var resp = client . GetAsync ( url ) . Result ;
147
- if ( ! resp . IsSuccessStatusCode ) return ;
148
- var html = resp . Content . ReadAsStringAsync ( ) . Result ;
149
- if ( String . IsNullOrEmpty ( html ) )
150
- {
151
- return ;
152
- }
153
- var list = JsonConvert . DeserializeObject < List < SongResult > > ( html ) ;
154
- if ( list == null )
155
- {
156
- return ;
157
- }
158
- songs = list ;
159
- DbHelper . UpsertSongs ( list , date , type ) ;
160
- }
161
- _songList = songs ;
162
- PlayRandom ( ) ;
163
- }
164
-
165
145
private void PlayRandom ( )
166
146
{
167
147
if ( _songList == null )
@@ -235,7 +215,7 @@ private void PlaySong(SongResult? songResult)
235
215
if ( _playTask != null && _cancellationToken != null )
236
216
{
237
217
_cancellationToken . Cancel ( ) ;
238
- _playTask . Wait ( ) ;
218
+ _playTask . Wait ( 1000 ) ;
239
219
_playTask . Dispose ( ) ;
240
220
_cancellationToken . Dispose ( ) ;
241
221
}
@@ -283,7 +263,12 @@ private void PlaySong(SongResult? songResult)
283
263
{
284
264
Bass . BASS_Start ( ) ;
285
265
}
286
- if ( _currentStream != 0 && Bass . BASS_ChannelPlay ( _currentStream , true ) )
266
+ if ( _currentStream == 0 )
267
+ {
268
+ PlayNext ( ) ;
269
+ return ;
270
+ }
271
+ if ( Bass . BASS_ChannelPlay ( _currentStream , true ) )
287
272
{
288
273
TrackLength = Bass . BASS_ChannelBytes2Seconds ( _currentStream ,
289
274
Bass . BASS_ChannelGetLength ( _currentStream ) ) ;
@@ -316,7 +301,14 @@ private void CachePlayingSong(IntPtr buffer, int length, IntPtr user)
316
301
317
302
public void PlayNext ( )
318
303
{
319
- PlayRandom ( ) ;
304
+ if ( TabIndex == 1 )
305
+ {
306
+ RefreshList ( ) ;
307
+ }
308
+ else
309
+ {
310
+ PlayRandom ( ) ;
311
+ }
320
312
}
321
313
322
314
public void PlayPrev ( )
@@ -398,5 +390,69 @@ private void SetTipText(string tip)
398
390
TipText = DefaultTip ;
399
391
} ) ) ;
400
392
}
393
+
394
+ public void RefreshList ( )
395
+ {
396
+ List < SongResult > songs ;
397
+ var type = "daily" ;
398
+ var date = DateTime . Now . ToString ( "yyyy-MM-dd" ) ;
399
+ switch ( TabIndex )
400
+ {
401
+ case 0 :
402
+ songs = DbHelper . GetSongs ( date , type ) ;
403
+ if ( songs . Count <= 0 )
404
+ {
405
+ var list = getSongsByType ( "xm" ) ;
406
+ if ( list == null )
407
+ {
408
+ return ;
409
+ }
410
+ songs = list ;
411
+ DbHelper . UpsertSongs ( list , date , type ) ;
412
+ }
413
+ break ;
414
+ case 1 :
415
+ var lastSong = DbHelper . GetLastSong ( "init" ) ;
416
+ if ( lastSong == null && ! _isDiscoveryInit )
417
+ {
418
+ _isDiscoveryInit = true ;
419
+ Task . Factory . StartNew ( ( ) =>
420
+ {
421
+ var list = getSongsByType ( "init" ) ;
422
+ if ( list == null )
423
+ {
424
+ return ;
425
+ }
426
+ DbHelper . UpsertSongs ( list , date , "init" ) ;
427
+ _isDiscoveryInit = false ;
428
+ } ) ;
429
+ }
430
+ songs = DbHelper . GetRandomSongs ( ) ;
431
+ break ;
432
+ case 2 :
433
+ var ids = DbHelper . GetAllLikedSong ( ) ;
434
+ songs = ids . Count > 0 ? DbHelper . GetSongsByIds ( ids ) : DbHelper . GetRandomSongs ( ) ;
435
+ break ;
436
+ default :
437
+ songs = DbHelper . GetRandomSongs ( ) ;
438
+ break ;
439
+ }
440
+ _songList = songs ;
441
+ PlayRandom ( ) ;
442
+ }
443
+
444
+ private List < SongResult > ? getSongsByType ( string type )
445
+ {
446
+ var url = "https://ifish.fun/api/music/daily?t=" + type ;
447
+ using var client = new HttpClient ( ) ;
448
+ var resp = client . GetAsync ( url ) . Result ;
449
+ if ( ! resp . IsSuccessStatusCode ) return null ;
450
+ var html = resp . Content . ReadAsStringAsync ( ) . Result ;
451
+ if ( string . IsNullOrEmpty ( html ) )
452
+ {
453
+ return null ;
454
+ }
455
+ return JsonConvert . DeserializeObject < List < SongResult > > ( html ) ;
456
+ }
401
457
}
402
458
}
0 commit comments