Эх сурвалжийг харах

Merge branch 'developer' of https://github.com/yorickr/musicplayer into developer

Yorick Rommers 10 жил өмнө
parent
commit
4e9d2222cf

+ 8 - 3
MusicPlayer/MusicPlayer/APIHandler.cs

@@ -49,6 +49,11 @@ namespace MusicPlayer
             return GetSongsByArgs("album=" + year);
         }
 
+        public List<Song> GetSongsBySearch(string search)
+        {
+            return GetSongsByArgs("search=" + search);
+        }
+
         public List<Song> GetAllSongs()
         {
             List<Song> allsongslist = new List<Song>();
@@ -109,7 +114,7 @@ namespace MusicPlayer
         {
             List<Album> albumlist = new List<Album>();
 
-            JObject o = nw.SendString("getalbums?id=hallo");
+            JObject o = nw.SendString("getalbums?");
             if (o["result"].ToString() == "OK")
             {
                 for (int i = 0; i < o["albums"].Count(); i++)
@@ -124,7 +129,7 @@ namespace MusicPlayer
         public List<Year> GetYears()
         {
             List<Year> yearlist = new List<Year> ();
-            JObject o = nw.SendString("getyears?id=hallo");
+            JObject o = nw.SendString("getyears?");
             if (o["result"].ToString() == "OK")
             {
                 for (int i = 0; i < o["years"].Count(); i++)
@@ -138,7 +143,7 @@ namespace MusicPlayer
         public List<Genre> GetGenres()
         {
             List<Genre> genreslist = new List<Genre>();
-            JObject o = nw.SendString("getgenres?id=hallo");
+            JObject o = nw.SendString("getgenres?");
             if (o["result"].ToString() == "OK")
             {
                 for (int i = 0; i < o["genres"].Count(); i++)

+ 36 - 12
MusicPlayer/MusicPlayer/AudioHandler.cs

@@ -17,7 +17,13 @@ namespace MusicPlayer
         public AudioState AState { get; set; }
         public BufferState BState { get; set; }
 
-        public int Buffered { get { return Math.Min((int)((bufpos / (double)LengthBuffer) * 1000), 1000); } }
+        public int Buffered { get
+                {
+                    if(CurrentSong is RadioStation)
+                        return Math.Min((int)((bufpos - ms.Position) / 1000), 1000);
+                    else
+                        return Math.Min((int)((bufpos / (double)LengthBuffer) * 1000), 1000);
+                } }
         private long LengthBuffer { get; set; }
         private long bufpos = 0;
 
@@ -33,7 +39,7 @@ namespace MusicPlayer
 
         private long seek = 0;
 
-        private Stream ms;
+        private MemoryStream ms;
 
         private Thread network;
         private Thread audio;
@@ -121,6 +127,7 @@ namespace MusicPlayer
             }
             catch(Exception e)
             {
+                Console.WriteLine(e.StackTrace);
                 AState = AudioState.STOPPED;
                 main.form.SongFinished();
                 return;
@@ -135,7 +142,10 @@ namespace MusicPlayer
                     waveOut.Init(blockAlignedStream);
                     waveOut.Play();
 
-                    Length = CurrentSong.Seconds * waveOut.OutputWaveFormat.AverageBytesPerSecond;
+                    if (CurrentSong.Seconds == 0)
+                        Length = ms.Length / waveOut.OutputWaveFormat.AverageBytesPerSecond;
+                    else
+                        Length = CurrentSong.Seconds * waveOut.OutputWaveFormat.AverageBytesPerSecond;
                     CurrentTime = (int)(ms.Position / waveOut.OutputWaveFormat.AverageBytesPerSecond);
 
                     while (waveOut.PlaybackState != PlaybackState.Stopped)
@@ -164,10 +174,17 @@ namespace MusicPlayer
                         }
                         if (BState == BufferState.DONE && firstrun )
                         {
-                            position = mp3fr.Position;
-                            mp3fr.Close();
-                            StreamFromMP3(ms,position, false);
-                            break;
+                            if( ! (CurrentSong is RadioStation))
+                            {
+                                position = mp3fr.Position;
+                                mp3fr.Close();
+                                StreamFromMP3(ms, position, false);
+                                break;
+                            }
+                            else
+                            {
+                                AState = AudioState.STOPPED;
+                            }
                         }
 
                         playpos = blockAlignedStream.Position;
@@ -175,7 +192,7 @@ namespace MusicPlayer
 
                     }
 
-                    if(AState == AudioState.PLAYING)
+                    if(AState == AudioState.PLAYING && !firstrun)
                         main.form.SongFinished();
                     AState = AudioState.STOPPED;
                     playpos = 0;
@@ -187,7 +204,14 @@ namespace MusicPlayer
         private void PlayAudio()
         {
             AState = AudioState.WAITING;
-            while (ms.Length < 65536 * 10 && BState != BufferState.DONE)
+
+            int buffertime = 0;
+            if (CurrentSong is RadioStation)
+                buffertime = 32768 * 10;
+            else
+                buffertime = 65536 * 10;
+
+            while (ms.Length < buffertime && BState != BufferState.DONE)
                 Thread.Sleep(1000);
             AState = AudioState.PLAYING;
 
@@ -206,6 +230,7 @@ namespace MusicPlayer
             }
             catch(Exception e)
             {
+                Console.WriteLine(e.StackTrace);
                 BState = BufferState.EMPTY;
                 AState = AudioState.STOPPED;
                 main.form.SongFinished();
@@ -217,8 +242,8 @@ namespace MusicPlayer
             LengthBuffer = response.ContentLength;
             using (var stream = response.GetResponseStream())
             {
-                byte[] buffer = new byte[65536]; // 64KB chunks
-                //byte[] buffer = new byte[65536*4]; // 256KB chunks
+                byte[] buffer = new byte[65536]; // 32KB chunks
+
                 int read;
                 BState = BufferState.BUFFERING;
                 AState = AudioState.WAITING;
@@ -230,7 +255,6 @@ namespace MusicPlayer
                     ms.Write(buffer, 0, read);
                     ms.Position = pos;
 
-
                     this.bufpos = ms.Length;
                 }
             }

+ 48 - 0
MusicPlayer/MusicPlayer/Form1.Designer.cs.BACKUP.11468.cs

@@ -0,0 +1,48 @@
+namespace MusicPlayer
+{
+    partial class Form1
+    {
+        /// <summary>
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary>
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Windows Form Designer generated code
+
+        /// <summary>
+        /// Required method for Designer support - do not modify
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            this.SuspendLayout();
+            // 
+            // Form1
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.ClientSize = new System.Drawing.Size(284, 261);
+            this.Name = "Form1";
+            this.Text = "Form1";
+            this.Load += new System.EventHandler(this.Form1_Load);
+            this.ResumeLayout(false);
+
+        }
+
+        #endregion
+    }
+}
+

+ 39 - 0
MusicPlayer/MusicPlayer/Form1.Designer.cs.BASE.11468.cs

@@ -0,0 +1,39 @@
+namespace MusicPlayer
+{
+    partial class Form1
+    {
+        /// <summary>
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary>
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Windows Form Designer generated code
+
+        /// <summary>
+        /// Required method for Designer support - do not modify
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            this.components = new System.ComponentModel.Container();
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.Text = "Form1";
+        }
+
+        #endregion
+    }
+}
+

+ 0 - 0
MusicPlayer/MusicPlayer/Form1.Designer.cs.LOCAL.11468.cs


+ 48 - 0
MusicPlayer/MusicPlayer/Form1.Designer.cs.REMOTE.11468.cs

@@ -0,0 +1,48 @@
+namespace MusicPlayer
+{
+    partial class Form1
+    {
+        /// <summary>
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary>
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Windows Form Designer generated code
+
+        /// <summary>
+        /// Required method for Designer support - do not modify
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            this.SuspendLayout();
+            // 
+            // Form1
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.ClientSize = new System.Drawing.Size(284, 261);
+            this.Name = "Form1";
+            this.Text = "Form1";
+            this.Load += new System.EventHandler(this.Form1_Load);
+            this.ResumeLayout(false);
+
+        }
+
+        #endregion
+    }
+}
+

+ 48 - 0
MusicPlayer/MusicPlayer/Form1.Designer.cs.orig

@@ -0,0 +1,48 @@
+namespace MusicPlayer
+{
+    partial class Form1
+    {
+        /// <summary>
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary>
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Windows Form Designer generated code
+
+        /// <summary>
+        /// Required method for Designer support - do not modify
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            this.SuspendLayout();
+            // 
+            // Form1
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.ClientSize = new System.Drawing.Size(284, 261);
+            this.Name = "Form1";
+            this.Text = "Form1";
+            this.Load += new System.EventHandler(this.Form1_Load);
+            this.ResumeLayout(false);
+
+        }
+
+        #endregion
+    }
+}
+

+ 39 - 4
MusicPlayer/MusicPlayer/Main.cs

@@ -29,6 +29,8 @@ namespace MusicPlayer
             this.api = api;
             this.form = form;
             form.main = this;
+            pl.main = this;
+            pl.Populate();
             this.pl = pl;
 
             audio = new AudioHandler(this);
@@ -77,15 +79,27 @@ namespace MusicPlayer
             {
                 BackgroundWorker b = o as BackgroundWorker;
                 ImageList imagelist = new ImageList();
-                foreach (ListViewItem item in form.AlbumListView.Items)
+                List<string> templist = new List<string>();
+                Action action = () =>
                 {
-                    imagelist.Images.Add(item.ToString(), api.getAlbumCover(item.Text));
+                    foreach (ListViewItem item in form.AlbumListView.Items)
+                    {
+                        templist.Add(item.Text);
+                        Console.WriteLine(item.Text);
+                    }
+                    };
+                form.Invoke(action);
+
+                foreach (string item in templist)
+                {
+                    imagelist.Images.Add(item, api.getAlbumCover(item));
                 }
-                Action action = () => {
+
+                action = () => {
                     form.AlbumListView.LargeImageList = imagelist;
                     foreach (ListViewItem item in form.AlbumListView.Items)
                     {
-                        item.ImageKey = item.ToString(); 
+                        item.ImageKey = item.Text; 
                     }
                 };
                 form.Invoke(action);
@@ -114,6 +128,15 @@ namespace MusicPlayer
             });
         }
 
