Explorar el Código

added advanced search

Yorick Rommers hace 10 años
padre
commit
4a869f3399

+ 66 - 1
MusicPlayer/MusicPlayer/APIHandler.cs

@@ -20,6 +20,16 @@ namespace MusicPlayer
             defaultCover = Image.FromStream(nw.downloadArtwork("default-cover.png"));
         }
 
+        public JObject GetAllBySearch(string search, string album, string artist, string genre)
+        {
+            // Q artist genre album
+            JObject o = nw.SendString($"search?q={search}&album={album}&genre={genre}&artist={artist}");
+            Console.WriteLine(o.PropertyValues().ToString());
+            if (o["result"].ToString() == "OK") { return o; }
+            return null;
+
+        }
+
         public string GetSongURLByID(string id)
         {
             JObject o = nw.SendString("getsongbyid?id=" + id);
@@ -54,6 +64,61 @@ namespace MusicPlayer
             return GetSongsByArgs("search=" + search);
         }
 
+        public List<Genre> Genrify(JObject o)
+        {
+            List<Genre> genreslist = new List<Genre>();
+            if (o["result"].ToString() == "OK")
+            {
+                for (int i = 0; i < o["genres"].Count(); i++)
+                {
+                    genreslist.Add(new Genre(o["genres"][i][0].ToString()));
+                }
+            }
+            return genreslist;
+        } 
+
+        public List<Artist> Artistify(JObject o)
+        {
+            List<Artist> artistlist = new List<Artist>();
+            if (o["result"].ToString() == "OK")
+            {
+                for (int i = 0; i < o["artists"].Count(); i++)
+                {
+                    artistlist.Add(new Artist(o["artists"][i][0].ToString()));
+                }
+            }
+            return artistlist;
+        } 
+
+        public List<Song> Songify(JObject o)
+        {
+            List<Song> allsongslist = new List<Song>();
+            if (o["result"].ToString() == "OK")
+            {
+                dynamic songs = o["songs"];
+                for (int i = 0; i < songs.Count; i++)
+                {
+                    allsongslist.Add(new Song(songs[i][0].ToString(), songs[i][3].ToString(), songs[i][5].ToString(), songs[i][4].ToString(), songs[i][1].ToString(), (int)songs[i][9], this));
+                }
+            }
+            return allsongslist;
+        }
+
+        public List<Album> Albumify(JObject o)
+        {
+            List<Album> albumlist = new List<Album>();
+
+            if (o["result"].ToString() == "OK")
+            {
+                for (int i = 0; i < o["albums"].Count(); i++)
+                {
+                    albumlist.Add(new Album(o["albums"][i][0].ToString()));
+                }
+            }
+
+            return albumlist;
+        } 
+
         public List<Song> GetAllSongs()
         {
             List<Song> allsongslist = new List<Song>();
@@ -90,7 +155,7 @@ namespace MusicPlayer
         {
             List<Artist> artistlist = new List<Artist>();
 
-            JObject o = nw.SendString("getartists?id=hallo");
+            JObject o = nw.SendString("getartists?");
             if (o["result"].ToString() == "OK")
             {
                 for (int i = 0; i < o["artists"].Count(); i++) {

+ 1 - 1
MusicPlayer/MusicPlayer/AdvancedSearch.cs

@@ -23,7 +23,7 @@ namespace MusicPlayer
 
         private void SearchButton_Click(object sender, EventArgs e)
         {
-            if(SearchTermTextBox.Text.Length > 3)
+            if(SearchTermTextBox.Text.Length > 1)
             {
                 SearchTermTextBox.ForeColor = Color.Black;
                 main.AdvancedSearchFilter(SearchTermTextBox.Text, AlbumTextBox.Text, ArtistTextBox.Text, GenreTextBox.Text);

+ 53 - 1
MusicPlayer/MusicPlayer/Main.cs

@@ -5,6 +5,7 @@ using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
 using System.Windows.Forms;
+using Newtonsoft.Json.Linq;
 
 namespace MusicPlayer
 {
@@ -138,7 +139,58 @@ namespace MusicPlayer
 
         public void AdvancedSearchFilter(string search, string album, string artist, string genre)
         {
-            throw new NotImplementedException();
+            JObject o = api.GetAllBySearch(search, album, artist, genre);
+            if (o != null)
+            {
+                //q
+                form.AlbumListView.Items.Clear();
+                form.ArtistListBox.Items.Clear();
+                form.GenreListBox.Items.Clear();
+                form.PlaylistBox.Items.Clear();
+                table.Clear();
+                api.Songify(o).ForEach(s => table.Add(s));
+
+                //albums
+                api.Albumify(o).ForEach(a => form.AlbumListView.Items.Add(a.albumnaam));
+
+                //artists
+                api.Artistify(o).ForEach(a => form.ArtistListBox.Items.Add(a.naam));
+
+                //genres
+                api.Genrify(o).ForEach(g => form.GenreListBox.Items.Add(g.name));
+                BackgroundWorker bw = new BackgroundWorker();
+                bw.DoWork += new DoWorkEventHandler(
+                delegate (object x, DoWorkEventArgs args)
+                {
+                    BackgroundWorker b = x as BackgroundWorker;
+                    ImageList imagelist = new ImageList();
+                    List<string> templist = new List<string>();
+                    Action action = () =>
+                    {
+                        foreach (ListViewItem item in form.AlbumListView.Items)
+                        {
+                            templist.Add(item.Text);
+                        }
+                    };
+                    form.Invoke(action);
+
+                    foreach (string item in templist)
+                    {
+                        imagelist.Images.Add(item, api.getAlbumCover(item));
+                    }
+
+                    action = () => {
+                        form.AlbumListView.LargeImageList = imagelist;
+                        foreach (ListViewItem item in form.AlbumListView.Items)
+                        {
+                            item.ImageKey = item.Text;
+                        }
+                    };
+                    form.Invoke(action);
+                });
+                bw.RunWorkerAsync();
+            }
+
         }
 
         public void FilterCurrentPlaying()