第18回 NGアーティスト/NGワード登録処理を作る

前回「第17回 NG登録画面を作る」までに曲(ファイル)指定でのNG処理ができました。
今回はアーティスト名/キーワードのNG登録機能を作ります。
実際のNG処理は次回以降に持ち越しです。

処理自体はNGファイルとほぼ同じです。
比較処理だけが若干異なります。

■Option.cs
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Serialization;

namespace MP3Player
{
	[Serializable]
	public class AudioItem
	{
		public string strFile = "";
		public int nEntryIndex = -1;

		public AudioItem()
		{
		}

		public AudioItem(string strFile, int nEntryIndex = -1)
		{
			this.strFile = strFile;
			this.nEntryIndex = nEntryIndex;
		}
	}


	[Serializable]
	public class Option
	{
		//以下を追加
		public Option()
		{
			//デフォルトでカラオケ曲などをNG指定
			AddNGWord("カラオケ");
			AddNGWord("karaoke");
			AddNGWord("inst.");
			AddNGWord("instrum");
			AddNGWord("トイレの神様");
		}


		public int nVolume
		{
			get { return _nVolume; }
			set { _nVolume = value; }
		}
		int _nVolume = 20;


		public string strFolder
		{
			get { return _strFolder; }
			set { _strFolder = value; }
		}
		string _strFolder = @"G:\Desktop\mp3\";


		//以下を追加
		public List<string> listNGWords
		{
			get { return _listNGWords; }
			set { _listNGWords = value; }
		}
		List<string> _listNGWords = new List<string>();

		//以下を追加
		public List<string> listNGArtists
		{
			get { return _listNGArtists; }
			set { _listNGArtists = value; }
		}
		List<string> _listNGArtists = new List<string>();


		public List<AudioItem> listNGFiles
		{
			get { return _listNGFiles; }
			set { _listNGFiles = value; }
		}
		List<AudioItem> _listNGFiles = new List<AudioItem>();


		//以下を追加
		/// <summary>
		/// NGワードの追加
		/// </summary>
		public void AddNGWord(string strKeyword)
		{
			if (strKeyword == "")
				return;

			//すでにNGリストに含まれるかチェック
			if (IsNGWord(strKeyword))
				return;

			_listNGWords.Add(strKeyword);
		}


		//以下を追加
		/// <summary>
		/// NGワードかどうかチェック(OrdinalIgnoreCase比較、含むかどうか比較)
		/// </summary>
		public bool IsNGWord(string strTitle)
		{
			strTitle = strTitle.ToLower();
			string find = _listNGWords.Find(cmp =>
				{
					cmp = cmp.ToLower();
					if (strTitle.IndexOf(cmp, StringComparison.OrdinalIgnoreCase) >= 0)
						return true;
					return false;
				});

			return (find != null && find != "") ? true : false;
		}


		//以下を追加
		/// <summary>
		/// NGアーティストの追加
		/// </summary>
		public void AddNGArtist(string strArtist)
		{
			if (strArtist == "")
				return;

			//すでにNGリストに含まれるかチェック
			if (IsNGArtist(strArtist))
				return;

			_listNGArtists.Add(strArtist);
		}


		//以下を追加
		/// <summary>
		/// NGアーティストかどうかチェック(ignoreCase比較、スペース無視)
		/// 
		/// アーティストの苗字と名前の間にスペースが入っているケースがあるため、スペースを除去して比較している
		/// これによりまったく別人アーティストが同一と判定される可能性もある
		/// </summary>
		public bool IsNGArtist(string strArtist)
		{
			strArtist = strArtist.Replace(" ", "");		//半角スペース除去
			strArtist = strArtist.Replace(" ", "");	//全角スペース除去

			string find = _listNGArtists.Find(cmp =>
				{
					cmp = cmp.Replace(" ", "");		//半角スペース除去
					cmp = cmp.Replace(" ", "");	//全角スペース除去
					if (string.Compare(cmp, strArtist, true) == 0)
						return true;
					return false;
				});

			return (find != null && find != "") ? true : false;
		}

■AddNGForm.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace MP3Player
{
	public partial class AddNGForm : Form
	{
		AudioItem _item = null;

		public AddNGForm(AudioItem item, string strTitle, string strArtist)
		{
			InitializeComponent();

			labelTitle.Text = strTitle;
			labelArtist.Text = strArtist;
			labelFile.Text = Form1._option.RemoveMP3FolderName(item.strFile);
			_item = item;
		}


		private void buttonAddFile_Click(object sender, EventArgs e)
		{
			DialogResult ret = MessageBox.Show("NG登録しますか?\nファイル名:" + labelFile.Text, "NG登録", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
			if (ret == DialogResult.OK)
			{
				Form1._option.AddNGFile(_item);
				Close();
			}
		}

		private void buttonAddArtist_Click(object sender, EventArgs e)
		{
			//以下を追加
			DialogResult ret = MessageBox.Show("NG登録しますか?\nアーティスト名:" + labelArtist.Text, "NG登録", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
			if (ret == DialogResult.OK)
			{
				Form1._option.AddNGArtist(labelArtist.Text);
				Close();
			}
		}

		private void buttonAddKeyword_Click(object sender, EventArgs e)
		{
			//以下を追加
			if (textBoxKeyword.Text == "")
				return;
			DialogResult ret = MessageBox.Show("NG登録しますか?\nNGワード:" + textBoxKeyword.Text, "NG登録", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
			if (ret == DialogResult.OK)
			{
				Form1._option.AddNGWord(textBoxKeyword.Text);
				Close();
			}
		}
	}
}

プロジェクトファイルをダウンロード


カテゴリー「MP3プレーヤーを作る(C#)」 のエントリー