+        public void SearchFilter(string search)
+        {
+            table.Clear();
+            api.GetSongsBySearch(search).ForEach(s =>
+            {
+                table.Add(s);
+            });
+        }
+
         public void FilterCurrentPlaying()
         {
             table.Clear();
@@ -214,6 +237,18 @@ namespace MusicPlayer
 
             return str;
         }
+
+        public static bool CheckURLValid(string source)
+        {
+            Uri uriResult;
+            return Uri.TryCreate(source, UriKind.Absolute, out uriResult) && uriResult.Scheme == Uri.UriSchemeHttp;
+        }
+
+        public static string GetDomain(string url)
+        {
+            Uri uri = new Uri(url);
+            return uri.Host;
+        }
     }
 
 }

+ 161 - 28
MusicPlayer/MusicPlayer/MainForm.Designer.cs

@@ -52,13 +52,15 @@ namespace MusicPlayer
             this.overviewToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
             this.playlistsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
             this.toolStripSeparator4 = new System.Windows.Forms.ToolStripSeparator();
-            this.ViewCurrentPlaylistButton = new System.Windows.Forms.ToolStripMenuItem();
+            this.ViewQueueButton = new System.Windows.Forms.ToolStripMenuItem();
             this.playbackToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
             this.PlayNextSongButton = new System.Windows.Forms.ToolStripMenuItem();
             this.LoopSongButton = new System.Windows.Forms.ToolStripMenuItem();
             this.ShuffleSongButton = new System.Windows.Forms.ToolStripMenuItem();
             this.playlistToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
             this.makeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+            this.toolStripSeparator6 = new System.Windows.Forms.ToolStripSeparator();
