2017-05-18 18:16:32 +01:00
//
// Author:
// Natalia Portillo claunia@claunia.com
//
// Copyright (c) 2017, © Claunia.com
//
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
//
// * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in
// the documentation and/or other materials provided with the distribution.
// * Neither the name of the [ORGANIZATION] nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
2017-12-30 00:32:21 +00:00
2017-05-18 18:16:32 +01:00
using System ;
using System.Collections.Generic ;
using System.Diagnostics ;
using System.IO ;
2017-06-13 18:21:12 +01:00
using System.Threading ;
2017-05-18 18:16:32 +01:00
2018-02-23 02:14:58 +00:00
namespace apprepodbmgr.Core
2017-05-18 18:16:32 +01:00
{
public static partial class Workers
{
public static void GetAllOSes ( )
{
try
{
2017-12-30 00:32:21 +00:00
#if DEBUG
2017-05-19 03:24:34 +01:00
stopwatch . Restart ( ) ;
2017-12-30 00:32:21 +00:00
#endif
dbCore . DbOps . GetAllOSes ( out List < DbEntry > oses ) ;
#if DEBUG
2017-05-19 03:24:34 +01:00
stopwatch . Stop ( ) ;
2017-12-30 00:32:21 +00:00
Console . WriteLine ( "Core.GetAllOSes(): Took {0} seconds to get OSes from database" ,
stopwatch . Elapsed . TotalSeconds ) ;
#endif
2017-05-18 18:16:32 +01:00
if ( AddOS ! = null )
{
2017-12-30 00:32:21 +00:00
#if DEBUG
2017-05-19 03:24:34 +01:00
stopwatch . Restart ( ) ;
2017-12-30 00:32:21 +00:00
#endif
2017-05-18 18:16:32 +01:00
int counter = 0 ;
// TODO: Check file name and existence
2017-12-30 00:32:21 +00:00
foreach ( DbEntry os in oses )
2017-05-18 18:16:32 +01:00
{
2017-12-30 00:32:21 +00:00
UpdateProgress ? . Invoke ( "Populating OSes table" , $"{os.Developer} {os.Product}" , counter ,
oses . Count ) ;
string destination = Path . Combine ( Settings . Current . RepositoryPath , os . Mdid [ 0 ] . ToString ( ) ,
os . Mdid [ 1 ] . ToString ( ) , os . Mdid [ 2 ] . ToString ( ) ,
os . Mdid [ 3 ] . ToString ( ) , os . Mdid [ 4 ] . ToString ( ) , os . Mdid ) +
".zip" ;
2017-05-18 18:16:32 +01:00
2017-12-30 00:32:21 +00:00
AddOS ? . Invoke ( os ) ;
2017-05-18 18:16:32 +01:00
counter + + ;
}
2017-12-30 00:32:21 +00:00
#if DEBUG
2017-05-19 03:24:34 +01:00
stopwatch . Stop ( ) ;
2017-12-30 00:32:21 +00:00
Console . WriteLine ( "Core.GetAllOSes(): Took {0} seconds to add OSes to the GUI" ,
stopwatch . Elapsed . TotalSeconds ) ;
#endif
2017-05-18 18:16:32 +01:00
}
2017-12-30 00:32:21 +00:00
Finished ? . Invoke ( ) ;
2017-05-18 18:16:32 +01:00
}
2017-12-30 00:32:21 +00:00
catch ( ThreadAbortException ) { }
2017-05-18 18:16:32 +01:00
catch ( Exception ex )
{
2017-12-30 00:32:21 +00:00
if ( Debugger . IsAttached ) throw ;
Failed ? . Invoke ( $"Exception {ex.Message}\n{ex.InnerException}" ) ;
#if DEBUG
2017-06-13 18:21:12 +01:00
Console . WriteLine ( "Exception {0}\n{1}" , ex . Message , ex . InnerException ) ;
2017-12-30 00:32:21 +00:00
#endif
2017-05-18 18:16:32 +01:00
}
}
public static void CheckDbForFiles ( )
{
try
{
long counter = 0 ;
2017-12-30 00:32:21 +00:00
#if DEBUG
2017-05-19 03:24:34 +01:00
stopwatch . Restart ( ) ;
2017-12-30 00:32:21 +00:00
#endif
Dictionary < string , DbOsFile > knownFiles = new Dictionary < string , DbOsFile > ( ) ;
2017-08-16 00:14:08 +01:00
bool unknownFile = false ;
2017-12-30 00:32:21 +00:00
foreach ( KeyValuePair < string , DbOsFile > kvp in Context . Hashes )
2017-05-18 18:16:32 +01:00
{
2017-08-16 00:14:08 +01:00
// Empty file with size zero
if ( kvp . Value . Sha256 = = "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" )
{
AddFileForOS ( kvp . Key , kvp . Value . Sha256 , true , kvp . Value . Crack ) ;
counter + + ;
continue ;
}
2017-12-30 00:32:21 +00:00
UpdateProgress ? . Invoke ( null , "Checking files in database" , counter , Context . Hashes . Count ) ;
2017-05-18 18:16:32 +01:00
2017-12-30 00:32:21 +00:00
AddFileForOS ? . Invoke ( kvp . Key , kvp . Value . Sha256 , dbCore . DbOps . ExistsFile ( kvp . Value . Sha256 ) ,
kvp . Value . Crack ) ;
2017-05-18 18:16:32 +01:00
2017-12-30 00:32:21 +00:00
if ( dbCore . DbOps . ExistsFile ( kvp . Value . Sha256 ) )
2017-08-16 00:14:08 +01:00
{
counter + + ;
knownFiles . Add ( kvp . Key , kvp . Value ) ;
}
2017-12-30 00:32:21 +00:00
else unknownFile = true ;
2017-05-18 18:16:32 +01:00
}
2017-12-30 00:32:21 +00:00
#if DEBUG
2017-05-19 03:24:34 +01:00
stopwatch . Stop ( ) ;
2017-12-30 00:32:21 +00:00
Console . WriteLine ( "Core.CheckDbForFiles(): Took {0} seconds to checks for file knowledge in the DB" ,
stopwatch . Elapsed . TotalSeconds ) ;
2017-05-19 03:24:34 +01:00
stopwatch . Restart ( ) ;
2017-12-30 00:32:21 +00:00
#endif
2017-08-16 00:14:08 +01:00
if ( knownFiles . Count = = 0 | | unknownFile )
{
2017-12-30 00:32:21 +00:00
Finished ? . Invoke ( ) ;
2017-08-16 00:14:08 +01:00
return ;
}
2017-12-30 00:32:21 +00:00
UpdateProgress ? . Invoke ( null , "Retrieving OSes from database" , counter , Context . Hashes . Count ) ;
dbCore . DbOps . GetAllOSes ( out List < DbEntry > oses ) ;
#if DEBUG
2017-05-19 03:24:34 +01:00
stopwatch . Stop ( ) ;
2017-12-30 00:32:21 +00:00
Console . WriteLine ( "Core.CheckDbForFiles(): Took {0} seconds get all OSes from DB" ,
stopwatch . Elapsed . TotalSeconds ) ;
#endif
2017-05-18 18:16:32 +01:00
if ( oses ! = null & & oses . Count > 0 )
{
2017-12-30 00:32:21 +00:00
DbEntry [ ] osesArray = new DbEntry [ oses . Count ] ;
2017-05-18 18:16:32 +01:00
oses . CopyTo ( osesArray ) ;
long osCounter = 0 ;
2017-12-30 00:32:21 +00:00
#if DEBUG
2017-05-19 03:24:34 +01:00
stopwatch . Restart ( ) ;
2017-12-30 00:32:21 +00:00
#endif
2017-08-16 00:14:08 +01:00
2017-12-30 00:32:21 +00:00
foreach ( DbEntry os in osesArray )
2017-05-18 18:16:32 +01:00
{
2017-12-30 00:32:21 +00:00
UpdateProgress ? . Invoke ( null , $"Check OS id {os.Id}" , osCounter , osesArray . Length ) ;
2017-05-18 18:16:32 +01:00
counter = 0 ;
2017-12-30 00:32:21 +00:00
foreach ( KeyValuePair < string , DbOsFile > kvp in knownFiles )
2017-05-18 18:16:32 +01:00
{
2017-12-30 00:32:21 +00:00
UpdateProgress2 ? . Invoke ( null , $"Checking for file {kvp.Value.Path}" , counter ,
knownFiles . Count ) ;
2017-05-18 18:16:32 +01:00
2017-12-30 00:32:21 +00:00
if ( ! dbCore . DbOps . ExistsFileInOs ( kvp . Value . Sha256 , os . Id ) )
2017-05-18 18:16:32 +01:00
{
2017-12-30 00:32:21 +00:00
if ( oses . Contains ( os ) ) oses . Remove ( os ) ;
2017-05-18 18:16:32 +01:00
// If one file is missing, the rest don't matter
break ;
}
counter + + ;
}
2017-12-30 00:32:21 +00:00
if ( oses . Count = = 0 ) break ; // No OSes left
2017-05-18 18:16:32 +01:00
}
2017-12-30 00:32:21 +00:00
#if DEBUG
2017-05-19 03:24:34 +01:00
stopwatch . Stop ( ) ;
2017-12-30 00:32:21 +00:00
Console . WriteLine ( "Core.CheckDbForFiles(): Took {0} seconds correlate all files with all known OSes" ,
stopwatch . Elapsed . TotalSeconds ) ;
#endif
2017-05-18 18:16:32 +01:00
}
if ( AddOS ! = null )
2017-12-30 00:32:21 +00:00
foreach ( DbEntry os in oses )
2017-05-18 18:16:32 +01:00
{
2017-12-30 00:32:21 +00:00
string destination = Path . Combine ( Settings . Current . RepositoryPath , os . Mdid [ 0 ] . ToString ( ) ,
os . Mdid [ 1 ] . ToString ( ) , os . Mdid [ 2 ] . ToString ( ) ,
os . Mdid [ 3 ] . ToString ( ) , os . Mdid [ 4 ] . ToString ( ) , os . Mdid ) +
".zip" ;
2017-05-18 18:16:32 +01:00
2017-12-30 00:32:21 +00:00
AddOS ? . Invoke ( os ) ;
2017-05-18 18:16:32 +01:00
}
2017-12-30 00:32:21 +00:00
Finished ? . Invoke ( ) ;
2017-05-18 18:16:32 +01:00
}
2017-12-30 00:32:21 +00:00
catch ( ThreadAbortException ) { }
2017-05-18 18:16:32 +01:00
catch ( Exception ex )
{
2017-12-30 00:32:21 +00:00
if ( Debugger . IsAttached ) throw ;
Failed ? . Invoke ( $"Exception {ex.Message}\n{ex.InnerException}" ) ;
#if DEBUG
2017-06-13 18:21:12 +01:00
Console . WriteLine ( "Exception {0}\n{1}" , ex . Message , ex . InnerException ) ;
2017-12-30 00:32:21 +00:00
#endif
2017-05-18 18:16:32 +01:00
}
}
public static void AddFilesToDb ( )
{
try
{
long counter = 0 ;
2017-12-30 00:32:21 +00:00
#if DEBUG
2017-05-19 03:24:34 +01:00
stopwatch . Restart ( ) ;
2017-12-30 00:32:21 +00:00
#endif
foreach ( KeyValuePair < string , DbOsFile > kvp in Context . Hashes )
2017-05-18 18:16:32 +01:00
{
2017-12-30 00:32:21 +00:00
UpdateProgress ? . Invoke ( null , "Adding files to database" , counter , Context . Hashes . Count ) ;
2017-05-18 18:16:32 +01:00
2017-12-30 00:32:21 +00:00
if ( ! dbCore . DbOps . ExistsFile ( kvp . Value . Sha256 ) )
2017-05-18 18:16:32 +01:00
{
2017-12-30 00:32:21 +00:00
DbFile file = new DbFile
2017-05-18 18:16:32 +01:00
{
2017-12-30 00:32:21 +00:00
Sha256 = kvp . Value . Sha256 ,
ClamTime = null ,
Crack = kvp . Value . Crack ,
Length = kvp . Value . Length ,
Virus = null ,
HasVirus = null ,
VirusTotalTime = null
2017-05-18 18:16:32 +01:00
} ;
2017-12-30 00:32:21 +00:00
dbCore . DbOps . AddFile ( file ) ;
2017-05-18 18:16:32 +01:00
2017-12-30 00:32:21 +00:00
AddFile ? . Invoke ( file ) ;
2017-05-18 18:16:32 +01:00
}
counter + + ;
}
2017-12-30 00:32:21 +00:00
#if DEBUG
2017-05-19 03:24:34 +01:00
stopwatch . Stop ( ) ;
2017-12-30 00:32:21 +00:00
Console . WriteLine ( "Core.AddFilesToDb(): Took {0} seconds to add all files to the database" ,
stopwatch . Elapsed . TotalSeconds ) ;
#endif
2017-05-18 18:16:32 +01:00
2017-12-30 00:32:21 +00:00
UpdateProgress ? . Invoke ( null , "Adding OS information" , counter , Context . Hashes . Count ) ;
dbCore . DbOps . AddOs ( Context . DbInfo , out Context . DbInfo . Id ) ;
UpdateProgress ? . Invoke ( null , "Creating OS table" , counter , Context . Hashes . Count ) ;
dbCore . DbOps . CreateTableForOs ( Context . DbInfo . Id ) ;
2017-05-18 18:16:32 +01:00
2017-12-30 00:32:21 +00:00
#if DEBUG
2017-05-19 03:24:34 +01:00
stopwatch . Restart ( ) ;
2017-12-30 00:32:21 +00:00
#endif
2017-05-18 18:16:32 +01:00
counter = 0 ;
2017-12-30 00:32:21 +00:00
foreach ( KeyValuePair < string , DbOsFile > kvp in Context . Hashes )
2017-05-18 18:16:32 +01:00
{
2017-12-30 00:32:21 +00:00
UpdateProgress ? . Invoke ( null , "Adding files to OS in database" , counter , Context . Hashes . Count ) ;
2017-05-18 18:16:32 +01:00
2017-12-30 00:32:21 +00:00
dbCore . DbOps . AddFileToOs ( kvp . Value , Context . DbInfo . Id ) ;
2017-05-18 18:16:32 +01:00
counter + + ;
}
2017-12-30 00:32:21 +00:00
#if DEBUG
2017-05-19 03:24:34 +01:00
stopwatch . Stop ( ) ;
2017-12-30 00:32:21 +00:00
Console . WriteLine ( "Core.AddFilesToDb(): Took {0} seconds to add all files to the OS in the database" ,
stopwatch . Elapsed . TotalSeconds ) ;
2017-05-19 03:24:34 +01:00
stopwatch . Restart ( ) ;
2017-12-30 00:32:21 +00:00
#endif
2017-05-18 18:16:32 +01:00
counter = 0 ;
2017-12-30 00:32:21 +00:00
foreach ( KeyValuePair < string , DbFolder > kvp in Context . FoldersDict )
2017-05-18 18:16:32 +01:00
{
2017-12-30 00:32:21 +00:00
UpdateProgress ? . Invoke ( null , "Adding folders to OS in database" , counter ,
Context . FoldersDict . Count ) ;
2017-05-18 18:16:32 +01:00
2017-12-30 00:32:21 +00:00
dbCore . DbOps . AddFolderToOs ( kvp . Value , Context . DbInfo . Id ) ;
2017-05-18 18:16:32 +01:00
counter + + ;
}
2017-12-30 00:32:21 +00:00
#if DEBUG
2017-05-19 03:24:34 +01:00
stopwatch . Stop ( ) ;
2017-12-30 00:32:21 +00:00
Console . WriteLine ( "Core.AddFilesToDb(): Took {0} seconds to add all folders to the database" ,
stopwatch . Elapsed . TotalSeconds ) ;
2017-08-22 18:05:18 +01:00
stopwatch . Restart ( ) ;
2017-12-30 00:32:21 +00:00
#endif
2017-08-22 18:05:18 +01:00
counter = 0 ;
2017-12-30 00:32:21 +00:00
if ( Context . SymlinksDict . Count > 0 ) dbCore . DbOps . CreateSymlinkTableForOs ( Context . DbInfo . Id ) ;
foreach ( KeyValuePair < string , string > kvp in Context . SymlinksDict )
2017-08-22 18:05:18 +01:00
{
2017-12-30 00:32:21 +00:00
UpdateProgress ? . Invoke ( null , "Adding symbolic links to OS in database" , counter ,
Context . SymlinksDict . Count ) ;
2017-08-22 18:05:18 +01:00
2017-12-30 00:32:21 +00:00
dbCore . DbOps . AddSymlinkToOs ( kvp . Key , kvp . Value , Context . DbInfo . Id ) ;
2017-08-22 18:05:18 +01:00
counter + + ;
}
2017-12-30 00:32:21 +00:00
#if DEBUG
2017-08-22 18:05:18 +01:00
stopwatch . Stop ( ) ;
2017-12-30 00:32:21 +00:00
Console . WriteLine ( "Core.AddFilesToDb(): Took {0} seconds to add all symbolic links to the database" ,
stopwatch . Elapsed . TotalSeconds ) ;
#endif
2017-05-18 18:16:32 +01:00
2017-12-30 00:32:21 +00:00
Finished ? . Invoke ( ) ;
2017-05-18 18:16:32 +01:00
}
2017-12-30 00:32:21 +00:00
catch ( ThreadAbortException ) { }
2017-05-18 18:16:32 +01:00
catch ( Exception ex )
{
2017-12-30 00:32:21 +00:00
if ( Debugger . IsAttached ) throw ;
Failed ? . Invoke ( $"Exception {ex.Message}\n{ex.InnerException}" ) ;
#if DEBUG
2017-06-13 18:21:12 +01:00
Console . WriteLine ( "Exception {0}\n{1}" , ex . Message , ex . InnerException ) ;
2017-12-30 00:32:21 +00:00
#endif
2017-05-18 18:16:32 +01:00
}
}
public static void InitDB ( )
{
CloseDB ( ) ;
dbCore = null ;
try
{
if ( string . IsNullOrEmpty ( Settings . Current . DatabasePath ) )
{
2017-12-30 00:32:21 +00:00
Failed ? . Invoke ( "No database file specified" ) ;
2017-05-18 18:16:32 +01:00
return ;
}
dbCore = new SQLite ( ) ;
if ( File . Exists ( Settings . Current . DatabasePath ) )
{
2017-12-30 00:32:21 +00:00
if ( ! dbCore . OpenDb ( Settings . Current . DatabasePath , null , null , null ) )
2017-05-18 18:16:32 +01:00
{
2017-12-30 00:32:21 +00:00
Failed ? . Invoke ( "Could not open database, correct file selected?" ) ;
2017-05-18 18:16:32 +01:00
dbCore = null ;
return ;
}
}
else
{
2017-12-30 00:32:21 +00:00
if ( ! dbCore . CreateDb ( Settings . Current . DatabasePath , null , null , null ) )
2017-05-18 18:16:32 +01:00
{
2017-12-30 00:32:21 +00:00
Failed ? . Invoke ( "Could not create database, correct file selected?" ) ;
2017-05-18 18:16:32 +01:00
dbCore = null ;
return ;
}
2017-12-30 00:32:21 +00:00
if ( ! dbCore . OpenDb ( Settings . Current . DatabasePath , null , null , null ) )
2017-05-18 18:16:32 +01:00
{
2017-12-30 00:32:21 +00:00
Failed ? . Invoke ( "Could not open database, correct file selected?" ) ;
2017-05-18 18:16:32 +01:00
dbCore = null ;
return ;
}
}
2017-12-30 00:32:21 +00:00
Finished ? . Invoke ( ) ;
2017-05-18 18:16:32 +01:00
}
2017-12-30 00:32:21 +00:00
catch ( ThreadAbortException ) { }
2017-05-18 18:16:32 +01:00
catch ( Exception ex )
{
2017-12-30 00:32:21 +00:00
if ( Debugger . IsAttached ) throw ;
Failed ? . Invoke ( $"Exception {ex.Message}\n{ex.InnerException}" ) ;
#if DEBUG
2017-06-13 18:21:12 +01:00
Console . WriteLine ( "Exception {0}\n{1}" , ex . Message , ex . InnerException ) ;
2017-12-30 00:32:21 +00:00
#endif
2017-05-18 18:16:32 +01:00
}
}
public static void CloseDB ( )
{
2017-12-30 00:32:21 +00:00
dbCore ? . CloseDb ( ) ;
2017-05-18 18:16:32 +01:00
}
public static void RemoveOS ( long id , string mdid )
{
2017-12-30 00:32:21 +00:00
if ( id = = 0 | | string . IsNullOrWhiteSpace ( mdid ) ) return ;
2017-05-18 18:16:32 +01:00
2017-12-30 00:32:21 +00:00
string destination = Path . Combine ( Settings . Current . RepositoryPath , mdid [ 0 ] . ToString ( ) , mdid [ 1 ] . ToString ( ) ,
mdid [ 2 ] . ToString ( ) , mdid [ 3 ] . ToString ( ) , mdid [ 4 ] . ToString ( ) ,
mdid ) + ".zip" ;
2017-05-18 18:16:32 +01:00
2017-12-30 00:32:21 +00:00
if ( File . Exists ( destination ) ) File . Delete ( destination ) ;
2017-05-18 18:16:32 +01:00
2017-12-30 00:32:21 +00:00
dbCore . DbOps . RemoveOs ( id ) ;
2017-05-18 18:16:32 +01:00
}
public static void GetFilesFromDb ( )
{
try
{
2017-12-30 00:32:21 +00:00
ulong count = dbCore . DbOps . GetFilesCount ( ) ;
const ulong PAGE = 2500 ;
ulong offset = 0 ;
2017-05-18 18:16:32 +01:00
2017-12-30 00:32:21 +00:00
#if DEBUG
2017-05-19 03:24:34 +01:00
stopwatch . Restart ( ) ;
2017-12-30 00:32:21 +00:00
#endif
while ( dbCore . DbOps . GetFiles ( out List < DbFile > files , offset , PAGE ) )
2017-05-18 18:16:32 +01:00
{
2017-12-30 00:32:21 +00:00
if ( files . Count = = 0 ) break ;
2017-05-18 18:16:32 +01:00
2017-12-30 00:32:21 +00:00
UpdateProgress ? . Invoke ( null , $"Loaded file {offset} of {count}" , ( long ) offset , ( long ) count ) ;
2017-05-18 18:16:32 +01:00
2017-12-30 00:32:21 +00:00
AddFiles ? . Invoke ( files ) ;
2017-05-18 18:16:32 +01:00
2017-12-30 00:32:21 +00:00
offset + = PAGE ;
2017-05-18 18:16:32 +01:00
}
2017-12-30 00:32:21 +00:00
#if DEBUG
2017-05-19 03:24:34 +01:00
stopwatch . Stop ( ) ;
2017-12-30 00:32:21 +00:00
Console . WriteLine ( "Core.GetFilesFromDb(): Took {0} seconds to get all files from the database" ,
stopwatch . Elapsed . TotalSeconds ) ;
#endif
2017-05-18 18:16:32 +01:00
2017-12-30 00:32:21 +00:00
Finished ? . Invoke ( ) ;
2017-05-18 18:16:32 +01:00
}
2017-12-30 00:32:21 +00:00
catch ( ThreadAbortException ) { }
2017-05-18 18:16:32 +01:00
catch ( Exception ex )
{
2017-12-30 00:32:21 +00:00
if ( Debugger . IsAttached ) throw ;
Failed ? . Invoke ( $"Exception {ex.Message}\n{ex.InnerException}" ) ;
#if DEBUG
2017-06-13 18:21:12 +01:00
Console . WriteLine ( "Exception {0}\n{1}" , ex . Message , ex . InnerException ) ;
2017-12-30 00:32:21 +00:00
#endif
2017-05-18 18:16:32 +01:00
}
}
public static void ToggleCrack ( string hash , bool crack )
{
try
{
2017-12-30 00:32:21 +00:00
dbCore . DbOps . ToggleCrack ( hash , crack ) ;
2017-05-18 18:16:32 +01:00
2017-12-30 00:32:21 +00:00
Finished ? . Invoke ( ) ;
2017-05-18 18:16:32 +01:00
}
2017-12-30 00:32:21 +00:00
catch ( ThreadAbortException ) { }
2017-05-18 18:16:32 +01:00
catch ( Exception ex )
{
2017-12-30 00:32:21 +00:00
if ( Debugger . IsAttached ) throw ;
Failed ? . Invoke ( $"Exception {ex.Message}\n{ex.InnerException}" ) ;
#if DEBUG
2017-06-13 18:21:12 +01:00
Console . WriteLine ( "Exception {0}\n{1}" , ex . Message , ex . InnerException ) ;
2017-12-30 00:32:21 +00:00
#endif
2017-05-18 18:16:32 +01:00
}
}
2017-05-18 22:23:49 +01:00
2017-12-30 00:32:21 +00:00
public static DbFile GetDBFile ( string hash )
2017-05-18 22:23:49 +01:00
{
2017-12-30 00:32:21 +00:00
return dbCore . DbOps . GetFile ( hash ) ;
2017-05-18 22:23:49 +01:00
}
2017-05-18 18:16:32 +01:00
}
2017-12-30 00:32:21 +00:00
}