Skip to content

Commit

Permalink
Add extension method to long type.
Browse files Browse the repository at this point in the history
Now you can stop searching after pause.
Added some simple code fixes
  • Loading branch information
unchase committed Aug 19, 2018
1 parent 8daa659 commit 4ac9c64
Show file tree
Hide file tree
Showing 3 changed files with 76 additions and 85 deletions.
21 changes: 21 additions & 0 deletions SimpleFullTextSearcher/Extensions/LongExtension.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
using System;

namespace SimpleFullTextSearcher.Extensions
{
/// <summary>
/// Методы расширения для типа long
/// </summary>
public static class LongExtension
{
/// <summary>
/// Переводит значение миллисекунд типа long в строковое представление, содержащее дни, часы, минуты, секунды и миллесекунды
/// </summary>
/// <param name="l">Значение в миллисекундах</param>
/// <returns>Возвращает значение в виде строки, представляющей полное время (в днях, часах, минутах, секундах и миллесекундах) из миллисекунд</returns>
public static string MillisecondsToTimeString(this long l)
{
var ts = new TimeSpan(0, 0, 0, 0, Convert.ToInt32(l));
return $"{ts.Days} д, {ts.Hours} ч, {ts.Minutes} м, {ts.Seconds} с, {ts.Milliseconds} мс";
}
}
}
139 changes: 54 additions & 85 deletions SimpleFullTextSearcher/FormMain.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
using System.Text;
using System.Web.Script.Serialization;
using System.Windows.Forms;
using SimpleFullTextSearcher.Extensions;
using SimpleFullTextSearcher.FileSearcher;
using SimpleFullTextSearcher.FileSearcher.EventArgs;
using SimpleFullTextSearcher.FileSearcher.Helpers;
Expand Down Expand Up @@ -68,7 +69,7 @@ public static void SaveSearchCriteriaToJson(Settings contract)
{
MessageBox.Show(
$"Не удалось сохранить критерии поиска в файл \"{SearchCriteriaFilePath}\".\nПроизошла ошибка: {ex.Message}",
"Сохранение критериев поиска", MessageBoxButtons.OK, MessageBoxIcon.Error);
@"Сохранение критериев поиска", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}

Expand All @@ -84,7 +85,7 @@ public static Settings LoadSearchCriteriaFromJson()
{
MessageBox.Show(
$"Не удалось загрузить критерии поиска из файла \"{SearchCriteriaFilePath}\".\nПроизошла ошибка: {ex.Message}",
"Загрузка критериев поиска", MessageBoxButtons.OK, MessageBoxIcon.Error);
@"Загрузка критериев поиска", MessageBoxButtons.OK, MessageBoxIcon.Error);
return default(Settings);
}
}
Expand All @@ -102,9 +103,9 @@ public static Settings LoadSearchCriteriaFromJson()

private Stopwatch _stopWatch;

private bool _formClosing = false;
private bool _formClosing;

private bool _searchOnPause = false;
private bool _searchOnPause;

#endregion

