//private readonly SourceList<Artist> _sourceArtists;
        //public IObservableList<Artist> Artists => this._sourceArtists;

        //public IObservableList<Album> Albums => throw new NotImplementedException();

        #endregion

        #region IWriteLibraryService

        public async Task <Track> AddTrackAsync(AddTrackCommand command)
        {
            if (command == null)
            {
                throw new ArgumentNullException(nameof(command));
            }

            // TODO: ensure track paths uniqueness

            try
            {
                var newTrack = await this._trackFactory.CreateAsync(
                    command.Location,
                    command.Duration,
                    command.LastModifiedDateTime,
                    command.FileSizeBytes,
                    command.Title,
                    command.Performers,
                    command.Composers,
                    command.Year,
                    command.AlbumAssociation);

                var addedTrack = await this._tracksRepository.AddAsync(newTrack);

                return(addedTrack);
            }
            catch //(Exception ex)
            {
                // TODO: log
                return(null);
            }
            finally
            {
            }
        }
 public TrackInputViewModel(Track newTrack, ITrackService trackService, ILogging logger, Window window)
 {
     NewTrack     = newTrack;
     TrackService = trackService;
     Logger       = logger;
     Window       = window;
     if (NewTrack.IsValid())
     {
         SaveTrackCommand = new UpdateTrackCommand(this);
     }
     else
     {
         SaveTrackCommand = new AddTrackCommand(this);
     }
 }
        public override async Task Handle(TrackUploadFinishedEvent @event, CancellationToken cancellationToken)
        {
            var command = new AddTrackCommand
            {
                TrackId    = Guid.NewGuid(),
                FileName   = @event.FileName,
                PlaylistId = @event.PlaylistId,
                TrackName  = @event.TrackName
            };

            await _mediator.Send(command, cancellationToken);

            var notificationMessage = new TrackUploadFinishedNotificationMessage
            {
                IsSuccess  = @event.IsSuccess,
                PlaylistId = @event.PlaylistId,
                TrackName  = @event.TrackName
            };

            await _clientNotificationService.SendNotificationMessageAsync(@event.UserId, notificationMessage);
        }