From e6af83b2e242e49c99eeb6b177a9d7982b08e7eb Mon Sep 17 00:00:00 2001 From: artdeell Date: Thu, 12 Oct 2023 16:53:24 +0300 Subject: [PATCH] Fix[code]: fixes for stuff that i missed/additional validations --- .../net/kdt/pojavlaunch/LauncherActivity.java | 7 ++-- .../main/java/net/kdt/pojavlaunch/Tools.java | 1 + .../contracts/OpenDocumentWithExtension.java | 7 ++++ .../pojavlaunch/mirrors/DownloadMirror.java | 14 ++++++-- .../mirrors/MirrorTamperedException.java | 8 +++-- .../modloaders/OptiFineDownloadTask.java | 2 +- .../api/NotificationDownloadListener.java | 36 +++++++++++-------- .../tasks/AsyncMinecraftDownloader.java | 9 ++--- 8 files changed, 58 insertions(+), 26 deletions(-) diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/LauncherActivity.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/LauncherActivity.java index f3ad4f290..552be5aea 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/LauncherActivity.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/LauncherActivity.java @@ -125,7 +125,8 @@ public class LauncherActivity extends BaseActivity { } String normalizedVersionId = AsyncMinecraftDownloader.normalizeVersionId(prof.lastVersionId); JMinecraftVersionList.Version mcVersion = AsyncMinecraftDownloader.getListedVersion(normalizedVersionId); - new AsyncMinecraftDownloader(this, + new AsyncMinecraftDownloader().start( + this, mcVersion, normalizedVersionId, new ContextAwareDoneListener(this, normalizedVersionId) @@ -133,10 +134,10 @@ public class LauncherActivity extends BaseActivity { return false; }; - private final TaskCountListener mDoubleLaunchPreventionListener = (tc)->{ + private final TaskCountListener mDoubleLaunchPreventionListener = taskCount -> { // Hide the notification that starts the game if there are tasks executing. // Prevents the user from trying to launch the game with tasks ongoing. - if(tc > 0) { + if(taskCount > 0) { Tools.runOnUiThread(() -> mNotificationManager.cancel(NotificationUtils.NOTIFICATION_ID_GAME_START) ); diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/Tools.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/Tools.java index 94170fbb9..dfa4291a8 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/Tools.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/Tools.java @@ -559,6 +559,7 @@ public final class Tools { private static void showError(final Context ctx, final int titleId, final String rolledMessage, final Throwable e, final boolean exitIfOk, final boolean showMore) { if(e instanceof ContextExecutorTask) { ContextExecutor.execute((ContextExecutorTask) e); + return; } e.printStackTrace(); diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/contracts/OpenDocumentWithExtension.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/contracts/OpenDocumentWithExtension.java index 4092c4b25..8b011a904 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/contracts/OpenDocumentWithExtension.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/contracts/OpenDocumentWithExtension.java @@ -14,6 +14,13 @@ import androidx.annotation.Nullable; // you to specify practically anything. So i made this instead. public class OpenDocumentWithExtension extends ActivityResultContract { private final String mimeType; + + /** + * Create a new OpenDocumentWithExtension contract. + * If the extension provided to the constructor is not available in the device's MIME + * type database, the filter will default to "all types" + * @param extension the extension to filter by + */ public OpenDocumentWithExtension(String extension) { String extensionMimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension); if(extensionMimeType == null) extensionMimeType = "*/*"; diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/mirrors/DownloadMirror.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/mirrors/DownloadMirror.java index 9ccdae1e4..f50b7cb13 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/mirrors/DownloadMirror.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/mirrors/DownloadMirror.java @@ -53,6 +53,10 @@ public class DownloadMirror { DownloadUtils.downloadFileMonitored(urlInput, outputFile, buffer, monitor); } + /** + * Check if the current download source is a mirror and not an official source. + * @return true if the source is a mirror, false otherwise + */ public static boolean isMirrored() { return !LauncherPreferences.PREF_DOWNLOAD_SOURCE.equals("default"); } @@ -88,8 +92,14 @@ public class DownloadMirror { private static int getBaseUrlTail(String wholeUrl) throws MalformedURLException{ int protocolNameEnd = wholeUrl.indexOf("://"); - if(protocolNameEnd == -1) throw new MalformedURLException("No protocol"); + if(protocolNameEnd == -1) + throw new MalformedURLException("No protocol, or non path-based URL"); protocolNameEnd += 3; - return wholeUrl.indexOf('/', protocolNameEnd); + int hostnameEnd = wholeUrl.indexOf('/', protocolNameEnd); + if(protocolNameEnd >= wholeUrl.length() || hostnameEnd == protocolNameEnd) + throw new MalformedURLException("No hostname"); + if(hostnameEnd == -1) hostnameEnd = wholeUrl.length(); + System.out.println(protocolNameEnd +" "+ hostnameEnd); + return hostnameEnd; } } diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/mirrors/MirrorTamperedException.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/mirrors/MirrorTamperedException.java index 31c245535..1c464e618 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/mirrors/MirrorTamperedException.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/mirrors/MirrorTamperedException.java @@ -18,6 +18,12 @@ public class MirrorTamperedException extends Exception implements ContextExecuto AlertDialog.Builder builder = new AlertDialog.Builder(activity); builder.setTitle(R.string.dl_tampered_manifest_title); builder.setMessage(Html.fromHtml(activity.getString(R.string.dl_tampered_manifest))); + addButtons(builder); + ShowErrorActivity.installRemoteDialogHandling(activity, builder); + builder.show(); + } + + private void addButtons(AlertDialog.Builder builder) { builder.setPositiveButton(R.string.dl_switch_to_official_site,(d,w)->{ LauncherPreferences.DEFAULT_PREF.edit().putString("downloadSource", "default").apply(); LauncherPreferences.PREF_DOWNLOAD_SOURCE = "default"; @@ -28,8 +34,6 @@ public class MirrorTamperedException extends Exception implements ContextExecuto LauncherPreferences.PREF_VERIFY_MANIFEST = false; }); builder.setNeutralButton(android.R.string.cancel, (d,w)->{}); - ShowErrorActivity.installRemoteDialogHandling(activity, builder); - builder.show(); } @Override diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/modloaders/OptiFineDownloadTask.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/modloaders/OptiFineDownloadTask.java index d4fcfab68..da47e654f 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/modloaders/OptiFineDownloadTask.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/modloaders/OptiFineDownloadTask.java @@ -88,7 +88,7 @@ public class OptiFineDownloadTask implements Runnable, Tools.DownloaderFeedback, if(minecraftJsonVersion == null) return false; try { synchronized (mMinecraftDownloadLock) { - new AsyncMinecraftDownloader(null, minecraftJsonVersion, minecraftVersion, this); + new AsyncMinecraftDownloader().start(null, minecraftJsonVersion, minecraftVersion, this); mMinecraftDownloadLock.wait(); } }catch (InterruptedException e) { diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/modloaders/modpacks/api/NotificationDownloadListener.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/modloaders/modpacks/api/NotificationDownloadListener.java index 6a3f9297f..11615d14d 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/modloaders/modpacks/api/NotificationDownloadListener.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/modloaders/modpacks/api/NotificationDownloadListener.java @@ -26,29 +26,37 @@ public class NotificationDownloadListener implements ModloaderDownloadListener { if(mModLoader.requiresGuiInstallation()) { ModloaderInstallTracker.saveModLoader(mContext, mModLoader, downloadedFile); Intent mainActivityIntent = new Intent(mContext, LauncherActivity.class); - Tools.runOnUiThread(() -> NotificationUtils.sendBasicNotification(mContext, - R.string.modpack_install_notification_title, - R.string.modpack_install_notification_success, - mainActivityIntent, - NotificationUtils.PENDINGINTENT_CODE_DOWNLOAD_SERVICE, - NotificationUtils.NOTIFICATION_ID_DOWNLOAD_LISTENER - )); + sendIntentNotification(mainActivityIntent, R.string.modpack_install_notification_success); } } @Override public void onDataNotAvailable() { - Tools.runOnUiThread(()->NotificationUtils.sendBasicNotification(mContext, - R.string.modpack_install_notification_title, - R.string.modpack_install_notification_success, - null, - NotificationUtils.PENDINGINTENT_CODE_DOWNLOAD_SERVICE, - NotificationUtils.NOTIFICATION_ID_DOWNLOAD_LISTENER - )); + sendEmptyNotification(R.string.modpack_install_notification_data_not_available); } @Override public void onDownloadError(Exception e) { Tools.showErrorRemote(mContext, R.string.modpack_install_modloader_download_failed, e); } + + private void sendIntentNotification(Intent intent, int localeString) { + Tools.runOnUiThread(() -> NotificationUtils.sendBasicNotification(mContext, + R.string.modpack_install_notification_title, + localeString, + intent, + NotificationUtils.PENDINGINTENT_CODE_DOWNLOAD_SERVICE, + NotificationUtils.NOTIFICATION_ID_DOWNLOAD_LISTENER + )); + } + + private void sendEmptyNotification(int localeString) { + Tools.runOnUiThread(()->NotificationUtils.sendBasicNotification(mContext, + R.string.modpack_install_notification_title, + localeString, + null, + NotificationUtils.PENDINGINTENT_CODE_DOWNLOAD_SERVICE, + NotificationUtils.NOTIFICATION_ID_DOWNLOAD_LISTENER + )); + } } diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/tasks/AsyncMinecraftDownloader.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/tasks/AsyncMinecraftDownloader.java index 54d0b32a1..770296a9a 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/tasks/AsyncMinecraftDownloader.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/tasks/AsyncMinecraftDownloader.java @@ -48,8 +48,9 @@ public class AsyncMinecraftDownloader { /* Allows each downloading thread to have its own RECYCLED buffer */ private final ConcurrentHashMap mThreadBuffers = new ConcurrentHashMap<>(5); - public AsyncMinecraftDownloader(Activity activity, JMinecraftVersionList.Version version, String realVersion, - @NonNull DoneListener listener){ // this was there for a reason + public void start(Activity activity, JMinecraftVersionList.Version version, + String realVersion, // this was there for a reason + @NonNull DoneListener listener) { sExecutorService.execute(() -> { try { downloadGame(activity, version, realVersion); @@ -399,10 +400,10 @@ public class AsyncMinecraftDownloader { } private boolean verifyManifest(File verJsonDir, JMinecraftVersionList.Version verInfo) { - return /*verJsonDir.exists() + return verJsonDir.exists() && (!LauncherPreferences.PREF_CHECK_LIBRARY_SHA || verInfo.sha1 == null - || Tools.compareSHA1(verJsonDir, verInfo.sha1));*/false; + || Tools.compareSHA1(verJsonDir, verInfo.sha1)); } public static String normalizeVersionId(String versionString) {