/// <summary>
        /// Creates the ViewModels.
        /// </summary>
        /// <param name="localFileFactory">Factory for creating <see cref="Scrobbling.Data.ILocalFile"/>s.</param>
        /// <param name="directoryOperator">DirectoryOperator for operating with directories.</param>
        /// <param name="serializer">Serializer for <see cref="User"/>s.</param>
        /// <param name="gitHubClient">GitHub client to check for updates.</param>
        /// <param name="processManager">ProcessManager for working with processor functions.</param>
        private void SetupViewModels(ILocalFileFactory localFileFactory, IDirectoryOperator directoryOperator, ISerializer serializer, IGitHubClient gitHubClient, IProcessManager processManager)
        {
            UserViewModel = new UserViewModel(_windowManager, _client.Auth, _fileOperator, directoryOperator, serializer);

            _generalSettingsVM = new GeneralSettingsViewModel(_windowManager, gitHubClient, processManager);

            _scrobblerVM = new ScrobblerViewModel(_windowManager, localFileFactory, _fileOperator, _client);
            _scrobblerVM.StatusUpdated += StatusUpdated;
            ActivateItem(_scrobblerVM);

            _extraFunctionsVM = new ExtraFunctionsViewModel(_windowManager, _client.User, _fileOperator);
            _extraFunctionsVM.StatusUpdated += StatusUpdated;
            ActivateItem(_extraFunctionsVM);

            // we do this later to stop a NullReferenceException (we create scrobblers here anyways!)
            UserViewModel.ActiveUserChanged += UserViewModel_ActiveUserChanged;

            if (UserViewModel.ActiveUser != null)
            {
                CreateScrobblers();
            }

            // should be active
            ActivateItem(_scrobblerVM);
        }
 /// <summary>
 /// Constructor.
 /// </summary>
 /// <param name="windowManager">WindowManager used to display dialogs.</param>
 /// <param name="localFileFactory">Factory used to create <see cref="ILocalFile"/>s.</param>
 /// <param name="fileOperator">FileOperator used to write to disk.</param>
 public FileScrobbleViewModel(IExtendedWindowManager windowManager, ILocalFileFactory localFileFactory, IFileOperator fileOperator)
     : base(windowManager, "File Scrobbler")
 {
     Scrobbles         = new ObservableCollection <LoadedFileViewModel>();
     _localFileFactory = localFileFactory;
     _fileOperator     = fileOperator;
 }
 /// <summary>
 /// Constructor.
 /// </summary>
 /// <param name="windowManager">WindowManager used to display dialogs.</param>
 /// <param name="localFileFactory">Factory used to create <see cref="ILocalFile"/>s.</param>
 /// <param name="fileOperator">FileOperator used to write to disk.</param>
 public FileScrobbleViewModel(IExtendedWindowManager windowManager, ILocalFileFactory localFileFactory, IFileOperator fileOperator)
     : base(windowManager, "File Scrobbler")
 {
     Scrobbles         = new ObservableCollection <LoadedFileViewModel>();
     _localFileFactory = localFileFactory ?? throw new ArgumentNullException(nameof(localFileFactory));
     _fileOperator     = fileOperator ?? throw new ArgumentNullException(nameof(fileOperator));
     AddFilesCommand   = new DelegateCommand((o) => AddFiles().Forget());
 }
        /// <summary>
        /// Creates the ViewModels.
        /// </summary>
        /// <param name="windowManager">WindowManager used to display dialogs.</param>
        /// <param name="localFileFactory">Factory used to create <see cref="Data.ILocalFile"/>s.</param>
        /// <param name="fileOperator">FileOperator used to interface with files.</param>
        /// <param name="lastFMClient">Last.fm client.</param>
        /// <param name="discogsClient">Client used to interact with Discogs.com</param>
        /// <param name="fileParserFactory">Factory for creating <see cref="IFileParser"/></param>
        private void CreateViewModels(IExtendedWindowManager windowManager, ILocalFileFactory localFileFactory, IFileOperator fileOperator, ILastFMClient lastFMClient,
                                      IDiscogsDataBaseClient discogsClient, IFileParserFactory fileParserFactory)
        {
            var manualScrobbleViewModel = new ManualScrobbleViewModel(windowManager);

            manualScrobbleViewModel.StatusUpdated += Scrobbler_StatusUpdated;
            var friendScrobbleViewModel = new FriendScrobbleViewModel(windowManager, lastFMClient.User);

            friendScrobbleViewModel.StatusUpdated += Scrobbler_StatusUpdated;
            var databaseScrobbleViewModel = new DatabaseScrobbleViewModel(windowManager, lastFMClient.Artist, lastFMClient.Album, discogsClient);

            databaseScrobbleViewModel.StatusUpdated += Scrobbler_StatusUpdated;
            var csvScrobbleViewModel = new FileParseScrobbleViewModel(windowManager, fileParserFactory, fileOperator);

            csvScrobbleViewModel.StatusUpdated += Scrobbler_StatusUpdated;
            var fileScrobbleViewModel = new FileScrobbleViewModel(windowManager, localFileFactory, fileOperator);

            fileScrobbleViewModel.StatusUpdated += Scrobbler_StatusUpdated;
            var mediaPlayerDatabaseScrobbleViewModel = new MediaPlayerDatabaseScrobbleViewModel(windowManager);

            mediaPlayerDatabaseScrobbleViewModel.StatusUpdated += Scrobbler_StatusUpdated;
            var iTunesScrobbleVM = new ITunesScrobbleViewModel(windowManager, lastFMClient.Track, lastFMClient.Album, lastFMClient.Artist);

            iTunesScrobbleVM.StatusUpdated += Scrobbler_StatusUpdated;
            // todo: put back in once local api is working again
            //var spotifyScrobbleVM = new SpotifyScrobbleViewModel(windowManager, lastFMClient.Track, lastFMClient.Album, lastFMClient.Auth);
            //spotifyScrobbleVM.StatusUpdated += Scrobbler_StatusUpdated;
            var setlistFMScrobbleVM = new SetlistFMScrobbleViewModel(windowManager, lastFMClient.Artist);

            setlistFMScrobbleVM.StatusUpdated += Scrobbler_StatusUpdated;
            var cacheScrobblerVM = new CacheScrobblerViewModel(windowManager);

            cacheScrobblerVM.StatusUpdated += Scrobbler_StatusUpdated;

            ActivateItem(manualScrobbleViewModel);
            ActivateItem(friendScrobbleViewModel);
            ActivateItem(databaseScrobbleViewModel);
            ActivateItem(csvScrobbleViewModel);
            ActivateItem(fileScrobbleViewModel);
            ActivateItem(mediaPlayerDatabaseScrobbleViewModel);
            ActivateItem(iTunesScrobbleVM);
            //ActivateItem(spotifyScrobbleVM);
            ActivateItem(setlistFMScrobbleVM);
            ActivateItem(cacheScrobblerVM);

            // this one should be selected
            ActivateItem(manualScrobbleViewModel);
        }
