Skip to content

Commit

Permalink
Extra settings, import errors handling, packing all binary dependenci…
Browse files Browse the repository at this point in the history
…es into single executable
  • Loading branch information
libgenapps committed Nov 11, 2017
1 parent 5aa1c37 commit 5d0ab4e
Showing 16 changed files with 1,339 additions and 908 deletions.
2 changes: 1 addition & 1 deletion Cache/LoadBooksOperation.cs
Original file line number Diff line number Diff line change
@@ -34,7 +34,7 @@ protected override void DoWork(CancellationToken token)
{
RaiseProgressEvent(new ProgressEventArgs
{
ProgressDescription = $"Загрузка книг (загружено {targetList.Count.ToString("N0", Formatters.BookCountFormat)} из {totalBookCount.ToString("N0", Formatters.BookCountFormat)})...",
ProgressDescription = $"Загрузка книг (загружено {targetList.Count.ToString("N0", Formatters.ThousandsSeparatedNumberFormat)} из {totalBookCount.ToString("N0", Formatters.ThousandsSeparatedNumberFormat)})...",
PercentCompleted = (double)targetList.Count * 100 / totalBookCount
});
currentBatchBookNumber = 0;
2 changes: 1 addition & 1 deletion Cache/SearchBooksOperation.cs
Original file line number Diff line number Diff line change
@@ -39,7 +39,7 @@ protected override void DoWork(CancellationToken token)
{
RaiseProgressEvent(new ProgressEventArgs
{
ProgressDescription = $"Поиск книг (найдено {targetList.Count.ToString("N0", Formatters.BookCountFormat)})...",
ProgressDescription = $"Поиск книг (найдено {targetList.Count.ToString("N0", Formatters.ThousandsSeparatedNumberFormat)})...",
PercentCompleted = Double.NaN
});
currentBatchBookNumber = 0;
4 changes: 4 additions & 0 deletions Database/Book.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System;
using LibgenDesktop.Interface;

namespace LibgenDesktop.Database
{
@@ -57,5 +58,8 @@ internal class BookExtendedProperties
public long SizeInBytes { get; set; }
public string Format { get; set; }
public BookExtendedProperties ExtendedProperties { get; set; }

public string FileSizeString => Formatters.FileSizeToString(SizeInBytes, false);
public string FileSizeWithBytesString => Formatters.FileSizeToString(SizeInBytes, true);
}
}
2 changes: 1 addition & 1 deletion Import/ImportSqlDumpOperation.cs
Original file line number Diff line number Diff line change
@@ -70,7 +70,7 @@ private void SqlDumpReader_ReadRowsProgress(object sender, SqlDumpReader.ReadRow
{
RaiseProgressEvent(new ProgressEventArgs
{
ProgressDescription = $"Импорт из SQL-дампа... (импортировано {e.RowsParsed.ToString("N0", Formatters.BookCountFormat)} книг)",
ProgressDescription = $"Импорт из SQL-дампа... (импортировано {e.RowsParsed.ToString("N0", Formatters.ThousandsSeparatedNumberFormat)} книг)",
PercentCompleted = ((double)e.CurrentPosition * 100 / e.TotalLength)
});
}
1,677 changes: 921 additions & 756 deletions Interface/BookForm.Designer.cs

Large diffs are not rendered by default.

127 changes: 74 additions & 53 deletions Interface/BookForm.cs
Original file line number Diff line number Diff line change
@@ -4,10 +4,12 @@
using System.Drawing.Drawing2D;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Windows.Forms;
using LibgenDesktop.Database;
using LibgenDesktop.Settings;

namespace LibgenDesktop.Interface
{
@@ -21,11 +23,15 @@ public partial class BookForm : Form
private ToolTip offlineModeTooltip;
private bool offlineModeTooltipVisible;

internal BookForm(Book book, bool offlineMode)
internal BookForm(Book book)
{
InitializeComponent();
this.book = book;
this.offlineMode = offlineMode;
AppSettings appSettings = SettingsStorage.AppSettings;
offlineMode = appSettings.OfflineMode;
Width = appSettings.BookWindow.Width;
Height = appSettings.BookWindow.Height;
MinimumSize = new Size(AppSettings.BOOK_WINDOW_MIN_WIDTH, AppSettings.BOOK_WINDOW_MIN_HEIGHT);
PopulateBookFields();
}

@@ -43,37 +49,38 @@ private void BookForm_Load(object sender, EventArgs e)
private void PopulateBookFields()
{
Text = $"{book.Title} (книга №{book.Id})";
titleValueLabel.Text = book.Title;
authorsValueLabel.Text = book.Authors;
seriesValueLabel.Text = book.Series;
publisherValueLabel.Text = book.Publisher;
languageValueLabel.Text = book.ExtendedProperties.Language;
formatValueLabel.Text = book.Format;
identifierValueLabel.Text = book.ExtendedProperties.Identifier;
addedValueLabel.Text = book.ExtendedProperties.AddedDateTime.ToString("dd.MM.yyyy HH:mm:ss");
updatedValueLabel.Text = book.ExtendedProperties.LastModifiedDateTime.ToString("dd.MM.yyyy HH:mm:ss");
libraryValueLabel.Text = book.ExtendedProperties.Library;
fileSizeValueLabel.Text = FileSizeToString(book.SizeInBytes);
commentValueLabel.Text = book.ExtendedProperties.Commentary;
topicsValueLabel.Text = book.ExtendedProperties.Topic;
volumeValueLabel.Text = book.ExtendedProperties.VolumeInfo;
periodicalValueLabel.Text = book.ExtendedProperties.Periodical;
cityValueLabel.Text = book.ExtendedProperties.City;
editionValueLabel.Text = book.ExtendedProperties.Edition;
pagesValueLabel.Text = PagesToString(book.ExtendedProperties.Pages, book.ExtendedProperties.PagesInFile);
tagsValueLabel.Text = book.ExtendedProperties.Tags;
md5HashValueLabel.Text = book.ExtendedProperties.Md5Hash;
libgenIdValueLabel.Text = book.ExtendedProperties.LibgenId.ToString();
issnValueLabel.Text = book.ExtendedProperties.Issn;
udcValueLabel.Text = book.ExtendedProperties.Udc;
lbcValueLabel.Text = book.ExtendedProperties.Lbc;
lccValueLabel.Text = book.ExtendedProperties.Lcc;
ddcValueLabel.Text = book.ExtendedProperties.Ddc;
doiValueLabel.Text = book.ExtendedProperties.Doi;
openLibraryIdValueLabel.Text = book.ExtendedProperties.OpenLibraryId;
googleIdValueLabel.Text = book.ExtendedProperties.GoogleBookid;
asinValueLabel.Text = book.ExtendedProperties.Asin;
dpiValueLabel.Text = book.ExtendedProperties.Dpi.ToString();
SetValueLabelText(titleValueLabel, book.Title);
SetValueLabelText(authorsValueLabel, book.Authors);
SetValueLabelText(seriesValueLabel, book.Series);
SetValueLabelText(publisherValueLabel, book.Publisher);
SetValueLabelText(yearValueLabel, book.Year);
SetValueLabelText(languageValueLabel, book.ExtendedProperties.Language);
SetValueLabelText(formatValueLabel, book.Format);
SetValueLabelText(identifierValueLabel, book.ExtendedProperties.Identifier);
SetValueLabelText(addedValueLabel, book.ExtendedProperties.AddedDateTime.ToString("dd.MM.yyyy HH:mm:ss"));
SetValueLabelText(updatedValueLabel, book.ExtendedProperties.LastModifiedDateTime.ToString("dd.MM.yyyy HH:mm:ss"));
SetValueLabelText(libraryValueLabel, book.ExtendedProperties.Library);
SetValueLabelText(fileSizeValueLabel, book.FileSizeWithBytesString);
SetValueLabelText(commentValueLabel, book.ExtendedProperties.Commentary);
SetValueLabelText(topicsValueLabel, book.ExtendedProperties.Topic);
SetValueLabelText(volumeValueLabel, book.ExtendedProperties.VolumeInfo);
SetValueLabelText(periodicalValueLabel, book.ExtendedProperties.Periodical);
SetValueLabelText(cityValueLabel, book.ExtendedProperties.City);
SetValueLabelText(editionValueLabel, book.ExtendedProperties.Edition);
SetValueLabelText(pagesValueLabel, PagesToString(book.ExtendedProperties.Pages, book.ExtendedProperties.PagesInFile));
SetValueLabelText(tagsValueLabel, book.ExtendedProperties.Tags);
SetValueLabelText(md5HashValueLabel, book.ExtendedProperties.Md5Hash);
SetValueLabelText(libgenIdValueLabel, book.ExtendedProperties.LibgenId.ToString());
SetValueLabelText(issnValueLabel, book.ExtendedProperties.Issn);
SetValueLabelText(udcValueLabel, book.ExtendedProperties.Udc);
SetValueLabelText(lbcValueLabel, book.ExtendedProperties.Lbc);
SetValueLabelText(lccValueLabel, book.ExtendedProperties.Lcc);
SetValueLabelText(ddcValueLabel, book.ExtendedProperties.Ddc);
SetValueLabelText(doiValueLabel, book.ExtendedProperties.Doi);
SetValueLabelText(openLibraryIdValueLabel, book.ExtendedProperties.OpenLibraryId);
SetValueLabelText(googleIdValueLabel, book.ExtendedProperties.GoogleBookid);
SetValueLabelText(asinValueLabel, book.ExtendedProperties.Asin);
SetValueLabelText(dpiValueLabel, book.ExtendedProperties.Dpi.ToString());
ocrValueLabel.Text = StringBooleanToLabelString(book.ExtendedProperties.Searchable, "да", "нет", "неизвестно");
bookmarkedValueLabel.Text = StringBooleanToLabelString(book.ExtendedProperties.Bookmarked, "есть", "нет", "неизвестно");
scannedValueLabel.Text = StringBooleanToLabelString(book.ExtendedProperties.Scanned, "да", "нет", "неизвестно");
@@ -84,6 +91,24 @@ private void PopulateBookFields()
LoadCover(book.ExtendedProperties.CoverUrl);
}

private void SetValueLabelText(Label valueLabel, string text)
{
valueLabel.Text = text;
if (!String.IsNullOrWhiteSpace(text))
{
valueLabel.ContextMenuStrip = valueLabelContextMenu;
valueLabel.MouseDown += ValueLabel_MouseDown;
}
}

private void ValueLabel_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
copyValueLabelTextMenuItem.Text = $"Скопировать \"{(sender as Label).Text}\"";
}
}

private string StringBooleanToLabelString(string value, string value1Label, string value0Label, string valueUnknownLabel)
{
switch (value)
@@ -114,26 +139,6 @@ private string PagesToString(string pages, int pagesInFile)
return resultBuilder.ToString();
}

private string FileSizeToString(long fileSize)
{
string[] postfixes = new[] { "байт", "Кб", "Мб", "Гб", "Тб" };
int postfixIndex = fileSize != 0 ? (int)Math.Floor(Math.Log(fileSize) / Math.Log(1024)) : 0;
StringBuilder resultBuilder = new StringBuilder();
resultBuilder.Append((fileSize / Math.Pow(1024, postfixIndex)).ToString("N2"));
resultBuilder.Append(" ");
resultBuilder.Append(postfixes[postfixIndex]);
if (postfixIndex != 0)
{
NumberFormatInfo fileSizeFormat = (NumberFormatInfo)CultureInfo.InvariantCulture.NumberFormat.Clone();
fileSizeFormat.NumberGroupSeparator = " ";
resultBuilder.Append(" (");
resultBuilder.Append(fileSize.ToString("N0", fileSizeFormat));
resultBuilder.Append(" байт)");
}
return resultBuilder.ToString();

}

private void LoadCover(string bookCoverUrl)
{
if (String.IsNullOrWhiteSpace(bookCoverUrl))
@@ -215,5 +220,21 @@ private void BookForm_MouseMove(object sender, MouseEventArgs e)
}
}
}