+            this.viewPlaylistToolstripMenuButton = new System.Windows.Forms.ToolStripMenuItem();
             this.searchToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
             this.SearchGenresToolStripLabel = new System.Windows.Forms.ToolStripMenuItem();
             this.SearchGenresTextBox = new System.Windows.Forms.ToolStripTextBox();
@@ -69,6 +71,15 @@ namespace MusicPlayer
             this.serverToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
             this.SelectServerJancoButton = new System.Windows.Forms.ToolStripMenuItem();
             this.SelectServerYorickButton = new System.Windows.Forms.ToolStripMenuItem();
+            this.radioToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+            this.toolStripMenuItem2 = new System.Windows.Forms.ToolStripMenuItem();
+            this.fMToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+            this.slamFMToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+            this.qDanceToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+            this.toolStripSeparator5 = new System.Windows.Forms.ToolStripSeparator();
+            this.customToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+            this.RadioStationTextBox = new System.Windows.Forms.ToolStripTextBox();
+            this.SetRadioStationButton = new System.Windows.Forms.ToolStripMenuItem();
             this.ControlsPanel = new System.Windows.Forms.Panel();
             this.NextButton = new System.Windows.Forms.Button();
             this.PreviousButton = new System.Windows.Forms.Button();
@@ -93,6 +104,9 @@ namespace MusicPlayer
             this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator();
             this.NotifyMenuStripNextButton = new System.Windows.Forms.ToolStripMenuItem();
             this.NotifyMenuStripPreviousButton = new System.Windows.Forms.ToolStripMenuItem();
+            this.songsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+            this.SearchSongsTextBox = new System.Windows.Forms.ToolStripTextBox();
+            this.SearchSongsButton = new System.Windows.Forms.ToolStripMenuItem();
             ((System.ComponentModel.ISupportInitialize)(this.SongsTableView)).BeginInit();
             this.MainPanel.SuspendLayout();
             ((System.ComponentModel.ISupportInitialize)(this.SplitContainer)).BeginInit();
@@ -144,7 +158,7 @@ namespace MusicPlayer
             this.GenreListBox.FormattingEnabled = true;
             this.GenreListBox.Location = new System.Drawing.Point(0, 0);
             this.GenreListBox.Name = "GenreListBox";
-            this.GenreListBox.Size = new System.Drawing.Size(150, 121);
+            this.GenreListBox.Size = new System.Drawing.Size(175, 121);
             this.GenreListBox.Sorted = true;
             this.GenreListBox.TabIndex = 1;
             this.GenreListBox.SelectedIndexChanged += new System.EventHandler(this.GenreListBox_SelectedIndexChanged);
@@ -155,13 +169,13 @@ namespace MusicPlayer
             | System.Windows.Forms.AnchorStyles.Left) 
             | System.Windows.Forms.AnchorStyles.Right)));
             this.AlbumListView.BackColor = System.Drawing.SystemColors.Control;
-            this.AlbumListView.Location = new System.Drawing.Point(312, 0);
+            this.AlbumListView.Location = new System.Drawing.Point(362, 0);
             this.AlbumListView.MultiSelect = false;
             this.AlbumListView.Name = "AlbumListView";
-            this.AlbumListView.Size = new System.Drawing.Size(448, 121);
+            this.AlbumListView.Size = new System.Drawing.Size(398, 121);
             this.AlbumListView.Sorting = System.Windows.Forms.SortOrder.Ascending;
             this.AlbumListView.TabIndex = 2;
-            this.AlbumListView.TileSize = new System.Drawing.Size(140, 30);
+            this.AlbumListView.TileSize = new System.Drawing.Size(185, 30);
             this.AlbumListView.UseCompatibleStateImageBehavior = false;
             this.AlbumListView.View = System.Windows.Forms.View.Tile;
             this.AlbumListView.SelectedIndexChanged += new System.EventHandler(this.AlbumListView_SelectedIndexChanged);
@@ -172,9 +186,9 @@ namespace MusicPlayer
             | System.Windows.Forms.AnchorStyles.Left)));
             this.ArtistListBox.BackColor = System.Drawing.SystemColors.Control;
             this.ArtistListBox.FormattingEnabled = true;
-            this.ArtistListBox.Location = new System.Drawing.Point(156, 0);
+            this.ArtistListBox.Location = new System.Drawing.Point(181, 0);
             this.ArtistListBox.Name = "ArtistListBox";
-            this.ArtistListBox.Size = new System.Drawing.Size(150, 121);
+            this.ArtistListBox.Size = new System.Drawing.Size(175, 121);
             this.ArtistListBox.Sorted = true;
             this.ArtistListBox.TabIndex = 3;
             this.ArtistListBox.SelectedIndexChanged += new System.EventHandler(this.ArtistListBox_SelectedIndexChanged);
@@ -234,7 +248,7 @@ namespace MusicPlayer
             // AlbumListLabel
             // 
             this.AlbumListLabel.AutoSize = true;
-            this.AlbumListLabel.Location = new System.Drawing.Point(321, 8);
+            this.AlbumListLabel.Location = new System.Drawing.Point(371, 9);
             this.AlbumListLabel.Name = "AlbumListLabel";
             this.AlbumListLabel.Size = new System.Drawing.Size(36, 13);
             this.AlbumListLabel.TabIndex = 6;
@@ -243,7 +257,7 @@ namespace MusicPlayer
             // ArtistListLabel
             // 
             this.ArtistListLabel.AutoSize = true;
-            this.ArtistListLabel.Location = new System.Drawing.Point(165, 8);
+            this.ArtistListLabel.Location = new System.Drawing.Point(190, 9);
             this.ArtistListLabel.Name = "ArtistListLabel";
             this.ArtistListLabel.Size = new System.Drawing.Size(30, 13);
             this.ArtistListLabel.TabIndex = 5;
