105
105
protected FilterListModel<AlbumInfo> external_filter; //this is actually fetched from the MusicLibrary
108
private TrackInfo transitioned_track;
108
private TrackInfo transitioned_track;
110
110
private bool IsParentSource {
111
111
get { return ServiceManager.PlaybackController.Source!=null && ServiceManager.PlaybackController.Source.Parent==source; }
113
private bool IsActiveSource {
114
get { return ServiceManager.SourceManager.ActiveSource==source; }
116
private bool IsPlaybackSource {
117
get { return ServiceManager.PlaybackController.Source==source; }
119
private bool InPartyMode {
121
return (external_filter!=null && (IsPlaybackSource || IsParentSource) && IsActiveSource && external_filter.Selection.AllSelected);
113
private bool IsActiveSource {
114
get { return ServiceManager.SourceManager.ActiveSource==source; }
116
private bool IsPlaybackSource {
117
get { return ServiceManager.PlaybackController.Source==source; }
119
private bool InPartyMode {
121
return (external_filter!=null && (IsPlaybackSource || IsParentSource) && IsActiveSource && external_filter.Selection.AllSelected);
130
130
public ClutterFlowContents ()
132
name = "ClutterFlowView";
133
InitializeInterface ();
135
SetupFullscreenHandling ();
136
SetupPlaybackHandling ();
132
name = "ClutterFlowView";
133
InitializeInterface ();
135
SetupFullscreenHandling ();
136
SetupPlaybackHandling ();
137
137
NoShowAll = true;
140
140
protected bool disposed = false;
141
141
public override void Dispose ()
149
150
video_window.Hidden -= OnFullscreenWindowHidden;
150
FilterView.UpdatedAlbum -= HandleUpdatedAlbum;
151
FilterView.PMButton.Toggled -= HandlePMButtonToggled;
152
FilterView.FSButton.Toggled -= HandleFSButtonToggled;
151
filter_view.UpdatedAlbum -= HandleUpdatedAlbum;
152
filter_view.PMButton.Toggled -= HandlePMButtonToggled;
153
filter_view.FSButton.Toggled -= HandleFSButtonToggled;
154
filter_view.SortButton.Toggled -= HandleSortButtonToggled;
156
FilterView.AlbumLoader.SortingChanged -= HandleSortingChanged;
154
158
ServiceManager.SourceManager.ActiveSourceChanged -= HandleActiveSourceChanged;
155
159
ServiceManager.PlaybackController.TrackStarted -= OnPlaybackControllerTrackStarted;
156
160
ServiceManager.PlaybackController.SourceChanged -= OnPlaybackSourceChanged;
157
ServiceManager.PlayerEngine.DisconnectEvent (OnPlayerEvent);
161
ServiceManager.PlayerEngine.DisconnectEvent (OnPlayerEvent);
160
if (filter_view.Parent!=null) frame.Remove (filter_view);
161
filter_view.DetachEvents ();
164
if (filter_view.Parent != null) {
165
frame.Remove (filter_view);
167
filter_view.Dispose ();
163
169
fullscreen_adapter.Dispose ();
164
170
screensaver.Dispose ();
170
#region Packing & Resetting
176
#region Packing & Resetting
171
177
private void Layout ()
381
387
filter_view.Reparent (video_window);
382
388
filter_view.Show ();
384
is_fullscreen = true;
390
is_fullscreen = true;
391
397
private void MoveVideoInternal ()
393
399
if (filter_view.Parent != frame) {
394
if (filter_view.Parent != null)
395
(filter_view.Parent as Container).Remove (filter_view);
396
frame.Add (filter_view);
399
is_fullscreen = false;
400
if (filter_view.Parent != null)
401
(filter_view.Parent as Container).Remove (filter_view);
402
frame.Add (filter_view);
405
is_fullscreen = false;
405
#region Playback Handling
407
private void SetupPlaybackHandling ()
409
FilterView.UpdatedAlbum += HandleUpdatedAlbum;
410
FilterView.PMButton.Toggled += HandlePMButtonToggled;
411
FilterView.FSButton.Toggled += HandleFSButtonToggled;
412
FilterView.SortButton.Toggled += HandleSortButtonToggled;
414
ServiceManager.SourceManager.ActiveSourceChanged += HandleActiveSourceChanged;
411
#region Playback Handling
413
private void SetupPlaybackHandling ()
415
filter_view.UpdatedAlbum += HandleUpdatedAlbum;
416
filter_view.PMButton.Toggled += HandlePMButtonToggled;
417
filter_view.FSButton.Toggled += HandleFSButtonToggled;
418
filter_view.SortButton.Toggled += HandleSortButtonToggled;
420
ServiceManager.SourceManager.ActiveSourceChanged += HandleActiveSourceChanged;
415
421
ServiceManager.PlaybackController.TrackStarted += OnPlaybackControllerTrackStarted;
416
ServiceManager.PlayerEngine.ConnectEvent (OnPlayerEvent);
417
ServiceManager.PlaybackController.SourceChanged += OnPlaybackSourceChanged;
418
FilterView.AlbumLoader.SortingChanged += HandleSortingChanged;
421
private void HandleUpdatedAlbum(object sender, EventArgs e)
423
if (!IsActiveSource) ServiceManager.SourceManager.SetActiveSource (source);
424
SelectActiveAlbum ();
426
FilterView.PMButton.SetSilent (InPartyMode);
429
private void HandlePMButtonToggled(object sender, EventArgs e)
431
if (!IsActiveSource) ServiceManager.SourceManager.SetActiveSource (source);
432
if (FilterView.PMButton.IsActive) {
436
FilterView.UpdateAlbum ();
439
private void HandleFSButtonToggled(object sender, EventArgs e)
422
ServiceManager.PlayerEngine.ConnectEvent (OnPlayerEvent);
423
ServiceManager.PlaybackController.SourceChanged += OnPlaybackSourceChanged;
424
FilterView.AlbumLoader.SortingChanged += HandleSortingChanged;
427
private void HandleUpdatedAlbum(object sender, EventArgs e)
429
if (!IsActiveSource) {
430
ServiceManager.SourceManager.SetActiveSource (source);
432
SelectActiveAlbum ();
434
FilterView.PMButton.SetSilent (InPartyMode);
437
private void HandlePMButtonToggled(object sender, EventArgs e)
439
if (!IsActiveSource) {
440
ServiceManager.SourceManager.SetActiveSource (source);
442
if (FilterView.PMButton.IsActive) {
446
FilterView.UpdateAlbum ();
450
private void HandleFSButtonToggled(object sender, EventArgs e)
441
452
InterfaceActionService service = ServiceManager.Get<InterfaceActionService> ();
442
if (service == null || service.ViewActions == null)
453
if (service == null || service.ViewActions == null) {
444
service.ViewActions.Fullscreen (FilterView.FSButton.IsActive);
448
private void HandleSortButtonToggled (object sender, EventArgs e)
450
if (!FilterView.SortButton.IsActive)
451
FilterView.AlbumLoader.SortBy = SortOptions.Artist;
453
FilterView.AlbumLoader.SortBy = SortOptions.Album;
457
private void HandleSortingChanged (object sender, EventArgs e)
459
if (FilterView.AlbumLoader.SortBy.GetType () == typeof(AlbumArtistComparer))
460
FilterView.SortButton.IsActive = false;
462
FilterView.SortButton.IsActive = true;
465
private void HandleActiveSourceChanged (SourceEventArgs args)
467
FilterView.PMButton.SetSilent (InPartyMode);
469
private void OnPlayerEvent (PlayerEventArgs args)
456
service.ViewActions.Fullscreen (FilterView.FSButton.IsActive);
460
private void HandleSortButtonToggled (object sender, EventArgs e)
462
if (!FilterView.SortButton.IsActive) {
463
FilterView.AlbumLoader.SortBy = SortOptions.Artist;
465
FilterView.AlbumLoader.SortBy = SortOptions.Album;
470
private void HandleSortingChanged (object sender, EventArgs e)
472
FilterView.CoverManager.ReloadCovers ();
474
if (FilterView.AlbumLoader.SortBy.GetType () == typeof(AlbumArtistComparer)) {
475
FilterView.SortButton.IsActive = false;
477
FilterView.SortButton.IsActive = true;
481
private void HandleActiveSourceChanged (SourceEventArgs args)
483
FilterView.PMButton.SetSilent (InPartyMode);
485
private void OnPlayerEvent (PlayerEventArgs args)
473
489
private void OnPlaybackControllerTrackStarted (object o, EventArgs args)
475
491
CheckForSwitch ();
477
493
private void OnPlaybackSourceChanged (object o, EventArgs args)
479
FilterView.PMButton.SetSilent (InPartyMode);
495
FilterView.PMButton.SetSilent (InPartyMode);
483
/// Checks if we are in PartyMode & if a new song started playing
484
/// Called from OnPlaybackControllerTrackStarted
499
/// Checks if we are in PartyMode & if a new song started playing
500
/// Called from OnPlaybackControllerTrackStarted
486
502
private void CheckForSwitch ()
488
ThreadAssist.ProxyToMain (delegate {
489
TrackInfo current_track = ServiceManager.PlaybackController.CurrentTrack;
490
if (current_track != null && transitioned_track != current_track) {
492
FilterView.LabelTrack.SetValueWithAnim (current_track.TrackNumber + " - " + current_track.TrackTitle);
494
DatabaseAlbumInfo album = DatabaseAlbumInfo.FindOrCreate (
495
DatabaseArtistInfo.FindOrCreate (current_track.AlbumArtist, current_track.AlbumArtistSort),
496
current_track.AlbumTitle, current_track.AlbumTitleSort, current_track.IsCompilation);
497
FilterView.AlbumLoader.ScrollTo(album);
499
transitioned_track = ServiceManager.PlayerEngine.CurrentTrack;
505
private void UpdatePlayback ()
507
if (!ClutterFlowSchemas.InstantPlayback.Get ()) {
508
ServiceManager.PlaybackController.NextSource = source;
509
if (!ServiceManager.PlayerEngine.IsPlaying())
510
ServiceManager.PlayerEngine.Play();
512
ServiceManager.PlaybackController.Source = source;
513
if (!ServiceManager.PlayerEngine.IsPlaying())
514
ServiceManager.PlayerEngine.Play();
516
ServiceManager.PlaybackController.Next();
521
#region Source Handling
504
ThreadAssist.ProxyToMain (delegate {
505
TrackInfo current_track = ServiceManager.PlaybackController.CurrentTrack;
506
if (current_track != null && transitioned_track != current_track) {
508
FilterView.LabelTrack.SetValueWithAnim (current_track.TrackNumber + " - " + current_track.TrackTitle);
510
DatabaseAlbumInfo album = DatabaseAlbumInfo.FindOrCreate (
511
DatabaseArtistInfo.FindOrCreate (current_track.AlbumArtist, current_track.AlbumArtistSort),
512
current_track.AlbumTitle, current_track.AlbumTitleSort, current_track.IsCompilation);
513
FilterView.ScrollTo (album);
515
transitioned_track = ServiceManager.PlayerEngine.CurrentTrack;
521
private void UpdatePlayback ()
523
if (!ClutterFlowSchemas.InstantPlayback.Get ()) {
524
ServiceManager.PlaybackController.NextSource = source;
525
if (!ServiceManager.PlayerEngine.IsPlaying()) {
526
ServiceManager.PlayerEngine.Play();
529
ServiceManager.PlaybackController.Source = source;
530
if (!ServiceManager.PlayerEngine.IsPlaying()) {
531
ServiceManager.PlayerEngine.Play();
533
ServiceManager.PlaybackController.Next();
539
#region Source Handling
522
540
public bool SetSource (ISource source)
524
if ((source as MusicLibrarySource) == null)
526
if ((source as MusicLibrarySource)==this.source) {
542
if ((source as MusicLibrarySource) == null) {
545
if ((source as MusicLibrarySource)==this.source) {
527
546
SelectAllTracks ();
532
this.source = (source as MusicLibrarySource);
533
this.source.TrackModel.Selection.Clear (false);
534
this.source.TracksAdded += HandleTracksAdded;
535
this.source.TracksDeleted += HandleTracksDeleted;
537
foreach (IFilterListModel list_model in this.source.CurrentFilters) {
538
list_model.Clear (); //clear selections, we need all albums!!
539
if (list_model is FilterListModel<AlbumInfo>) {
540
external_filter = list_model as FilterListModel<AlbumInfo>;
545
main_view.SetModel (TrackModel);
546
FilterView.SetModel (external_filter);
551
private void HandleTracksAdded (Source sender, TrackEventArgs args)
556
private void HandleTracksDeleted (Source sender, TrackEventArgs args)
552
this.source = (source as MusicLibrarySource);
553
this.source.TrackModel.Selection.Clear (false);
554
this.source.TracksAdded += HandleTracksAdded;
555
this.source.TracksDeleted += HandleTracksDeleted;
557
foreach (IFilterListModel list_model in this.source.CurrentFilters) {
558
list_model.Clear (); //clear selections, we need all albums!!
559
if (list_model is FilterListModel<AlbumInfo>) {
560
external_filter = list_model as FilterListModel<AlbumInfo>;
565
main_view.SetModel (TrackModel);
566
FilterView.SetModel (external_filter);
571
private void HandleTracksAdded (Source sender, TrackEventArgs args)
576
private void HandleTracksDeleted (Source sender, TrackEventArgs args)
561
581
public void ResetSource ()
564
584
source.TracksAdded -= HandleTracksAdded;
565
585
source.TracksDeleted -= HandleTracksDeleted;
568
588
TrackView.SetModel (null);
569
FilterView.SetModel (null);
589
FilterView.SetModel (null);
572
592
protected void SelectActiveAlbum () // to implement sorting: create a DatabaseAlbumListModel subclass
574
AlbumInfo album = FilterView.ActiveAlbum;
576
external_filter.Selection.Clear (false);
577
external_filter.Selection.Select (FilterView.ActiveModelIndex);
580
protected void SelectAllTracks ()
582
external_filter.Selection.SelectAll ();
594
AlbumInfo album = FilterView.ActiveAlbum;
596
external_filter.Selection.Clear (false);
597
external_filter.Selection.Select (FilterView.ActiveModelIndex);
600
protected void SelectAllTracks ()
602
external_filter.Selection.SelectAll ();