/// <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>
        private void CreateViewModels(IExtendedWindowManager windowManager, ILocalFileFactory localFileFactory, IFileOperator fileOperator, ILastFMClient lastFMClient,
                                      IDiscogsDataBaseClient discogsClient)
        {
            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 CSVScrobbleViewModel(windowManager, new CSVTextFieldParserFactory(), 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);
        }
Exemple #2
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);
        }
        public async Task NormalScrobbleTest()
        {
            // given: CSVScrobbleViewModel with needed mocks to scrobble
            IEnumerable <Scrobble> actual        = null;
            Mock <IUserScrobbler>  scrobblerMock = new Mock <IUserScrobbler>(MockBehavior.Strict);

            scrobblerMock.Setup(u => u.ScrobbleAsync(It.IsAny <IEnumerable <Scrobble> >(), false)).Callback <IEnumerable <Scrobble>, bool>((s, c) => actual = s)
            .Returns(Task.Run(() => new ScrobbleResponse()));
            scrobblerMock.Setup(u => u.IsAuthenticated).Returns(true);

            List <Scrobble> expected = new List <Scrobble>()
            {
                new Scrobble("TestArtist", "TestAlbum", "TestTrack", DateTime.Now)
                {
                    AlbumArtist = "TestAlbumArtist", Duration = TimeSpan.FromSeconds(30)
                },
                new Scrobble("TestArtist2", "TestAlbum2", "TestTrack2", DateTime.Now.AddSeconds(1))
                {
                    AlbumArtist = "TestAlbumArtist2", Duration = TimeSpan.FromSeconds(31)
                },
                new Scrobble("TestArtist3", "TestAlbum3", "TestTrack3", DateTime.Now.AddSeconds(2))
                {
                    AlbumArtist = "TestAlbumArtist2", Duration = TimeSpan.FromSeconds(0)
                }
            };

            Mock <ITextFieldParser> parserMock = new Mock <ITextFieldParser>();

            string[][] fields = new string[3][]
            {
                new string[] { expected[0].Artist, expected[0].Album, expected[0].Track, expected[0].TimePlayed.ToString(), expected[0].AlbumArtist, expected[0].Duration.ToString() },
                new string[] { expected[1].Artist, expected[1].Album, expected[1].Track, expected[1].TimePlayed.ToString(), expected[1].AlbumArtist, expected[1].Duration.ToString() },
                new string[] { expected[2].Artist, expected[2].Album, expected[2].Track, expected[2].TimePlayed.ToString(), expected[2].AlbumArtist, expected[2].Duration.ToString() },
            };
            int i = 0;

            parserMock.Setup(p => p.ReadFields()).Returns(() => fields[i++]).Callback(() =>
            {
                if (i == 3)
                {
                    parserMock.Setup(p => p.EndOfData).Returns(true);
                }
            });

            Mock <ITextFieldParserFactory> factoryMock = new Mock <ITextFieldParserFactory>();

            factoryMock.Setup(f => f.CreateParser(It.IsAny <string>())).Returns(parserMock.Object);

            Mock <IFileOperator> fileOperatorMock = new Mock <IFileOperator>(MockBehavior.Strict);

            CSVScrobbleViewModel vm = new CSVScrobbleViewModel(null, factoryMock.Object, fileOperatorMock.Object)
            {
                Scrobbler    = scrobblerMock.Object,
                CSVFilePath  = "C:\\TestFile.csv",
                ScrobbleMode = CSVScrobbleMode.Normal
            };

            await vm.ParseCSVFile();

            vm.SelectAll();

            // when: scrobbling
            await vm.Scrobble();

            // then: expected tracks scrobbled
            // we add 1 second to each TimePlayed of the expected because the vm does this too so you can scrobble from yourself...
            for (int e = 0; e < expected.Count; e++)
            {
                expected[e] = expected[e].CloneWithAddedSecond();
            }

            Assert.That(actual.IsEqualScrobble(expected));
        }