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); }
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}"); } }
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); } }