public void AddPlayableTrack(TrackBase source)
        {
            PlayableTrackInfo playable = new PlayableTrackInfo();

            playable.Title  = source.MetaData.Title.Value;
            playable.Artist = source.MetaData.AlbumArtists.JoinedValue;

            playable.IsPlayableOffline = source.PlayableOffline;
            playable.IsPlayableOnline  = source.PlayableOnline;

            if (source.PlayableOffline)
            {
                playable.OfflinePlayer = source.SupportedMediaPlayers;
            }
            else
            {
                playable.OnlinePlayer = source.SupportedMediaPlayers;
            }

            if (source is TrackVirtual && source.PlayableOnline)
            {
                TrackVirtual sourceVirtual = source as TrackVirtual;
                playable.SpotifyURI        = sourceVirtual.SpotifyURI;
                playable.PlaytimeInSeconds = 10; // TODO
            }
            else if (source is TrackLocal && source.PlayableOffline)
            {
                TrackLocal sourceLocal = source as TrackLocal;
                playable.FilePath          = sourceLocal.MusicFileProperties.Path;
                playable.PlaytimeInSeconds = sourceLocal.MusicFileProperties.Duration;
            }

            tracks.Add(playable);
        }
Beispiel #2
0
        public static TrackBase CopyTrack(TrackBase source)
        {
            TrackBase target = null;

            if (source is TrackVirtual)
            {
                TrackVirtual sourceVirtual = source as TrackVirtual;
                target = new TrackVirtual(sourceVirtual.MetaData, sourceVirtual.IsOnlyMetaData)
                {
                    SpotifyID  = sourceVirtual.SpotifyID,
                    SpotifyURI = sourceVirtual.SpotifyURI
                };
            }
            else if (source is TrackLocal)
            {
                TrackLocal sourceLocal = source as TrackLocal;
                target = new TrackLocal(sourceLocal.MusicFileProperties, sourceLocal.MetaData, sourceLocal.MetaDataExtended)
                {
                    MatchCandidates          = sourceLocal.MatchCandidates,
                    ActiveCandidateMBTrackID = sourceLocal.ActiveCandidateMBTrackID
                };
            }

            target.PlayableOffline       = source.PlayableOffline;
            target.PlayableOnline        = source.PlayableOnline;
            target.SupportedMediaPlayers = source.SupportedMediaPlayers;

            return(target);
        }
        public static void AddMusicFile(SupportedFileExtension ext, string path)
        {
            if (path == null)
            {
                throw new ArgumentNullException(nameof(path), $"Cannot add new music file, since path is null.");
            }
            if (path.Length < 8) // "C:\x.abc" is 8 characters long
            {
                throw new ArgumentException("Cannot add new music file, path is too short.", nameof(path));
            }

            try
            {
                ITaggingService             taggingService = DependencyInjector.GetService <ITaggingService>();
                Dictionary <string, object> tagData        = taggingService.Read(path, new List <string>()
                {
                    ext.ToString()
                });
                MetaData trackData = UtilityHelper.FormatMetaData(tagData);

                TrackLocal track = new TrackLocal(new MusicFileProperties(path), trackData);
                TracklistTracks.Add(track);
            }
            catch (Exception) // TODO: more polished exception handling
            {
                UtilityHelper.ShowExceptionDialog(
                    "File reading error",
                    "File reading error happened while trying to parse a music file from local directory. This file will be omitted from Tracklist!",
                    $"File location: {path}");
            }
        }
Beispiel #4
0
        public static void RegisterFingerprintData(TrackLocal track, Dictionary <string, object> source)
        {
            string fingerprint = null;
            int    duration    = -1;
            int    bitDepth    = -1;
            int    channels    = -1;
            int    sampleRate  = -1;

            if (source.Keys.Contains("Fingerprint"))
            {
                fingerprint = (string)source.Select(pair => pair).Where(pair => pair.Key.Equals("Fingerprint")).First().Value;
            }

            if (source.Keys.Contains("Duration"))
            {
                duration = (int)source.Select(pair => pair).Where(pair => pair.Key.Equals("Duration")).First().Value;
            }

            if (source.Keys.Contains("BitDepth"))
            {
                bitDepth = (int)source.Select(pair => pair).Where(pair => pair.Key.Equals("BitDepth")).First().Value;
            }

            if (source.Keys.Contains("Channels"))
            {
                channels = (int)source.Select(pair => pair).Where(pair => pair.Key.Equals("Channels")).First().Value;
            }

            if (source.Keys.Contains("SampleRate"))
            {
                sampleRate = (int)source.Select(pair => pair).Where(pair => pair.Key.Equals("SampleRate")).First().Value;
            }

            track.MusicFileProperties.RegisterFingerprintData(fingerprint, duration, bitDepth, channels, sampleRate);
        }
        public static void RemoveMusicFile(string path)
        {
            TrackLocal itemToRemove = TracklistTracks.SingleOrDefault(t => t.MusicFileProperties.Path == path);

            if (itemToRemove != null)
            {
                TracklistTracks.Remove(itemToRemove);
            }
        }