From 006bba7980db1fcb3e7cac7a650a5d64c30acae9 Mon Sep 17 00:00:00 2001 From: Janco Kock Date: Sat, 31 Oct 2015 00:02:14 +0100 Subject: [PATCH] Added artwork download!! This is only a bottleneck at startup. --- MusicPlayer/MusicPlayer/APIHandler.cs | 14 +++++++-- MusicPlayer/MusicPlayer/Album.cs | 9 ++++-- MusicPlayer/MusicPlayer/Main.cs | 6 +++- MusicPlayer/MusicPlayer/NetworkHandler.cs | 35 +++++++++++++++++++++++ MusicPlayer/MusicPlayer/Program.cs | 2 +- 5 files changed, 60 insertions(+), 6 deletions(-) mode change 100755 => 100644 MusicPlayer/MusicPlayer/APIHandler.cs mode change 100755 => 100644 MusicPlayer/MusicPlayer/Album.cs mode change 100755 => 100644 MusicPlayer/MusicPlayer/Main.cs mode change 100755 => 100644 MusicPlayer/MusicPlayer/NetworkHandler.cs mode change 100755 => 100644 MusicPlayer/MusicPlayer/Program.cs diff --git a/MusicPlayer/MusicPlayer/APIHandler.cs b/MusicPlayer/MusicPlayer/APIHandler.cs old mode 100755 new mode 100644 index 88202d7..15d2ff1 --- a/MusicPlayer/MusicPlayer/APIHandler.cs +++ b/MusicPlayer/MusicPlayer/APIHandler.cs @@ -5,6 +5,8 @@ using System.Text; using System.Threading.Tasks; using MusicPlayer; using Newtonsoft.Json.Linq; +using System.IO; +using System.Drawing; namespace MusicPlayer { @@ -95,13 +97,21 @@ namespace MusicPlayer public List GetAlbums() { List albumlist = new List(); - + Image def = Image.FromStream(nw.downloadArtwork("default-cover.png")); JObject o = nw.SendString("getalbums?id=hallo"); if (o["result"].ToString() == "OK") { for (int i = 0; i < o["albums"].Count(); i++) { - albumlist.Add(new Album(o["albums"][i][0].ToString())); + MemoryStream stream = nw.downloadArtwork(o["albums"][i][0].ToString() + ".jpg"); + if (stream != null) { + albumlist.Add(new Album(o["albums"][i][0].ToString(), Image.FromStream(stream))); + stream.Close(); + } + else + { + albumlist.Add(new Album(o["albums"][i][0].ToString(), def)); + } } } diff --git a/MusicPlayer/MusicPlayer/Album.cs b/MusicPlayer/MusicPlayer/Album.cs old mode 100755 new mode 100644 index c1d00ad..4d0103e --- a/MusicPlayer/MusicPlayer/Album.cs +++ b/MusicPlayer/MusicPlayer/Album.cs @@ -1,12 +1,17 @@ -namespace MusicPlayer + +using System.Drawing; + +namespace MusicPlayer { public class Album { public string albumnaam { get; set; } + public Image cover; - public Album(string albumnaam) + public Album(string albumnaam, Image c) { this.albumnaam = albumnaam; + this.cover = c; } } } \ No newline at end of file diff --git a/MusicPlayer/MusicPlayer/Main.cs b/MusicPlayer/MusicPlayer/Main.cs old mode 100755 new mode 100644 index f2c2989..eb6e2c1 --- a/MusicPlayer/MusicPlayer/Main.cs +++ b/MusicPlayer/MusicPlayer/Main.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using System.Windows.Forms; namespace MusicPlayer { @@ -15,6 +16,7 @@ namespace MusicPlayer public AudioHandler audio; private SongsTable table; + private ImageList imagelist; public Main(NetworkHandler nw, APIHandler api, MainForm form, PlaylistHandler pl) { @@ -26,6 +28,7 @@ namespace MusicPlayer audio = new AudioHandler(); table = new SongsTable(); + imagelist = new ImageList(); form.SongsTableView.DataSource = table; form.SongsTableView.Columns[5].Visible = false; Populate(); @@ -33,7 +36,8 @@ namespace MusicPlayer private void Populate() { - this.api.GetAlbums().ForEach(a => form.AlbumListView.Items.Add(a.albumnaam)); + form.AlbumListView.LargeImageList = imagelist; + this.api.GetAlbums().ForEach(a => { var item = form.AlbumListView.Items.Add(a.albumnaam); imagelist.Images.Add(a.albumnaam, a.cover); item.ImageKey = a.albumnaam;}); this.api.GetArtists().ForEach(a => form.ArtistListBox.Items.Add(a.naam)); this.api.GetGenres().ForEach(g => form.GenreListBox.Items.Add(g.name)); this.pl.GetPlaylists().ForEach(p => form.PlaylistBox.Items.Add(p.name)); diff --git a/MusicPlayer/MusicPlayer/NetworkHandler.cs b/MusicPlayer/MusicPlayer/NetworkHandler.cs old mode 100755 new mode 100644 index 5d7bdb5..d4ca6dd --- a/MusicPlayer/MusicPlayer/NetworkHandler.cs +++ b/MusicPlayer/MusicPlayer/NetworkHandler.cs @@ -2,6 +2,7 @@ using System.Text; using System.Net.Sockets; using System.Threading; +using System.Web; using System.Net; using System.IO; using Newtonsoft.Json.Linq; @@ -40,6 +41,40 @@ namespace MusicPlayer streamResponse.Close(); streamRead.Close(); return o; + } + + public MemoryStream downloadArtwork(string album) + { + try + { + WebRequest req = WebRequest.Create((ip + "/music/artwork/"+album).Replace(" ", "%20")); + WebResponse response = req.GetResponse(); + Stream stream = response.GetResponseStream(); + //Download in chuncks + byte[] buffer = new byte[1024]; //Get Total Size + int dataLength = (int)response.ContentLength; + //Download to memory + MemoryStream memStream = new MemoryStream(); + while (true) + { + //Try to read the data + int bytesRead = stream.Read(buffer, 0, buffer.Length); + if (bytesRead == 0) + { + break; + } + else + { memStream.Write(buffer, 0, bytesRead); + } + } //Clean up + stream.Close(); + + //Convert the downloaded stream to a byte array + return memStream; + } + catch (Exception) + { return null; + } } } } diff --git a/MusicPlayer/MusicPlayer/Program.cs b/MusicPlayer/MusicPlayer/Program.cs old mode 100755 new mode 100644 index 4b3b523..cba1c38 --- a/MusicPlayer/MusicPlayer/Program.cs +++ b/MusicPlayer/MusicPlayer/Program.cs @@ -17,7 +17,7 @@ namespace MusicPlayer Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); - NetworkHandler nw = new NetworkHandler("http://www.imegumii.nl"); + NetworkHandler nw = new NetworkHandler("http://jancokock.me"); APIHandler api = new APIHandler(nw); MainForm form = new MainForm(); PlaylistHandler pl = new PlaylistHandler(api);