@@ -252,7 +266,7 @@ namespace MusicPlayer
             // GenreListLabel
             // 
             this.GenreListLabel.AutoSize = true;
-            this.GenreListLabel.Location = new System.Drawing.Point(9, 8);
+            this.GenreListLabel.Location = new System.Drawing.Point(9, 9);
             this.GenreListLabel.Name = "GenreListLabel";
             this.GenreListLabel.Size = new System.Drawing.Size(36, 13);
             this.GenreListLabel.TabIndex = 4;
@@ -270,14 +284,15 @@ namespace MusicPlayer
             // 
             // MenuStrip
             // 
-            this.MenuStrip.BackColor = System.Drawing.SystemColors.WindowFrame;
+            this.MenuStrip.BackColor = System.Drawing.SystemColors.GrayText;
             this.MenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
             this.fileToolStripMenuItem,
             this.viewToolStripMenuItem,
             this.playbackToolStripMenuItem,
             this.playlistToolStripMenuItem,
             this.searchToolStripMenuItem,
-            this.serverToolStripMenuItem});
+            this.serverToolStripMenuItem,
+            this.radioToolStripMenuItem});
             this.MenuStrip.Location = new System.Drawing.Point(0, 0);
             this.MenuStrip.Name = "MenuStrip";
             this.MenuStrip.Size = new System.Drawing.Size(784, 24);
@@ -311,7 +326,7 @@ namespace MusicPlayer
             this.overviewToolStripMenuItem,
             this.playlistsToolStripMenuItem,
             this.toolStripSeparator4,
-            this.ViewCurrentPlaylistButton});
+            this.ViewQueueButton});
             this.viewToolStripMenuItem.Name = "viewToolStripMenuItem";
             this.viewToolStripMenuItem.Size = new System.Drawing.Size(44, 20);
             this.viewToolStripMenuItem.Text = "View";
@@ -319,28 +334,28 @@ namespace MusicPlayer
             // overviewToolStripMenuItem
             // 
             this.overviewToolStripMenuItem.Name = "overviewToolStripMenuItem";
-            this.overviewToolStripMenuItem.Size = new System.Drawing.Size(154, 22);
+            this.overviewToolStripMenuItem.Size = new System.Drawing.Size(123, 22);
             this.overviewToolStripMenuItem.Text = "Overview";
             this.overviewToolStripMenuItem.Click += new System.EventHandler(this.overviewToolStripMenuItem_Click);
             // 
             // playlistsToolStripMenuItem
             // 
             this.playlistsToolStripMenuItem.Name = "playlistsToolStripMenuItem";
-            this.playlistsToolStripMenuItem.Size = new System.Drawing.Size(154, 22);
+            this.playlistsToolStripMenuItem.Size = new System.Drawing.Size(123, 22);
             this.playlistsToolStripMenuItem.Text = "Playlists";
             this.playlistsToolStripMenuItem.Click += new System.EventHandler(this.playlistsToolStripMenuItem_Click);
             // 
             // toolStripSeparator4
             // 
             this.toolStripSeparator4.Name = "toolStripSeparator4";
-            this.toolStripSeparator4.Size = new System.Drawing.Size(151, 6);
+            this.toolStripSeparator4.Size = new System.Drawing.Size(120, 6);
             // 
-            // ViewCurrentPlaylistButton
+            // ViewQueueButton
             // 
-            this.ViewCurrentPlaylistButton.Name = "ViewCurrentPlaylistButton";
-            this.ViewCurrentPlaylistButton.Size = new System.Drawing.Size(154, 22);
-            this.ViewCurrentPlaylistButton.Text = "Current Playlist";
-            this.ViewCurrentPlaylistButton.Click += new System.EventHandler(this.ViewCurrentPlaylistButton_Click);
+            this.ViewQueueButton.Name = "ViewQueueButton";
+            this.ViewQueueButton.Size = new System.Drawing.Size(123, 22);
+            this.ViewQueueButton.Text = "Queue";
+            this.ViewQueueButton.Click += new System.EventHandler(this.ViewCurrentPlaylistButton_Click);
             // 
             // playbackToolStripMenuItem
             // 
@@ -381,7 +396,9 @@ namespace MusicPlayer
             // playlistToolStripMenuItem
             // 
             this.playlistToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
-            this.makeToolStripMenuItem});
+            this.makeToolStripMenuItem,
+            this.toolStripSeparator6,
+            this.viewPlaylistToolstripMenuButton});
             this.playlistToolStripMenuItem.Name = "playlistToolStripMenuItem";
             this.playlistToolStripMenuItem.Size = new System.Drawing.Size(56, 20);
             this.playlistToolStripMenuItem.Text = "Playlist";
@@ -393,11 +410,24 @@ namespace MusicPlayer
             this.makeToolStripMenuItem.Text = "Create / Edit";
             this.makeToolStripMenuItem.Click += new System.EventHandler(this.makeToolStripMenuItem_Click);
             // 
+            // toolStripSeparator6
+            // 
+            this.toolStripSeparator6.Name = "toolStripSeparator6";
+            this.toolStripSeparator6.Size = new System.Drawing.Size(136, 6);
+            // 
+            // viewPlaylistToolstripMenuButton
+            // 
+            this.viewPlaylistToolstripMenuButton.Name = "viewPlaylistToolstripMenuButton";
+            this.viewPlaylistToolstripMenuButton.Size = new System.Drawing.Size(139, 22);
+            this.viewPlaylistToolstripMenuButton.Text = "View";
+            this.viewPlaylistToolstripMenuButton.Click += new System.EventHandler(this.playlistsToolStripMenuItem_Click);
+            // 
             // searchToolStripMenuItem
             // 
             this.searchToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
             this.SearchGenresToolStripLabel,
-            this.SearchArtistToolStripLabel});
+            this.SearchArtistToolStripLabel,
+            this.songsToolStripMenuItem});
             this.searchToolStripMenuItem.Name = "searchToolStripMenuItem";
             this.searchToolStripMenuItem.Size = new System.Drawing.Size(54, 20);
             this.searchToolStripMenuItem.Text = "Search";
