Skip to content

Commit

Permalink
Download manager, localization engine
Browse files Browse the repository at this point in the history
  • Loading branch information
libgenapps committed Feb 20, 2018
1 parent a53d2c8 commit e72e94d
Show file tree
Hide file tree
Showing 203 changed files with 10,814 additions and 2,199 deletions.
14 changes: 14 additions & 0 deletions LibgenDesktop.Setup/AppFile.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
namespace LibgenDesktop.Setup
{
internal class AppFile
{
public AppFile(string sourceFilePath, string targetFilePath)
{
SourceFilePath = sourceFilePath;
TargetFilePath = targetFilePath;
}

public string SourceFilePath { get; }
public string TargetFilePath { get; }
}
}
59 changes: 43 additions & 16 deletions LibgenDesktop.Setup/AppFiles.cs
Original file line number Diff line number Diff line change
@@ -1,31 +1,58 @@
using System;
using System.Collections.Generic;

namespace LibgenDesktop.Setup
{
internal static class AppFiles
{
static AppFiles()
{
X86 = new List<AppFile>();
X64 = new List<AppFile>();
AddFile(Constants.MAIN_EXECUTABLE_NAME);
AddFile("System.ValueTuple.dll");
AddFile("Newtonsoft.Json.dll");
AddFile("SharpCompress.dll");
AddFile("MaterialDesignThemes.Wpf.dll");
AddFile("MaterialDesignColors.dll");
AddFile("Dragablz.dll");
AddFile("System.Data.SQLite.dll");
AddFile("NLog.dll");
AddFile("EPPlus.dll");
AddFile("HtmlAgilityPack.dll");
AddFile("Microsoft.WindowsAPICodePack.dll");
AddFile("Microsoft.WindowsAPICodePack.Shell.dll");
X86.Add(new AppFile(@"x86\SQLite.Interop.dll", "SQLite.Interop.dll"));
X64.Add(new AppFile(@"x64\SQLite.Interop.dll", "SQLite.Interop.dll"));
AddFile(@"Languages\English.lng");
AddFile(@"Languages\Russian.lng");
AddFile(@"Mirrors\mirrors.config");
AddFile(@"Mirrors\libgen_io_nonfiction.xslt");
AddFile(@"Mirrors\libgen_io_fiction.xslt");
AddFile(@"Mirrors\libgen_io_scimag.xslt");
AddFile(@"Mirrors\libgen_pw_nonfiction_step1.xslt");
AddFile(@"Mirrors\libgen_pw_nonfiction_step2.xslt");
AddFile(@"Mirrors\libgen_pw_fiction_step1.xslt");
AddFile(@"Mirrors\libgen_pw_fiction_step2.xslt");
AddFile(@"Mirrors\libgen_pw_scimag_step1.xslt");
AddFile(@"Mirrors\libgen_pw_scimag_step2.xslt");
AddFile(@"Mirrors\bookfi_net.xslt");
AddFile(@"Mirrors\b_ok_org.xslt");
AddFile(@"Mirrors\booksc_org.xslt");
}

public static string GetBinariesDirectoryPath(bool is64Bit)
{
return String.Format(Constants.BINARIES_DIRECTORY_PATH_FORMAT, (is64Bit ? "64" : "86"));
}

public static string[] GetFileList(bool is64Bit)
public static List<AppFile> X86 { get; }
public static List<AppFile> X64 { get; }

private static void AddFile(string filePath)
{
return new[]
{
Constants.MAIN_EXECUTABLE_NAME,
"System.ValueTuple.dll",
"Newtonsoft.Json.dll",
"SharpCompress.dll",
"MaterialDesignThemes.Wpf.dll",
"MaterialDesignColors.dll",
"Dragablz.dll",
"System.Data.SQLite.dll",
"NLog.dll",
"EPPlus.dll",
(is64Bit ? "x64" : "x86") + @"\SQLite.Interop.dll",
"mirrors.config"
};
X86.Add(new AppFile(filePath, filePath));
X64.Add(new AppFile(filePath, filePath));
}
}
}
5 changes: 2 additions & 3 deletions LibgenDesktop.Setup/AppPortable.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
using System;
using System.IO;
using SharpCompress.Archives;
using SharpCompress.Archives.Zip;
using SharpCompress.Common;
Expand All @@ -22,9 +21,9 @@ private static void BuildPortablePackage(bool is64Bit)
{
using (ZipArchive zipArchive = ZipArchive.Create())
{
foreach (string fileName in AppFiles.GetFileList(is64Bit))
foreach (AppFile appFile in (is64Bit ? AppFiles.X64 : AppFiles.X86))
{
zipArchive.AddEntry(Path.GetFileName(fileName), Utils.GetFullFilePath(AppFiles.GetBinariesDirectoryPath(is64Bit), fileName));
zipArchive.AddEntry(appFile.TargetFilePath, Utils.GetFullFilePath(AppFiles.GetBinariesDirectoryPath(is64Bit), appFile.SourceFilePath));
}
string outputFilePath = Utils.GetFullFilePath(@"..\Release", String.Format(Constants.PORTABLE_PACKAGE_FILE_NAME_FORMAT, is64Bit ? 64 : 32));
zipArchive.SaveTo(outputFilePath, CompressionType.Deflate);
Expand Down
49 changes: 40 additions & 9 deletions LibgenDesktop.Setup/AppSetup.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System;
using System.Collections.Generic;
using System.Linq;
using WixSharp;
using WixSharp.CommonTasks;
Expand All @@ -25,19 +26,33 @@ private static void BuildSetupPackage(bool is64Bit, string projectGuid)
string normalizedCurrentVersion = Constants.CURRENT_VERSION.Count(c => c == '.') > 1 ? Constants.CURRENT_VERSION : Constants.CURRENT_VERSION + ".0";
string installerFileName = String.Format(Constants.INSTALLER_FILE_NAME_FORMAT, is64Bit ? 64 : 32);
Project project = new Project(productTitle, new Dir(@"%ProgramFiles%\Libgen Desktop"));
Dir targetDirectory = project.Dirs.First().Dirs.First();
foreach (string fileName in AppFiles.GetFileList(is64Bit))
Dir rootDirectory = project.Dirs.First().Dirs.First();
Dictionary<string, List<AppFile>> appFiles = GetAppFiles(is64Bit);
foreach (string subDirectoryName in appFiles.Keys)
{
string filePath = Utils.GetFullFilePath(AppFiles.GetBinariesDirectoryPath(is64Bit), fileName);
File file = new File(filePath);
if (fileName == Constants.MAIN_EXECUTABLE_NAME)
Dir directory;
if (String.IsNullOrEmpty(subDirectoryName))
{
file.Shortcuts = new[]
directory = rootDirectory;
}
else
{
directory = new Dir(subDirectoryName);
rootDirectory.AddDir(directory);
}
foreach (AppFile appFile in appFiles[subDirectoryName])
{
string filePath = Utils.GetFullFilePath(AppFiles.GetBinariesDirectoryPath(is64Bit), appFile.SourceFilePath);
File file = new File(filePath);
if (appFile.SourceFilePath == Constants.MAIN_EXECUTABLE_NAME)
{
new FileShortcut(shortcutTitle, "%ProgramMenu%")
};
file.Shortcuts = new[]
{
new FileShortcut(shortcutTitle, "%ProgramMenu%")
};
}
directory.AddFile(file);
}
targetDirectory.AddFile(file);
}
project.GUID = new Guid(projectGuid);
project.ControlPanelInfo.Manufacturer = Constants.PRODUCT_COMPANY;
Expand Down Expand Up @@ -69,5 +84,21 @@ private static void BuildSetupPackage(bool is64Bit, string projectGuid)
project.BuildMsi(installerFileName);
Utils.MoveFile($"{installerFileName}.msi", @"..\Release");
}

