123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285 |
- using BeatLyrics.Common;
- using BeatLyrics.Tool.DataProvider.BeatMaps;
- using BeatLyrics.Tool.Dialogs;
- using BeatLyrics.Tool.Models;
- using BeatLyrics.Tool.Utils;
- using BrightIdeasSoftware;
- using System;
- using System.Diagnostics;
- using System.Drawing;
- using System.IO;
- using System.Linq;
- using System.Threading.Tasks;
- using System.Windows.Forms;
- namespace BeatLyrics.Tool
- {
- public partial class MainForm : BaseForm
- {
- private Task _refreshTask;
- private LevelInfo[] _allLevelInfos;
- public MainForm()
- {
- InitializeComponent();
- }
- private void RefreshList()
- {
- if (_refreshTask != null) return;
- MainObjectListView.Items.Clear();
- MainImageList.Images.Clear();
- if (null != _allLevelInfos)
- foreach (var item in _allLevelInfos) item.CoverImage.Dispose();
- _refreshTask = Task.Factory.StartNew(() =>
- {
- RunOnUiThread(() =>
- {
- MainProgressBar.Visible = true;
- MainImageList.Images.Clear();
- MainObjectListView.Items.Clear();
- });
- var levels = LocalCustomLevelProvider.GetAlLevelInfos((l, i) => RunOnUiThread(() =>
- {
- MainProgressBar.Maximum = l;
- MainProgressBar.Value = i;
- })).OrderBy(p => p.SongName).ToArray();
- RunOnUiThread(() => MainProgressBar.Value = 0);
- Parallel.ForEach(levels, (p, s, i) =>
- {
- try
- {
- if (false == p.IsValid)
- {
- p.SongName = "[Error]";
- p.Description = p.Error;
- return;
- }
- p.CoverImage = Image.FromFile(p.CoverPath);
- RunOnUiThread(() => MainImageList.Images.Add(p.CoverPath, p.CoverImage));
- }
- catch (Exception e)
- {
- Debug.Print(e.ToString());
- }
- finally
- {
- RunOnUiThread(() => MainProgressBar.Value++);
- }
- });
- _allLevelInfos = levels;
- RunOnUiThread(() =>
- {
- MainProgressBar.Visible = false;
- Search();
- });
- _refreshTask = null;
- });
- }
- private void ClearDetails()
- {
- HashTextBox.Text = null;
- CoverPictureBox.BackgroundImage = null;
- DirTextBox.Text = null;
- DirTimeLabel.Text = null;
- SongNameTextBox.Text = null;
- SubNameTextBox.Text = null;
- SongAuthorTextBox.Text = null;
- LevelAuthorTextBox.Text = null;
- LocalLyricObjectListView.ClearObjects();
- }
- private void BindDetails(LevelInfo item)
- {
- ClearDetails();
- VerifyCheckBox.Checked = File.Exists(DirProvider.GetVerifyFile(item.Hash));
- CoverPictureBox.BackgroundImage = item.CoverImage;
- DirTextBox.Text = item.Directory;
- DirTimeLabel.Text = item.DirectoryTimeText;
- SongNameTextBox.Text = item.SongName;
- SubNameTextBox.Text = item.SongSubName;
- SongAuthorTextBox.Text = item.SongAuthor;
- LevelAuthorTextBox.Text = item.LevelAuthor;
- HashTextBox.Text = item.Hash;
- if (false == item.IsValid) SubNameTextBox.Text = item.Error;
- LocalLyricObjectListView.SetObjects(item.LocalLyrics);
- }
- private void Search()
- {
- if (_allLevelInfos == null) return;
- var pattern = SearchTextBox.Text.ToLower();
- var items = _allLevelInfos;
- if (false == string.IsNullOrWhiteSpace(pattern))
- {
- items = items.Where(p =>
- true == p.SongName?.ToLower().Contains(pattern) ||
- true == p.SongSubName?.ToLower().Contains(pattern) ||
- true == p.SongAuthor?.ToLower().Contains(pattern) ||
- true == p.LevelAuthor?.ToLower().Contains(pattern) ||
- true == p.Description?.ToLower().Contains(pattern) ||
- true == p.Hash?.ToLower().Contains(pattern) ||
- true == p.Directory?.ToLower().Contains(pattern)).ToArray();
- }
- if (false == AllRadioButton.Checked)
- {
- items = items
- .Where(p => SetOnlyRadioButton.Checked == (true == p.LocalLyrics?.Any(q => q.IsDefault)))
- .ToArray();
- }
- if (false == All2RadioButton.Checked)
- {
- items = items
- .Where(p => p.IsVerify == VerifyRadioButton.Checked)
- .ToArray();
- }
- MainObjectListView.SetObjects(items);
- if (MainObjectListView.Items.Count == 1) MainObjectListView.SelectedIndex = 0;
- }
- private void MainForm_Shown(object sender, EventArgs e)
- {
- MainObjectListView.AllColumns.Add(new OLVColumn(nameof(LevelInfo.SongName), nameof(LevelInfo.SongName))
- {
- Width = 128,
- ImageAspectName = nameof(LevelInfo.CoverPath),
- });
- MainObjectListView.AllColumns.Add(new OLVColumn(nameof(LevelInfo.SongAuthor), nameof(LevelInfo.SongAuthor)) { Width = 128, IsTileViewColumn = true });
- MainObjectListView.AllColumns.Add(new OLVColumn(nameof(LevelInfo.LevelAuthor), nameof(LevelInfo.LevelAuthor)) { Width = 128, IsTileViewColumn = true });
- MainObjectListView.AllColumns.Add(new OLVColumn(nameof(LevelInfo.DirectoryTime), nameof(LevelInfo.DirectoryTimeText)) { Width = 128, IsTileViewColumn = true });
- MainObjectListView.RebuildColumns();
- RefreshList();
- SearchTextBox.Focus();
- }
- private void MainForm_KeyDown(object sender, KeyEventArgs e)
- {
- if (e.KeyCode == Keys.F5) RefreshList();
- }
- private void SearchTextBox_TextChanged(object sender, EventArgs e) => Search();
- private void AllRadioButton_CheckedChanged(object sender, EventArgs e)
- {
- if (((RadioButton)sender).Checked) Search();
- }
- private void MainObjectListView_SelectedIndexChanged(object sender, EventArgs e)
- {
- var selectedObject = MainObjectListView.SelectedObject;
- if (null == selectedObject)
- {
- ClearDetails();
- }
- else
- {
- BindDetails((LevelInfo)selectedObject);
- }
- }
- private void DirExploreHereLinkLabel_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) => Process.Start("explorer.exe", DirTextBox.Text);
- private void HashExploreHereLinkLabel_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) => Process.Start("explorer.exe", DirProvider.GetLyricDir(HashTextBox.Text));
- private void OnlineButton_Click(object sender, EventArgs e)
- {
- var selectedObject = MainObjectListView.SelectedObject;
- if (null == selectedObject) return;
- var nfo = (LevelInfo)selectedObject;
- new OnlineLyricsForm(nfo).ShowDialog(this);
- nfo.ReloadLocalLyricInfo();
- BindDetails(nfo);
- }
- private void LocalLyricObjectListView_DoubleClick(object sender, EventArgs e) => ShowEditForm();
- private void EditButton_Click(object sender, EventArgs e) => ShowEditForm();
- private void ShowEditForm()
- {
- var selectedObject = LocalLyricObjectListView.SelectedObject;
- if (selectedObject == null) return;
- var ctx = new ContextMenuStrip();
- ctx.Items.Add("Text Mode").Click += delegate
- {
- var lli = (LocalLyricInfo)selectedObject;
- var nfo = (LevelInfo)MainObjectListView.SelectedObject;
- new TextEditForm(nfo, lli.FileName).ShowDialog(this);
- };
- ctx.Items.Add("Timeline Mode").Click += delegate
- {
- var lli = (LocalLyricInfo)selectedObject;
- var nfo = (LevelInfo)MainObjectListView.SelectedObject;
- new TimelineEditForm(nfo, lli.FileName).ShowDialog(this);
- };
- ctx.Show(MousePosition);
- }
- private void NewButton_Click(object sender, EventArgs e)
- {
- var nfo = (LevelInfo)MainObjectListView.SelectedObject;
- ContextDialog.ShowInput(MousePosition, "Create New Lyric", nfo.SongName + ".json", (dr, input) =>
- {
- if (dr == DialogResult.OK) new TimelineEditForm(nfo, input).ShowDialog(this);
- });
- }
- private void SetButton_Click(object sender, EventArgs e)
- {
- var selectedObject = LocalLyricObjectListView.SelectedObject;
- if (selectedObject == null) return;
- var lli = (LocalLyricInfo)selectedObject;
- var nfo = (LevelInfo)MainObjectListView.SelectedObject;
- var defaultFilePath = DirProvider.GetDefaultFile(nfo.Hash);
- File.WriteAllText(defaultFilePath, lli.FileName);
- nfo.ReloadLocalLyricInfo();
- BindDetails(nfo);
- }
- private void VerifyCheckBox_CheckedChanged(object sender, EventArgs e)
- {
- if (string.IsNullOrWhiteSpace(HashTextBox.Text)) return;
- var verifyFilePath = DirProvider.GetVerifyFile(HashTextBox.Text);
- if (VerifyCheckBox.Checked && !File.Exists(verifyFilePath))
- {
- using var _ = File.Create(verifyFilePath);
- }
- else if (File.Exists(verifyFilePath))
- {
- File.Delete(verifyFilePath);
- }
- }
- }
- }
|