Skip to content

Commit

Permalink
Interrupt search button
Browse files Browse the repository at this point in the history
  • Loading branch information
libgenapps committed Mar 30, 2018
1 parent 58a0d02 commit 69c7361
Show file tree
Hide file tree
Showing 20 changed files with 308 additions and 266 deletions.
4 changes: 2 additions & 2 deletions LibgenDesktop.Setup/Constants.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@
{
internal static class Constants
{
public const string CURRENT_VERSION = "1.0.1";
public const string TITLE_VERSION = "1.0.1";
public const string CURRENT_VERSION = "1.0.2";
public const string TITLE_VERSION = "1.0.2";
public const string PRODUCT_TITLE_FORMAT = "Libgen Desktop " + TITLE_VERSION + " ({0}-bit)";
public const string SHORTCUT_TITLE_FORMAT = "Libgen Desktop ({0}-bit)";
public const string PRODUCT_COMPANY = "Libgen Apps";
Expand Down
6 changes: 3 additions & 3 deletions LibgenDesktop/Common/Constants.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@ namespace LibgenDesktop.Common
{
internal static class Constants
{
public const string CURRENT_VERSION = "1.0.1";
public const string CURRENT_GITHUB_RELEASE_NAME = "1.0.1";
public static readonly DateTime CURRENT_GITHUB_RELEASE_DATE = new DateTime(2018, 3, 18);
public const string CURRENT_VERSION = "1.0.2";
public const string CURRENT_GITHUB_RELEASE_NAME = "1.0.2";
public static readonly DateTime CURRENT_GITHUB_RELEASE_DATE = new DateTime(2018, 3, 30);
public const string CURRENT_DATABASE_VERSION = "1.0";

public const string APP_SETTINGS_FILE_NAME = "libgen.config";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,15 @@ public SearchResultsTabLocalizator(List<Translation> prioritizedTranslationList,
{
SearchPlaceHolder = Format(translation => translation?.SearchPlaceHolder);
SearchInProgress = Format(translation => translation?.SearchInProgress);
Interrupt = Format(translation => translation?.Interrupt);
Interrupting = Format(translation => translation?.Interrupting);
ExportButtonTooltip = Format(translation => translation?.ExportButtonTooltip);
}

public string SearchPlaceHolder { get; }
public string SearchInProgress { get; }
public string Interrupt { get; }
public string Interrupting { get; }
public string ExportButtonTooltip { get; }

private string Format(Func<Translation.SearchResultsTabsTranslation, string> field, object templateArguments = null)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ public SearchTabLocalizator(List<Translation> prioritizedTranslationList, Langua
FictionSearchBoxTooltip = Format(translation => translation?.FictionSearchBoxTooltip);
SciMagSearchBoxTooltip = Format(translation => translation?.SciMagSearchBoxTooltip);
SearchInProgress = Format(translation => translation?.SearchInProgress);
Interrupt = Format(translation => translation?.Interrupt);
Interrupting = Format(translation => translation?.Interrupting);
DatabaseIsEmpty = Format(translation => translation?.DatabaseIsEmpty);
ImportButton = Format(translation => translation?.ImportButton);
}
Expand All @@ -31,6 +33,8 @@ public SearchTabLocalizator(List<Translation> prioritizedTranslationList, Langua
public string FictionSearchBoxTooltip { get; }
public string SciMagSearchBoxTooltip { get; }
public string SearchInProgress { get; }
public string Interrupt { get; }
public string Interrupting { get; }
public string DatabaseIsEmpty { get; }
public string ImportButton { get; }

Expand Down
4 changes: 4 additions & 0 deletions LibgenDesktop/Models/Localization/Translation.cs
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,8 @@ internal class SearchTabTranslation
public string NonFictionSearchProgress { get; set; }
public string FictionSearchProgress { get; set; }
public string SciMagSearchProgress { get; set; }
public string Interrupt { get; set; }
public string Interrupting { get; set; }
public string DatabaseIsEmpty { get; set; }
public string ImportButton { get; set; }
}
Expand All @@ -86,6 +88,8 @@ internal class SearchResultsTabsTranslation
{
public string SearchPlaceHolder { get; set; }
public string SearchInProgress { get; set; }
public string Interrupt { get; set; }
public string Interrupting { get; set; }
public string ExportButtonTooltip { get; set; }
}

Expand Down
2 changes: 1 addition & 1 deletion LibgenDesktop/Models/MainModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -752,7 +752,7 @@ private Task<List<T>> SearchItemsAsync<T>(Func<string, int?, IEnumerable<T>> sea
if (cancellationToken.IsCancellationRequested)
{
Logger.Debug("Search has been cancelled.");
return null;
return result;
}
result.Add(item);
DateTime now = DateTime.Now;
Expand Down
4 changes: 4 additions & 0 deletions LibgenDesktop/Resources/Languages/English.lng
Original file line number Diff line number Diff line change
Expand Up @@ -67,13 +67,17 @@
"NonFictionSearchProgress": "Books found: {count}",
"FictionSearchProgress": "Books found: {count}",
"SciMagSearchProgress": "Articles found: {count}",
"Interrupt": "INTERRUPT",
"Interrupting": "INTERRUPTING...",
"DatabaseIsEmpty": "The database is empty. Download a database dump from the Library Genesis web site and import it here.",
"ImportButton": "Import"
},
"SearchResultsTabs":
{
"SearchPlaceHolder": "Search",
"SearchInProgress": "Search in progress...",
"Interrupt": "INTERRUPT",
"Interrupting": "INTERRUPTING...",
"ExportButtonTooltip": "Export search results to a file"
},
"NonFictionSearchResultsTab":
Expand Down
4 changes: 4 additions & 0 deletions LibgenDesktop/Resources/Languages/Romanian.lng
Original file line number Diff line number Diff line change
Expand Up @@ -67,13 +67,17 @@
"NonFictionSearchProgress": "Cărți găsite: {count}",
"FictionSearchProgress": "Cărți găsite: {count}",
"SciMagSearchProgress": "Articole găsite: {count}",
"Interrupt": "ÎNTRERUPE",
"Interrupting": "SE ÎNTRERUPE...",
"DatabaseIsEmpty": "Baza de date este goală. Descarcă fișierul arhiva/sql de pe site-ul Libgen și-l importează aici.",
"ImportButton": "Importează"
},
"SearchResultsTabs":
{
"SearchPlaceHolder": "Caută",
"SearchInProgress": "Căutare în curs...",
"Interrupt": "ÎNTRERUPE",
"Interrupting": "SE ÎNTRERUPE...",
"ExportButtonTooltip": "Exportă rezultatele căutării într-un fișier"
},
"NonFictionSearchResultsTab":
Expand Down
4 changes: 4 additions & 0 deletions LibgenDesktop/Resources/Languages/Russian.lng
Original file line number Diff line number Diff line change
Expand Up @@ -67,13 +67,17 @@
"NonFictionSearchProgress": "Найдено книг: {count}",
"FictionSearchProgress": "Найдено книг: {count}",
"SciMagSearchProgress": "Найдено статей: {count}",
"Interrupt": "ПРЕРВАТЬ",
"Interrupting": "ПРЕРЫВАЕТСЯ...",
"DatabaseIsEmpty": "База данных пуста. Скачайте дамп базы данных с сайта Library Genesis, а затем импортируйте его.",
"ImportButton": "Импортировать"
},
"SearchResultsTabs":
{
"SearchPlaceHolder": "Поиск",
"SearchInProgress": "Идет поиск...",
"Interrupt": "ПРЕРВАТЬ",
"Interrupting": "ПРЕРЫВАЕТСЯ...",
"ExportButtonTooltip": "Экспорт результатов поиска в файл"
},
"NonFictionSearchResultsTab":
Expand Down
4 changes: 4 additions & 0 deletions LibgenDesktop/Resources/Languages/Ukrainian.lng
Original file line number Diff line number Diff line change
Expand Up @@ -67,13 +67,17 @@
"NonFictionSearchProgress": "Знайдено книг: {count}",
"FictionSearchProgress": "Знайдено книг: {count}",
"SciMagSearchProgress": "Знайдено статей: {count}",
"Interrupt": "ПЕРЕРВАТИ",
"Interrupting": "ПЕРЕРИВАЄТЬСЯ...",
"DatabaseIsEmpty": "База даних порожня. Завантажте дамп бази даних з сайту Library Genesis, а потім імпортуйте його.",
"ImportButton": "Імпортувати"
},
"SearchResultsTabs":
{
"SearchPlaceHolder": "Пошук",
"SearchInProgress": "Триває пошук...",
"Interrupt": "ПЕРЕРВАТИ",
"Interrupting": "ПЕРЕРИВАЄТЬСЯ...",
"ExportButtonTooltip": "Експорт результатів пошуку в файл"
},
"NonFictionSearchResultsTab":
Expand Down
115 changes: 30 additions & 85 deletions LibgenDesktop/ViewModels/Tabs/FictionSearchResultsTabViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
using System.Collections.ObjectModel;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using LibgenDesktop.Infrastructure;
using LibgenDesktop.Models;
using LibgenDesktop.Models.Entities;
Expand All @@ -21,27 +22,21 @@ internal class FictionSearchResultsTabViewModel : SearchResultsTabViewModel
private readonly FictionColumnSettings columnSettings;
private ObservableCollection<FictionSearchResultItemViewModel> books;
private FictionSearchResultsTabLocalizator localization;
private string searchQuery;
private string bookCount;
private bool isBookGridVisible;
private bool isSearchProgressPanelVisible;
private string searchProgressStatus;
private bool isStatusBarVisible;
private bool isExportPanelVisible;

public FictionSearchResultsTabViewModel(MainModel mainModel, IWindowContext parentWindowContext, string searchQuery,
List<FictionBook> searchResults)
: base(mainModel, parentWindowContext, searchQuery)
: base(mainModel, parentWindowContext, LibgenObjectType.FICTION_BOOK, searchQuery)
{
columnSettings = mainModel.AppSettings.Fiction.Columns;
this.searchQuery = searchQuery;
LanguageFormatter formatter = MainModel.Localization.CurrentLanguage.Formatter;
books = new ObservableCollection<FictionSearchResultItemViewModel>(searchResults.Select(book =>
new FictionSearchResultItemViewModel(book, formatter)));
ExportPanelViewModel = new ExportPanelViewModel(mainModel, LibgenObjectType.FICTION_BOOK, parentWindowContext);
ExportPanelViewModel.ClosePanel += CloseExportPanel;
OpenDetailsCommand = new Command(param => OpenDetails((param as FictionSearchResultItemViewModel)?.Book));
SearchCommand = new Command(Search);
ExportCommand = new Command(ShowExportPanel);
BookDataGridEnterKeyCommand = new Command(BookDataGridEnterKeyPressed);
Initialize();
Expand All @@ -61,23 +56,6 @@ public FictionSearchResultsTabLocalizator Localization
}
}

public string SearchQuery
{
get
{
return searchQuery;
}
set
{
searchQuery = value;
NotifyPropertyChanged();
if (IsExportPanelVisible)
{
ExportPanelViewModel.UpdateSearchQuery(value);
}
}
}

public ObservableCollection<FictionSearchResultItemViewModel> Books
{
get
Expand Down Expand Up @@ -188,19 +166,6 @@ public int FileSizeColumnWidth
}
}

