private MPMediaItemArtwork GetImageFromUrl(string imagePath)
        {
            MPMediaItemArtwork result = null;

            try
            {
                using (var nsUrl = new NSUrl(imagePath))
                {
                    using (var data = NSData.FromUrl(nsUrl))
                    {
                        var image = UIImage.LoadFromData(data);
                        result = new MPMediaItemArtwork(image);
                    }
                }
            }
            catch
            {
                UIImage image = UIImage.FromBundle(imagePath);
                if (image != null)
                {
                    result = new MPMediaItemArtwork(image);
                }
            }
            return(result);
        }
예제 #2
0
        public void UpdateSong(Song song)
        {
            currentSong = song;
            if (song == null)
            {
                return;
            }
            try {
                nowPlayingInfo = new MPNowPlayingInfo
                {
                    Title      = song?.Name ?? "",
                    Artist     = song?.Artist ?? "",
                    AlbumTitle = song?.Album ?? "",
                    Genre      = song?.Genre ?? "",
                    Artwork    = CreateDefaultArtwork(),
                };
                SetAdditionInfo(song, nowPlayingInfo);

                artwork = null;
                FetchArtwork(song);
                OnSongChanged(song);
                App.RunOnMainThread(() => MPNowPlayingInfoCenter.DefaultCenter.NowPlaying = nowPlayingInfo);
            } catch (Exception ex) {
                Console.WriteLine(ex);
            }
        }
예제 #3
0
 public void UpdateSong(Song song)
 {
     if (song == null)
     {
         return;
     }
     try
     {
         nowPlayingInfo = new MPNowPlayingInfo
         {
             Title      = song?.Name ?? "",
             Artist     = song?.Artist ?? "",
             AlbumTitle = song?.Album ?? "",
             Genre      = song?.Genre ?? "",
             Artwork    = (new MPMediaItemArtwork(Images.GetDefaultAlbumArt(Images.AlbumArtScreenSize))),
         };
         artwork = null;
         FetchArtwork(song);
         App.RunOnMainThread(() => MPNowPlayingInfoCenter.DefaultCenter.NowPlaying = nowPlayingInfo);
     }
     catch (Exception ex)
     {
         Console.WriteLine(ex);
     }
 }
예제 #4
0
        async void FetchArtwork(Song song)
        {
            try {
                var art = await song.GetLocalImage(Images.MaxScreenSize);

                if (art == null)
                {
                    var url = await ArtworkManager.Shared.GetArtwork(song);

                    if (string.IsNullOrWhiteSpace(url))
                    {
                        return;
                    }
                    if (art == null || song.Id != Settings.CurrentSong)
                    {
                        return;
                    }
                }

                artwork = new MPMediaItemArtwork(new CGSize(9999, 9999), (arg) => {
                    var img = GetImage(song, arg.Width).Result;
                    return(img);
                });
                if (nowPlayingInfo == null)
                {
                    return;
                }
                nowPlayingInfo.Artwork = artwork;
                App.RunOnMainThread(() => MPNowPlayingInfoCenter.DefaultCenter.NowPlaying = nowPlayingInfo);
            } catch (Exception ex) {
                LogManager.Shared.Report(ex);
            }
        }
