Beispiel #1
0
 public void AddSong(Song song)
 {
     SongDao.AddSong(song);
 }
        private static async Task <Song> CreateSongObjectByFile(StorageFile file, List <Song> listOfSongs)
        {
            Song song = null;

            Stream fileStream = null;

            TagLib.File tagFile     = null;
            string      title       = "";
            string      artist      = "";
            string      album       = "";
            string      genre       = "";
            string      trackNumber = "";
            string      year        = "";

            try
            {
                if (Stop)
                {
                    Stop = false;
                    return(new Song());
                }
                fileStream = await file.OpenStreamForReadAsync();

                tagFile = TagLib.File.Create(new StreamFileAbstraction(file.Name, fileStream, fileStream));

                if (tagFile.Tag.Album != null || string.IsNullOrWhiteSpace(tagFile.Tag.Album) == false)
                {
                    album = tagFile.Tag.Album;
                }
                else
                {
                    album = "Unknown";
                }

                if (tagFile.Tag.Title == null || string.IsNullOrWhiteSpace(tagFile.Tag.Title))
                {
                    title = file.DisplayName;
                }
                else
                {
                    title = tagFile.Tag.Title;
                }

                if (tagFile.Tag.FirstAlbumArtist != null && string.IsNullOrWhiteSpace(tagFile.Tag.FirstAlbumArtist) == false)
                {
                    artist = tagFile.Tag.FirstAlbumArtist;
                }
                else if (tagFile.Tag.FirstPerformer != null && string.IsNullOrWhiteSpace(tagFile.Tag.FirstPerformer) == false)
                {
                    artist = tagFile.Tag.FirstPerformer;
                }
                else
                {
                    artist = "Unknown";
                }

                trackNumber = Convert.ToString(tagFile.Tag.Track);
                year        = Convert.ToString(tagFile.Tag.Year);

                if (tagFile.Tag.FirstGenre != null && string.IsNullOrWhiteSpace(tagFile.Tag.FirstGenre) == false)
                {
                    genre = tagFile.Tag.FirstGenre;
                }
                else
                {
                    genre = string.Empty;
                }

                var matchingResults = listOfSongs.Where(s => s.Artist == artist && s.Album == album).ToList();

                string albumid;
                string hexColor = string.Empty;

                if (matchingResults.Count() > 0)
                {
                    albumid  = matchingResults[0].AlbumID;
                    hexColor = matchingResults[0].HexColor;
                }
                else
                {
                    albumid = Guid.NewGuid().ToString();

                    if (tagFile.Tag.Pictures.Length > 0)
                    {
                        var dataVector = tagFile.Tag.Pictures[0].Data.Data;

                        SaveCoverImageResult imageResult = await ImageHelper.SaveAlbumCover(dataVector, albumid);

                        hexColor = imageResult.HexColor;
                        //ImageHelper.BlurAlbumCover(albumid);
                    }
                }

                fileStream.Dispose();

                string songid = Guid.NewGuid().ToString();

                song = new Song()
                {
                    Title    = title,
                    Artist   = artist,
                    Album    = album,
                    AlbumID  = albumid,
                    ID       = songid,
                    Year     = year,
                    Track    = trackNumber,
                    Genre    = genre,
                    SongURI  = file.Path,
                    HexColor = hexColor
                };

                SongDao.AddSong(song);
            }
            catch
            {
            }

            return(song);
        }