Expand Down Expand Up @@ -141,15 +142,45 @@ private void FormMain_Load(object sender, EventArgs e)
{
_stopWatch = new Stopwatch();

// подписываемся на собственные события
_foundInfo = this_FoundInfo;
_searchInfo = this_SearchInfo;
_threadEnded = this_ThreadEnded;
// подписываемся на собственные события (с помощью анонимных методов и лямбда-выражений)
_foundInfo = eventArgs =>
{
sfsToolStripStatusLabel.Text = $@"Найдено сопадение в файле: {eventArgs.Info.FullName}";

var initialDirectorySplit = eventArgs.Info.FullName.Split('\\');
AddFileInfoIntoTreeView(initialDirectorySplit.ToList(), sfsSearchResultsTreeView.Nodes,
eventArgs.Info.FullName);
};
_searchInfo = eventArgs => sfsToolStripStatusLabel.Text = $@"Просмотрено файлов - {eventArgs.Count}. Проверяется в: {eventArgs.Info.FullName}";
_threadEnded = eventArgs =>
{
// делаем активными отключенные Controls
EnableControls();

// подписываемся на события Searcher'а
Searcher.FoundInfo += Searcher_FoundInfo;
Searcher.SearchInfo += Searcher_SearchInfo;
Searcher.ThreadEnded += Searcher_ThreadEnded;
// выводим затраченное время поиска
if (_stopWatch.IsRunning)
{
_stopWatch.Stop();

sfsToolStripStatusLabel.Text =
$@"Всего найдено совпадений - {eventArgs.Count}. Затраченное время: {
_stopWatch.ElapsedMilliseconds.MillisecondsToTimeString()}";

_stopWatch.Reset();
}

// показать текст ошибки, если необходимо
if (!eventArgs.Success)
{
MessageBox.Show($@"Во время поиска произошла ошибка: {eventArgs.ErrorMsg}", @"Ошибка поиска",
MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
};

// подписываемся на события Searcher'а (с помощью анонимных методов и лямбда-выражений)
Searcher.FoundInfo += eventArgs => { if (!_formClosing) Invoke(_foundInfo, eventArgs); };
Searcher.SearchInfo += eventArgs => { if (!_formClosing) Invoke(_searchInfo, eventArgs); };
Searcher.ThreadEnded += eventArgs => { if (!_formClosing) Invoke(_threadEnded, eventArgs); };
}

private void FormMain_FormClosing(object sender, FormClosingEventArgs e)
Expand All @@ -174,67 +205,6 @@ private void FormMain_FormClosing(object sender, FormClosingEventArgs e)

#endregion

#region Searcher and own events

private void Searcher_FoundInfo(FoundInfoEventArgs e)
{
if (!_formClosing)
{
Invoke(_foundInfo, e);
}
}

private void this_FoundInfo(FoundInfoEventArgs e)
{
sfsToolStripStatusLabel.Text = $@"Найдено сопадение в файле: {e.Info.FullName}";

var initialDirectorySplit = e.Info.FullName.Split('\\');
AddFileInfoIntoTreeView(initialDirectorySplit.ToList(), sfsSearchResultsTreeView.Nodes, e.Info.FullName);
}

private void Searcher_SearchInfo(SearchInfoEventArgs e)
{
if (!_formClosing)
{
Invoke(_searchInfo, e);
}
}

private void this_SearchInfo(SearchInfoEventArgs e) => sfsToolStripStatusLabel.Text = $@"Просмотрено файлов - {e.Count}. Проверяется в: {e.Info.FullName}";

private void Searcher_ThreadEnded(ThreadEndedEventArgs e)
{
if (!_formClosing)
{
Invoke(_threadEnded, e);
}
}

private void this_ThreadEnded(ThreadEndedEventArgs e)
{
// делаем активными отключенные Controls
EnableControls();

// выводим затраченное время поиска
if (_stopWatch.IsRunning)
{
_stopWatch.Stop();

sfsToolStripStatusLabel.Text = $@"Всего найдено совпадений - {e.Count}. Затраченное время: {MillisecondsToTimeStringConverter(_stopWatch.ElapsedMilliseconds)}";

_stopWatch.Reset();
}

// показать текст ошибки, если необходимо
if (!e.Success)
{
MessageBox.Show($@"Во время поиска произошла ошибка: {e.ErrorMsg}", @"Ошибка поиска",
MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
}

#endregion

#region Controls events

private void sfsInitialDirectorySelectButton_Click(object sender, EventArgs e)
Expand All @@ -251,7 +221,15 @@ private void sfsInitialDirectorySelectButton_Click(object sender, EventArgs e)
}
}

private void sfsSearchStopButton_Click(object sender, EventArgs e) => Searcher.Stop();
private void sfsSearchStopButton_Click(object sender, EventArgs e)
{
if (_searchOnPause)
{
sfsSearchPauseButton_Click(null, null);
}

Searcher.Stop();
}

private void sfsSearchStartButton_Click(object sender, EventArgs e)
{
Expand Down Expand Up @@ -280,13 +258,11 @@ private void sfsSearchPauseButton_Click(object sender, EventArgs e)
{
sfsSearchPauseButton.Text = @"Продолжить";
_stopWatch.Stop();
sfsSearchStopButton.Enabled = false;
}
else
{
sfsSearchPauseButton.Text = @"Пауза";
_stopWatch.Start();
sfsSearchStopButton.Enabled = true;
}
Searcher.Pause();
}
Expand All @@ -299,9 +275,8 @@ private void sfsSearchPauseButton_Click(object sender, EventArgs e)

private void sfsAboutButton_Click(object sender, EventArgs e) => MessageBox.Show(
"Программа предназначена для полнотекстового поиска в файлах с заданными критериями поиска.\nАвтор: unchase (https://github.com/unchase), август 2018 г.",
"О программе", MessageBoxButtons.OK, MessageBoxIcon.Information);
@"О программе", MessageBoxButtons.OK, MessageBoxIcon.Information);


#endregion

#region Private methods
Expand All @@ -312,7 +287,7 @@ private bool CheckInputFields()
{
MessageBox.Show(
"Начальная директория поиска не выбрана или не существует!\nВыберите ее и запустите поиск снова.",
"Провека входных данных", MessageBoxButtons.OK, MessageBoxIcon.Warning);
@"Провека входных данных", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return false;
}

Expand Down Expand Up @@ -395,12 +370,6 @@ private void DisableControls()
sfsSearchStopButton.Enabled = true;
}

private static string MillisecondsToTimeStringConverter(long milliseconds)
{
var ts = new TimeSpan(0, 0, 0, 0, Convert.ToInt32(milliseconds));
return $"{ts.Days} д, {ts.Hours} ч, {ts.Minutes} м, {ts.Seconds} с, {ts.Milliseconds} мс";
}

#endregion
}
}
1 change: 1 addition & 0 deletions SimpleFullTextSearcher/SimpleFullTextSearcher.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,7 @@
<Reference Include="WindowsBase" />
</ItemGroup>
<ItemGroup>
<Compile Include="Extensions\LongExtension.cs" />
<Compile Include="FileSearcher\EventArgs\FoundInfoEventArgs.cs" />
<Compile Include="FileSearcher\EventArgs\SearchInfoEventArgs.cs" />
<Compile Include="FileSearcher\EventArgs\ThreadEndedEventArgs.cs" />
Expand Down

0 comments on commit 4ac9c64

Please sign in to comment.