@@ -408,7 +438,7 @@ namespace MusicPlayer
             this.SearchGenresTextBox,
             this.ClearGenreSearchButton});
             this.SearchGenresToolStripLabel.Name = "SearchGenresToolStripLabel";
-            this.SearchGenresToolStripLabel.Size = new System.Drawing.Size(110, 22);
+            this.SearchGenresToolStripLabel.Size = new System.Drawing.Size(152, 22);
             this.SearchGenresToolStripLabel.Text = "Genres";
             // 
             // SearchGenresTextBox
@@ -431,7 +461,7 @@ namespace MusicPlayer
             this.SearchArtistsTextBox,
             this.ClearArtistSearchButton});
             this.SearchArtistToolStripLabel.Name = "SearchArtistToolStripLabel";
-            this.SearchArtistToolStripLabel.Size = new System.Drawing.Size(110, 22);
+            this.SearchArtistToolStripLabel.Size = new System.Drawing.Size(152, 22);
             this.SearchArtistToolStripLabel.Text = "Artists";
             // 
             // SearchArtistsTextBox
@@ -471,9 +501,76 @@ namespace MusicPlayer
             this.SelectServerYorickButton.Text = "imegumii.nl";
             this.SelectServerYorickButton.Click += new System.EventHandler(this.SelectServerYorickButton_Click);
             // 
+            // radioToolStripMenuItem
+            // 
+            this.radioToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.toolStripMenuItem2,
+            this.fMToolStripMenuItem,
+            this.slamFMToolStripMenuItem,
+            this.qDanceToolStripMenuItem,
+            this.toolStripSeparator5,
+            this.customToolStripMenuItem});
+            this.radioToolStripMenuItem.Name = "radioToolStripMenuItem";
+            this.radioToolStripMenuItem.Size = new System.Drawing.Size(49, 20);
+            this.radioToolStripMenuItem.Text = "Radio";
+            // 
+            // toolStripMenuItem2
+            // 
+            this.toolStripMenuItem2.Name = "toolStripMenuItem2";
+            this.toolStripMenuItem2.Size = new System.Drawing.Size(122, 22);
+            this.toolStripMenuItem2.Text = "538";
+            this.toolStripMenuItem2.Click += new System.EventHandler(this.toolStripMenuItem2_Click);
+            // 
+            // fMToolStripMenuItem
+            // 
+            this.fMToolStripMenuItem.Name = "fMToolStripMenuItem";
+            this.fMToolStripMenuItem.Size = new System.Drawing.Size(122, 22);
+            this.fMToolStripMenuItem.Text = "3FM";
+            this.fMToolStripMenuItem.Click += new System.EventHandler(this.fMToolStripMenuItem_Click);
+            // 
+            // slamFMToolStripMenuItem
+            // 
+            this.slamFMToolStripMenuItem.Name = "slamFMToolStripMenuItem";
+            this.slamFMToolStripMenuItem.Size = new System.Drawing.Size(122, 22);
+            this.slamFMToolStripMenuItem.Text = "Slam-FM";
+            this.slamFMToolStripMenuItem.Click += new System.EventHandler(this.slamFMToolStripMenuItem_Click);
+            // 
+            // qDanceToolStripMenuItem
+            // 
+            this.qDanceToolStripMenuItem.Name = "qDanceToolStripMenuItem";
+            this.qDanceToolStripMenuItem.Size = new System.Drawing.Size(122, 22);
+            this.qDanceToolStripMenuItem.Text = "Q-Dance";
+            this.qDanceToolStripMenuItem.Click += new System.EventHandler(this.qDanceToolStripMenuItem_Click);
+            // 
+            // toolStripSeparator5
+            // 
+            this.toolStripSeparator5.Name = "toolStripSeparator5";
+            this.toolStripSeparator5.Size = new System.Drawing.Size(119, 6);
+            // 
+            // customToolStripMenuItem
+            // 
+            this.customToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.RadioStationTextBox,
+            this.SetRadioStationButton});
+            this.customToolStripMenuItem.Name = "customToolStripMenuItem";
+            this.customToolStripMenuItem.Size = new System.Drawing.Size(122, 22);
+            this.customToolStripMenuItem.Text = "Custom";
+            // 
+            // RadioStationTextBox
+            // 
+            this.RadioStationTextBox.Name = "RadioStationTextBox";
+            this.RadioStationTextBox.Size = new System.Drawing.Size(100, 23);
+            // 
+            // SetRadioStationButton
+            // 
+            this.SetRadioStationButton.Name = "SetRadioStationButton";
+            this.SetRadioStationButton.Size = new System.Drawing.Size(160, 22);
+            this.SetRadioStationButton.Text = "Set";
+            this.SetRadioStationButton.Click += new System.EventHandler(this.SetRadioStationButton_Click);
+            // 
             // ControlsPanel
             // 
-            this.ControlsPanel.BackColor = System.Drawing.SystemColors.WindowFrame;
+            this.ControlsPanel.BackColor = System.Drawing.SystemColors.GrayText;
             this.ControlsPanel.Controls.Add(this.NextButton);
             this.ControlsPanel.Controls.Add(this.PreviousButton);
             this.ControlsPanel.Controls.Add(this.CurrentSongLabel);
@@ -611,7 +708,7 @@ namespace MusicPlayer
             // 
             this.NotifyIcon.ContextMenuStrip = this.NotifyMenuStrip;
             this.NotifyIcon.Icon = ((System.Drawing.Icon)(resources.GetObject("NotifyIcon.Icon")));
-            this.NotifyIcon.Text = "NotifyIcon";
+            this.NotifyIcon.Text = "YJMPD Music Player";
             this.NotifyIcon.Visible = true;
             this.NotifyIcon.MouseUp += new System.Windows.Forms.MouseEventHandler(this.NotifyIcon_Click);
             // 
@@ -693,6 +790,28 @@ namespace MusicPlayer
             this.NotifyMenuStripPreviousButton.Text = "Previous";
             this.NotifyMenuStripPreviousButton.Click += new System.EventHandler(this.NotifyMenuStripPreviousButton_Click);
             // 
+            // songsToolStripMenuItem
+            // 
+            this.songsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.SearchSongsTextBox,
+            this.SearchSongsButton});
+            this.songsToolStripMenuItem.Name = "songsToolStripMenuItem";
+            this.songsToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
+            this.songsToolStripMenuItem.Text = "Songs";
+            // 
+            // SearchSongsTextBox
+            // 
+            this.SearchSongsTextBox.Name = "SearchSongsTextBox";
+            this.SearchSongsTextBox.Size = new System.Drawing.Size(100, 23);
+            // 
+            // SearchSongsButton
+            // 
+            this.SearchSongsButton.Enabled = false;
+            this.SearchSongsButton.Name = "SearchSongsButton";
+            this.SearchSongsButton.Size = new System.Drawing.Size(160, 22);
+            this.SearchSongsButton.Text = "Search";
+            this.SearchSongsButton.Click += new System.EventHandler(this.SearchSongsButton_Click);
+            // 
             // MainForm
             // 
             this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
@@ -784,10 +903,24 @@ namespace MusicPlayer
         private System.Windows.Forms.ToolStripMenuItem NotifyMenuStripNextButton;
         private System.Windows.Forms.ToolStripMenuItem NotifyMenuStripPreviousButton;
         private System.Windows.Forms.ToolStripSeparator toolStripSeparator4;
-        private System.Windows.Forms.ToolStripMenuItem ViewCurrentPlaylistButton;
+        private System.Windows.Forms.ToolStripMenuItem ViewQueueButton;
         private System.Windows.Forms.ToolStripMenuItem serverToolStripMenuItem;
         private System.Windows.Forms.ToolStripMenuItem SelectServerJancoButton;
         private System.Windows.Forms.ToolStripMenuItem SelectServerYorickButton;
+        private System.Windows.Forms.ToolStripMenuItem radioToolStripMenuItem;
+        private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem2;
+        private System.Windows.Forms.ToolStripMenuItem qDanceToolStripMenuItem;
+        private System.Windows.Forms.ToolStripMenuItem customToolStripMenuItem;
+        private System.Windows.Forms.ToolStripTextBox RadioStationTextBox;
+        private System.Windows.Forms.ToolStripMenuItem SetRadioStationButton;
+        private System.Windows.Forms.ToolStripMenuItem fMToolStripMenuItem;
+        private System.Windows.Forms.ToolStripSeparator toolStripSeparator5;
+        private System.Windows.Forms.ToolStripMenuItem slamFMToolStripMenuItem;
+        private System.Windows.Forms.ToolStripSeparator toolStripSeparator6;
+        private System.Windows.Forms.ToolStripMenuItem viewPlaylistToolstripMenuButton;
+        private System.Windows.Forms.ToolStripMenuItem songsToolStripMenuItem;
+        private System.Windows.Forms.ToolStripTextBox SearchSongsTextBox;
+        private System.Windows.Forms.ToolStripMenuItem SearchSongsButton;
     }
 }
 

+ 79 - 17
MusicPlayer/MusicPlayer/MainForm.cs

@@ -92,7 +92,8 @@ namespace MusicPlayer
                 PositionTrackBar.Value = Math.Max(main.audio.Position, 0);
 
             //Buffer display
-            BufferBar.Value = main.audio.Buffered / 10;
+            if(main.audio.Buffered / 10 >= BufferBar.Minimum && main.audio.Buffered / 10 <= BufferBar.Maximum)
+                BufferBar.Value = main.audio.Buffered / 10;
 
             //Time labels
             if (!clicked)
@@ -136,6 +137,11 @@ namespace MusicPlayer
             else
                 SelectServerYorickButton.Enabled = true;
 
+            if (SearchSongsTextBox.Text.Length == 0)
+                SearchSongsButton.Enabled = false;
+            else
+                SearchSongsButton.Enabled = true;
+
             if (main.audio.AState == AudioHandler.AudioState.PAUSED)
             {
                 PauseButton.Enabled = false;
@@ -166,6 +172,11 @@ namespace MusicPlayer
                 NotifyMenuStripStopButton.Enabled = true;
             }
 
