FullTrackData CreateFromNode(CloudNode node) { try { string title; string id; string album; string artist; string genre; int year = 0; string yearStr; var dict = node.Properties[ApiConstants.AmazonAppIdentifier]; dict.TryGetValue("Title", out title); dict.TryGetValue("Id", out id); dict.TryGetValue("Album", out album); dict.TryGetValue("Artist", out artist); dict.TryGetValue("Genre", out genre); int rating = 0; string ratingString; if (dict.TryGetValue("Year", out yearStr)) { year = int.Parse(yearStr); } if (dict.TryGetValue("Rating", out ratingString)) { rating = int.Parse(ratingString); } var track = new FullTrackData(title, artist, "", album, genre) { Year = year, SongId = id, Id = node.Id, ServiceId = Id, Rating = rating, ServiceType = ServiceType.Amazon, MediaType = node.ContentProperties.Video != null ? MediaType.Video : node.ContentProperties.image != null ? MediaType.Photo : MediaType.Audio, FileExtension = node.ContentProperties.Extension, }; return(track); } catch (Exception ex) { LogManager.Shared.Report(ex); } return(null); }
FullTrackData FromFilePath(string filePath) { string id = ""; string Title = ""; string Artist = ""; string Album = ""; string AlbumArtist = ""; string Genre = ""; int Year = 0; int Disc = 0; int TotalDiscs = 0; int Track = 0; int BeatsPerMinute = 0; double Duration = 0; int rating = 0; bool hasImage; try { using (var file = TagLib.File.Create(filePath)) { if (string.IsNullOrEmpty(file.Tag.MusicIpId)) { using (var md5 = MD5.Create()) { using (var stream = System.IO.File.OpenRead(filePath)) { byte[] hash; hash = md5.ComputeHash(stream); id = BitConverter.ToString(hash).Replace("-", "").ToLower(); } } file.Tag.MusicIpId = id; file.Save(); } else { id = file.Tag.MusicIpId; } TagLib.Tag Tag = file.GetTag(TagLib.TagTypes.Id3v2); var ratingTag = TagLib.Id3v2.PopularimeterFrame.Get((TagLib.Id3v2.Tag)Tag, "WindowsUser", true); //based on 0-5; //taglib sharp is 0-255; rating = ratingTag.Rating / 51; Title = file?.Tag?.Title ?? FullTrackData.GetTitleFromFileName(filePath); Artist = file.Tag.FirstPerformer ?? FullTrackData.GetArtistFromFileName(filePath); Album = file.Tag.Album ?? ""; AlbumArtist = file.Tag.FirstAlbumArtist ?? ""; Genre = file.Tag.FirstGenre ?? ""; Year = (int)file.Tag.Year; Disc = (int)file.Tag.Disc; TotalDiscs = (int)file.Tag.DiscCount; Track = (int)file.Tag.Track; BeatsPerMinute = (int)file.Tag.BeatsPerMinute; Duration = file.Properties.Duration.TotalMilliseconds; } } catch (Exception ex) { Title = FullTrackData.GetTitleFromFileName(filePath); Artist = FullTrackData.GetArtistFromFileName(filePath); } return(new FullTrackData(Title, Artist, AlbumArtist, Album, Genre) { Disc = Disc, Track = Track, Year = Year, Id = id, FileLocation = filePath, FileExtension = Path.GetExtension(filePath)?.Trim('.'), MediaType = FromFile(filePath), Priority = 1, ServiceId = Id, ServiceType = ServiceType, Rating = rating, }); }
public override async Task <SearchResults> Search(string query) { var result = new SearchResults(); try{ var path = "search?part=snippet&maxResults=50&q=" + HttpUtility.UrlEncode(query); var searchListResponse = await Api.Get <SearchListResponse>(path); foreach (var searchResult in searchListResponse.Items) { switch (searchResult.Id.Kind) { case "youtube#video": var id = searchResult.Id.VideoId; var t = new FullTrackData(searchResult.Snippet.Title, "", "", "", "") { AlbumArtwork = new List <AlbumArtwork> { new AlbumArtwork { Url = string.Format("http://img.youtube.com/vi/{0}/0.jpg", id) } }, MediaType = MediaType.Video, ServiceId = Id, Id = id, ServiceType = ServiceType, FileExtension = "mp4" }; result.Videos.Add(new OnlineSong(t.Title, t.NormalizedTitle) { Id = t.SongId, Artist = t.Artist, Album = t.Album, AlbumId = t.AlbumId, ArtistId = t.Artist, Disc = t.Disc, Genre = t.Genre, Rating = t.Rating, TrackCount = t.Track, Year = t.Year, TrackData = t, }); //items.Add(new MediaItem //{ // Id = id, // MediaType = MediaType.Youtube, // Title = searchResult.Snippet.Title, // DownloadUrl = string.Format("http://www.youtube.com/watch?v={0}", id), // OrigionalUrl = string.Format("http://www.youtube.com/watch?v={0}", id), // ImageUrl = string.Format("http://img.youtube.com/vi/{0}/0.jpg", id), //}); break; case "youtube#channel": //channels.Add(String.Format("{0} ({1})", searchResult.Snippet.Title, searchResult.Id.ChannelId)); break; case "youtube#playlist": result.Playlists.Add(new OnlinePlaylist { Id = searchResult.Id.PlaylistId, Name = searchResult.Snippet.Title, ServiceId = Id, Description = searchResult.Snippet.Description, AllArtwork = searchResult.Snippet.Thumbnails?.Select(x => new AlbumArtwork { Url = x.Value.Url }).ToArray() ?? new AlbumArtwork[0], }); break; } } } catch (Exception ex) { LogManager.Shared.Report(ex); } return(result); }