Ejemplo n.º 5
0
        /// <summary>
        /// Creates the ViewModels.
        /// </summary>
        /// <param name="windowManager">WindowManager used to display dialogs.</param>
        /// <param name="localFileFactory">Factory used to create <see cref="ILocalFile"/>s.</param>
        private void CreateViewModels(IExtendedWindowManager windowManager, ILocalFileFactory localFileFactory)
        {
            var manualScrobbleViewModel = new ManualScrobbleViewModel(windowManager);

            manualScrobbleViewModel.StatusUpdated += Scrobbler_StatusUpdated;
            var friendScrobbleViewModel = new FriendScrobbleViewModel(windowManager, MainViewModel.Client.User);

            friendScrobbleViewModel.StatusUpdated += Scrobbler_StatusUpdated;
            var databaseScrobbleViewModel = new DatabaseScrobbleViewModel(windowManager, MainViewModel.Client.Artist, MainViewModel.Client.Album);

            databaseScrobbleViewModel.StatusUpdated += Scrobbler_StatusUpdated;
            var csvScrobbleViewModel = new CSVScrobbleViewModel(windowManager, new CSVTextFieldParserFactory());

            csvScrobbleViewModel.StatusUpdated += Scrobbler_StatusUpdated;
            var fileScrobbleViewModel = new FileScrobbleViewModel(windowManager, localFileFactory);

            fileScrobbleViewModel.StatusUpdated += Scrobbler_StatusUpdated;
            var mediaPlayerDatabaseScrobbleViewModel = new MediaPlayerDatabaseScrobbleViewModel(windowManager);

            mediaPlayerDatabaseScrobbleViewModel.StatusUpdated += Scrobbler_StatusUpdated;
            var iTunesScrobbleVM = new ITunesScrobbleViewModel(windowManager);

            iTunesScrobbleVM.StatusUpdated += Scrobbler_StatusUpdated;
            var spotifyScrobbleVM = new SpotifyScrobbleViewModel(windowManager);

            spotifyScrobbleVM.StatusUpdated += Scrobbler_StatusUpdated;
            var setlistFMScrobbleVM = new SetlistFMScrobbleViewModel(windowManager);

            setlistFMScrobbleVM.StatusUpdated += Scrobbler_StatusUpdated;
            var cacheScrobblerVM = new CacheScrobblerViewModel(windowManager);

            cacheScrobblerVM.StatusUpdated += Scrobbler_StatusUpdated;

            ActivateItem(manualScrobbleViewModel);
            ActivateItem(friendScrobbleViewModel);
            ActivateItem(databaseScrobbleViewModel);
            ActivateItem(csvScrobbleViewModel);
            ActivateItem(fileScrobbleViewModel);
            ActivateItem(mediaPlayerDatabaseScrobbleViewModel);
            ActivateItem(iTunesScrobbleVM);
            ActivateItem(spotifyScrobbleVM);
            ActivateItem(setlistFMScrobbleVM);
            ActivateItem(cacheScrobblerVM);

            // this one should be selected
            ActivateItem(manualScrobbleViewModel);
        }