+            if (RadioStationTextBox.Text.Length <= 10)
+                SetRadioStationButton.Enabled = false;
+            else
+                SetRadioStationButton.Enabled = true;
+
             if(PlayNextSongButton.Checked)
             {
                 ShuffleSongButton.Enabled = true;
@@ -185,32 +196,42 @@ namespace MusicPlayer
             }
             else
             {
-                NextButton.Enabled = true;
-                NotifyMenuStripNextButton.Enabled = true;
-
-                if (ShuffleSongButton.Checked)
+                if (main.audio.CurrentSong is RadioStation)
                 {
-                    PreviousButton.Enabled = false;
-                    NotifyMenuStripPreviousButton.Enabled = false;
+                    main.currentPlayingList.Clear();
                 }
                 else
                 {
-                    PreviousButton.Enabled = true;
-                    NotifyMenuStripPreviousButton.Enabled = true;
+                    NextButton.Enabled = true;
+                    NotifyMenuStripNextButton.Enabled = true;
+
+                    if (ShuffleSongButton.Checked)
+                    {
+                        PreviousButton.Enabled = false;
+                        NotifyMenuStripPreviousButton.Enabled = false;
+                    }
+                    else
+                    {
+                        PreviousButton.Enabled = true;
+                        NotifyMenuStripPreviousButton.Enabled = true;
+                    }
                 }
             }
 
             if (songFinished)
             {
-                Thread.Sleep(20);
-
-                if (PlayNextSongButton.Checked)
-                {
-                    NextButton_Click(this, new EventArgs());
-                }
-                else if (LoopSongButton.Checked)
+                if (! (main.audio.CurrentSong is RadioStation) )
                 {
-                    main.audio.Play(main.audio.CurrentSong);
+                    Thread.Sleep(20);
+
+                    if (PlayNextSongButton.Checked)
+                    {
+                        NextButton_Click(this, new EventArgs());
+                    }
+                    else if (LoopSongButton.Checked)
+                    {
+                        main.audio.Play(main.audio.CurrentSong);
+                    }
                 }
 
                 songFinished = false;
@@ -522,5 +543,46 @@ namespace MusicPlayer
         {
             main.SwitchServer("http://imegumii.nl");
         }
+
+        private void toolStripMenuItem2_Click(object sender, EventArgs e)
+        {
+            main.audio.Play(new RadioStation("538", main.api, "http://vip-icecast.538.lw.triple-it.nl:80/RADIO538_MP3"));
+        }
+
+        private void qDanceToolStripMenuItem_Click(object sender, EventArgs e)
+        {
+            main.audio.Play(new RadioStation("Q-Dance", main.api, "http://stream01.platform02.true.nl:8000/qdance-hard"));
+        }
+
+        private void fMToolStripMenuItem_Click(object sender, EventArgs e)
+        {
+            main.audio.Play(new RadioStation("3FM", main.api, "http://icecast.omroep.nl:80/3fm-bb-mp3"));
+        }
+
+        private void slamFMToolStripMenuItem_Click(object sender, EventArgs e)
+        {
+            main.audio.Play(new RadioStation("Slam-FM", main.api, "http://vip-icecast.538.lw.triple-it.nl/SLAMFM_MP3"));
+        }
+
+        private void SetRadioStationButton_Click(object sender, EventArgs e)
+        {
+            string input = RadioStationTextBox.Text;
+
+            if(Main.CheckURLValid(input))
+            {
+                main.audio.Play(new RadioStation(Main.GetDomain(input), main.api, input));       
+            }
+
+            RadioStationTextBox.Text = "";
+        }
+
+        private void SearchSongsButton_Click(object sender, EventArgs e)
+        {
+            if(SearchSongsTextBox.Text.Length > 0)
+            {
+                main.SearchFilter(SearchSongsTextBox.Text);
+                SearchSongsTextBox.Text = "";
+            }
+        }
     }
 }

+ 1 - 0
MusicPlayer/MusicPlayer/MusicPlayer.csproj

@@ -85,6 +85,7 @@
     </Compile>
     <Compile Include="Program.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="RadioStation.cs" />
     <Compile Include="Song.cs" />
     <Compile Include="SongsTable.cs">
       <SubType>Component</SubType>

+ 99 - 0
MusicPlayer/MusicPlayer/MusicPlayer.csproj.orig

@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProjectGuid>{E2B99339-3251-48BE-91C9-FAB21CD07A39}</ProjectGuid>
+    <OutputType>WinExe</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>MusicPlayer</RootNamespace>
+    <AssemblyName>MusicPlayer</AssemblyName>
+    <TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Deployment" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Net.Http" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="MainForm.cs" >
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="Album.cs" />
+    <Compile Include="APIHandler.cs" />
+    <Compile Include="Artist.cs" />
+    <Compile Include="MainForm.Designer.cs">
+      <DependentUpon>MainForm.cs</DependentUpon>
+    </Compile>
+    <Compile Include="NetworkHandler.cs" />
+    <Compile Include="Program.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+<<<<<<< HEAD
+    <EmbeddedResource Include="MainForm.resx">
+      <DependentUpon>MainForm.cs</DependentUpon>
+=======
+    <EmbeddedResource Include="Form1.resx">
+      <DependentUpon>Form1.cs</DependentUpon>
+>>>>>>> origin/api
+    </EmbeddedResource>
+    <EmbeddedResource Include="Properties\Resources.resx">
+      <Generator>ResXFileCodeGenerator</Generator>
+      <LastGenOutput>Resources.Designer.cs</LastGenOutput>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <Compile Include="Properties\Resources.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DependentUpon>Resources.resx</DependentUpon>
+    </Compile>
+    <None Include="Properties\Settings.settings">
+      <Generator>SettingsSingleFileGenerator</Generator>
+      <LastGenOutput>Settings.Designer.cs</LastGenOutput>
+    </None>
+    <Compile Include="Properties\Settings.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DependentUpon>Settings.settings</DependentUpon>
+      <DesignTimeSharedInput>True</DesignTimeSharedInput>
+    </Compile>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="App.config" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>

+ 28 - 15
MusicPlayer/MusicPlayer/NetworkHandler.cs

@@ -27,23 +27,36 @@ namespace MusicPlayer
             Console.WriteLine(encodedstring);
             HttpWebRequest server =   (HttpWebRequest)WebRequest.Create(ip+":"+port+"/"+encodedstring);
             server.KeepAlive = false;
-            HttpWebResponse respond = (HttpWebResponse)server.GetResponse();
-            Stream streamResponse = respond.GetResponseStream();
-            StreamReader streamRead = new StreamReader(streamResponse);
-            Char[] readBuff = new Char[256];
-            int count = streamRead.Read(readBuff, 0, 256);
-            string data = "";
-            while (count > 0)
+            try {
+                HttpWebResponse respond = (HttpWebResponse)server.GetResponse();
+                Stream streamResponse = respond.GetResponseStream();
+                StreamReader streamRead = new StreamReader(streamResponse);
+                Char[] readBuff = new Char[256];
+                int count = streamRead.Read(readBuff, 0, 256);
+                string data = "";
+                while (count > 0)
+                {
+                    String outputData = new String(readBuff, 0, count);
+                    data += outputData;
+                    count = streamRead.Read(readBuff, 0, 256);
+                }
+                JObject o = JObject.Parse(data);
+                respond.Close();
+                streamResponse.Close();
+                streamRead.Close();
+                return o;
+            }
+            catch(WebException e)
             {
-                String outputData = new String(readBuff, 0, count);
-                data +=outputData;
-                count = streamRead.Read(readBuff, 0, 256);
+                Console.WriteLine("Server is offline");
             }
