mirror of
https://github.com/MaintainTeam/Hypatia.git
synced 2025-02-28 21:38:21 +03:00
More small improvements
- Don't try to load the database multiple times at once - Add the signature count to the notification - Format numbers for the locale - Improve check for when no databases are available
This commit is contained in:
parent
ebdfc0c737
commit
28f710d5ad
9 changed files with 32 additions and 22 deletions
BIN
.idea/caches/build_file_checksums.ser
generated
BIN
.idea/caches/build_file_checksums.ser
generated
Binary file not shown.
|
@ -6,7 +6,7 @@ android {
|
|||
applicationId "us.spotco.malwarescanner"
|
||||
minSdkVersion 16
|
||||
targetSdkVersion 30
|
||||
versionCode 57
|
||||
versionCode 58
|
||||
versionName "2.15"
|
||||
resConfigs "en", "de", "fr"
|
||||
}
|
||||
|
|
|
@ -47,6 +47,7 @@ class Database {
|
|||
private static File databasePath = null;
|
||||
private static ThreadPoolExecutor threadPoolExecutor = null;
|
||||
private static boolean databaseFullyLoaded = false;
|
||||
private static boolean databaseCurrentlyLoading = false;
|
||||
|
||||
public final static HashSet<SignatureDatabase> signatureDatabases = new HashSet<>();
|
||||
public final static String baseURL = "https://divested.dev/MalwareScannerSignatures/";
|
||||
|
@ -64,11 +65,11 @@ class Database {
|
|||
}
|
||||
|
||||
public static boolean areDatabasesAvailable() {
|
||||
return databasePath != null && databasePath.listFiles().length > 0;
|
||||
return databasePath != null && databasePath.listFiles().length > 0 && signatureDatabases.size() > 0;
|
||||
}
|
||||
|
||||
public static boolean isDatabaseLoaded() {
|
||||
return databaseFullyLoaded && signaturesMD5.size() > 0 && signaturesSHA1.size() > 0 && signaturesSHA256.size() > 0;
|
||||
return areDatabasesAvailable() && databaseFullyLoaded && signaturesMD5.size() > 0 && signaturesSHA1.size() > 0 && signaturesSHA256.size() > 0;
|
||||
}
|
||||
|
||||
public static int getSignatureCount() {
|
||||
|
@ -112,9 +113,10 @@ class Database {
|
|||
}
|
||||
}
|
||||
|
||||
public static void loadDatabase(Context context, boolean ignoreifLoaded, HashSet<SignatureDatabase> signatureDatabases) {
|
||||
if (!isDatabaseLoaded() || !ignoreifLoaded && isDatabaseLoaded()) {
|
||||
public static void loadDatabase(Context context, boolean forceReload, HashSet<SignatureDatabase> signatureDatabases) {
|
||||
if ((!isDatabaseLoaded() || forceReload) && !databaseCurrentlyLoading) {
|
||||
databaseFullyLoaded = false;
|
||||
databaseCurrentlyLoading = true;
|
||||
initDatabase(context);
|
||||
signaturesMD5.clear();
|
||||
signaturesSHA1.clear();
|
||||
|
@ -162,6 +164,7 @@ class Database {
|
|||
signaturesSHA256.put("6a0b4866f143c32e651662cebf7f380d27b0db809db3b6a34cf34c7436ab6bbf".substring(0, Utils.MAX_HASH_LENGTH), "Hypatia-Test-Signature");
|
||||
System.gc();
|
||||
databaseFullyLoaded = true;
|
||||
databaseCurrentlyLoading = false;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -139,7 +139,7 @@ public class MainActivity extends AppCompatActivity {
|
|||
}
|
||||
|
||||
private void selectDatabases() {
|
||||
final String[] databases = {"ClamAV: Android Only (GPL-2.0)", "ClamAV: Main (GPL-2.0)", "ClamAV: Daily [LARGE] (GPL-2.0)", "ESET (BSD 2-Clause)", "Extra (unused)"};
|
||||
final String[] databases = {"ClamAV: Android Only (GPL-2.0)", "ClamAV: Main (GPL-2.0)", "ClamAV: Daily [MASSIVE] (GPL-2.0)", "ESET (BSD 2-Clause)", "Extra (unused)"};
|
||||
final boolean[] databaseDefaults = {
|
||||
prefs.getBoolean("SIGNATURES_CLAMAV-ANDROID", true),
|
||||
prefs.getBoolean("SIGNATURES_CLAMAV-MAIN", false),
|
||||
|
|
|
@ -35,6 +35,7 @@ import java.io.FileInputStream;
|
|||
import java.io.InputStream;
|
||||
import java.math.BigInteger;
|
||||
import java.security.MessageDigest;
|
||||
import java.text.NumberFormat;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Random;
|
||||
|
@ -107,21 +108,25 @@ class MalwareScanner extends AsyncTask<Set<File>, Object, String> {
|
|||
fileHashesSHA1.clear();
|
||||
fileHashesSHA256.clear();
|
||||
|
||||
publishProgress("\t" + context.getString(R.string.main_files_pending_scan, filesToScan[0].size() + "") + "\n", true);
|
||||
publishProgress("\t" + context.getString(R.string.main_files_pending_scan, NumberFormat.getInstance().format(filesToScan[0].size()) + "") + "\n", true);
|
||||
|
||||
Database.loadDatabase(context, true, Database.signatureDatabases);
|
||||
Database.loadDatabase(context, false, Database.signatureDatabases);
|
||||
int delayCount = 0;
|
||||
while (!Database.isDatabaseLoaded() && delayCount <= 90) {
|
||||
try {
|
||||
Thread.sleep(1000);
|
||||
delayCount++;
|
||||
//publishProgress("\t" + context.getString(R.string.main_database_loading), true);
|
||||
} catch (InterruptedException e) {
|
||||
e.printStackTrace();
|
||||
if (Database.areDatabasesAvailable()) {
|
||||
while (!Database.isDatabaseLoaded() && delayCount <= 90) {
|
||||
try {
|
||||
Thread.sleep(1000);
|
||||
delayCount++;
|
||||
if((delayCount % 15) == 0) {
|
||||
publishProgress("\t" + context.getString(R.string.main_database_loading), true);
|
||||
}
|
||||
} catch (InterruptedException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
if (Database.isDatabaseLoaded()) {
|
||||
publishProgress("\t" + context.getString(R.string.main_database_loaded, Database.getSignatureCount() + "") + "\n", true);
|
||||
publishProgress("\t" + context.getString(R.string.main_database_loaded, NumberFormat.getInstance().format(Database.getSignatureCount()) + "") + "\n", true);
|
||||
|
||||
//Get file hashes
|
||||
publishProgress("\t" + context.getString(R.string.main_hashing_files), true);
|
||||
|
|
|
@ -32,6 +32,7 @@ import android.widget.Toast;
|
|||
import androidx.core.app.NotificationCompat;
|
||||
|
||||
import java.io.File;
|
||||
import java.text.NumberFormat;
|
||||
import java.util.HashSet;
|
||||
import java.util.concurrent.Executors;
|
||||
import java.util.concurrent.ThreadPoolExecutor;
|
||||
|
@ -58,7 +59,7 @@ public class MalwareScannerService extends Service {
|
|||
threadPoolExecutor.execute(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
Database.loadDatabase(getApplicationContext(), true, Database.signatureDatabases);
|
||||
Database.loadDatabase(getApplicationContext(), false, Database.signatureDatabases);
|
||||
}
|
||||
});
|
||||
|
||||
|
@ -129,7 +130,8 @@ public class MalwareScannerService extends Service {
|
|||
}
|
||||
|
||||
private void updateForegroundNotification() {
|
||||
foregroundNotification.setSubText(getString(R.string.main_files_scanned_count, Utils.FILES_SCANNED + ""));
|
||||
foregroundNotification
|
||||
.setSubText(NumberFormat.getInstance().format(Database.getSignatureCount()) + " sigs" + " • " + getString(R.string.main_files_scanned_count, NumberFormat.getInstance().format(Utils.FILES_SCANNED) + ""));
|
||||
notificationManager.notify(-1, foregroundNotification.build());
|
||||
}
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
<resources>
|
||||
<string name="app_name">Hypatia</string>
|
||||
<string name="app_copyright">Copyright 2017-2021 Divested Computing Group</string>
|
||||
<string name="app_license">Lizenz: GPLv3</string>
|
||||
<string name="app_license">Lizenz: GPL-3.0</string>
|
||||
<string name="app_db_type_clamav">Basierend auf ClamAV-Signaturen</string>
|
||||
|
||||
<string name="lblOnionRoutingToggle">Download über Tor</string>
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<resources>
|
||||
<string name="app_name">Hypatia</string>
|
||||
<string name="app_copyright">Copyright 2017-2021 Divested Computing Group</string>
|
||||
<string name="app_license">Licence: GPLv3</string>
|
||||
<string name="app_license">Licence: GPL-3.0</string>
|
||||
<string name="app_db_type_clamav">Propulsé par les signatures de ClamAV</string>
|
||||
|
||||
<string name="lblOnionRoutingToggle">Téléchargement par Tor</string>
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
<resources>
|
||||
<string name="app_name">Hypatia</string>
|
||||
<string name="app_copyright">Copyright 2017-2021 Divested Computing Group</string>
|
||||
<string name="app_license">License: GPLv3</string>
|
||||
<string name="app_db_type_clamav">Powered by ClamAV signatures</string>
|
||||
<string name="app_license">License: GPL-3.0</string>
|
||||
<string name="app_db_type_clamav">Powered by ClamAV style signatures</string>
|
||||
|
||||
<string name="lblOnionRoutingToggle">Download over Tor</string>
|
||||
<string name="lblOnionRoutingEnabledHint">Downloading over Tor, this may take a while...</string>
|
||||
|
|
Loading…
Add table
Reference in a new issue