123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202 |
- using BeatLyrics.Common;
- using BeatLyrics.Tool.DataProvider.OnlineLyric;
- using BeatLyrics.Tool.DataProvider.OnlineLyric.Models;
- using BeatLyrics.Tool.Models;
- using BeatLyrics.Tool.Utils;
- using Microsoft.International.Converters;
- using Newtonsoft.Json;
- using System;
- using System.IO;
- using System.Threading.Tasks;
- using System.Windows.Forms;
- namespace BeatLyrics.Tool.Dialogs
- {
- public partial class OnlineLyricsForm : BaseForm
- {
- private readonly LevelInfo _levelInfo;
- private readonly JapaneseConverter _converter = new JapaneseConverter();
- private readonly NeteaseCloudMusicLyricProvider _ncmLyricProvider = new NeteaseCloudMusicLyricProvider();
- private Task _searchTask;
- private LyricFileExt _selectedItem;
- internal OnlineLyricsForm(LevelInfo levelInfo = null)
- {
- _levelInfo = levelInfo;
- InitializeComponent();
- if (levelInfo != null)
- {
- OggAudioPlayer.LoadOggFile(_levelInfo.MediaPath);
- OggAudioPlayer.Stop();
- var duration = OggAudioPlayer.Length;
- SongInfoTextBox.Text = $"{_levelInfo.SongName} {_levelInfo.SongAuthor} {_levelInfo.SongSubName} {duration.FormatToTotalMinuteAndSeconds()}";
- EditorControl.SetMediaInfo((int)duration.TotalMilliseconds);
- }
- }
- private void AppendText(string append)
- {
- switch (OnlineTabControl.SelectedIndex)
- {
- case 0:
- if (0 != NcmKeywordTextBox.TextLength && false == NcmKeywordTextBox.Text.EndsWith(" ")) NcmKeywordTextBox.AppendText(" ");
- NcmKeywordTextBox.AppendText(append);
- break;
- }
- }
- private void SongInfoTextBox_SelectionChanged(object sender, EventArgs e)
- {
- SelectionTextBox.Text = SongInfoTextBox.SelectedText.Trim();
- HiraTextBox.Text = KanaConverter.RomajiToHiragana(SelectionTextBox.Text).Replace(" ", "");
- KanTextBox.Text = _converter.HiraganaToKanji(HiraTextBox.Text);
- }
- private void AppendSelectionButton_Click(object sender, EventArgs e) => AppendText(SelectionTextBox.Text);
- private void AppendHiraganaButton_Click(object sender, EventArgs e) => AppendText(HiraTextBox.Text);
- private void AppendKanButton_Click(object sender, EventArgs e) => AppendText(KanTextBox.Text);
- private void NcmSearchButton_Click(object sender, EventArgs e)
- {
- if (NcmKeywordTextBox.TextLength < 1) return;
- if (_searchTask != null) return;
- _searchTask = Task.Factory.StartNew(() =>
- {
- try
- {
- using (this.ShowLoading("Searching..."))
- {
- var result = _ncmLyricProvider.Search(NcmKeywordTextBox.Text, "");
- RunOnUiThread(() =>
- {
- ResultObjectListView.SetObjects(result);
- SearchResultTabControl.SelectedTab = SearchResultTabPage;
- });
- }
- }
- catch (Exception exception)
- {
- new ThreadExceptionDialog(exception).ShowDialog(this);
- }
- finally
- {
- _searchTask = null;
- }
- });
- }
- private void ResultObjectListView_DoubleClick(object sender, EventArgs e)
- {
- _selectedItem = null;
- var selectedObject = ResultObjectListView.SelectedObject;
- if (selectedObject == null)
- {
- //Clear UI Values?
- return;
- }
- var item = (LyricSearchResultItem)selectedObject;
- if (item.IsDetailsLoaded == false)
- {
- switch (item.ProviderName)
- {
- case nameof(NeteaseCloudMusicLyricProvider):
- Task.Factory.StartNew(() =>
- {
- bool found;
- using (this.ShowLoading("Fetching Details..."))
- {
- found = _ncmLyricProvider.GetDetail(item);
- }
- if (false == found) RunOnUiThread(() => MessageBox.Show("Lyric not found"));
- }).ContinueWith(t =>
- {
- if (t.Exception != null)
- {
- RunOnUiThread(() => new ThreadExceptionDialog(t.Exception).ShowDialog(this));
- return;
- }
- RunOnUiThread(() =>
- {
- if (item.IsDetailsLoaded) SetEditorControlData(item);
- });
- });
- break;
- }
- }
- else
- {
- SetEditorControlData(item);
- }
- }
- private void SetEditorControlData(LyricSearchResultItem item)
- {
- _selectedItem = new LyricFileExt
- {
- Main = item.Details,
- MainText = item.DetailsText,
- Subtitle = item.DetailsTranslated,
- SubtitleText = item.DetailsTranslatedText,
- };
- SearchResultTabControl.SelectedTab = LyricDetailTabPage;
- DetailsInfoTextBox.Text = $"{item.Name} - {item.Artists} - {item.DurationText}";
- DetailsRemarkTextBox.Text = item.Remarks;
- EditorControl.SetLyricFile(_selectedItem);
- SaveTextBox.Text = false == string.IsNullOrWhiteSpace(item.Remarks)
- ? item.Remarks.ToSafeFileName() + ".json"
- : $"{item.Name} - {item.Artists}".ToSafeFileName() + ".json";
- }
- private void SaveButton_Click(object sender, EventArgs e)
- {
- // <BeatLyricsDir> \ <hash>
- var dir = DirProvider.GetLyricDir(_levelInfo.Hash);
- if (false == Directory.Exists(dir)) Directory.CreateDirectory(dir);
- var file = Path.Combine(dir, SaveTextBox.Text);
- var flag = true;
- if (File.Exists(file))
- {
- if (DialogResult.No == MessageBox.Show("File alyready exist, override?", "Warning",
- MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2))
- {
- flag = false;
- }
- }
- if (flag)
- {
- var json = JsonConvert.SerializeObject(_selectedItem);
- File.WriteAllText(file, json);
- var defaultFilePath = DirProvider.GetDefaultFile(_levelInfo.Hash);
- if (File.Exists(defaultFilePath))
- {
- MessageBox.Show("Saved");
- }
- else
- {
- File.WriteAllText(defaultFilePath, SaveTextBox.Text);
- MessageBox.Show("Saved and set as default");
- }
- }
- }
- private void OnlineLyricsForm_FormClosed(object sender, FormClosedEventArgs e)
- {
- EditorControl.ClearData();
- if (OggAudioPlayer.IsPlaying) OggAudioPlayer.Unload();
- }
- }
- }
|