mirror of
https://github.com/developersu/ns-usbloader.git
synced 2025-05-14 23:24:50 -04:00
v0.3 UI is ready
This commit is contained in:
parent
9bf4a76076
commit
31045683e4
12 changed files with 206 additions and 60 deletions
74
src/main/java/nsusbloader/ModelControllers/LogPrinter.java
Normal file
74
src/main/java/nsusbloader/ModelControllers/LogPrinter.java
Normal file
|
@ -0,0 +1,74 @@
|
|||
package nsusbloader.ModelControllers;
|
||||
|
||||
import nsusbloader.NSLDataTypes.EFileStatus;
|
||||
import nsusbloader.NSLDataTypes.EMsgType;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.HashMap;
|
||||
import java.util.concurrent.BlockingQueue;
|
||||
import java.util.concurrent.LinkedBlockingQueue;
|
||||
|
||||
public class LogPrinter {
|
||||
private MessagesConsumer msgConsumer;
|
||||
private BlockingQueue<String> msgQueue;
|
||||
private BlockingQueue<Double> progressQueue;
|
||||
private HashMap<String, EFileStatus> statusMap; // BlockingQueue for literally one object. TODO: read more books ; replace to hashMap
|
||||
|
||||
public LogPrinter(){
|
||||
this.msgQueue = new LinkedBlockingQueue<>();
|
||||
this.progressQueue = new LinkedBlockingQueue<>();
|
||||
this.statusMap = new HashMap<>();
|
||||
this.msgConsumer = new MessagesConsumer(this.msgQueue, this.progressQueue, this.statusMap);
|
||||
this.msgConsumer.start();
|
||||
}
|
||||
/**
|
||||
* This is what will print to textArea of the application.
|
||||
* */
|
||||
public void print(String message, EMsgType type){
|
||||
try {
|
||||
switch (type){
|
||||
case PASS:
|
||||
msgQueue.put("[ PASS ] "+message+"\n");
|
||||
break;
|
||||
case FAIL:
|
||||
msgQueue.put("[ FAIL ] "+message+"\n");
|
||||
break;
|
||||
case INFO:
|
||||
msgQueue.put("[ INFO ] "+message+"\n");
|
||||
break;
|
||||
case WARNING:
|
||||
msgQueue.put("[ WARN ] "+message+"\n");
|
||||
break;
|
||||
default:
|
||||
msgQueue.put(message);
|
||||
}
|
||||
}catch (InterruptedException ie){
|
||||
ie.printStackTrace();
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Update progress for progress bar
|
||||
* */
|
||||
public void updateProgress(Double value) throws InterruptedException{
|
||||
progressQueue.put(value);
|
||||
}
|
||||
/**
|
||||
* When we're done - update status
|
||||
* */
|
||||
public void update(HashMap<String, File> nspMap, EFileStatus status){
|
||||
for (File file: nspMap.values())
|
||||
statusMap.putIfAbsent(file.getName(), status);
|
||||
}
|
||||
/**
|
||||
* When we're done - update status
|
||||
* */
|
||||
public void update(File file, EFileStatus status){
|
||||
statusMap.putIfAbsent(file.getName(), status);
|
||||
}
|
||||
/**
|
||||
* When we're done - close it
|
||||
* */
|
||||
public void close(){
|
||||
msgConsumer.interrupt();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,76 @@
|
|||
package nsusbloader.ModelControllers;
|
||||
|
||||
import javafx.animation.AnimationTimer;
|
||||
import javafx.scene.control.ProgressBar;
|
||||
import javafx.scene.control.ProgressIndicator;
|
||||
import javafx.scene.control.TextArea;
|
||||
import nsusbloader.Controllers.NSTableViewController;
|
||||
import nsusbloader.MediatorControl;
|
||||
import nsusbloader.NSLDataTypes.EFileStatus;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.concurrent.BlockingQueue;
|
||||
|
||||
public class MessagesConsumer extends AnimationTimer {
|
||||
private final BlockingQueue<String> msgQueue;
|
||||
private final TextArea logsArea;
|
||||
|
||||
private final BlockingQueue<Double> progressQueue;
|
||||
private final ProgressBar progressBar;
|
||||
private final HashMap<String, EFileStatus> statusMap;
|
||||
private final NSTableViewController tableViewController;
|
||||
|
||||
private boolean isInterrupted;
|
||||
|
||||
MessagesConsumer(BlockingQueue<String> msgQueue, BlockingQueue<Double> progressQueue, HashMap<String, EFileStatus> statusMap){
|
||||
this.isInterrupted = false;
|
||||
|
||||
this.msgQueue = msgQueue;
|
||||
this.logsArea = MediatorControl.getInstance().getContoller().logArea;
|
||||
|
||||
this.progressQueue = progressQueue;
|
||||
this.progressBar = MediatorControl.getInstance().getContoller().progressBar;
|
||||
|
||||
this.statusMap = statusMap;
|
||||
this.tableViewController = MediatorControl.getInstance().getContoller().tableFilesListController;
|
||||
|
||||
progressBar.setProgress(0.0);
|
||||
|
||||
progressBar.setProgress(ProgressIndicator.INDETERMINATE_PROGRESS);
|
||||
MediatorControl.getInstance().setTransferActive(true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handle(long l) {
|
||||
ArrayList<String> messages = new ArrayList<>();
|
||||
int msgRecieved = msgQueue.drainTo(messages);
|
||||
if (msgRecieved > 0)
|
||||
messages.forEach(msg -> logsArea.appendText(msg));
|
||||
|
||||
ArrayList<Double> progress = new ArrayList<>();
|
||||
int progressRecieved = progressQueue.drainTo(progress);
|
||||
if (progressRecieved > 0) {
|
||||
progress.forEach(prg -> {
|
||||
if (prg != 1.0)
|
||||
progressBar.setProgress(prg);
|
||||
else
|
||||
progressBar.setProgress(ProgressIndicator.INDETERMINATE_PROGRESS);
|
||||
});
|
||||
}
|
||||
|
||||
if (isInterrupted) { // It's safe 'cuz it's could't be interrupted while HashMap populating
|
||||
MediatorControl.getInstance().setTransferActive(false);
|
||||
progressBar.setProgress(0.0);
|
||||
|
||||
if (statusMap.size() > 0)
|
||||
for (String key : statusMap.keySet())
|
||||
tableViewController.setFileStatus(key, statusMap.get(key));
|
||||
this.stop();
|
||||
}
|
||||
}
|
||||
|
||||
public void interrupt(){
|
||||
this.isInterrupted = true;
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue