diff --git a/MusicPlayer/MusicPlayer/APIHandler.cs b/MusicPlayer/MusicPlayer/APIHandler.cs index a6baa0e..aa18b34 100644 --- a/MusicPlayer/MusicPlayer/APIHandler.cs +++ b/MusicPlayer/MusicPlayer/APIHandler.cs @@ -49,6 +49,11 @@ namespace MusicPlayer return GetSongsByArgs("album=" + year); } + public List GetSongsBySearch(string search) + { + return GetSongsByArgs("search=" + search); + } + public List GetAllSongs() { List allsongslist = new List(); @@ -109,7 +114,7 @@ namespace MusicPlayer { List albumlist = new List(); - 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 GetYears() { List yearlist = new List (); - 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 GetGenres() { List genreslist = new List(); - 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++) diff --git a/MusicPlayer/MusicPlayer/AudioHandler.cs b/MusicPlayer/MusicPlayer/AudioHandler.cs index 3981d37..b55b60a 100755 --- a/MusicPlayer/MusicPlayer/AudioHandler.cs +++ b/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; } } diff --git a/MusicPlayer/MusicPlayer/Form1.Designer.cs.BACKUP.11468.cs b/MusicPlayer/MusicPlayer/Form1.Designer.cs.BACKUP.11468.cs new file mode 100644 index 0000000..397e6d1 --- /dev/null +++ b/MusicPlayer/MusicPlayer/Form1.Designer.cs.BACKUP.11468.cs @@ -0,0 +1,48 @@ +namespace MusicPlayer +{ + partial class Form1 + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + 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 + } +} + diff --git a/MusicPlayer/MusicPlayer/Form1.Designer.cs.BASE.11468.cs b/MusicPlayer/MusicPlayer/Form1.Designer.cs.BASE.11468.cs new file mode 100644 index 0000000..a88eefc --- /dev/null +++ b/MusicPlayer/MusicPlayer/Form1.Designer.cs.BASE.11468.cs @@ -0,0 +1,39 @@ +namespace MusicPlayer +{ + partial class Form1 + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Text = "Form1"; + } + + #endregion + } +} + diff --git a/MusicPlayer/MusicPlayer/Form1.Designer.cs.LOCAL.11468.cs b/MusicPlayer/MusicPlayer/Form1.Designer.cs.LOCAL.11468.cs new file mode 100644 index 0000000..e69de29 diff --git a/MusicPlayer/MusicPlayer/Form1.Designer.cs.REMOTE.11468.cs b/MusicPlayer/MusicPlayer/Form1.Designer.cs.REMOTE.11468.cs new file mode 100644 index 0000000..397e6d1 --- /dev/null +++ b/MusicPlayer/MusicPlayer/Form1.Designer.cs.REMOTE.11468.cs @@ -0,0 +1,48 @@ +namespace MusicPlayer +{ + partial class Form1 + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + 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 + } +} + diff --git a/MusicPlayer/MusicPlayer/Form1.Designer.cs.orig b/MusicPlayer/MusicPlayer/Form1.Designer.cs.orig new file mode 100644 index 0000000..397e6d1 --- /dev/null +++ b/MusicPlayer/MusicPlayer/Form1.Designer.cs.orig @@ -0,0 +1,48 @@ +namespace MusicPlayer +{ + partial class Form1 + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + 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 + } +} + diff --git a/MusicPlayer/MusicPlayer/Main.cs b/MusicPlayer/MusicPlayer/Main.cs index 6c2e833..4d2b845 100644 --- a/MusicPlayer/MusicPlayer/Main.cs +++ b/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 templist = new List(); + 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; + } } } diff --git a/MusicPlayer/MusicPlayer/MainForm.Designer.cs b/MusicPlayer/MusicPlayer/MainForm.Designer.cs index 0ca4874..ee3cde3 100644 --- a/MusicPlayer/MusicPlayer/MainForm.Designer.cs +++ b/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; } } diff --git a/MusicPlayer/MusicPlayer/MainForm.cs b/MusicPlayer/MusicPlayer/MainForm.cs index e003ed0..f800e6c 100644 --- a/MusicPlayer/MusicPlayer/MainForm.cs +++ b/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 (! (main.audio.CurrentSong is RadioStation) ) + { + Thread.Sleep(20); - if (PlayNextSongButton.Checked) - { - NextButton_Click(this, new EventArgs()); - } - else if (LoopSongButton.Checked) - { - main.audio.Play(main.audio.CurrentSong); + 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 = ""; + } + } } } diff --git a/MusicPlayer/MusicPlayer/MusicPlayer.csproj b/MusicPlayer/MusicPlayer/MusicPlayer.csproj index 46eace5..8dc830c 100755 --- a/MusicPlayer/MusicPlayer/MusicPlayer.csproj +++ b/MusicPlayer/MusicPlayer/MusicPlayer.csproj @@ -85,6 +85,7 @@ + Component diff --git a/MusicPlayer/MusicPlayer/MusicPlayer.csproj.orig b/MusicPlayer/MusicPlayer/MusicPlayer.csproj.orig new file mode 100644 index 0000000..b5baecf --- /dev/null +++ b/MusicPlayer/MusicPlayer/MusicPlayer.csproj.orig @@ -0,0 +1,99 @@ + + + + + Debug + AnyCPU + {E2B99339-3251-48BE-91C9-FAB21CD07A39} + WinExe + Properties + MusicPlayer + MusicPlayer + v4.5.2 + 512 + true + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + + + + + + Form + + + + + + MainForm.cs + + + + +<<<<<<< HEAD + + MainForm.cs +======= + + Form1.cs +>>>>>>> origin/api + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + + + + diff --git a/MusicPlayer/MusicPlayer/NetworkHandler.cs b/MusicPlayer/MusicPlayer/NetworkHandler.cs index c82fcb2..f0c4536 100644 --- a/MusicPlayer/MusicPlayer/NetworkHandler.cs +++ b/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) - { - String outputData = new String(readBuff, 0, count); - data +=outputData; - count = streamRead.Read(readBuff, 0, 256); + 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; } - JObject o = JObject.Parse(data); - respond.Close(); - streamResponse.Close(); - streamRead.Close(); - return o; + catch(WebException e) + { + Console.WriteLine("Server is offline"); + } + catch(Exception e) + { + Console.WriteLine("Er is iets fout gegaan bij het communiceren met de server."); + } + + return null; + } public MemoryStream downloadArtwork(string album) diff --git a/MusicPlayer/MusicPlayer/Playlist.cs b/MusicPlayer/MusicPlayer/Playlist.cs index 97665dd..d009a98 100644 --- a/MusicPlayer/MusicPlayer/Playlist.cs +++ b/MusicPlayer/MusicPlayer/Playlist.cs @@ -9,14 +9,16 @@ namespace MusicPlayer public string name { get; } private string basedir; public List 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(); 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()); diff --git a/MusicPlayer/MusicPlayer/PlaylistHandler.cs b/MusicPlayer/MusicPlayer/PlaylistHandler.cs index b2acf9c..8b151a0 100644 --- a/MusicPlayer/MusicPlayer/PlaylistHandler.cs +++ b/MusicPlayer/MusicPlayer/PlaylistHandler.cs @@ -8,23 +8,24 @@ namespace MusicPlayer public class PlaylistHandler { private List 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(); - 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 GetPlaylists() { - return playlists; + List currentPlaylists = new List(); + foreach(Playlist pl in playlists) + { + if (pl.server == main.nw.ip) + currentPlaylists.Add(pl); + } + return currentPlaylists; } } } \ No newline at end of file diff --git a/MusicPlayer/MusicPlayer/Program.cs b/MusicPlayer/MusicPlayer/Program.cs index 0007924..6e1e41d 100644 --- a/MusicPlayer/MusicPlayer/Program.cs +++ b/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); diff --git a/MusicPlayer/MusicPlayer/RadioStation.cs b/MusicPlayer/MusicPlayer/RadioStation.cs new file mode 100644 index 0000000..48c7ea0 --- /dev/null +++ b/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; + } + + } +} diff --git a/MusicPlayer/MusicPlayer/Song.cs b/MusicPlayer/MusicPlayer/Song.cs old mode 100755 new mode 100644 index d698b3f..59e87d4 --- a/MusicPlayer/MusicPlayer/Song.cs +++ b/MusicPlayer/MusicPlayer/Song.cs @@ -34,7 +34,7 @@ namespace MusicPlayer url = ""; } - private string GetURL() + protected virtual string GetURL() { if (url == "") { diff --git a/MusicPlayer/MusicPlayer/SongsTable.cs b/MusicPlayer/MusicPlayer/SongsTable.cs index 582dd74..e0b5657 100755 --- a/MusicPlayer/MusicPlayer/SongsTable.cs +++ b/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)); diff --git a/README.md b/README.md index dcb32ad..329f374 100755 --- a/README.md +++ b/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