Implemented play next, shuffle and loop. Implemented Artist and Genre search
This commit is contained in:
@@ -40,9 +40,12 @@ namespace MusicPlayer
|
||||
|
||||
public Song CurrentSong;
|
||||
|
||||
public AudioHandler()
|
||||
private Main main;
|
||||
|
||||
public AudioHandler(Main main)
|
||||
{
|
||||
CreateThreads();
|
||||
this.main = main;
|
||||
CreateThreads();
|
||||
}
|
||||
|
||||
private void CreateThreads()
|
||||
@@ -171,6 +174,8 @@ namespace MusicPlayer
|
||||
|
||||
}
|
||||
|
||||
if(AState == AudioState.PLAYING)
|
||||
main.form.SongFinished();
|
||||
AState = AudioState.STOPPED;
|
||||
playpos = 0;
|
||||
CurrentTime = 0;
|
||||
|
||||
@@ -18,6 +18,9 @@ namespace MusicPlayer
|
||||
private SongsTable table;
|
||||
private ImageList imagelist;
|
||||
|
||||
private List<string> genres;
|
||||
private List<string> artists;
|
||||
|
||||
public Main(NetworkHandler nw, APIHandler api, MainForm form, PlaylistHandler pl)
|
||||
{
|
||||
this.nw = nw;
|
||||
@@ -26,11 +29,15 @@ namespace MusicPlayer
|
||||
form.main = this;
|
||||
this.pl = pl;
|
||||
|
||||
audio = new AudioHandler();
|
||||
audio = new AudioHandler(this);
|
||||
table = new SongsTable();
|
||||
imagelist = new ImageList();
|
||||
form.SongsTableView.DataSource = table;
|
||||
form.SongsTableView.Columns[5].Visible = false;
|
||||
|
||||
genres = new List<string>();
|
||||
artists = new List<string>();
|
||||
|
||||
Populate();
|
||||
}
|
||||
|
||||
@@ -38,9 +45,9 @@ namespace MusicPlayer
|
||||
{
|
||||
form.AlbumListView.LargeImageList = imagelist;
|
||||
this.api.GetAlbums().ForEach(a => { var item = form.AlbumListView.Items.Add(a.albumnaam); imagelist.Images.Add(a.albumnaam, a.cover); item.ImageKey = a.albumnaam;});
|
||||
this.api.GetArtists().ForEach(a => form.ArtistListBox.Items.Add(a.naam));
|
||||
this.api.GetGenres().ForEach(g => form.GenreListBox.Items.Add(g.name));
|
||||
this.pl.GetPlaylists().ForEach(p => form.PlaylistBox.Items.Add(p.name));
|
||||
this.api.GetArtists().ForEach(a => { artists.Add(a.naam); form.ArtistListBox.Items.Add(a.naam); });
|
||||
this.api.GetGenres().ForEach(g => { genres.Add(g.name); form.GenreListBox.Items.Add(g.name); });
|
||||
this.pl.GetPlaylists().ForEach(p => form.PlaylistBox.Items.Add(p.name));
|
||||
}
|
||||
|
||||
public void Repopulate()
|
||||
@@ -64,6 +71,50 @@ namespace MusicPlayer
|
||||
});
|
||||
}
|
||||
|
||||
public void SearchArtist(string search)
|
||||
{
|
||||
form.ArtistListBox.Items.Clear();
|
||||
|
||||
if (search.Length > 1)
|
||||
{
|
||||
string sPattern = search;
|
||||
|
||||
foreach (string s in artists)
|
||||
{
|
||||
if (System.Text.RegularExpressions.Regex.IsMatch(s, sPattern, System.Text.RegularExpressions.RegexOptions.IgnoreCase))
|
||||
{
|
||||
form.ArtistListBox.Items.Add(s);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
artists.ForEach(a => form.ArtistListBox.Items.Add(a));
|
||||
}
|
||||
}
|
||||
|
||||
public void SearchGenre(string search)
|
||||
{
|
||||
form.GenreListBox.Items.Clear();
|
||||
|
||||
if (search.Length > 1)
|
||||
{
|
||||
string sPattern = search;
|
||||
|
||||
foreach (string s in genres)
|
||||
{
|
||||
if (System.Text.RegularExpressions.Regex.IsMatch(s, sPattern, System.Text.RegularExpressions.RegexOptions.IgnoreCase))
|
||||
{
|
||||
form.GenreListBox.Items.Add(s);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
genres.ForEach(g => form.GenreListBox.Items.Add(g));
|
||||
}
|
||||
}
|
||||
|
||||
public void GenreFilter(string genre)
|
||||
{
|
||||
table.Clear();
|
||||
|
||||
+137
-12
@@ -1,4 +1,6 @@
|
||||
namespace MusicPlayer
|
||||
using System;
|
||||
|
||||
namespace MusicPlayer
|
||||
{
|
||||
partial class MainForm
|
||||
{
|
||||
@@ -48,10 +50,22 @@
|
||||
this.viewToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.overviewToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.playlistsToolStripMenuItem = 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.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.saveToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.loadToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.makeToolStripMenuItem = 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();
|
||||
this.ClearGenreSearchButton = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.SearchArtistToolStripLabel = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.SearchArtistsTextBox = new System.Windows.Forms.ToolStripTextBox();
|
||||
this.ClearArtistSearchButton = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.ControlsPanel = new System.Windows.Forms.Panel();
|
||||
this.CurrentSongLabel = new System.Windows.Forms.Label();
|
||||
this.SeperatorLabel = new System.Windows.Forms.Label();
|
||||
@@ -241,7 +255,9 @@
|
||||
this.MenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.fileToolStripMenuItem,
|
||||
this.viewToolStripMenuItem,
|
||||
this.playlistToolStripMenuItem});
|
||||
this.playbackToolStripMenuItem,
|
||||
this.playlistToolStripMenuItem,
|
||||
this.searchToolStripMenuItem});
|
||||
this.MenuStrip.Location = new System.Drawing.Point(0, 0);
|
||||
this.MenuStrip.Name = "MenuStrip";
|
||||
this.MenuStrip.Size = new System.Drawing.Size(784, 24);
|
||||
@@ -292,34 +308,131 @@
|
||||
this.playlistsToolStripMenuItem.Text = "Playlists";
|
||||
this.playlistsToolStripMenuItem.Click += new System.EventHandler(this.playlistsToolStripMenuItem_Click);
|
||||
//
|
||||
// playbackToolStripMenuItem
|
||||
//
|
||||
this.playbackToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.PlayNextSongButton,
|
||||
this.LoopSongButton,
|
||||
this.ShuffleSongButton});
|
||||
this.playbackToolStripMenuItem.Name = "playbackToolStripMenuItem";
|
||||
this.playbackToolStripMenuItem.Size = new System.Drawing.Size(66, 20);
|
||||
this.playbackToolStripMenuItem.Text = "Playback";
|
||||
//
|
||||
// PlayNextSongButton
|
||||
//
|
||||
this.PlayNextSongButton.Checked = true;
|
||||
this.PlayNextSongButton.CheckOnClick = true;
|
||||
this.PlayNextSongButton.CheckState = System.Windows.Forms.CheckState.Checked;
|
||||
this.PlayNextSongButton.Name = "PlayNextSongButton";
|
||||
this.PlayNextSongButton.Size = new System.Drawing.Size(152, 22);
|
||||
this.PlayNextSongButton.Text = "Play Next";
|
||||
//
|
||||
// LoopSongButton
|
||||
//
|
||||
this.LoopSongButton.Checked = true;
|
||||
this.LoopSongButton.CheckOnClick = true;
|
||||
this.LoopSongButton.CheckState = System.Windows.Forms.CheckState.Checked;
|
||||
this.LoopSongButton.Name = "LoopSongButton";
|
||||
this.LoopSongButton.Size = new System.Drawing.Size(152, 22);
|
||||
this.LoopSongButton.Text = "Loop";
|
||||
//
|
||||
// ShuffleSongButton
|
||||
//
|
||||
this.ShuffleSongButton.CheckOnClick = true;
|
||||
this.ShuffleSongButton.Enabled = false;
|
||||
this.ShuffleSongButton.Name = "ShuffleSongButton";
|
||||
this.ShuffleSongButton.Size = new System.Drawing.Size(152, 22);
|
||||
this.ShuffleSongButton.Text = "Shuffle";
|
||||
//
|
||||
// playlistToolStripMenuItem
|
||||
//
|
||||
this.playlistToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.makeToolStripMenuItem,
|
||||
this.toolStripSeparator3,
|
||||
this.saveToolStripMenuItem1,
|
||||
this.loadToolStripMenuItem,
|
||||
this.makeToolStripMenuItem});
|
||||
this.loadToolStripMenuItem});
|
||||
this.playlistToolStripMenuItem.Name = "playlistToolStripMenuItem";
|
||||
this.playlistToolStripMenuItem.Size = new System.Drawing.Size(56, 20);
|
||||
this.playlistToolStripMenuItem.Text = "Playlist";
|
||||
//
|
||||
// makeToolStripMenuItem
|
||||
//
|
||||
this.makeToolStripMenuItem.Name = "makeToolStripMenuItem";
|
||||
this.makeToolStripMenuItem.Size = new System.Drawing.Size(139, 22);
|
||||
this.makeToolStripMenuItem.Text = "Create / Edit";
|
||||
this.makeToolStripMenuItem.Click += new System.EventHandler(this.makeToolStripMenuItem_Click);
|
||||
//
|
||||
// toolStripSeparator3
|
||||
//
|
||||
this.toolStripSeparator3.Name = "toolStripSeparator3";
|
||||
this.toolStripSeparator3.Size = new System.Drawing.Size(136, 6);
|
||||
//
|
||||
// saveToolStripMenuItem1
|
||||
//
|
||||
this.saveToolStripMenuItem1.Name = "saveToolStripMenuItem1";
|
||||
this.saveToolStripMenuItem1.Size = new System.Drawing.Size(103, 22);
|
||||
this.saveToolStripMenuItem1.Size = new System.Drawing.Size(139, 22);
|
||||
this.saveToolStripMenuItem1.Text = "Save";
|
||||
//
|
||||
// loadToolStripMenuItem
|
||||
//
|
||||
this.loadToolStripMenuItem.Name = "loadToolStripMenuItem";
|
||||
this.loadToolStripMenuItem.Size = new System.Drawing.Size(103, 22);
|
||||
this.loadToolStripMenuItem.Size = new System.Drawing.Size(139, 22);
|
||||
this.loadToolStripMenuItem.Text = "Load";
|
||||
//
|
||||
// makeToolStripMenuItem
|
||||
// searchToolStripMenuItem
|
||||
//
|
||||
this.makeToolStripMenuItem.Name = "makeToolStripMenuItem";
|
||||
this.makeToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
|
||||
this.makeToolStripMenuItem.Text = "Create / Edit";
|
||||
this.makeToolStripMenuItem.Click += new System.EventHandler(this.makeToolStripMenuItem_Click);
|
||||
this.searchToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.SearchGenresToolStripLabel,
|
||||
this.SearchArtistToolStripLabel});
|
||||
this.searchToolStripMenuItem.Name = "searchToolStripMenuItem";
|
||||
this.searchToolStripMenuItem.Size = new System.Drawing.Size(54, 20);
|
||||
this.searchToolStripMenuItem.Text = "Search";
|
||||
//
|
||||
// SearchGenresToolStripLabel
|
||||
//
|
||||
this.SearchGenresToolStripLabel.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.SearchGenresTextBox,
|
||||
this.ClearGenreSearchButton});
|
||||
this.SearchGenresToolStripLabel.Name = "SearchGenresToolStripLabel";
|
||||
this.SearchGenresToolStripLabel.Size = new System.Drawing.Size(110, 22);
|
||||
this.SearchGenresToolStripLabel.Text = "Genres";
|
||||
//
|
||||
// SearchGenresTextBox
|
||||
//
|
||||
this.SearchGenresTextBox.Name = "SearchGenresTextBox";
|
||||
this.SearchGenresTextBox.Size = new System.Drawing.Size(100, 23);
|
||||
this.SearchGenresTextBox.KeyUp += new System.Windows.Forms.KeyEventHandler(this.SearchGenresTextBox_KeyUp);
|
||||
//
|
||||
// ClearGenreSearchButton
|
||||
//
|
||||
this.ClearGenreSearchButton.Enabled = false;
|
||||
this.ClearGenreSearchButton.Name = "ClearGenreSearchButton";
|
||||
this.ClearGenreSearchButton.Size = new System.Drawing.Size(160, 22);
|
||||
this.ClearGenreSearchButton.Text = "Clear Search";
|
||||
this.ClearGenreSearchButton.Click += new System.EventHandler(this.ClearGenreSearchButton_Click);
|
||||
//
|
||||
// SearchArtistToolStripLabel
|
||||
//
|
||||
this.SearchArtistToolStripLabel.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.SearchArtistsTextBox,
|
||||
this.ClearArtistSearchButton});
|
||||
this.SearchArtistToolStripLabel.Name = "SearchArtistToolStripLabel";
|
||||
this.SearchArtistToolStripLabel.Size = new System.Drawing.Size(110, 22);
|
||||
this.SearchArtistToolStripLabel.Text = "Artists";
|
||||
//
|
||||
// SearchArtistsTextBox
|
||||
//
|
||||
this.SearchArtistsTextBox.Name = "SearchArtistsTextBox";
|
||||
this.SearchArtistsTextBox.Size = new System.Drawing.Size(100, 23);
|
||||
this.SearchArtistsTextBox.KeyUp += new System.Windows.Forms.KeyEventHandler(this.SearchArtistsTextBox_KeyUp);
|
||||
//
|
||||
// ClearArtistSearchButton
|
||||
//
|
||||
this.ClearArtistSearchButton.Enabled = false;
|
||||
this.ClearArtistSearchButton.Name = "ClearArtistSearchButton";
|
||||
this.ClearArtistSearchButton.Size = new System.Drawing.Size(160, 22);
|
||||
this.ClearArtistSearchButton.Text = "Clear Search";
|
||||
this.ClearArtistSearchButton.Click += new System.EventHandler(this.ClearArtistSearchButton_Click);
|
||||
//
|
||||
// ControlsPanel
|
||||
//
|
||||
@@ -584,6 +697,18 @@
|
||||
private System.Windows.Forms.ToolStripMenuItem NotifyMenuStripPlayingSongLabel;
|
||||
private System.Windows.Forms.SplitContainer SplitContainer;
|
||||
private System.Windows.Forms.ToolStripMenuItem makeToolStripMenuItem;
|
||||
private System.Windows.Forms.ToolStripMenuItem searchToolStripMenuItem;
|
||||
private System.Windows.Forms.ToolStripMenuItem SearchArtistToolStripLabel;
|
||||
private System.Windows.Forms.ToolStripTextBox SearchArtistsTextBox;
|
||||
private System.Windows.Forms.ToolStripMenuItem SearchGenresToolStripLabel;
|
||||
private System.Windows.Forms.ToolStripTextBox SearchGenresTextBox;
|
||||
private System.Windows.Forms.ToolStripMenuItem ClearArtistSearchButton;
|
||||
private System.Windows.Forms.ToolStripMenuItem ClearGenreSearchButton;
|
||||
private System.Windows.Forms.ToolStripMenuItem playbackToolStripMenuItem;
|
||||
private System.Windows.Forms.ToolStripMenuItem ShuffleSongButton;
|
||||
private System.Windows.Forms.ToolStripMenuItem LoopSongButton;
|
||||
private System.Windows.Forms.ToolStripMenuItem PlayNextSongButton;
|
||||
private System.Windows.Forms.ToolStripSeparator toolStripSeparator3;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -19,6 +19,7 @@ namespace MusicPlayer
|
||||
public partial class MainForm : Form
|
||||
{
|
||||
NotificationPopup p;
|
||||
bool songFinished;
|
||||
|
||||
public Main main
|
||||
{
|
||||
@@ -47,6 +48,7 @@ namespace MusicPlayer
|
||||
};
|
||||
|
||||
p = new NotificationPopup(this);
|
||||
songFinished = false;
|
||||
}
|
||||
|
||||
private void MainForm_Load(object sender, EventArgs e)
|
||||
@@ -69,6 +71,11 @@ namespace MusicPlayer
|
||||
main.audio.Stop();
|
||||
}
|
||||
|
||||
public void SongFinished()
|
||||
{
|
||||
songFinished = true;
|
||||
}
|
||||
|
||||
private void UpdateTimer_Tick(object sender, EventArgs e)
|
||||
{
|
||||
//Trackbar
|
||||
@@ -139,6 +146,55 @@ namespace MusicPlayer
|
||||
StopButton.Enabled = true;
|
||||
NotifyMenuStripStopButton.Enabled = true;
|
||||
}
|
||||
|
||||
if(PlayNextSongButton.Checked)
|
||||
{
|
||||
ShuffleSongButton.Enabled = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
ShuffleSongButton.Enabled = false;
|
||||
ShuffleSongButton.Checked = false;
|
||||
}
|
||||
|
||||
|
||||
if (songFinished)
|
||||
{
|
||||
Console.WriteLine("Song finished");
|
||||
Thread.Sleep(20);
|
||||
|
||||
if (PlayNextSongButton.Checked)
|
||||
{
|
||||
Console.WriteLine("Playing next song");
|
||||
|
||||
int selected = 0;
|
||||
|
||||
if(ShuffleSongButton.Checked)
|
||||
{
|
||||
Random r = new Random();
|
||||
selected = r.Next(0, SongsTableView.Rows.Count);
|
||||
while (selected == SongsTableView.SelectedRows[0].Index && SongsTableView.Rows.Count > 1)
|
||||
selected = r.Next(0, SongsTableView.Rows.Count);
|
||||
}
|
||||
else
|
||||
selected = SongsTableView.SelectedRows[0].Index + 1;
|
||||
|
||||
if (selected >= SongsTableView.Rows.Count && LoopSongButton.Checked)
|
||||
selected = 0;
|
||||
|
||||
Console.WriteLine(selected);
|
||||
|
||||
SongsTableView.CurrentCell = SongsTableView.Rows[selected].Cells[0];
|
||||
SongsTableView_CellDoubleClick(this, new DataGridViewCellEventArgs(0, selected));
|
||||
|
||||
}
|
||||
else if (LoopSongButton.Checked)
|
||||
{
|
||||
main.audio.Play(main.audio.CurrentSong);
|
||||
}
|
||||
|
||||
songFinished = false;
|
||||
}
|
||||
}
|
||||
|
||||
private void GenreListBox_SelectedIndexChanged(object sender, EventArgs e)
|
||||
@@ -284,7 +340,38 @@ namespace MusicPlayer
|
||||
PlaylistMaker p = new PlaylistMaker(main.pl, main.api);
|
||||
p.ShowDialog();
|
||||
main.Repopulate();
|
||||
}
|
||||
|
||||
private void SearchArtistsTextBox_KeyUp(object sender, KeyEventArgs e)
|
||||
{
|
||||
main.SearchArtist(SearchArtistsTextBox.Text);
|
||||
if (SearchArtistsTextBox.Text.Length < 1)
|
||||
ClearArtistSearchButton.Enabled = false;
|
||||
else
|
||||
ClearArtistSearchButton.Enabled = true;
|
||||
}
|
||||
|
||||
private void SearchGenresTextBox_KeyUp(object sender, KeyEventArgs e)
|
||||
{
|
||||
main.SearchGenre(SearchGenresTextBox.Text);
|
||||
if (SearchGenresTextBox.Text.Length < 1)
|
||||
ClearGenreSearchButton.Enabled = false;
|
||||
else
|
||||
ClearGenreSearchButton.Enabled = true;
|
||||
}
|
||||
|
||||
private void ClearArtistSearchButton_Click(object sender, EventArgs e)
|
||||
{
|
||||
main.SearchArtist("");
|
||||
SearchArtistsTextBox.Text = "";
|
||||
ClearArtistSearchButton.Enabled = false;
|
||||
}
|
||||
|
||||
private void ClearGenreSearchButton_Click(object sender, EventArgs e)
|
||||
{
|
||||
main.SearchGenre("");
|
||||
SearchGenresTextBox.Text = "";
|
||||
ClearGenreSearchButton.Enabled = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user