You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
203 lines
7.8 KiB
203 lines
7.8 KiB
using System;
|
|
using System.Drawing;
|
|
using System.Threading.Tasks;
|
|
using System.Windows.Forms;
|
|
using System.Timers;
|
|
|
|
namespace fileFinder
|
|
{
|
|
public partial class MainForm : Form
|
|
{
|
|
TaskController mainController = new TaskController();
|
|
SearchQueryModel searchQueryModel;
|
|
System.Timers.Timer updateInfoTimer = new System.Timers.Timer(1000);
|
|
bool isFieldsChanged = false;
|
|
|
|
public MainForm()
|
|
{
|
|
InitializeComponent();
|
|
this.updateInfoTimer.Elapsed += refreshInfoByTimer;
|
|
this.updateInfoTimer.AutoReset = true;
|
|
this.updateInfoTimer.Enabled = true;
|
|
fillImagesToResultViewer();
|
|
restoreLastSession();
|
|
}
|
|
|
|
private void restoreLastSession()
|
|
{
|
|
MainSettings sets = MainSettings.Default;
|
|
fileUrlTextBox.Text = sets.fileUrl;
|
|
innerQueryTextBox.Text = sets.fileInnerQuery;
|
|
nameQueryTextBox.Text = sets.fileNameQuery;
|
|
searchQueryModel = mainController.updateSearchQueryModel(sets.fileUrl,
|
|
sets.fileInnerQuery, sets.fileNameQuery);
|
|
isFieldsChanged = false;
|
|
}
|
|
|
|
private void fillImagesToResultViewer()
|
|
{
|
|
try
|
|
{
|
|
ImageList iconList = new ImageList();
|
|
iconList.Images.Add(Properties.Resources.Folder); // 0
|
|
iconList.Images.Add(Properties.Resources.OpenedFolder); // 1
|
|
iconList.Images.Add(Properties.Resources.File); // 2
|
|
iconList.Images.Add(Properties.Resources.Search); // 3
|
|
resultViewer.ImageList = iconList;
|
|
resultViewer.ImageIndex = 3;
|
|
resultViewer.SelectedImageIndex = 3;
|
|
}
|
|
catch { }
|
|
}
|
|
|
|
private void dirSelectBtn_Click(object sender, EventArgs e)
|
|
{
|
|
using (var dialog = new FolderBrowserDialog())
|
|
{
|
|
DialogResult result = dialog.ShowDialog();
|
|
if (result == DialogResult.OK && !String.IsNullOrWhiteSpace(dialog.SelectedPath))
|
|
{
|
|
fileUrlTextBox.Text = dialog.SelectedPath;
|
|
}
|
|
}
|
|
}
|
|
|
|
private void reportProgress(object sender, ProgressReportModel report)
|
|
{
|
|
switch (mainController.state)
|
|
{
|
|
case TaskState.Pause:
|
|
updateResultViewer(report.currentTreeNode);
|
|
break;
|
|
default:
|
|
updateInfoLabel(report.currentFileUrl, report);
|
|
break;
|
|
}
|
|
}
|
|
|
|
private async void handleSearchBtn_Click(object sender, EventArgs e)
|
|
{
|
|
Progress<ProgressReportModel> progress = new Progress<ProgressReportModel>();
|
|
progress.ProgressChanged += reportProgress;
|
|
|
|
if (fileUrlTextBox.Text.Equals("") || nameQueryTextBox.Text.Equals("") || innerQueryTextBox.Text.Equals(""))
|
|
{
|
|
MessageBox.Show("Вы не заполнили одно из полей. Проверьте все и повторно нажмите \"Запуск задания\"!");
|
|
return;
|
|
}
|
|
|
|
if (isFieldsChanged) // если в форме изменился запрос
|
|
mainController.stopTask(); // то принудительно завершаем задание
|
|
isFieldsChanged = false;
|
|
|
|
switch (mainController.state)
|
|
{
|
|
case TaskState.Created:
|
|
searchQueryModel = mainController.updateSearchQueryModel(fileUrlTextBox.Text,
|
|
nameQueryTextBox.Text, innerQueryTextBox.Text);
|
|
handleSearchBtn.Text = "Pause Task";
|
|
mainController.beginTask();
|
|
changeVisibilityResultViewer();
|
|
TreeNode tN = await Task.Run(() => mainController.buildResultTree(searchQueryModel, progress));
|
|
if (tN != null)
|
|
{
|
|
updateResultViewer(tN);
|
|
handleSearchBtn.Text = "Start Task";
|
|
}
|
|
break;
|
|
case TaskState.Work:
|
|
handleSearchBtn.Text = "Resume Task";
|
|
mainController.pauseTask();
|
|
break;
|
|
case TaskState.Pause:
|
|
handleSearchBtn.Text = "Pause Task";
|
|
mainController.resumeTask();
|
|
break;
|
|
case TaskState.Finished:
|
|
mainController = new TaskController();
|
|
goto case TaskState.Created;
|
|
}
|
|
changeVisibilityResultViewer();
|
|
}
|
|
|
|
private void changeVisibilityResultViewer()
|
|
{
|
|
switch (mainController.state)
|
|
{
|
|
case TaskState.Work: // если задание в работе, то блокируем ResultViewer
|
|
waitOrPauseLabel.Visible = true;
|
|
resultViewer.Enabled = false;
|
|
break;
|
|
case TaskState.Pause: // если задание на паузе, то показываем промеж. результат
|
|
waitOrPauseLabel.Visible = false;
|
|
resultViewer.Enabled = true;
|
|
break;
|
|
case TaskState.Finished: // если задание завершено, то показываем результат
|
|
goto case TaskState.Pause;
|
|
}
|
|
}
|
|
|
|
private void updateInfoLabel(string fileUrl, ProgressReportModel rpm)
|
|
{
|
|
TimeSpan tS = mainController.elapsedTime();
|
|
string fileNumCounters = rpm.matchingFiles + "/" + rpm.processedFiles + "/" + rpm.totalNumOfFiles;
|
|
string time = String.Format("{0:00}:{1:00}:{2:00}", tS.Hours, tS.Minutes, tS.Seconds);
|
|
infoLabel.Text = "Time: " + time + " " + "| Number of files: " + fileNumCounters +
|
|
" | Current file: " + fileUrl;
|
|
|
|
}
|
|
|
|
private void updateResultViewer(TreeNode tN)
|
|
{
|
|
if (tN != null)
|
|
{
|
|
resultViewer.Nodes.Clear();
|
|
resultViewer.Nodes.Add(tN);
|
|
}
|
|
}
|
|
|
|
private void refreshInfoByTimer (object sender, ElapsedEventArgs e)
|
|
{
|
|
Action refresh = () =>
|
|
{
|
|
TimeSpan tS = mainController.elapsedTime();
|
|
string time = String.Format("{0:00}:{1:00}:{2:00}", tS.Hours, tS.Minutes, tS.Seconds);
|
|
infoLabel.Text = "Time: " + time + " |" +
|
|
infoLabel.Text.Substring(infoLabel.Text.IndexOf("|") + 1);
|
|
};
|
|
try { this.Invoke(refresh); } catch { }
|
|
}
|
|
|
|
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
|
|
{
|
|
MainSettings.Default.fileUrl = fileUrlTextBox.Text;
|
|
MainSettings.Default.fileNameQuery = nameQueryTextBox.Text;
|
|
MainSettings.Default.fileInnerQuery = innerQueryTextBox.Text;
|
|
MainSettings.Default.Save();
|
|
}
|
|
|
|
private void fileUrlTextBox_TextChanged(object sender, EventArgs e)
|
|
{
|
|
prepareToNewTask();
|
|
}
|
|
|
|
private void nameQueryTextBox_TextChanged(object sender, EventArgs e)
|
|
{
|
|
prepareToNewTask();
|
|
}
|
|
|
|
private void innerQueryTextBox_TextChanged(object sender, EventArgs e)
|
|
{
|
|
prepareToNewTask();
|
|
}
|
|
|
|
private void prepareToNewTask()
|
|
{
|
|
if (!isFieldsChanged)
|
|
{
|
|
isFieldsChanged = true;
|
|
handleSearchBtn.Text = "Start New Task";
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|