private void selfUpdate() { URL url = updateUrl; if (url != null) { SelfUpdater downloader = new SelfUpdater(launcher, url); ObservableFuture<File> future = new ObservableFuture<File>( launcher.getExecutor().submit(downloader), downloader); Futures.addCallback(future, new FutureCallback<File>() { @Override public void onSuccess(File result) { SwingHelper.showMessageDialog( LauncherFrame.this, _("launcher.selfUpdateComplete"), _("launcher.selfUpdateCompleteTitle"), null, JOptionPane.INFORMATION_MESSAGE); LauncherFrame.this.updateRequired = false; } @Override public void onFailure(Throwable t) { } }, SwingExecutor.INSTANCE); ProgressDialog.showProgress(this, future, _("launcher.selfUpdatingTitle"), _("launcher.selfUpdatingStatus")); SwingHelper.addErrorDialogCallback(this, future); } else { SwingHelper.showMessageDialog( LauncherFrame.this, _("launcher.selfUpdateCheckError"), _("launcher.genericError"), null, JOptionPane.INFORMATION_MESSAGE); } }
private void launch() { try { final Instance instance = launcher.getInstances().get(instancesTable.getSelectedRow()); boolean update = updateCheck.isSelected() && instance.isUpdatePending(); // Store last access date Date now = new Date(); instance.setLastAccessed(now); Persistence.commitAndForget(instance); // Perform login final Session session = LoginDialog.showLoginRequest(this, launcher); if (session == null) { return; } // If we have to update, we have to update if (!instance.isInstalled()) { update = true; } if (update) { // Execute the updater Updater updater = new Updater(launcher, instance); updater.setOnline(session.isOnline()); ObservableFuture<Instance> future = new ObservableFuture<Instance>( launcher.getExecutor().submit(updater), updater); // Show progress ProgressDialog.showProgress( this, future, _("launcher.updatingTitle"), _("launcher.updatingStatus", instance.getTitle())); SwingHelper.addErrorDialogCallback(this, future); // Update the list of instances after updating future.addListener(new Runnable() { @Override public void run() { instancesModel.update(); } }, SwingExecutor.INSTANCE); // On success, launch also Futures.addCallback(future, new FutureCallback<Instance>() { @Override public void onSuccess(Instance result) { launch(instance, session); } @Override public void onFailure(Throwable t) { } }, SwingExecutor.INSTANCE); } else { launch(instance, session); } } catch (ArrayIndexOutOfBoundsException e) { SwingHelper.showErrorDialog(this, _("launcher.noInstanceError"), _("launcher.noInstanceTitle")); } }
private void launch(Instance instance, Session session) { final File extractDir = launcher.createExtractDir(); // Get the process Runner task = new Runner(launcher, instance, session, extractDir); ObservableFuture<Process> processFuture = new ObservableFuture<Process>( launcher.getExecutor().submit(task), task); // Show process for the process retrieval ProgressDialog.showProgress( this, processFuture, _("launcher.launchingTItle"), _("launcher.launchingStatus", instance.getTitle())); // If the process is started, get rid of this window Futures.addCallback(processFuture, new FutureCallback<Process>() { @Override public void onSuccess(Process result) { dispose(); } @Override public void onFailure(Throwable t) { } }); // Watch the created process ListenableFuture<?> future = Futures.transform( processFuture, new LaunchProcessHandler(launcher), launcher.getExecutor()); SwingHelper.addErrorDialogCallback(null, future); // Clean up at the very end future.addListener(new Runnable() { @Override public void run() { try { log.info("Process ended; cleaning up " + extractDir.getAbsolutePath()); FileUtils.deleteDirectory(extractDir); } catch (IOException e) { log.log(Level.WARNING, "Failed to clean up " + extractDir.getAbsolutePath(), e); } instancesModel.update(); } }, sameThreadExecutor()); }
private void loadInstances() { InstanceList.Enumerator loader = launcher.getInstances().createEnumerator(); ObservableFuture<InstanceList> future = new ObservableFuture<InstanceList>( launcher.getExecutor().submit(loader), loader); future.addListener(new Runnable() { @Override public void run() { instancesModel.update(); if (instancesTable.getRowCount() > 0) { instancesTable.setRowSelectionInterval(0, 0); } requestFocus(); } }, SwingExecutor.INSTANCE); ProgressDialog.showProgress(this, future, _("launcher.checkingTitle"), _("launcher.checkingStatus")); SwingHelper.addErrorDialogCallback(this, future); }
private void confirmHardUpdate(Instance instance) { if (!SwingHelper.confirmDialog(this, _("instance.confirmHardUpdate"), _("confirmTitle"))) { return; } // Execute the resetter HardResetter resetter = new HardResetter(instance); ObservableFuture<Instance> future = new ObservableFuture<Instance>( launcher.getExecutor().submit(resetter), resetter); // Show progress ProgressDialog.showProgress( this, future, _("instance.resettingTitle"), _("instance.resettingStatus", instance.getTitle())); SwingHelper.addErrorDialogCallback(this, future); // Update the list of instances after updating future.addListener(new Runnable() { @Override public void run() { launch(); instancesModel.update(); } }, SwingExecutor.INSTANCE); }
private void launch() { boolean offlineOnly = false; if(LauncherFrame.this.updateUrl != null) { SwingHelper.showMessageDialog( LauncherFrame.this, _("launcher.selfUpdateComplete"), _("errors.launchImpossible"), null, JOptionPane.ERROR_MESSAGE); return; } if(LauncherFrame.this.updateRequired) { offlineOnly = true; if(!SwingHelper.confirmDialog( LauncherFrame.this, _("errors.offlineOnly"), _("errors.genericError"))) return; } try { final Instance instance = launcher.getInstances().get(instancesTable.getSelectedRow()); // Store last access date Date now = new Date(); instance.setLastAccessed(now); Persistence.commitAndForget(instance); // Perform login final Session session = offlineOnly ? (new OfflineSession(launcher.getProperties().getProperty("offlinePlayerName"))) : LoginDialog.showLoginRequest(this, launcher); if (session == null) { return; } // Execute the updater Updater updater = new Updater(launcher, instance); updater.setSelectFeatures(configureFeaturesCheck.isSelected()); updater.setOnline(session.isOnline()); ObservableFuture<Instance> future = new ObservableFuture<Instance>( launcher.getExecutor().submit(updater), updater); // Show progress ProgressDialog.showProgress( this, future, _("launcher.updatingTitle"), _("launcher.updatingStatus", instance.getTitle())); SwingHelper.addErrorDialogCallback(this, future); // Update the list of instances after updating future.addListener(new Runnable() { @Override public void run() { instancesModel.update(); } }, SwingExecutor.INSTANCE); // On success, launch also Futures.addCallback(future, new FutureCallback<Instance>() { @Override public void onSuccess(Instance result) { launch(instance, session); } @Override public void onFailure(Throwable t) { } }, SwingExecutor.INSTANCE); } catch (ArrayIndexOutOfBoundsException e) { SwingHelper.showErrorDialog(this, _("launcher.noInstanceError"), _("launcher.noInstanceTitle")); } }