/// <summary> /// Constructor. /// </summary> /// <param name="windowManager">WindowManager used to display dialogs.</param> public CacheScrobblerViewModel(IExtendedWindowManager windowManager) : base(windowManager, "Cache Scrobbler") { Scrobbles = new ObservableCollection <Scrobble>(); GetCachedScrobblesCommand = new DelegateCommand((o) => GetCachedScrobbles().Forget()); StartupHandling(); }
/// <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="userAPI">Last.fm user api used to fetch top artists and albums.</param> /// <param name="fileOperator">FileOperator used to write to disk.</param> public CSVDownloaderViewModel(IExtendedWindowManager windowManager, IUserApi userAPI, IFileOperator fileOperator) : base("CSV Downloader") { _windowManager = windowManager; _userAPI = userAPI; _fileOperator = fileOperator; }
/// <summary> /// Constructor. /// </summary> /// <param name="windowManager">WindowManager used to display dialogs.</param> public CSVDownloaderViewModel(IExtendedWindowManager windowManager) : base("CSV Downloader") { _windowManager = windowManager; Username = string.Empty; FilePath = string.Empty; }
/// <summary> /// Constructor. /// </summary> /// <param name="windowManager">WindowManager used to display dialogs.</param> /// <param name="displayName">Display name.</param> public ScrobbleTimeViewModelBase(IExtendedWindowManager windowManager, string displayName) : base(windowManager, displayName) { _currentTimeTimer = new Timer(1000); _currentTimeTimer.Elapsed += _currentTimeTimer_Elapsed; UseCurrentTime = true; }
/// <summary> /// Constructor. /// </summary> /// <param name="windowManager">WindowManager used to display dialogs.</param> /// <param name="userApi">The last.fm api object to get the scrobbles of an user.</param> public FriendScrobbleViewModel(IExtendedWindowManager windowManager, IUserApi userApi) : base(windowManager, "Friend Scrobbler") { _userApi = userApi; Scrobbles = new ObservableCollection <FetchedFriendTrackViewModel>(); Amount = 20; }
/// <summary> /// Constructor. /// </summary> /// <param name="windowManager">WindowManager used to display dialogs.</param> /// <param name="displayName">Display name.</param> protected ScrobbleViewModelBase(IExtendedWindowManager windowManager, string displayName) : base(displayName) { WindowManager = windowManager ?? throw new ArgumentNullException(nameof(windowManager)); ScrobbleCommand = new DelegateCommand((o) => Scrobble().Forget()); PreviewCommand = new DelegateCommand((o) => Preview()); }
/// <summary> /// Constructor. /// </summary> /// <param name="windowManager">WindowManager used to display dialogs.</param> /// <param name="displayName">Display name.</param> /// <param name="trackAPI">Last.fm API object for getting track information.</param> /// <param name="albumAPI">Last.fm API object for getting album information.</param> /// <param name="lastAuth">Last.fm authentication object.</param> public MediaPlayerScrobbleViewModelBase(IExtendedWindowManager windowManager, string displayName, ITrackApi trackAPI, IAlbumApi albumAPI, ILastAuth lastAuth) : base(windowManager, displayName) { _trackAPI = trackAPI; _albumAPI = albumAPI; _lastAuth = lastAuth; }
/// <summary> /// Constructor. /// </summary> /// <param name="windowManager">WindowManager used to display dialogs.</param> /// <param name="parserFactory">The factory used to create <see cref="ITextFieldParser"/>.</param> public CSVScrobbleViewModel(IExtendedWindowManager windowManager, ITextFieldParserFactory parserFactory) : base(windowManager, "CSV Scrobbler") { _parserFactory = parserFactory; Scrobbles = new ObservableCollection <ParsedCSVScrobbleViewModel>(); Duration = 1; ScrobbleMode = CSVScrobbleMode.ImportMode; }
/// <summary> /// Constructor. /// </summary> /// <param name="windowManager">WindowManager used to display dialogs.</param> /// <param name="userApi">The last.fm api object to get the scrobbles of an user.</param> public FriendScrobbleViewModel(IExtendedWindowManager windowManager, IUserApi userApi) : base(windowManager, "Friend Scrobbler") { _userApi = userApi; Scrobbles = new ObservableCollection <FetchedFriendTrackViewModel>(); Amount = 20; FetchCommand = new DelegateCommand((o) => FetchScrobbles().Forget()); }
/// <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> /// Constructor. /// </summary> /// <param name="windowManager">WindowManager used to display dialogs.</param> /// <param name="userAPI">Last.fm user api used to fetch top artists and albums.</param> /// <param name="fileOperator">FileOperator used to write to disk.</param> public CSVDownloaderViewModel(IExtendedWindowManager windowManager, IUserApi userAPI, IFileOperator fileOperator) : base("CSV Downloader") { _windowManager = windowManager ?? throw new ArgumentNullException(nameof(windowManager)); _userAPI = userAPI ?? throw new ArgumentNullException(nameof(userAPI)); _fileOperator = fileOperator ?? throw new ArgumentNullException(nameof(fileOperator)); DownloadCommand = new DelegateCommand((o) => Download().Forget()); }
/// <summary> /// Constructor. /// </summary> /// <param name="windowManager">WindowManager used to display dialogs.</param> /// <param name="trackAPI">Last.fm API object for getting track information.</param> /// <param name="albumAPI">Last.fm API object for getting album information.</param> /// <param name="lastAuth">Last.fm authentication object.</param> public ITunesScrobbleViewModel(IExtendedWindowManager windowManager, ITrackApi trackAPI, IAlbumApi albumAPI, ILastAuth lastAuth) : base(windowManager, "ITunes Scrobbler", trackAPI, albumAPI, lastAuth) { PercentageToScrobble = 0.5; if (AutoConnect) { Connect(); } }
/// <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..."; }
/// <summary> /// Constructor. /// </summary> /// <param name="windowManager">WindowManager used to display dialogs.</param> public ITunesScrobbleViewModel(IExtendedWindowManager windowManager) : base(windowManager, "ITunes Scrobbler") { PercentageToScrobble = 0.5; if (AutoConnect) { Connect(); } }
/// <summary> /// Constructor. /// </summary> /// <param name="windowManager">WindowManager used to display dialogs.</param> /// <param name="userAPI">Last.fm user api used to fetch top artists and albums.</param> public CollageCreatorViewModel(IExtendedWindowManager windowManager, IUserApi userAPI) : base("Collage Creator") { _windowManager = windowManager; _userAPI = userAPI; TimeSpan = LastStatsTimeSpan.Overall; SelectedCollageSize = CollageSize.ThreeByThree; CustomCollageSize = 10; ShowNames = true; ShowPlaycounts = true; UploadToWeb = true; }
/// <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> public MainViewModel(IExtendedWindowManager windowManager, ILastFMClient client, IScrobblerFactory scrobblerFactory, ILocalFileFactory localFileFactory, IFileOperator fileOperator, IDirectoryOperator directoryOperator, ISerializer serializer, ILogger logger, IGitHubClient gitHubClient, IProcessManager processManager) { _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; SetupViewModels(localFileFactory, directoryOperator, serializer, gitHubClient, processManager); TitleString = "Last.fm Scrubbler WPF Beta " + Assembly.GetExecutingAssembly().GetName().Version; CurrentStatus = "Waiting to scrobble..."; }
/// <summary> /// Constructor. /// </summary> public GeneralSettingsViewModel(IExtendedWindowManager windowManager) { _windowManager = windowManager; MinimizeToTray = Settings.Default.MinimizeToTray; StartMinimized = Settings.Default.StartMinimized; StartupUpdateCheck = Settings.Default.StartupUpdateCheck; if (Settings.Default.StartupUpdateCheck) { CheckForUpdates(false).Forget(); } }
/// <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> public MainViewModel(IExtendedWindowManager windowManager, ILastFMClientFactory clientFactory, IScrobblerFactory scrobblerFactory, ILocalFileFactory localFileFactory, IFileOperator fileOperator, IDirectoryOperator directoryOperator, ISerializer <User> userSerializer) { _windowManager = windowManager; _lastFMClientFactory = clientFactory; _scrobblerFactory = scrobblerFactory; _fileOperator = fileOperator; TitleString = "Last.fm Scrubbler WPF " + 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="userAPI">Last.fm user api used to fetch top artists and albums.</param> public CollageCreatorViewModel(IExtendedWindowManager windowManager, IUserApi userAPI) : base("Collage Creator") { _windowManager = windowManager ?? throw new ArgumentNullException(nameof(windowManager)); _userAPI = userAPI ?? throw new ArgumentNullException(nameof(userAPI)); TimeSpan = LastStatsTimeSpan.Overall; SelectedCollageSize = CollageSize.ThreeByThree; CustomCollageSize = 10; ShowNames = true; ShowPlaycounts = true; UploadToWeb = true; CreateCollageCommand = new DelegateCommand((o) => CreateCollage().Forget()); }
/// <summary> /// Constructor. /// </summary> /// <param name="windowManager">WindowManager used to display dialogs.</param> /// <param name="trackAPI">Last.fm API object for getting track information.</param> /// <param name="albumAPI">Last.fm API object for getting album information.</param> /// <param name="artistAPI">Last.fm API object for getting artist information.</param> public SpotifyScrobbleViewModel(IExtendedWindowManager windowManager, ITrackApi trackAPI, IAlbumApi albumAPI, IArtistApi artistAPI) : base(windowManager, "Spotify Scrobbler", trackAPI, albumAPI, artistAPI) { PercentageToScrobble = 0.5; _counterTimer = new Timer(1000); _counterTimer.Elapsed += CounterTimer_Elapsed; _refreshTimer = new Timer(1000); _refreshTimer.Elapsed += RefreshTimer_Elapsed; if (AutoConnect) { Connect(); } }
/// <summary> /// Constructor. /// </summary> /// <param name="windowManager">WindowManager used to display dialogs.</param> /// <param name="gitHubClient">GitHub client to check for updates.</param> /// <param name="processManager">ProcessManager for working with processor functions.</param> public GeneralSettingsViewModel(IExtendedWindowManager windowManager, IGitHubClient gitHubClient, IProcessManager processManager) { _windowManager = windowManager ?? throw new ArgumentNullException(nameof(windowManager)); _gitHubClient = gitHubClient ?? throw new ArgumentNullException(nameof(windowManager)); _processManager = processManager ?? throw new ArgumentNullException(nameof(windowManager)); MinimizeToTray = Settings.Default.MinimizeToTray; StartMinimized = Settings.Default.StartMinimized; StartupUpdateCheck = Settings.Default.StartupUpdateCheck; if (Settings.Default.StartupUpdateCheck) { CheckForUpdates(false).Forget(); } }
/// <summary> /// Constructor. /// </summary> /// <param name="windowManager">WindowManager used to display dialogs.</param> public SpotifyScrobbleViewModel(IExtendedWindowManager windowManager) : base(windowManager, "Spotify Scrobbler") { PercentageToScrobble = 0.5; _spotify = new SpotifyLocalAPI(); _counterTimer = new Timer(1000); _counterTimer.Elapsed += _counterTimer_Elapsed; _refreshTimer = new Timer(1000); _refreshTimer.Elapsed += _refreshTimer_Elapsed; if (AutoConnect) { Connect(); } }
/// <summary> /// Constructor. /// </summary> /// <param name="windowManager">WindowManager used to display dialogs.</param> /// <param name="trackAPI">Last.fm API object for getting track information.</param> /// <param name="albumAPI">Last.fm API object for getting album information.</param> /// <param name="lastAuth">Last.fm authentication object.</param> public SpotifyScrobbleViewModel(IExtendedWindowManager windowManager, ITrackApi trackAPI, IAlbumApi albumAPI, ILastAuth lastAuth) : base(windowManager, "Spotify Scrobbler", trackAPI, albumAPI, lastAuth) { PercentageToScrobble = 0.5; _spotify = new SpotifyLocalAPI(); _counterTimer = new Timer(1000); _counterTimer.Elapsed += _counterTimer_Elapsed; _refreshTimer = new Timer(1000); _refreshTimer.Elapsed += _refreshTimer_Elapsed; if (AutoConnect) { Connect(); } }
/// <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); }
/// <summary> /// Constructor. /// Deserializes the users. /// </summary> /// <param name="windowManager">WindowManager used to display dialogs.</param> /// <param name="lastAuth">Last.fm authentication object.</param> /// <param name="fileOperator">FileOperator used to write to disk.</param> /// <param name="directoryOperator">DirectoryOperator used to check and create directories.</param> /// <param name="userSerializer">Serializer used to serialize <see cref="User"/>.</param> public UserViewModel(IExtendedWindowManager windowManager, ILastAuth lastAuth, IFileOperator fileOperator, IDirectoryOperator directoryOperator, ISerializer <User> userSerializer) { _windowManager = windowManager; _lastAuth = lastAuth; _fileOperator = fileOperator; _directoryOperator = directoryOperator; _userSerializer = userSerializer; AvailableUsers = new ObservableCollection <User>(); if (!_directoryOperator.Exists(USERSFOLDER)) { _directoryOperator.CreateDirectory(USERSFOLDER); } DeserializeUsers(); }
/// <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); }
/// <summary> /// Creates the ViewModels. /// </summary> /// <param name="windowManager">WindowManager used to display dialogs.</param> /// <param name="userAPI">Last.fm user API.</param> /// <param name="fileOperator">FileOperator used to interface with files.</param> private TabViewModel[] CreateViewModels(IExtendedWindowManager windowManager, IUserApi userAPI, IFileOperator fileOperator) { var pasteYourTasteVM = new PasteYourTasteViewModel(userAPI); pasteYourTasteVM.StatusUpdated += VM_StatusUpdated;; var csvDownloaderVM = new CSVDownloaderViewModel(windowManager, userAPI, fileOperator); csvDownloaderVM.StatusUpdated += VM_StatusUpdated; var collageCreatorVM = new CollageCreatorViewModel(windowManager, userAPI); collageCreatorVM.StatusUpdated += VM_StatusUpdated; var milestoneCheckerVM = new MilestoneCheckerViewModel(userAPI); milestoneCheckerVM.StatusUpdated += VM_StatusUpdated; return(new TabViewModel[] { pasteYourTasteVM, csvDownloaderVM, collageCreatorVM, milestoneCheckerVM }); }
/// <summary> /// Constructor. /// Deserializes the users. /// </summary> /// <param name="windowManager">WindowManager used to display dialogs.</param> /// <param name="lastAuth">Last.fm authentication object.</param> /// <param name="userApi">Api to get recent scrobbles with.</param> /// <param name="fileOperator">FileOperator used to write to disk.</param> /// <param name="directoryOperator">DirectoryOperator used to check and create directories.</param> /// <param name="userSerializer">Serializer used to serialize <see cref="User"/>.</param> public UserViewModel(IExtendedWindowManager windowManager, ILastAuth lastAuth, IUserApi userApi, IFileOperator fileOperator, IDirectoryOperator directoryOperator, ISerializer userSerializer) { _windowManager = windowManager; _lastAuth = lastAuth; _userApi = userApi ?? throw new ArgumentNullException(nameof(userApi)); _fileOperator = fileOperator; _directoryOperator = directoryOperator; _userSerializer = userSerializer; AvailableUsers = new ObservableCollection <User>(); if (!_directoryOperator.Exists(USERSFOLDER)) { _directoryOperator.CreateDirectory(USERSFOLDER); } DeserializeUsers(); LoadLastUser(); }
/// <summary> /// Creates the ViewModels. /// </summary> /// <param name="windowManager">WindowManager used to display dialogs.</param> /// <param name="userAPI">Last.fm user API.</param> private void CreateViewModels(IExtendedWindowManager windowManager, IUserApi userAPI) { var pasteYourTasteVM = new PasteYourTasteViewModel(); pasteYourTasteVM.StatusUpdated += VM_StatusUpdated;; var csvDownloaderVM = new CSVDownloaderViewModel(windowManager); csvDownloaderVM.StatusUpdated += VM_StatusUpdated; var collageCreatorVM = new CollageCreatorViewModel(windowManager, userAPI); collageCreatorVM.StatusUpdated += VM_StatusUpdated; ActivateItem(pasteYourTasteVM); ActivateItem(csvDownloaderVM); ActivateItem(collageCreatorVM); // should be selected ActivateItem(pasteYourTasteVM); }