Esempio n. 1
0
        public async Task Update(CancellationToken token)
        {
            var query = new FileQuery(KnownFolders.MusicLibrary);
            await query.ToAsyncEnumerable().ForEachAsync(async arg =>
            {
                var(file, deffer) = arg;
                try
                {
                    if (!SUPPORTED_EXTENSIONS.Contains(Path.GetExtension(file.Name)))
                    {
                        deffer.Complete();
                        return;
                    }



                    using (var stream = await file.OpenReadAsync())
                    {
                        var abstracStream = new TagLib.StreamFileAbstraction(file.Name, stream.AsStream(), null);
                        await Task.Run(async() =>
                        {
                            using (var tagFile = TagLib.File.Create(abstracStream))
                            {
                                var tag = tagFile.Tag;



                                //var artistString = tag.Artists properties.Artist ?? properties.AlbumArtist ?? "";

                                //var artistString = properties.Artist ?? properties.AlbumArtist ?? "";
                                //var discNumber = GetDiscNumber(discNumberPropertie);
                                //var componosts = (await Task.WhenAll(properties.Composers.Select(x => store.GetOrCreateArtist(x, token)))).ToList();
                                //var title = properties.Title;
                                //var artist = (await Task.WhenAll(artistString.Split(new[] { ';', ',' }, StringSplitOptions.RemoveEmptyEntries).Select(x => store.GetOrCreateArtist(x.Trim(), token)))).ToList();
                                //var genres = (await Task.WhenAll(properties.Genre.Select(x => store.GetOrCreateGenre(x, token)))).ToList();
                                var musicProperties = await file.Properties.GetMusicPropertiesAsync();
                                var song            = await MusicStore.Instance.AddSong(this.Id, file.Path,
                                                                                        duration: musicProperties.Duration,
                                                                                        composers: tag.Composers,
                                                                                        interpreters: tag.Performers,
                                                                                        genres: tag.Genres,
                                                                                        year: tag.Year,
                                                                                        libraryImageId: file.Path,
                                                                                        albumInterpret: tag.JoinedAlbumArtists,
                                                                                        albumName: tag.Album,
                                                                                        title: tag.Title,
                                                                                        track: (int)tag.Track,
                                                                                        discNumber: (int)tag.Disc,
                                                                                        cancelToken: deffer.CancelToken);
                            }
                        });
                        //s.AddArtists(artist, ArtistType.Interpret);
                        //s.AddArtists(componosts, ArtistType.Composer);
                        //s.AddGenres(genres);
                        //var album = await store.AddSong(s, this, deffer.CancelToken);
                        //if (album != null)
                        //{
                        //        // lets look if we have already set an image on another song
                        //        var imagePath = album.Songs.Where(x => x.LibraryImageId != null).Select(x => x.LibraryImageId).FirstOrDefault() ?? file.Path;
                        //    s.LibraryImageId = imagePath;
                        //    await store.SaveChangesAsync(token);

                        //}
                    }
                    deffer.Complete();
                }
                catch (Exception e)
                {
                    deffer.Complete(e);
                }
            }, token);
        }
        private async void btnSave_Clicked(object sender, EventArgs e)
        {
            try
            {
                var folder = await FileSystem.Current.GetFileFromPathAsync(picketFilePath);

                streamR.Dispose();

                streamR = await folder.OpenAsync(FileAccess.ReadAndWrite);

                TagLib.Id3v2.Tag.DefaultVersion = 3; TagLib.Id3v2.Tag.ForceDefaultVersion = true;

                using (var tagFile = TagLib.File.Create(new FileAbstraction(picketFileName, streamR) /*TagLib.File.Create(new TagLib.StreamFileAbstraction(name, streamR, streamW)*/))
                {
                    var tags = tagFile.Tag;

                    string[] realArtist = new string[] { };
                    string[] realGenres = new string[] { };
                    if (!string.IsNullOrEmpty(txtArtist.Text))
                    {
                        var sp = txtArtist.Text.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);

                        if (sp.Count() > 0)
                        {
                            realArtist = sp;
                        }
                    }

                    if (!string.IsNullOrEmpty(txtGenre.Text))
                    {
                        var sp = txtGenre.Text.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);

                        if (sp.Count() > 0)
                        {
                            realGenres = sp;
                        }
                    }

                    tags.Title        = txtSongTitle.Text.FullTrimText();
                    tags.Performers   = realArtist.Select(x => x.TrimStart().TrimEnd()).ToArray();
                    tags.AlbumArtists = realArtist.Select(x => x.TrimStart().TrimEnd()).ToArray();
                    tags.Album        = txtAlbum.Text.FullTrimText();
                    tags.Track        = txtTrackNo.Text.ToUInt();
                    tags.Year         = txtYear.Text.ToUInt();
                    tags.Genres       = realGenres.Select(x => x.TrimStart().TrimEnd()).ToArray();

                    if (changedCover)
                    {
                        Stream coverStream = new MemoryStream(changedCoverImg);
                        var    tagCover    = new TagLib.StreamFileAbstraction("hola", coverStream, coverStream);
                        tagFile.Tag.Pictures = new[] { new TagLib.Picture(tagCover) };
                        coverStream.Dispose();
                    }
                    tagFile.Save();
                    tagFile.Dispose();
                    streamR.Dispose();

                    //AQUI SETIAR UN VARIABLE PARA DECIR QUE REFRESQUE EL LISTVIEW
                    App.Global_refreshListSong = true;
                    await Navigation.PopAsync();

                    //OnBackButtonPressed();
                }
            }
            catch (Exception ex)
            {
                streamR.Dispose();
                string msj = string.Format("Ha ocurrido un error: {0}", ex);
                await DisplayAlert("Error", msj, "Ok");
            }
        }