private void BookForm_FormClosed(object sender, FormClosedEventArgs e)
{
foreach (Label label in Controls.OfType<Label>())
{
label.MouseDown -= ValueLabel_MouseDown;
}
SettingsStorage.AppSettings.BookWindow.Width = Width;
SettingsStorage.AppSettings.BookWindow.Height = Height;
SettingsStorage.SaveSettings();
}

private void copyValueLabelTextMenuItem_Click(object sender, EventArgs e)
{
Clipboard.SetText(((sender as ToolStripMenuItem).Owner as ContextMenuStrip).SourceControl.Text);
}
}
}
3 changes: 3 additions & 0 deletions Interface/BookForm.resx
Original file line number Diff line number Diff line change
@@ -791,4 +791,7 @@
96P8NKW1bSE5+vJr1epaQUJI4jw0gEn9aLSSlYIJr1epFSC84koXlROTRZ257CvV6lCkMr//2Q==
</value>
</data>
<metadata name="valueLabelContextMenu.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
</root>
30 changes: 25 additions & 5 deletions Interface/Formatters.cs
Original file line number Diff line number Diff line change
@@ -1,17 +1,37 @@
using System.Globalization;
using System;
using System.Globalization;
using System.Text;

namespace LibgenDesktop.Interface
{
internal static class Formatters
{
private static readonly NumberFormatInfo bookCountFormat;
private static readonly NumberFormatInfo thousandsSeparatedNumberFormat;
private static readonly string[] fileSizePostfixes;

static Formatters()
{
bookCountFormat = (NumberFormatInfo)CultureInfo.InvariantCulture.NumberFormat.Clone();
bookCountFormat.NumberGroupSeparator = " ";
thousandsSeparatedNumberFormat = (NumberFormatInfo)CultureInfo.InvariantCulture.NumberFormat.Clone();
thousandsSeparatedNumberFormat.NumberGroupSeparator = " ";
fileSizePostfixes = new[] { "байт", "Кб", "Мб", "Гб", "Тб" };
}

public static NumberFormatInfo BookCountFormat => bookCountFormat;
public static NumberFormatInfo ThousandsSeparatedNumberFormat => thousandsSeparatedNumberFormat;

public static string FileSizeToString(long fileSize, bool showBytes)
{
int postfixIndex = fileSize != 0 ? (int)Math.Floor(Math.Log(fileSize) / Math.Log(1024)) : 0;
StringBuilder resultBuilder = new StringBuilder();
resultBuilder.Append((fileSize / Math.Pow(1024, postfixIndex)).ToString("N2"));
resultBuilder.Append(" ");
resultBuilder.Append(fileSizePostfixes[postfixIndex]);
if (showBytes && postfixIndex != 0)
{
resultBuilder.Append(" (");
resultBuilder.Append(fileSize.ToString("N0", thousandsSeparatedNumberFormat));
resultBuilder.Append(" байт)");
}
return resultBuilder.ToString();
}
}
}
Loading

0 comments on commit 5d0ab4e

Please sign in to comment.