-            JObject o = JObject.Parse(data);
-            respond.Close();
-            streamResponse.Close();
-            streamRead.Close();
-            return o;
+            catch(Exception e)
+            {
+                Console.WriteLine("Er is iets fout gegaan bij het communiceren met de server.");
+            }
+
+            return null;
+            
         }
 
         public MemoryStream downloadArtwork(string album)

+ 8 - 1
MusicPlayer/MusicPlayer/Playlist.cs

@@ -9,14 +9,16 @@ namespace MusicPlayer
         public string name { get; }
         private string basedir;
         public List<Song> songs;
+        public string server;
 
         private APIHandler api;
-        public Playlist(string name, string basedir, APIHandler api)
+        public Playlist(string name, string basedir, string server, APIHandler api)
         {
             this.songs = new List<Song>();
             this.name = name;
             this.api = api;
             this.basedir = basedir;
+            this.server = server;
             this.ReadFromFile();
         }
 
@@ -35,6 +37,8 @@ namespace MusicPlayer
             try {
                 using (StreamReader str = new StreamReader(basedir + name + ".txt"))
                 {
+                    server = str.ReadLine();
+
                     string readline;
                     while ((readline = str.ReadLine()) != null)
                     {
@@ -48,6 +52,7 @@ namespace MusicPlayer
             {
                 FileStream fs = new FileStream(basedir + name + ".txt", FileMode.CreateNew);
                 fs.Close();
+                File.WriteAllText(basedir + name + ".txt", server);
                 ReadFromFile();
             }
             
@@ -57,6 +62,8 @@ namespace MusicPlayer
         {
             using (StreamWriter stw = new StreamWriter(basedir + name + ".txt"))
             {
+                stw.WriteLine(server.ToString());
+
                 this.songs.ForEach(s =>
                 {
                     stw.WriteLine(s.ToString());

+ 15 - 8
MusicPlayer/MusicPlayer/PlaylistHandler.cs

@@ -8,23 +8,24 @@ namespace MusicPlayer
     public class PlaylistHandler
     {
         private List<Playlist> playlists;
-        private APIHandler api;
+        public Main main
+        {
+            get; set;
+        }
         private readonly string basedir = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "\\.mpplaylists\\";
-        public PlaylistHandler(APIHandler api)
+        public PlaylistHandler()
         {
             this.playlists = new List<Playlist>();
-            this.api = api;
-            Populate();
         }
 
-        private void Populate()
+        public void Populate()
         {
             try {
                 Directory.GetFiles(basedir).ToList().ForEach(f =>
                 {
                     if (f.EndsWith(".txt"))
                     {
-                        playlists.Add(new Playlist(Path.GetFileName(f.Replace(".txt","")) ,basedir, api));
+                        playlists.Add(new Playlist(Path.GetFileName(f.Replace(".txt","")) ,basedir, main.nw.ip, main.api));
                     }
                 });
             }
@@ -39,7 +40,7 @@ namespace MusicPlayer
 
         public void MakeNewPlaylistByName(string name)
         {
-            playlists.Add(new Playlist(name, basedir, api));
+            playlists.Add(new Playlist(name, basedir, main.nw.ip, main.api));
         }
 
         public Playlist GetPlaylistByName(string name)
@@ -54,7 +55,13 @@ namespace MusicPlayer
 
         public List<Playlist> GetPlaylists()
         {
-            return playlists;
+            List<Playlist> currentPlaylists = new List<Playlist>();
+            foreach(Playlist pl in playlists)
+            {
+                if (pl.server == main.nw.ip)
+                    currentPlaylists.Add(pl);
+            }
+            return currentPlaylists;
         }
     }
 }

+ 1 - 1
MusicPlayer/MusicPlayer/Program.cs

@@ -21,7 +21,7 @@ namespace MusicPlayer
             NetworkHandler nw = new NetworkHandler("http://imegumii.nl");
             APIHandler api = new APIHandler(nw);
             MainForm form = new MainForm();
-            PlaylistHandler pl = new PlaylistHandler(api);
+            PlaylistHandler pl = new PlaylistHandler();
             new Main(nw, api, form,pl);
 
             Application.Run(form);

+ 23 - 0
MusicPlayer/MusicPlayer/RadioStation.cs

@@ -0,0 +1,23 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace MusicPlayer
+{
+    class RadioStation :Song
+    {
+        string radiourl;
+        public RadioStation(string name, APIHandler api, string url):base("-1", name,"","","",0,api)
+        {
+            radiourl = url;
+        }
+
+        protected override string GetURL()
+        {
+            return radiourl;
+        }
+
+    }
+}

+ 1 - 1
MusicPlayer/MusicPlayer/Song.cs

@@ -34,7 +34,7 @@ namespace MusicPlayer
             url = "";
         }
 
-        private string GetURL()
+        protected virtual string GetURL()
         {
             if (url == "")
             {

+ 2 - 2
MusicPlayer/MusicPlayer/SongsTable.cs

@@ -12,9 +12,9 @@ namespace MusicPlayer
         public SongsTable() : base()
         {
             this.Columns.Clear();
-            this.Columns.Add("Naam", typeof(string));
+            this.Columns.Add("Name", typeof(string));
             this.Columns.Add("Album", typeof(string));
-            this.Columns.Add("Artiest", typeof(string));
+            this.Columns.Add("Artist", typeof(string));
             this.Columns.Add("Genre", typeof(string));
             this.Columns.Add("Duration", typeof(string));
             this.Columns.Add("song", typeof(Song));

+ 8 - 10
README.md

@@ -1,12 +1,10 @@
 # musicplayer
 
-##Onderdelen
-- Server/Client
-- Threading/Threadpools
-- File IO
-- Socket communicatie
-- Klasse Structuur
-- Forms Applicatie
-- Specifieke C# - Delegates/Lambda...
-
-
+## todo
+- afvangen server niet online
+- server opslaan bij playlist
+- doorzoeken van alle liedjes via API
+- doorzoeken van albums
+- playlist verwijderen
+- liedjes uit playlist verwijderen
+- presentatie