private static Dictionary<string, List<AppFile>> GetAppFiles(bool is64Bit)
{
Dictionary<string, List<AppFile>> result = new Dictionary<string, List<AppFile>>();
foreach (AppFile appFile in (is64Bit ? AppFiles.X64 : AppFiles.X86))
{
int directorySeparatorIndex = appFile.TargetFilePath.IndexOf('\\');
string directory = directorySeparatorIndex != -1 ? appFile.TargetFilePath.Substring(0, directorySeparatorIndex) : String.Empty;
if (!result.ContainsKey(directory))
{
result.Add(directory, new List<AppFile>());
}
result[directory].Add(appFile);
}
return result;
}
}
}
2 changes: 1 addition & 1 deletion LibgenDesktop.Setup/Constants.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
{
internal static class Constants
{
public const string CURRENT_VERSION = "0.12";
public const string CURRENT_VERSION = "0.13";
public const string PRODUCT_TITLE_FORMAT = "Libgen Desktop " + CURRENT_VERSION + " ({0}-bit)";
public const string SHORTCUT_TITLE_FORMAT = "Libgen Desktop ({0}-bit)";
public const string PRODUCT_COMPANY = "Libgen Apps";
Expand Down
1 change: 1 addition & 0 deletions LibgenDesktop.Setup/LibgenDesktop.Setup.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@
</Reference>
</ItemGroup>
<ItemGroup>
<Compile Include="AppFile.cs" />
<Compile Include="AppFiles.cs" />
<Compile Include="AppSetup.cs" />
<Compile Include="Constants.cs" />
Expand Down
2 changes: 1 addition & 1 deletion LibgenDesktop/App.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
<ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Defaults.xaml" />
<ResourceDictionary Source="pack://application:,,,/MaterialDesignColors;component/Themes/Recommended/Primary/MaterialDesignColor.Blue.xaml" />
<ResourceDictionary Source="pack://application:,,,/MaterialDesignColors;component/Themes/Recommended/Accent/MaterialDesignColor.Red.xaml" />
<ResourceDictionary Source="pack://application:,,,/Dragablz;component/Themes/materialdesign.xaml"/>
<ResourceDictionary Source="pack://application:,,,/Dragablz;component/Themes/materialdesign.xaml" />
<ResourceDictionary Source="Views\Styles\CommonStyles.xaml" />
<ResourceDictionary Source="Views\Styles\TabControlStyles.xaml" />
<ResourceDictionary Source="Views\Styles\WindowStyles.xaml" />
Expand Down
44 changes: 35 additions & 9 deletions LibgenDesktop/App.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,19 +4,21 @@
using LibgenDesktop.Common;
using LibgenDesktop.Infrastructure;
using LibgenDesktop.Models;
using LibgenDesktop.ViewModels;
using LibgenDesktop.ViewModels.Windows;

namespace LibgenDesktop
{
public partial class App : Application
{
private MainModel mainModel;

protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
SetupExceptionHandlers();
try
{
MainModel mainModel = new MainModel();
mainModel = new MainModel();
if (mainModel.LocalDatabaseStatus == MainModel.DatabaseStatus.OPENED)
{
ShowMainWindow(mainModel);
Expand All @@ -30,15 +32,15 @@ protected override void OnStartup(StartupEventArgs e)
{
Logger.EnableLogging();
ShowErrorWindow(exception);
Shutdown();
Close();
}
}

private void ShowMainWindow(MainModel mainModel)
{
MainWindowViewModel mainWindowViewModel = new MainWindowViewModel(mainModel);
IWindowContext windowContext = WindowManager.CreateWindow(RegisteredWindows.WindowKey.MAIN_WINDOW, mainWindowViewModel);
windowContext.Closed += (sender, args) => Shutdown();
windowContext.Closed += (sender, args) => Close();
windowContext.Show();
}

Expand All @@ -53,7 +55,7 @@ private void ShowCreateDatabaseWindow(MainModel mainModel)
}
else
{
Shutdown();
Close();
}
}

Expand All @@ -74,10 +76,34 @@ private void SetupExceptionHandlers()

private void ShowErrorWindow(Exception exception)
{
Logger.Exception(exception);
ErrorWindowViewModel errorWindowViewModel = new ErrorWindowViewModel(exception?.ToString() ?? "(null)");
IWindowContext errorWindowContext = WindowManager.CreateWindow(RegisteredWindows.WindowKey.ERROR_WINDOW, errorWindowViewModel);
errorWindowContext.ShowDialog();
if (!Dispatcher.CheckAccess())
{
Dispatcher.Invoke(() => ShowErrorWindow(exception));
}
else
{
Logger.Exception(exception);
try
{
ErrorWindowViewModel errorWindowViewModel = new ErrorWindowViewModel(exception?.ToString() ?? "(null)",
mainModel?.Localization?.CurrentLanguage);
IWindowContext errorWindowContext = WindowManager.CreateWindow(RegisteredWindows.WindowKey.ERROR_WINDOW, errorWindowViewModel);
errorWindowContext.ShowDialog();
}
catch (Exception errorWindowException)
{
Logger.Exception(errorWindowException);
}
}
}

private void Close()
{
if (mainModel != null)
{
mainModel.Downloader.Shutdown();
}
Shutdown();
}
}
}
26 changes: 21 additions & 5 deletions LibgenDesktop/Common/Constants.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,19 @@
{
internal static class Constants
{
public const string CURRENT_VERSION = "0.12";
public const string CURRENT_GITHUB_RELEASE_NAME = "v0.12 alpha";
public const string CURRENT_VERSION = "0.13";
public const string CURRENT_GITHUB_RELEASE_NAME = "v0.13 alpha";
public const string CURRENT_DATABASE_VERSION = "0.7";

public const string APP_SETTINGS_FILE_NAME = "libgen.config";
public const string MIRRORS_DIRECTORY_NAME = "Mirrors";
public const string MIRRORS_FILE_NAME = "mirrors.config";
public const string LANGUAGES_DIRECTORY_NAME = "Languages";
public const string DEFAULT_LANGUAGE_NAME = "English";
public const string DEFAULT_DOWNLOAD_DIRECTORY_NAME = "Downloads";
public const string DOWNLOAD_LIST_FILE_NAME = "downloads.json";

public const int MAIN_WINDOW_MIN_WIDTH = 1000;
public const int MAIN_WINDOW_MIN_WIDTH = 1050;
public const int MAIN_WINDOW_MIN_HEIGHT = 500;
public const int NON_FICTION_DETAILS_WINDOW_MIN_WIDTH = 1000;
public const int NON_FICTION_DETAILS_WINDOW_MIN_HEIGHT = 500;
Expand Down Expand Up @@ -38,6 +43,9 @@ internal static class Constants
public const int SCI_MAG_GRID_YEAR_COLUMN_MIN_WIDTH = 60;
public const int SCI_MAG_GRID_FILESIZE_COLUMN_MIN_WIDTH = 130;
public const int SCI_MAG_GRID_DOI_COLUMN_MIN_WIDTH = 150;
public const int DOWNLOAD_MANAGER_TAB_DOWNLOADS_PANEL_MIN_HEIGHT = 100;
public const int DOWNLOAD_MANAGER_TAB_LOG_PANEL_MIN_HEIGHT = 50;
public const int DOWNLOAD_MANAGER_TAB_LOG_PANEL_DEFAULT_HEIGHT = 150;
public const int ERROR_WINDOW_DEFAULT_WIDTH = 620;
public const int ERROR_WINDOW_DEFAULT_HEIGHT = 450;
public const int ERROR_WINDOW_MIN_WIDTH = 400;
Expand All @@ -55,7 +63,7 @@ internal static class Constants
public const int MESSAGE_BOX_WINDOW_WIDTH = 500;

public const string DEFAULT_DATABASE_FILE_NAME = "libgen.db";
public const int DEFAULT_MAIN_WINDOW_WIDTH = 1000;
public const int DEFAULT_MAIN_WINDOW_WIDTH = 1050;
public const int DEFAULT_MAIN_WINDOW_HEIGHT = 650;
public const int DEFAULT_NON_FICTION_DETAILS_WINDOW_WIDTH = 1200;
public const int DEFAULT_NON_FICTION_DETAILS_WINDOW_HEIGHT = 618;
Expand Down Expand Up @@ -91,7 +99,15 @@ internal static class Constants
public const double IMPORT_PROGRESS_UPDATE_INTERVAL = 0.5;
public const double SYNCHRONIZATION_PROGRESS_UPDATE_INTERVAL = 0.1;
public const int DATABASE_TRANSACTION_BATCH = 500;
public const int MAX_EXPORT_ROWS_PER_FILE = 1000000;
public const int MAX_EXPORT_ROWS_PER_FILE = 1048575;
public const int MIN_DOWNLOAD_TIMEOUT = 15;
public const int MAX_DOWNLOAD_TIMEOUT = 9999;
public const int DEFAULT_DOWNLOAD_TIMEOUT = 120;
public const int MAX_DOWNLOAD_ATTEMPT_COUNT = 99;
public const int DEFAULT_DOWNLOAD_ATTEMPT_COUNT = 3;
public const int MAX_DOWNLOAD_RETRY_DELAY = 9999;
public const int DEFAULT_DOWNLOAD_RETRY_DELAY = 60;
public const int MAX_DOWNLOAD_REDIRECT_COUNT = 10;

public const string GITHUB_RELEASE_API_URL = "https://api.github.com/repos/libgenapps/LibgenDesktop/releases";
public const string USER_AGENT = "LibgenDesktop/" + CURRENT_VERSION;
Expand Down
6 changes: 4 additions & 2 deletions LibgenDesktop/Common/Environment.cs
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,8 @@ static Environment()
string logFileName = $"{DateTime.Now.ToString("yyyy-MM-dd_HH-mm-ss")}.log";
LogFilePath = Path.Combine(AppDataDirectory, logFileName);
AppSettingsFilePath = Path.Combine(AppDataDirectory, APP_SETTINGS_FILE_NAME);
MirrorsFilePath = Path.Combine(AppBinariesDirectory, MIRRORS_FILE_NAME);
MirrorsDirectoryPath = Path.Combine(AppBinariesDirectory, MIRRORS_DIRECTORY_NAME);
LanguagesDirectoryPath = Path.Combine(AppBinariesDirectory, LANGUAGES_DIRECTORY_NAME);
OsVersion = GetOsVersion();
NetFrameworkVersion = GetNetFrameworkVersion();
IsIn64BitProcess = System.Environment.Is64BitProcess;
Expand Down Expand Up @@ -121,7 +122,8 @@ private static string GetNetFrameworkVersion()
public static string AppDataDirectory { get; }
public static string LogFilePath { get; }
public static string AppSettingsFilePath { get; }
public static string MirrorsFilePath { get; }
public static string MirrorsDirectoryPath { get; }
public static string LanguagesDirectoryPath { get; }
public static string OsVersion { get; }
public static string NetFrameworkVersion { get; }
public static bool IsInPortableMode { get; }
Expand Down
3 changes: 2 additions & 1 deletion LibgenDesktop/Common/Logger.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System;
using System.Linq;
using System.Runtime.CompilerServices;
using NLog;
using NLog.Config;
Expand Down Expand Up @@ -36,7 +37,7 @@ public static void Debug(params string[] lines)
{
if (loggingEnabled)
{
logger.Log(typeof(Logger), new LogEventInfo(LogLevel.Debug, String.Empty, String.Join("\r\n", lines)));
logger.Log(typeof(Logger), new LogEventInfo(LogLevel.Debug, String.Empty, String.Join("\r\n", lines.Where(line => !String.IsNullOrEmpty(line)))));
}
}

Expand Down
8 changes: 8 additions & 0 deletions LibgenDesktop/Infrastructure/IMessageBox.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
namespace LibgenDesktop.Infrastructure
{
internal interface IMessageBox
{
void ShowMessage(string title, string text, string ok, IWindowContext parentWindowContext);
bool ShowPrompt(string title, string text, string yes, string no, IWindowContext parentWindowContext);
}
}
Loading

0 comments on commit e72e94d

Please sign in to comment.