public bool IsSearchProgressPanelVisible
{
get
{
return isSearchProgressPanelVisible;
}
set
{
isSearchProgressPanelVisible = value;
NotifyPropertyChanged();
}
}

public string SearchProgressStatus
{
get
Expand Down Expand Up @@ -240,25 +205,9 @@ public string BookCount
}
}

public bool IsExportPanelVisible
{
get
{
return isExportPanelVisible;
}
set
{
isExportPanelVisible = value;
NotifyPropertyChanged();
}
}

public ExportPanelViewModel ExportPanelViewModel { get; }

public FictionSearchResultItemViewModel SelectedBook { get; set; }

public Command OpenDetailsCommand { get; }
public Command SearchCommand { get; }
public Command ExportCommand { get; }
public Command BookDataGridEnterKeyCommand { get; }

Expand All @@ -280,13 +229,39 @@ public override void HandleTabClosing()
MainModel.Localization.LanguageChanged -= LocalizationLanguageChanged;
}

protected override SearchResultsTabLocalizator GetLocalization()
{
return localization;
}

protected override async Task SearchAsync(string searchQuery, CancellationToken cancellationToken)
{
IsBookGridVisible = false;
IsStatusBarVisible = false;
UpdateSearchProgressStatus(0);
Progress<SearchProgress> searchProgressHandler = new Progress<SearchProgress>(HandleSearchProgress);
List<FictionBook> result = new List<FictionBook>();
try
{
result = await MainModel.SearchFictionAsync(SearchQuery, searchProgressHandler, cancellationToken);
}
catch (Exception exception)
{
ShowErrorWindow(exception, ParentWindowContext);
}
LanguageFormatter formatter = MainModel.Localization.CurrentLanguage.Formatter;
Books = new ObservableCollection<FictionSearchResultItemViewModel>(result.Select(book =>
new FictionSearchResultItemViewModel(book, formatter)));
UpdateBookCount();
IsBookGridVisible = true;
IsStatusBarVisible = true;
}

