mirror of
https://github.com/developersu/ns-usbloader.git
synced 2025-05-13 06:34:43 -04:00
Add Windows drivers installer function
This commit is contained in:
parent
f2cd0c521c
commit
4cea480bb7
21 changed files with 317 additions and 20 deletions
|
@ -0,0 +1,151 @@
|
|||
/*
|
||||
Copyright 2019-2020 Dmitry Isaenko
|
||||
|
||||
This file is part of NS-USBloader.
|
||||
|
||||
NS-USBloader is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
NS-USBloader is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with NS-USBloader. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package nsusbloader.Utilities.WindowsDrivers;
|
||||
|
||||
import javafx.geometry.Insets;
|
||||
import javafx.geometry.Pos;
|
||||
import javafx.scene.Scene;
|
||||
import javafx.scene.control.Button;
|
||||
import javafx.scene.control.Label;
|
||||
import javafx.scene.control.ProgressBar;
|
||||
import javafx.scene.image.Image;
|
||||
import javafx.scene.layout.HBox;
|
||||
import javafx.scene.layout.Pane;
|
||||
import javafx.scene.layout.Priority;
|
||||
import javafx.scene.layout.VBox;
|
||||
import javafx.stage.Stage;
|
||||
import nsusbloader.AppPreferences;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
import java.util.ResourceBundle;
|
||||
|
||||
public class DriversInstall {
|
||||
|
||||
private static volatile boolean isRunning;
|
||||
|
||||
private Label runInstallerStatusLabel;
|
||||
|
||||
public DriversInstall(ResourceBundle rb){
|
||||
|
||||
if (DriversInstall.isRunning)
|
||||
return;
|
||||
|
||||
DriversInstall.isRunning = true;
|
||||
|
||||
DownloadDriversTask downloadTask = new DownloadDriversTask();
|
||||
|
||||
Button cancelButton = new Button(rb.getString("btn_Cancel"));
|
||||
|
||||
HBox hBoxInformation = new HBox();
|
||||
hBoxInformation.setAlignment(Pos.TOP_LEFT);
|
||||
hBoxInformation.getChildren().add(new Label(rb.getString("windowBodyDownloadDrivers")));
|
||||
|
||||
ProgressBar progressBar = new ProgressBar();
|
||||
progressBar.setPrefWidth(Double.MAX_VALUE);
|
||||
progressBar.progressProperty().bind(downloadTask.progressProperty());
|
||||
|
||||
Label downloadStatusLabel = new Label();
|
||||
downloadStatusLabel.setWrapText(true);
|
||||
downloadStatusLabel.textProperty().bind(downloadTask.messageProperty());
|
||||
|
||||
runInstallerStatusLabel = new Label();
|
||||
runInstallerStatusLabel.setWrapText(true);
|
||||
|
||||
Pane fillerPane1 = new Pane();
|
||||
Pane fillerPane2 = new Pane();
|
||||
|
||||
VBox parentVBox = new VBox();
|
||||
parentVBox.setAlignment(Pos.TOP_CENTER);
|
||||
parentVBox.setFillWidth(true);
|
||||
parentVBox.setSpacing(5.0);
|
||||
parentVBox.setPadding(new Insets(5.0));
|
||||
parentVBox.setFillWidth(true);
|
||||
parentVBox.getChildren().addAll(
|
||||
hBoxInformation,
|
||||
fillerPane1,
|
||||
downloadStatusLabel,
|
||||
runInstallerStatusLabel,
|
||||
fillerPane2,
|
||||
progressBar,
|
||||
cancelButton
|
||||
); // TODO:FIX
|
||||
|
||||
VBox.setVgrow(fillerPane1, Priority.ALWAYS);
|
||||
VBox.setVgrow(fillerPane2, Priority.ALWAYS);
|
||||
|
||||
Stage stage = new Stage();
|
||||
|
||||
stage.setTitle(rb.getString("windowTitleDownloadDrivers"));
|
||||
stage.getIcons().addAll(
|
||||
new Image("/res/dwnload_ico32x32.png"), //TODO: REDRAW
|
||||
new Image("/res/dwnload_ico48x48.png"),
|
||||
new Image("/res/dwnload_ico64x64.png"),
|
||||
new Image("/res/dwnload_ico128x128.png")
|
||||
);
|
||||
stage.setMinWidth(400);
|
||||
stage.setMinHeight(150);
|
||||
|
||||
Scene mainScene = new Scene(parentVBox, 405, 155);
|
||||
|
||||
mainScene.getStylesheets().add(AppPreferences.getInstance().getTheme());
|
||||
|
||||
stage.setOnHidden(windowEvent -> {
|
||||
downloadTask.cancel(true );
|
||||
DriversInstall.isRunning = false;
|
||||
});
|
||||
|
||||
stage.setScene(mainScene);
|
||||
stage.show();
|
||||
stage.toFront();
|
||||
|
||||
downloadTask.setOnSucceeded(event -> {
|
||||
cancelButton.setText(rb.getString("btn_Close"));
|
||||
|
||||
String returnedValue = downloadTask.getValue();
|
||||
|
||||
if (returnedValue == null)
|
||||
return;
|
||||
|
||||
if (runInstaller(returnedValue))
|
||||
stage.close();
|
||||
});
|
||||
|
||||
Thread downloadThread = new Thread(downloadTask);
|
||||
downloadThread.start();
|
||||
|
||||
cancelButton.setOnAction(actionEvent -> {
|
||||
downloadTask.cancel(true );
|
||||
stage.close();
|
||||
});
|
||||
}
|
||||
|
||||
private boolean runInstaller(String pathToFile) {
|
||||
try {
|
||||
Runtime.getRuntime().exec("cmd /c "+pathToFile);
|
||||
return true;
|
||||
}
|
||||
catch (Exception e){
|
||||
runInstallerStatusLabel.setText("Error: "+e.toString());
|
||||
e.printStackTrace();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue