first commit
Build AsminVoicechat / prepare-release (push) Successful in 14s
Build AsminVoicechat / build-and-test (17) (push) Canceled after 0s
Build AsminVoicechat / build-and-test (18) (push) Canceled after 0s
Build AsminVoicechat / build-and-test (19) (push) Canceled after 0s
Build AsminVoicechat / build-and-test (20) (push) Canceled after 0s
Build AsminVoicechat / build-and-test (21) (push) Canceled after 0s
Build AsminVoicechat / build-and-test (22) (push) Canceled after 0s
Build AsminVoicechat / build-and-test (23) (push) Canceled after 0s
Build AsminVoicechat / build-and-test (24) (push) Canceled after 0s
Build AsminVoicechat / build-and-test (25) (push) Canceled after 0s
Build AsminVoicechat / build-and-test (26) (push) Canceled after 0s
Build AsminVoicechat / build-and-test (27-ea) (push) Canceled after 0s
Build AsminVoicechat / build-and-test (16) (push) Canceled after 38s
Build AsminVoicechat / prepare-release (push) Successful in 14s
Build AsminVoicechat / build-and-test (17) (push) Canceled after 0s
Build AsminVoicechat / build-and-test (18) (push) Canceled after 0s
Build AsminVoicechat / build-and-test (19) (push) Canceled after 0s
Build AsminVoicechat / build-and-test (20) (push) Canceled after 0s
Build AsminVoicechat / build-and-test (21) (push) Canceled after 0s
Build AsminVoicechat / build-and-test (22) (push) Canceled after 0s
Build AsminVoicechat / build-and-test (23) (push) Canceled after 0s
Build AsminVoicechat / build-and-test (24) (push) Canceled after 0s
Build AsminVoicechat / build-and-test (25) (push) Canceled after 0s
Build AsminVoicechat / build-and-test (26) (push) Canceled after 0s
Build AsminVoicechat / build-and-test (27-ea) (push) Canceled after 0s
Build AsminVoicechat / build-and-test (16) (push) Canceled after 38s
This commit is contained in:
commit
bbccd4a815
454 files changed
+45050
No files matched your search
@@ -0,0 +1,144 @@
|
||||
/*
|
||||
* Decompiled with CFR 0.152.
|
||||
*
|
||||
* Could not load the following classes:
|
||||
* javax.annotation.Nullable
|
||||
*/
|
||||
package de.maxhenkel.voicechat.configbuilder;
|
||||
|
||||
import de.maxhenkel.voicechat.configbuilder.CommentedProperties;
|
||||
import de.maxhenkel.voicechat.configbuilder.Config;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.LinkOption;
|
||||
import java.nio.file.OpenOption;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.StandardOpenOption;
|
||||
import java.nio.file.attribute.FileAttribute;
|
||||
import java.util.Collections;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.Executors;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
public class CommentedPropertyConfig
|
||||
implements Config {
|
||||
private static final Logger LOGGER = Logger.getLogger(CommentedPropertyConfig.class.getName());
|
||||
private static final ExecutorService SAVE_EXECUTOR_SERVICE = Executors.newSingleThreadExecutor(runnable -> {
|
||||
Thread thread = new Thread(runnable);
|
||||
thread.setName("ConfigSaver");
|
||||
thread.setDaemon(true);
|
||||
return thread;
|
||||
});
|
||||
protected CommentedProperties properties;
|
||||
@Nullable
|
||||
protected Path path;
|
||||
|
||||
protected CommentedPropertyConfig(CommentedProperties properties) {
|
||||
this.properties = properties;
|
||||
}
|
||||
|
||||
public static Builder builder() {
|
||||
return new Builder();
|
||||
}
|
||||
|
||||
public String get(String key) {
|
||||
return this.properties.get(key);
|
||||
}
|
||||
|
||||
public boolean has(String key) {
|
||||
return this.properties.containsKey(key);
|
||||
}
|
||||
|
||||
public void set(String key, String value, String ... comments) {
|
||||
this.properties.set(key, value, comments);
|
||||
}
|
||||
|
||||
public CommentedProperties getProperties() {
|
||||
return this.properties;
|
||||
}
|
||||
|
||||
public void load() throws IOException {
|
||||
if (this.path == null) {
|
||||
return;
|
||||
}
|
||||
if (Files.exists(this.path, new LinkOption[0])) {
|
||||
try (InputStream inputStream = Files.newInputStream(this.path, new OpenOption[0]);){
|
||||
this.properties.load(inputStream);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void reload() {
|
||||
this.properties.clear();
|
||||
try {
|
||||
this.load();
|
||||
}
|
||||
catch (IOException e) {
|
||||
LOGGER.log(Level.SEVERE, "Failed to reload config", e);
|
||||
}
|
||||
}
|
||||
|
||||
public synchronized void saveSync() {
|
||||
if (this.path == null) {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
Files.createDirectories(this.path.getParent(), new FileAttribute[0]);
|
||||
}
|
||||
catch (Exception e) {
|
||||
LOGGER.log(Level.SEVERE, "Failed to create parent directories of config", e);
|
||||
}
|
||||
try (OutputStream stream = Files.newOutputStream(this.path, StandardOpenOption.CREATE, StandardOpenOption.SYNC, StandardOpenOption.TRUNCATE_EXISTING);){
|
||||
this.properties.save(stream);
|
||||
}
|
||||
catch (Exception e) {
|
||||
LOGGER.log(Level.SEVERE, "Failed to save config", e);
|
||||
}
|
||||
}
|
||||
|
||||
public void save() {
|
||||
if (this.path == null) {
|
||||
return;
|
||||
}
|
||||
SAVE_EXECUTOR_SERVICE.execute(this::saveSync);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, String> getEntries() {
|
||||
return Collections.unmodifiableMap(this.properties);
|
||||
}
|
||||
|
||||
public static class Builder {
|
||||
@Nullable
|
||||
private Path path;
|
||||
private boolean strict = true;
|
||||
|
||||
private Builder() {
|
||||
}
|
||||
|
||||
public Builder path(Path path) {
|
||||
this.path = path;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder strict(boolean strict) {
|
||||
this.strict = strict;
|
||||
return this;
|
||||
}
|
||||
|
||||
public CommentedPropertyConfig build() {
|
||||
CommentedPropertyConfig config = new CommentedPropertyConfig(new CommentedProperties(this.strict));
|
||||
if (this.path != null) {
|
||||
config.path = this.path.toAbsolutePath();
|
||||
}
|
||||
config.reload();
|
||||
return config;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user