private void Initialize()
{
localization = MainModel.Localization.CurrentLanguage.FictionSearchResultsTab;
isBookGridVisible = true;
isStatusBarVisible = true;
isSearchProgressPanelVisible = false;
isExportPanelVisible = false;
UpdateBookCount();
Events.RaiseEvent(ViewModelEvent.RegisteredEventId.FOCUS_SEARCH_TEXT_BOX);
}
Expand All @@ -306,36 +281,6 @@ private void OpenDetails(FictionBook book)
OpenFictionDetailsRequested?.Invoke(this, new OpenFictionDetailsEventArgs(book));
}

private async void Search()
{
if (!String.IsNullOrWhiteSpace(SearchQuery) && !IsSearchProgressPanelVisible && !IsExportPanelVisible)
{
Title = SearchQuery;
IsBookGridVisible = false;
IsStatusBarVisible = false;
IsSearchProgressPanelVisible = true;
UpdateSearchProgressStatus(0);
Progress<SearchProgress> searchProgressHandler = new Progress<SearchProgress>(HandleSearchProgress);
CancellationToken cancellationToken = new CancellationToken();
List<FictionBook> result = new List<FictionBook>();
try
{
result = await MainModel.SearchFictionAsync(SearchQuery, searchProgressHandler, cancellationToken);
}
catch (Exception exception)
{
ShowErrorWindow(exception, ParentWindowContext);
}
LanguageFormatter formatter = MainModel.Localization.CurrentLanguage.Formatter;
Books = new ObservableCollection<FictionSearchResultItemViewModel>(result.Select(book =>
new FictionSearchResultItemViewModel(book, formatter)));
UpdateBookCount();
IsSearchProgressPanelVisible = false;
IsBookGridVisible = true;
IsStatusBarVisible = true;
}
}

private void HandleSearchProgress(SearchProgress searchProgress)
{
UpdateSearchProgressStatus(searchProgress.ItemsFound);
Expand Down
Loading

0 comments on commit 69c7361

Please sign in to comment.