Made settings configurable for multiple users

This commit is contained in:
genuineparts 2025-06-09 14:05:10 +02:00
parent 5a99f6b2d8
commit fb0f87beb6
4 changed files with 173 additions and 15 deletions

View file

@ -11,12 +11,14 @@ import org.json.JSONObject;
import java.io.IOException;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.concurrent.TimeUnit;
public class Main {
private static final String version = "0.7";
private static final HashMap<String, Integer> data = new HashMap<>();
private static final String version = "0.8";
private static final HashMap<String, HashMap<String, Integer>> udata = new HashMap<>();
public static Settings conf;
static OebbCheck check = new OebbCheck();
static long time;
@ -45,7 +47,7 @@ public class Main {
LOG.error("Error at Task: {}", e.toString());
}
};
service.scheduleAtFixedRate(task, 60, conf.getInt("refreshTime"), TimeUnit.SECONDS);
service.scheduleAtFixedRate(task, 10, conf.getInt("refreshTime"), TimeUnit.SECONDS);
if (server != null) {
server.createContext("/oebbapi", new OebbHandler());
server.setExecutor(null); // creates a default executor
@ -64,17 +66,35 @@ public class Main {
}
private static void refresh() throws IOException {
data.put(conf.getString("monitors.monitor1.DepartureTime"),check.getStatus(conf.getString("monitors.monitor1.Station"),conf.getString("monitors.monitor1.DepartureTime"), conf.getString("monitors.monitor1.FinalStop"),conf.getString("monitors.monitor1.TrainType"),String.valueOf(conf.getInt("monitors.monitor1.maxjourneys")), conf.getStringList("monitors.monitor1.notRunningDays")));
data.put(conf.getString("monitors.monitor2.DepartureTime"),check.getStatus(conf.getString("monitors.monitor2.Station"),conf.getString("monitors.monitor2.DepartureTime"), conf.getString("monitors.monitor2.FinalStop"),conf.getString("monitors.monitor2.TrainType"),String.valueOf(conf.getInt("monitors.monitor2.maxjourneys")), conf.getStringList("monitors.monitor2.notRunningDays")));
data.put(conf.getString("monitors.monitor3.DepartureTime"),check.getStatus(conf.getString("monitors.monitor3.Station"),conf.getString("monitors.monitor3.DepartureTime"), conf.getString("monitors.monitor3.FinalStop"),conf.getString("monitors.monitor3.TrainType"),String.valueOf(conf.getInt("monitors.monitor3.maxjourneys")), conf.getStringList("monitors.monitor3.notRunningDays")));
data.put(conf.getString("monitors.monitor4.DepartureTime"),check.getStatus(conf.getString("monitors.monitor4.Station"),conf.getString("monitors.monitor4.DepartureTime"), conf.getString("monitors.monitor4.FinalStop"),conf.getString("monitors.monitor4.TrainType"),String.valueOf(conf.getInt("monitors.monitor4.maxjourneys")), conf.getStringList("monitors.monitor4.notRunningDays")));
HashMap<String, Integer> data = new HashMap<>();
try{
ResultSet rs = MariaDB.load_users();
if (rs != null) {
while (rs.next()) {
String user = rs.getString("user");
ResultSet rsu = MariaDB.load_user(user);
if (rsu != null) {
while (rsu.next()) {
List<String> list = new ArrayList<>(Arrays.asList(rsu.getString("notRunningDays").split(",")));
data.put(rsu.getString("display"), check.getStatus(rsu.getString("Station"), rsu.getString("DepartureTime"), rsu.getString("FinalStop"), rsu.getString("TrainType"), String.valueOf(rsu.getInt("maxjourneys")), list));
}
}
udata.put(user,data);
rs.close();
}
}
}catch (SQLException e){
LOG.error("Update issue", e);
}
time = System.currentTimeMillis();
}
static class OebbHandler implements HttpHandler {
static class OebbHandler implements HttpHandler {
@Override
public void handle(HttpExchange t){
String response = createOutput();
String[] req = t.getRequestURI().toString().split("/");
String user = req[2];
String response = createOutput(user);
t.getResponseHeaders().put("Content-Type", Collections.singletonList("application/json"));
try {
t.sendResponseHeaders(200, response.getBytes().length);
@ -87,7 +107,7 @@ public class Main {
}
}
private static String createOutput(){
private static String createOutput(String user){
JSONObject dat = new JSONObject();
Date updatetime = new Date(time);
dat.put("interval",conf.getInt("refreshTime")*1000);
@ -133,7 +153,7 @@ public class Main {
monitor2.put("label",conf.getString("monitors.monitor1.Title"));
monitor2.put("labelColor",conf.getString("labelcolor"));
monitor2.put("fullDraw",true);
int zug1 = data.get(conf.getString("monitors.monitor1.DepartureTime"));
int zug1 = udata.get(user).get("1");
makeLabel(monitor2, zug1);
display.put(monitor2);
@ -141,7 +161,7 @@ public class Main {
monitor3.put("label",conf.getString("monitors.monitor2.Title"));
monitor3.put("labelColor",conf.getString("labelcolor"));
monitor3.put("fullDraw",true);
int zug2 = data.get(conf.getString("monitors.monitor2.DepartureTime"));
int zug2 = udata.get(user).get("2");
makeLabel(monitor3, zug2);
display.put(monitor3);
@ -149,7 +169,7 @@ public class Main {
monitor4.put("label",conf.getString("monitors.monitor3.Title"));
monitor4.put("labelColor",conf.getString("labelcolor"));
monitor4.put("fullDraw",true);
int zug3 = data.get(conf.getString("monitors.monitor3.DepartureTime"));
int zug3 = udata.get(user).get("3");
makeLabel(monitor4, zug3);
display.put(monitor4);
@ -157,10 +177,11 @@ public class Main {
monitor5.put("label",conf.getString("monitors.monitor4.Title"));
monitor5.put("labelColor",conf.getString("labelcolor"));
monitor5.put("fullDraw",true);
int zug4 = data.get(conf.getString("monitors.monitor4.DepartureTime"));
int zug4 = udata.get(user).get("4");
makeLabel(monitor5, zug4);
display.put(monitor5);
dat.put("displays",display);
System.out.println(display);
return dat.toString();
}