Ejemplo n.º 6
0
        /// <summary>
        /// Creates the ViewModels.
        /// </summary>
        private void SetupViewModels(ILocalFileFactory localFileFactory)
        {
            _scrobblerVM = new ScrobblerViewModel(_windowManager, localFileFactory);
            _scrobblerVM.StatusUpdated += StatusUpdated;
            CreateScrobblers();
            ActivateItem(_scrobblerVM);

            _extraFunctionsVM = new ExtraFunctionsViewModel(_windowManager, Client.User);
            _extraFunctionsVM.StatusUpdated += StatusUpdated;
            ActivateItem(_extraFunctionsVM);

            // should be active
            ActivateItem(_scrobblerVM);

            UserViewModel = new UserViewModel(_windowManager);
            UserViewModel.ActiveUserChanged += UserViewModel_ActiveUserChanged;
            UserViewModel.LoadLastUser();
        }
Ejemplo n.º 7
0
        /// <summary>
        /// Creates the ViewModels.
        /// </summary>
        /// <param name="localFileFactory">Factory for creating <see cref="ILocalFile"/>s.</param>
        /// <param name="directoryOperator">DirectoryOperator for operating with directories.</param>
        /// <param name="userSerializer">Serializer for <see cref="User"/>s.</param>
        private void SetupViewModels(ILocalFileFactory localFileFactory, IDirectoryOperator directoryOperator, ISerializer <User> userSerializer)
        {
            _scrobblerVM = new ScrobblerViewModel(_windowManager, localFileFactory, _fileOperator, _client);
            _scrobblerVM.StatusUpdated += StatusUpdated;
            CreateScrobblers();
            ActivateItem(_scrobblerVM);

            _extraFunctionsVM = new ExtraFunctionsViewModel(_windowManager, _client.User, _fileOperator);
            _extraFunctionsVM.StatusUpdated += StatusUpdated;
            ActivateItem(_extraFunctionsVM);

            // should be active
            ActivateItem(_scrobblerVM);

            UserViewModel = new UserViewModel(_windowManager, _client.Auth, _fileOperator, directoryOperator, userSerializer);
            UserViewModel.ActiveUserChanged += UserViewModel_ActiveUserChanged;
            UserViewModel.LoadLastUser();
        }
        /// <summary>
        /// Creates the ViewModels.
        /// </summary>
        /// <param name="localFileFactory">Factory for creating <see cref="ILocalFile"/>s.</param>
        /// <param name="directoryOperator">DirectoryOperator for operating with directories.</param>
        /// <param name="userSerializer">Serializer for <see cref="User"/>s.</param>
        private void SetupViewModels(ILocalFileFactory localFileFactory, IDirectoryOperator directoryOperator, ISerializer <User> userSerializer)
        {
            UserViewModel = new UserViewModel(_windowManager, _client.Auth, _fileOperator, directoryOperator, userSerializer);
            UserViewModel.LoadLastUser();

            _scrobblerVM = new ScrobblerViewModel(_windowManager, localFileFactory, _fileOperator, _client);
            _scrobblerVM.StatusUpdated += StatusUpdated;
            ActivateItem(_scrobblerVM);

            _extraFunctionsVM = new ExtraFunctionsViewModel(_windowManager, _client.User, _fileOperator);
            _extraFunctionsVM.StatusUpdated += StatusUpdated;
            ActivateItem(_extraFunctionsVM);

            // we do this later to stop a NullReferenceException (we create scrobblers here anyways!)
            UserViewModel.ActiveUserChanged += UserViewModel_ActiveUserChanged;

            // should be active
            ActivateItem(_scrobblerVM);
        }
Ejemplo n.º 9
0
        /// <summary>
        /// Creates the ViewModels.
        /// </summary>
        /// <param name="localFileFactory">Factory for creating <see cref="Scrobbling.Data.ILocalFile"/>s.</param>
        /// <param name="directoryOperator">DirectoryOperator for operating with directories.</param>
        /// <param name="serializer">Serializer for <see cref="User"/>s.</param>
        /// <param name="gitHubClient">GitHub client to check for updates.</param>
        /// <param name="processManager">ProcessManager for working with processor functions.</param>
        /// <param name="discogsClient">Client used to interact with Discogs.com</param>
        /// <param name="fileParserFactory">Factory for creating <see cref="IFileParser"/></param>
        private TabViewModel[] SetupViewModels(ILocalFileFactory localFileFactory, IDirectoryOperator directoryOperator, ISerializer serializer, IGitHubClient gitHubClient,
                                               IProcessManager processManager, IDiscogsDataBaseClient discogsClient, IFileParserFactory fileParserFactory)
        {
            UserViewModel = new UserViewModel(_windowManager, _client.Auth, _client.User, _fileOperator, directoryOperator, serializer);

            _generalSettingsVM = new GeneralSettingsViewModel(_windowManager, gitHubClient, processManager);

            _scrobblerVM = new ScrobblerViewModel(_windowManager, localFileFactory, _fileOperator, _client, discogsClient, fileParserFactory);
            _scrobblerVM.StatusUpdated += MainStatusUpdated;

            _extraFunctionsVM = new ExtraFunctionsViewModel(_windowManager, _client.User, _fileOperator);
            _extraFunctionsVM.StatusUpdated += MainStatusUpdated;

            // we do this later to stop a NullReferenceException (we create scrobblers here anyways!)
            UserViewModel.ActiveUserChanged += UserViewModel_ActiveUserChanged;

            if (UserViewModel.ActiveUser != null)
            {
                CreateScrobblers();
            }

            return(new TabViewModel[] { _scrobblerVM, _extraFunctionsVM });
        }
Ejemplo n.º 10
0
 /// <summary>
 /// Constructor.
 /// </summary>
 /// <param name="windowManager">WindowManager used to display dialogs.</param>
 /// <param name="client">Factory for creating <see cref="ILastFMClient"/>s.</param>
 /// <param name="scrobblerFactory">Factory for creating <see cref="IAuthScrobbler"/>s.</param>
 /// <param name="localFileFactory">Factory for creating <see cref="Scrobbling.Data.ILocalFile"/>s.</param>
 /// <param name="fileOperator">FileOperator for interfacing with the hard disk.</param>
 /// <param name="directoryOperator">DirectoryOperator for operating with directories.</param>
 /// <param name="serializer">Serializer for <see cref="User"/>s.</param>
 /// <param name="logger">Logger used to log status messages.</param>
 /// <param name="gitHubClient">GitHub client to check for updates.</param>
 /// <param name="processManager">ProcessManager for working with processor functions.</param>
 /// <param name="discogsClient">Client used to interact with Discogs.com</param>
 /// <param name="fileParserFactory">Factory for creating <see cref="IFileParser"/></param>
 public MainViewModel(IExtendedWindowManager windowManager, ILastFMClient client, IScrobblerFactory scrobblerFactory, ILocalFileFactory localFileFactory,
                      IFileOperator fileOperator, IDirectoryOperator directoryOperator, ISerializer serializer, ILogger logger, IGitHubClient gitHubClient,
                      IProcessManager processManager, IDiscogsDataBaseClient discogsClient, IFileParserFactory fileParserFactory)
 {
     _windowManager    = windowManager ?? throw new ArgumentNullException(nameof(windowManager));
     _client           = client ?? throw new ArgumentNullException(nameof(client));
     _scrobblerFactory = scrobblerFactory ?? throw new ArgumentNullException(nameof(scrobblerFactory));
     _fileOperator     = fileOperator ?? throw new ArgumentNullException(nameof(fileOperator));
     _logger           = logger;
     Tabs          = SetupViewModels(localFileFactory, directoryOperator, serializer, gitHubClient, processManager, discogsClient, fileParserFactory);
     TitleString   = $"Last.fm Scrubbler WPF Beta {Assembly.GetExecutingAssembly().GetName().Version}";
     CurrentStatus = "Waiting to scrobble...";
 }
Ejemplo n.º 11
0
 /// <summary>
 /// Constructor.
 /// </summary>
 /// <param name="windowManager">WindowManager used to display dialogs.</param>
 /// <param name="localFileFactory">Factory used to create <see cref="Scrobbling.Data.ILocalFile"/>s.</param>
 /// <param name="fileOperator">FileOperator used to interface with files.</param>
 /// <param name="lastFMClient">Last.fm client.</param>
 public ScrobblerViewModel(IExtendedWindowManager windowManager, ILocalFileFactory localFileFactory, IFileOperator fileOperator, ILastFMClient lastFMClient)
 {
     DisplayName = "Scrobbler";
     CreateViewModels(windowManager, localFileFactory, fileOperator, lastFMClient);
 }
Ejemplo n.º 12
0
 /// <summary>
 /// Constructor.
 /// </summary>
 /// <param name="windowManager">WindowManager used to display dialogs.</param>
 /// <param name="localFileFactory">Factory used to create <see cref="ILocalFile"/>s.</param>
 public ScrobblerViewModel(IExtendedWindowManager windowManager, ILocalFileFactory localFileFactory)
 {
     DisplayName = "Scrobbler";
     CreateViewModels(windowManager, localFileFactory);
 }
Ejemplo n.º 13
0
 /// <summary>
 /// Constructor.
 /// </summary>
 /// <param name="windowManager">WindowManager used to display dialogs.</param>
 /// <param name="clientFactory">Factory for creating <see cref="ILastFMClient"/>s.</param>
 /// <param name="scrobblerFactory">Factory for creating <see cref="IAuthScrobbler"/>s.</param>
 /// <param name="localFileFactory">Factory for creating <see cref="ILocalFile"/>s.</param>
 /// <param name="fileOperator">FileOperator for interfacing with the hard disk.</param>
 /// <param name="directoryOperator">DirectoryOperator for operating with directories.</param>
 /// <param name="userSerializer">Serializer for <see cref="User"/>s.</param>
 /// <param name="logger">Logger used to log status messages.</param>
 public MainViewModel(IExtendedWindowManager windowManager, ILastFMClientFactory clientFactory, IScrobblerFactory scrobblerFactory, ILocalFileFactory localFileFactory,
                      IFileOperator fileOperator, IDirectoryOperator directoryOperator, ISerializer <User> userSerializer, ILogger logger)
 {
     _windowManager       = windowManager;
     _lastFMClientFactory = clientFactory;
     _scrobblerFactory    = scrobblerFactory;
     _fileOperator        = fileOperator;
     _logger     = logger;
     TitleString = "Last.fm Scrubbler WPF Beta " + Assembly.GetExecutingAssembly().GetName().Version;
     _client     = _lastFMClientFactory.CreateClient(APIKEY, APISECRET);
     SetupViewModels(localFileFactory, directoryOperator, userSerializer);
     CurrentStatus = "Waiting to scrobble...";
 }
 /// <summary>
 /// Constructor.
 /// </summary>
 /// <param name="windowManager">WindowManager used to display dialogs.</param>
 /// <param name="localFileFactory">Factory used to create <see cref="Data.ILocalFile"/>s.</param>
 /// <param name="fileOperator">FileOperator used to interface with files.</param>
 /// <param name="lastFMClient">Last.fm client.</param>
 /// <param name="discogsClient">Client used to interact with Discogs.com</param>
 /// <param name="fileParserFactory">Factory for creating <see cref="IFileParser"/></param>
 public ScrobblerViewModel(IExtendedWindowManager windowManager, ILocalFileFactory localFileFactory, IFileOperator fileOperator, ILastFMClient lastFMClient,
                           IDiscogsDataBaseClient discogsClient, IFileParserFactory fileParserFactory)
 {
     DisplayName = "Scrobbler";
     CreateViewModels(windowManager, localFileFactory, fileOperator, lastFMClient, discogsClient, fileParserFactory);
 }