예제 #5
0
        async void FetchArtwork(Song song)
        {
            try {
                var art = await song.GetLocalImage(Images.MaxScreenSize);

                if (art == null)
                {
                    var url = await ArtworkManager.Shared.GetArtwork(song);

                    if (string.IsNullOrWhiteSpace(url))
                    {
                        return;
                    }
                    var tcs          = new TaskCompletionSource <UIImage>();
                    var imageManager = SDWebImageManager.SharedManager.ImageDownloader.DownloadImage(new NSUrl(url), SDWebImageDownloaderOptions.HighPriority, (receivedSize, expectedSize, u) =>
                    {
                    }, (image, data, error, finished) =>
                    {
                        if (error != null)
                        {
                            tcs.TrySetException(new Exception(error.ToString()));
                        }
                        else
                        {
                            tcs.TrySetResult(image);
                        }
                    });
                    art = await tcs.Task;
                    if (art == null || song.Id != Settings.CurrentSong)
                    {
                        return;
                    }
                }
                if (Device.IsIos10)
                {
                    artwork = new MPMediaItemArtwork(new CGSize(Images.MaxScreenSize, Images.MaxScreenSize), (arg) =>
                    {
                        var isMainThread = App.IsMainThread;
                        var img          = GetImage(song, arg.Width).Result;
                        return(img);
                    });
                }
                else
                {
                    artwork = new MPMediaItemArtwork(art);
                }

                if (nowPlayingInfo == null)
                {
                    return;
                }
                nowPlayingInfo.Artwork = artwork;
                App.RunOnMainThread(() => MPNowPlayingInfoCenter.DefaultCenter.NowPlaying = nowPlayingInfo);
            } catch (Exception ex) {
                LogManager.Shared.Report(ex);
            }
        }
        public void ImageWithSize()
        {
            // trying to reproduce issue from bug #23619 - but turned out to be an iOS8 bug
            string file = Path.Combine(NSBundle.MainBundle.ResourcePath, "basn3p08.png");

            using (var img = UIImage.FromFile(file))
                using (var mia = new MPMediaItemArtwork(img)) {
                    Assert.That(img.Size.ToString(), Is.EqualTo("{Width=32, Height=32}"), "original");
                    var upscale = mia.ImageWithSize(new CGSize(100, 100));
                    Assert.That(upscale.Size.ToString(), Is.EqualTo("{Width=32, Height=32}"), "upscale");
                    var downscale = mia.ImageWithSize(new CGSize(16, 16));
                    Assert.That(downscale.Size.ToString(), Is.EqualTo("{Width=32, Height=32}"), "downscale");
                }
        }
예제 #7
0
        private void UpdateNowPlaying(StorySong item)
        {
            var newInfo = CreateInfo(item);

            UpdateInfo(newInfo);
            if (artworkUrl != item.ImageUri.OriginalString)
            {
                artworkUrl = item.ImageUri.OriginalString;
                artwork    = null;
                ImageService.Instance.LoadUrl(item.ImageUri.OriginalString).AsUIImageAsync().ContinueWith((task) => {
                    artwork         = new MPMediaItemArtwork(task.Result);
                    newInfo.Artwork = artwork;
                    UpdateInfo(newInfo);
                });
            }
        }
예제 #8
0
        public MemoryStream GetTrackImageStream(MPMediaItemArtwork artWork)
        {
            MemoryStream ms         = null;
            var          imageBytes = new byte[0];

            if (artWork != null)
            {
                if (artWork != null)
                {
                    var thumb = artWork.ImageWithSize(new CGSize(100, 100));
                    if (thumb != null)
                    {
                        ms = new MemoryStream(thumb.AsPNG().ToArray());
                    }
                }
            }
            return(ms);
        }
예제 #9
0
        async void FetchArtwork(Song song)
        {
            try
            {
                var art = await song.GetLocalImage(Images.MaxScreenSize);

                if (art == null)
                {
                    var url = await ArtworkManager.Shared.GetArtwork(song);

                    if (string.IsNullOrWhiteSpace(url))
                    {
                        return;
                    }
                    TaskCompletionSource <UIImage> tcs = new TaskCompletionSource <UIImage>();
                    var fether = new HNKNetworkFetcher(new NSUrl(url));
                    fether.FetchImage((image) => { tcs.TrySetResult(image); },
                                      (error) => { tcs.TrySetException(new Exception(error.ToString())); });
                    art = await tcs.Task;
                    if (art == null || song.Id != Settings.CurrentSong)
                    {
                        return;
                    }
                }
                artwork = new MPMediaItemArtwork(art);
                if (nowPlayingInfo == null)
                {
                    return;
                }
                nowPlayingInfo.Artwork = artwork;
                App.RunOnMainThread(() => MPNowPlayingInfoCenter.DefaultCenter.NowPlaying = nowPlayingInfo);
            }
            catch (Exception ex)
            {
                LogManager.Shared.Report(ex);
            }
        }
예제 #10
0
        private void PlatformLoad(Action <int> progressCallback)
        {
            MPMediaQuery mediaQuery = new MPMediaQuery();
            var          value      = NSObject.FromObject(MPMediaType.Music);
            var          type       = MPMediaItem.MediaTypeProperty;
            var          predicate  = MPMediaPropertyPredicate.PredicateWithValue(value, type);

            mediaQuery.AddFilterPredicate(predicate);
            mediaQuery.GroupingType = MPMediaGrouping.Album;

            List <Song>  songList  = new List <Song>();
            List <Album> albumList = new List <Album>();

            for (int i = 0; i < mediaQuery.Collections.Length; i++)
            {
                MPMediaItemCollection itemCollection = mediaQuery.Collections[i];
                List <Song>           albumSongs     = new List <Song>(itemCollection.Count);

                var                nsAlbumArtist = itemCollection.RepresentativeItem.ValueForProperty(MPMediaItem.AlbumArtistProperty);
                var                nsAlbumName   = itemCollection.RepresentativeItem.ValueForProperty(MPMediaItem.AlbumTitleProperty);
                var                nsAlbumGenre  = itemCollection.RepresentativeItem.ValueForProperty(MPMediaItem.GenreProperty);
                string             albumArtist   = nsAlbumArtist == null ? "Unknown Artist" : nsAlbumArtist.ToString();
                string             albumName     = nsAlbumName == null ? "Unknown Album" : nsAlbumName.ToString();
                string             albumGenre    = nsAlbumGenre == null ? "Unknown Genre" : nsAlbumGenre.ToString();
                MPMediaItemArtwork thumbnail     = itemCollection.RepresentativeItem.ValueForProperty(MPMediaItem.ArtworkProperty) as MPMediaItemArtwork;

                var album = new Album(new SongCollection(albumSongs), albumName, new Artist(albumArtist), new Genre(albumGenre), thumbnail);
                albumList.Add(album);

                for (int j = 0; j < itemCollection.Count; j++)
                {
                    var nsArtist = itemCollection.Items[j].ValueForProperty(MPMediaItem.ArtistProperty);
                    var nsTitle  = itemCollection.Items[j].ValueForProperty(MPMediaItem.TitleProperty);
                    var nsGenre  = itemCollection.Items[j].ValueForProperty(MPMediaItem.GenreProperty);
                    var assetUrl = itemCollection.Items[j].ValueForProperty(MPMediaItem.AssetURLProperty) as NSUrl;

                    if (nsTitle == null || assetUrl == null) // The Asset URL check will exclude iTunes match items from the Media Library that are not downloaded, but show up in the music app
                    {
                        continue;
                    }

                    string   artist   = nsArtist == null ? "Unknown Artist" : nsArtist.ToString();
                    string   title    = nsTitle.ToString();
                    string   genre    = nsGenre == null ? "Unknown Genre" : nsGenre.ToString();
                    TimeSpan duration = TimeSpan.FromSeconds(((NSNumber)itemCollection.Items[j].ValueForProperty(MPMediaItem.PlaybackDurationProperty)).FloatValue);

                    var song = new Song(album, new Artist(artist), new Genre(genre), title, duration, itemCollection.Items[j], assetUrl);
                    albumSongs.Add(song);
                    songList.Add(song);
                }
            }

            albumCollection = new AlbumCollection(albumList);
            songCollection  = new SongCollection(songList);

            /*_playLists = new PlaylistCollection();
             *
             *          MPMediaQuery playlists = new MPMediaQuery();
             *          playlists.GroupingType = MPMediaGrouping.Playlist;
             * for (int i = 0; i < playlists.Collections.Length; i++)
             * {
             *  MPMediaItemCollection item = playlists.Collections[i];
             *  Playlist list = new Playlist();
             *  list.Name = playlists.Items[i].ValueForProperty(MPMediaPlaylistPropertyName).ToString();
             *  for (int k = 0; k < item.Items.Length; k++)
             *  {
             *      TimeSpan time = TimeSpan.Parse(item.Items[k].ValueForProperty(MPMediaItem.PlaybackDurationProperty).ToString());
             *      list.Duration += time;
             *  }
             *  _playLists.Add(list);
             * }*/
        }
예제 #11
0
 internal Album(SongCollection songCollection, string name, Artist artist, Genre genre, MPMediaItemArtwork thumbnail)
     : this(songCollection, name, artist, genre)
 {
     this.thumbnail = thumbnail;
 }
예제 #12
0
 public Album(UInt64 persistentID, MPMediaItemArtwork coverImage)
 {
     PersistentID = persistentID;
     CoverImage   = coverImage;
 }