Ejemplo n.º 15
0
 /// <summary>
 /// Constructor.
 /// </summary>
 public MainViewModel(IExtendedWindowManager windowManager, ILastFMClientFactory clientFactory, IScrobblerFactory scrobblerFactory, ILocalFileFactory localFileFactory)
 {
     _windowManager       = windowManager;
     _lastFMClientFactory = clientFactory;
     _scrobblerFactory    = scrobblerFactory;
     TitleString          = "Last.fm Scrubbler WPF " + Assembly.GetExecutingAssembly().GetName().Version;
     CreateNewClient();
     SetupViewModels(localFileFactory);
     CurrentStatus = "Waiting to scrobble...";
 }
Ejemplo n.º 16
0
        /// <summary>
        /// Creates the ViewModels.
        /// </summary>
        /// <param name="windowManager">WindowManager used to display dialogs.</param>
        /// <param name="localFileFactory">Factory used to create <see cref="Data.ILocalFile"/>s.</param>
        /// <param name="fileOperator">FileOperator used to interface with files.</param>
        /// <param name="lastFMClient">Last.fm client.</param>
        /// <param name="discogsClient">Client used to interact with Discogs.com</param>
        /// <param name="fileParserFactory">Factory for creating <see cref="IFileParser"/></param>
        private ScrobbleViewModelBase[] CreateViewModels(IExtendedWindowManager windowManager, ILocalFileFactory localFileFactory, IFileOperator fileOperator, ILastFMClient lastFMClient,
                                                         IDiscogsDataBaseClient discogsClient, IFileParserFactory fileParserFactory)
        {
            var manualScrobbleViewModel = new ManualScrobbleViewModel(windowManager);

            manualScrobbleViewModel.StatusUpdated += Scrobbler_StatusUpdated;
            var friendScrobbleViewModel = new FriendScrobbleViewModel(windowManager, lastFMClient.User);

            friendScrobbleViewModel.StatusUpdated += Scrobbler_StatusUpdated;
            var databaseScrobbleViewModel = new DatabaseScrobbleViewModel(windowManager, lastFMClient.Artist, lastFMClient.Album, discogsClient);

            databaseScrobbleViewModel.StatusUpdated += Scrobbler_StatusUpdated;
            var csvScrobbleViewModel = new FileParseScrobbleViewModel(windowManager, fileParserFactory, fileOperator);

            csvScrobbleViewModel.StatusUpdated += Scrobbler_StatusUpdated;
            var fileScrobbleViewModel = new FileScrobbleViewModel(windowManager, localFileFactory, fileOperator);

            fileScrobbleViewModel.StatusUpdated += Scrobbler_StatusUpdated;
            var mediaPlayerDatabaseScrobbleViewModel = new MediaPlayerDatabaseScrobbleViewModel(windowManager);

            mediaPlayerDatabaseScrobbleViewModel.StatusUpdated += Scrobbler_StatusUpdated;
            var iTunesScrobbleVM = new ITunesScrobbleViewModel(windowManager, lastFMClient.Track, lastFMClient.Album, lastFMClient.Artist);

            iTunesScrobbleVM.StatusUpdated += Scrobbler_StatusUpdated;
            // todo: put back in once local api is working again
            //var spotifyScrobbleVM = new SpotifyScrobbleViewModel(windowManager, lastFMClient.Track, lastFMClient.Album, lastFMClient.Auth);
            //spotifyScrobbleVM.StatusUpdated += Scrobbler_StatusUpdated;
            var setlistFMScrobbleVM = new SetlistFMScrobbleViewModel(windowManager, lastFMClient.Artist);

            setlistFMScrobbleVM.StatusUpdated += Scrobbler_StatusUpdated;
            var cacheScrobblerVM = new CacheScrobblerViewModel(windowManager);

            cacheScrobblerVM.StatusUpdated += Scrobbler_StatusUpdated;

            return(new ScrobbleViewModelBase[] { manualScrobbleViewModel, friendScrobbleViewModel, databaseScrobbleViewModel, csvScrobbleViewModel,
                                                 fileScrobbleViewModel, mediaPlayerDatabaseScrobbleViewModel, iTunesScrobbleVM, setlistFMScrobbleVM, cacheScrobblerVM });
        }